Association vs. Aggregation vs. Composition | |||||
Merhaba, kafa kurcalayıcı bir yazıya ne dersiniz? Bu yazıda Association ile Aggregation arasındaki farklardan ve Aggregation ile Composition arasındaki farklardan bahsedilecektir.
Hayli uzun yazıyı özetleyen bir resim olarak aşağıdakine bakabilirsiniz: Association vs. Aggregation Association sınıflar arasındaki bağlantının zayıf biçimine verilen addır. Association ilişkisi halindeki nesneler belki bir grubun ya da ailenin parçasını teşkil edebilirler. Fakat bu parçalar tamamen birbirlerine bağlı değillerdir. Bunu bir örnekle izah edelim: Örneğin bir araba, bir sürücü, bir yolcu ve bir başka yolcuyu ele alalım. Sürücü ve iki yolcu arabada iken bu nesneler birbirleri ile bir etkileşim içerisindedirler. Araba, sürücü ve yolcuların hepsi aynı yöne gitmektedirler ve hepsi aynı boşlukta yer almaktadırlar. Yani ortada bir ilişki söz konusudur. Fakat bu ilişki gevşektir. Yani, sürücü arabayı kenara çekip bir yolcuyu indirdiğinde sorunsuz bir şekilde yoluna devam edebilir. Böylesi bir durumda nesnelerin birbirleriyle olan ilişkilerinde bir eksilme söz konusudur, fakat kalan parçalar halen işlevseldir. Yani araba yoluna tek yolcuyla devam edebilir. İşte bu nesnelerin birbirleriyle olan bağımsızlıkları ile birbirleriyle olan biraradalıklarına association denir. Aggregation ise nesneleri birleştirip daha büyük bir nesne yapmaya verilen addır. Aggregation ilişkisinde association'da olmayan bir sahiplik ve parça-bütün ilişkisi vardır. Bunu fabrika üretimi olan nesneler üzerinden gözlemleyebiliriz. Çünkü fabrika üretimi nesneler genellikle aggregation ilişkisini temsil ederler. Örneğin fabrika çıkışlı bir mikrodalga nesnesi bir kabinden, bir kapıdan, gösterge panelinden, butonlardan, bir motordan, bir magnetron'dan falan oluşur. Dikkat ederseniz tüm bu nesneler topla toplana bir mikrodalga nesnesini oluşturmaktadır. İşte büyük nesne küçük nesnelere "sahiptir". Bu yüzden büyük nesnenin küçük bileşenleri ile olan ilişkisine aggregation denir. Fakat association'daki gevşekliğe nazaran aggregation'da yakın bir bağlılık ilişkisi söz konusudur. Çünkü düşünün ki mikrodalganın motorunu çıkardık. Bu durumda kalan parçalar bir mikrodalga özelliği gösteremeyecektir. Halbuki association örneğimizde bir yolcu indiğinde kalan parçalar halen işlevsel durumda devam edebiliyorlardı. İşte association ve aggregation arasındaki temel fark budur. Yazılım geliştiricileri sıklıkla aggregation ve association arasında bir seçim yapmak zorunda kalırlar. Bu seçim tasarlanan yazılımın yönünü etkileyebilmektedir. Dolayısıyla mühim bir konudur. Association ve aggregation'a birkaç örnek daha verelim: Sizce bir sokak ve yanındaki bir ev nesnelerini ele alacak olursak bu nesneler arasındaki ilişki association mıdır yoksa aggregation mıdır? Biraz düşünün. Cevap aslında biraz açık. Çünkü sokağın yanındaki ev yıkılsa sokak yine sokak olarak işlevsel kalacaktır. Ya da sokak yıkılsa ev yine ev olarak işlevsel kalacaktır. Bir şeyler eksilmiş olacaktır doğru, ama kalan parçalar halen aktiftir. Bu yüzden cevap association'dır. Peki bir kitabın sayfalarını ve kendisini düşünecek olursak bu iki nesne arasındaki ilişki association mıdır yoksa aggregation mıdır? Eğer kitabın sayfalarından birini yırtarsak kitap işlevselliğini kaybetmiş olacaktır. Tıpkı mikrodalganın kapağını çıkarmak gibi. Doğru, mikrodalga kapaksız da çalışır ama nasıl çalışır? Binbir zarar ziyanla. Kitap için de işte bu "sıkı" ilişki mantıksal olarak vardır. Bir sayfanın yırtılması demek konu bütünlüğünün bozulması demektir. Hem ayrıca kitap ile sayfaları arasında bir sahiplik ilişkisi de mevcuttur. Dolayısıyla bu ilişki aggregation'dır. Association ve Aggregation arasındaki farkı bulmak için 'Nesnelerin birini aralarından çıkarırsam ne olur?' sorusunu sorabilirsiniz. Bu sorunun cevabı eğer sorun yok ise association, eğer sorun var ise aggregation'dır. Çoğu zaman bu soru işe yarar. Fakat bazen de yaramaz. Yaramadığı durumlarda ilişkinin hangisi olması gerektiğine karar verebilmek için sıkı bir beyin fırtınasına ve tecrübeye ihtiyaç vardır. Aggregation vs. Composition Aggregation ve Composition arasındaki mantıksal fark şudur: Aggregation sahip olunan nesnenin sahip olan nesneden bağımsız bir şekilde var olabilmesine denir. Composition ise sahip olunan nesnenin sahip olan nesneden bağımsız bir şekilde var olamamasına denir. Ne demek istiyorumu bir örnekle izah edeyim: Mesela araba ve tekerlek nesnelerini düşünelim. Bir araba tekerleğe "sahiptir". Tekerleksiz araba hayliyle düşünülemez. Bu yüzden bu nesneler arasında sıkı bir ilişki vardır. Böylece association'ı elemiş olduk. Fakat bir tekerlek arabasız olabilir. Yani sonuçta raflarda satılacak tekerlekler arabayla yer almaz. Dolayısıyla böyle de bir ilişkide esneklik vardır. İşte bu örnekte sahip olunan tekerlek nesnesi kendi başına ayrı olarak var olabildiği için bu iki nesne arasındaki ilişkiye aggregation'dır deriz. Yani sahip olunan nesnenin sahip olan nesneden bağımsız bir şekilde var olabilmesine aggregation denir. Composition ise daha önce söylediğimiz gibi sahip olunan nesnenin tek başına var olamayacağı durumu ifade etmek için kullanılan bir ilişkidir. Mesela vücud ve kan hücresi nesnelerini ele alalım. Sizce normal şartlar altında vücudun olmadığı yerde kan hücresi olur mu? Olmaz. İşte bu daha sıkı ilişkiye composition adı verilir. Yani sahip olunan nesne olan kan hücresi tekerleğin aksine tek başına var olamayacağı için bu ilişkiye composition denir. Fakat aklınıza şu soru gelmiş olabilir: Hastanelerdeki şişelerde hastalardan alınan kanlar varken bir kan hücresi vücuddan ayrı bir şekilde var olamaz mı? Evet, olur. Fakat burada ilişkinin aggregation mı composition mı olduğunu iş şahası belirliyor. Eğer bir hastane için yazılım geliştiriyorsanız vücud ile kan hücresi aggregation ilişkisine tekabül eder. Çünkü kan hücresi vücuddan ayrıyetten var olabiliyor. Eğer bir fabrika için yazılım geliştiriyorsanız vücud ile kan hücresi composition ilişkisine tekabül eder. Çünkü bir kan hücresi personelin vücudundan ayrıyetten olamaz. Yani bu ilişki, iş sahasına göre görecelidir. Sonuç olarak bir ilişkinin aggregation mı composition mı olduğunu anlamak için ilişkideki sahip olunan nesnenin tek başına var olup olamayacağını saptamak yeterlidir. Tabi iş sahasını göz önünde bulundurarak... Bir de araba, arabanın gövdesi ve arabanın motoru nesnelerinin ilişkisini ele alalım. Arabanın gövdesi araba nesnesinin bir parçasıdır. Arabanın motoru da araba nesnesinin bir parçasıdır. Her iki durumda da bir sahiplik ve parça-bütün ilişkisi mevcuttur. Dolayısıyla bu iki nesnenin association ile araba nesnesine bağlanma ihtimali yoktur. Association'ı böylece eledik. Geriye kaldı aggregation ve composition seçenekleri. Arabanın gövdesini düşünelim. Arabayla şöyle veya böyle içli dışlıysanız bilirsiniz ki arabanın gövdesi araba ile sonuna kadar var olur. Ne zaman araba hurda olur, o zaman arabanın gövdesi de hurda olur. Raflarda araba gövdesi tek başına satılmaz. Yani sahip olunan nesne olan araba gövdesi tek başına var olamamakta. Dolayısıyla araba nesnesi ile arabanın gövdesi nesnesi composition ile birbirlerine bağlanır. Arabanın motoru ile araba nesnesi arasındaki ilişkiye gelecek olursak bir arabanın motoru çıkarılıp satışta olan bir başka kendi başına var olabilen araba motoru takılabilir. Yani sahip olunan parça tek başına var olabildiği için araba nesnesi ile araba motoru arasındaki ilişki aggregation olur. Aggregation için fabrika ürünlerinin genellikle aggregation ilişkisine sahip olduğu yönünde bir örnek vermiştik. Yani parça-bütün ve sahiplik ilişkilerinin bütününe aggregation demiştik. Fakat aggregation'dan söz edebilmemiz için illaki parça-bütün ilişkisini bir maddenin imalat parçası olarak düşünmemiz gerekmez. Mesela bir firmadaki takımın personeli ile olan ilişkisini ele alalım. Bu örnekte dikkat ederseniz yine parça-bütün ilişkisi ve sahiplik ilişkisi vardır. Yani illaki parça-bütün ilişkisini imalat parçası açısından düşünmek zorunda değiliz. Özet Sürücü araba ile association ilişkisi halindedir. Çünkü sürücü arabayı oluşturan bir parça değildir, yani parça-bütün ilişkisi ve sahiplik ilişkisi yoktur. Öyle olsaydı aggregation olurdu. Dolayısıyla aggregation seçeneği elendi. Sürücü her zaman arabanın demirbaş bir parçası da değildir. Öyle olsaydı composition olurdu. Dolayısıyla composition seçeneği de elendi. Geriye kaldı en zayıf bağlantı olan association seçeneği. Dolayısıyla ilişki association olmalıdır. Yararlanılan Kaynaklar:
|
|||||
Bu yazı 19.07.2015 tarihinde, saat 22:56:59'de yazılmıştır. 22.08.2024 tarihi ve 20:12:01 saatinde ise güncellenmiştir. | |||||
|
|||||
Yorumlar |
|||||
|
|||||
|
|||||
|
|||||
Yorum Ekle | |||||