Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde özellikle yazılım mühendisliği (Software engineering) konusunda kullanılan ve bileşen (component) ve mesaj (message) temelli yazılım geliştirmeyi amaçlayan bir üsluptur.
C2 tasarım kültüründe yazılım bileşenler şeklinde ele alınır ve yazılımı oluşturan bu bileşenler üzerinden bir ağ (network) çizilir. Bu ağda bileşenler arası haberleşme gösterilir. Bu sayede tasarlanan bir bileşenin daha verimli ve tekrar tekrar kullanılması mümkün olmuş olur.
1996 yılında bu yaklaşımı ilk kez ortaya koyan Nenad Medvidovic, Peyman Oreizy, Jason E. Robbins, ve Richard N. Taylor, “Using Object-Oriented Typing to Support Architectural Design in the C2 Style (C2 stili ile nesne yönelimli ve destek mimarili tasarım)” isimli makalelerinde bu nesneler arası ilişkiyi aşağıdaki şekille temsil etmişlerdir:
Yukarıdaki şekilde görüleceği üzere her bileşen C harfi ile temsil edilmiş ve bağlar birer çizgiyle gösterilmiştir. Ayrıca kalın çizgiler ana bağlantı noktalarını göstermektedir.
Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.
Yine aynı makalede bulunan bir C2 bileşeninin iç yapısını aşağıdaki şekilde Türkçe terminoloji ile gösterebiliriz:
Yukarıdaki şekilde anlatılmak istenen bir nesnenin bir kılıf içerisinde ele alındığıdır. Yani C2 tasarımında bileşen olarak görülen herşey aslında nesne yönelimli programlamada bir nesne(object) ile karşılanır ancak bu nesneye bir kılıf giydirilmiş olarak kabul edilebilir. Nesne ile iletişim ayrıca bir arayüz ile yaıpılırken nesnenin dışarıya doğrudan erişimi bulunmaktadır. Bu durum kılıftan çıkan ve talepler (request) yönünde olan bir ok ile temsil edilmiştir.
Doğrudan kılıf (wrapper) dışına erişim yapabilen nesnenin yanında bütün uyarılar (notifications) iletişim ve kısıtlama nesnesi üzerinden iç nesneye erişebilmektedir. Aslında tasarım olaran nesne yönelimli programlamanın kapsülleme (encapsulation) mantığına oldukça yakın olan bu durumda, ayrıca nesnelerin hepsinin kendi adreslerinde çalıştıklarını düşünebiliriz. Kendi adres alanlarında (own address space) çalışan nesneler değişken paylaşımı (Shared variable) korunmuş olacağı için, çok kullanıcılı (multiuser) , çok işlemli (multiprocessing/threading) ve eşzamanlı (concurrent) modellemeleri desteklemektedir.