Nesneler Arası İlişki Türleri (Association, Aggregation, Composition)

Bu bölümde Association, Aggregation ve Composition terimlerinin ne olduğunu ve arasındaki farklılıkları konuşacağız.

Görselde 4 tane sınıfımız vardır bunar;

  • Owner
  • Pet
  • Dog
  • Tail
  • Dog Group

Bu sınıflar arasındaki ilişkiyi inceleyecek olursak;

Association Relationship ( Dog – Owner )

Köpek (dog) ve sahibi (owner) arasındaki ilişki en zayıf ilişki türüdür, sahibi köpeği besler köpek ise sahibini sadakat duyar. İki sınıfın örnek nesneleri arasında parça bütün ilişkisi yoktur, köpeğin ya da sahibinin yok olması bir diğerinde bir değişikliğe neden olmaz birbirlerinin yaşam döngülerini etkilemezler, diğer yandan birinde yaptığımız bir değişiklik bir diğerini etkilemez, bir parça bütün ilişkisi de yoktur (köpek + sahibi != anlamlı bir parça) köpek ve sahibinin ikisini toplarsak ortaya bu iki nesneden bağımsız olarak anlamlı bir parça da çıkmaz.

Fakat bu iki sınıf birbiriyle iletişim halindedir, ve aralarında bir bağlantı olmak zorundadır. Bu ilişki association olarak temsil edilir. Connecor (konnektör, bağlayıcı) olarak da bilinir.

IS-A Relationship, Inheritance ( Dog – Pet )

Köpek ve evcil hayvan (pet) sınıfı arasında ise inheritance (is-a relationship) vardır çünkü köpek bir evcil hayvandır. (Dog IS-A pet) Köpek sınıfı evcil hayvan sınıfındaki bütün durum, davranış ve fonksiyonları miras alır.

Composition, Has-A Relationship ( Dog – Tail )

Köpek ve kuyuruğu (Tail) arasındaki ilişkiyi inceleyecek olursak, kuyruk köpeğin bir parçasıdır (part of relationsip, The tail is a part of dog) ve aynı zamanda köpek kuyruğuna sahiptir (has a relationship, The dog has a tail). Kuyruk, tek başına anlamsız bir parçadır ve fonksiyonel değildir, Köpek nesnesini yok edersek, köpek nesnesi ile birlikte kuyruk nesnesinin yaşam döngüsüne de son veririz, dolayısıyla parent class (dog) ve child class(tail) arasında güçlü bir ilişki vardır ve bu ilişki türü Composition olarak adlandırılır.

Aggregation, Has-A Relationship ( Dog- Dog Group )

Köpek ve köpek grubu arasındaki ilişki türü ise Aggregation ilişki türdür. Köpek bir köpek grubuna dahil olabilir, ama bu bir zorunluluk değildir ve iki sınıfında örnek nesneleri arasında oluşacak bu ilişki türünde, birinde olan bir değişiklik diğerinin yaşam döngüsünü etkilemez, ve birbirlerinden ayrıldıklarında her iki nesne de hala anlamlı birer parçadır, aggregation toplama anlamına gelir, composition ise koleksiyon, bu bakımdan bir koleksiyon birden fazla farklı nesnenin bir araya gelerek oluşturduğu anlamlı bir parça (collection) iken aggregation ise toplama anlamına geldiğinden farklı nesnelerin toplanması ile oluşan fakat bu nesnelerin biri çıkarıldığında çıkarılan parçanın ve kalan bütünün anlamını koruduğu ilişki türüdür.

Bu ilişkileri görselimiz üzerinden örneklendirdikten sonra biraz daha detaya inelim…

Association

Eğer bir model içerisindeki 2 sınıfın örnek nesnelerinin birbirleri ile iletişime geçmeleri gerekirse, bunlar arasında bir bağlantı olmalıdır, ve bu bağlantı (ilişki) association (connector) olarak temsil edilir.

Bu ilişki UML sınıf diyagramlarında, birbirleriyle iletişime geçecek olan örnek nesnelerin sınıfları arasında bağlantının yönünü bir ok ile bir çizgi göstererek ifade edilir.

Her iki tarafta da bir ok olması durumunda, ilişkilendirme çift yönlü ilişkilendirme olarak bilinir. (bidirectional association) Association, sınıflar arasında ilişkinin zayıf türüne verilen isimdir. Bu ilişkilendirme türünde sınıflar birbirinden bağımsızdır, parça bütün (part-whole) ilişkisi yoktur. Bu ilişkilendirme türüne zayıf denmesinin sebebi sınıfların örnek nesneleri arasında semantik (anlamsal) olarak yakın bir ilişki olmamasından, birbirleri ile alakasız sınıflar arasında olmasından kaynaklanır. Bu ilişkilendirme türü kendi yaşam döngüsüne bağımsız olarak sahip olan iki ya da daha fazla nesne arasındaki kullanım ilişkisidir, nesneler arasında sahiplik ilişkisi yoktur.

Örnek olarak, bir doktor ve bir hasta arasındaki ilişki türünü inceleyelim, bir doktor birden fazla hasta ile iletişim halinde, bağlantılı olabilir ve aynı zamanda bir hasta da birden fazla doktor ile tedavi için iletişim halinde olabilir. Hasta ve doktor nesnelerinin her ikisi de kendi nesne yaşam döngülerine bağımsız olarak sahiptir, ( object life cycle) aralarında bir sahiplik ilişkisi söz konusu değildir. Aralarında association ilişkisi olan nesneler birbirinden bağımsız olarak oluşturulup yok edilebilir.

Aggregation

Aggregation, yine associaton ilişki türünde olduğu gibi kendi yaşam döngülerine bağımsız olarak sahip olan ama association’dan farklı olarak bir sahiplik durumunun da mevcut olduğu iki veya daha fazla nesne arasında kurulan association ilişkisinin özel bir formudur. Aggregation, tipik olarak bir parça bütün ilişki (whole/part) ya da parent/child ilişkisinin mevcut olduğu ve aynı zamanda has-a ilişkisini de bünyesinde kesin olarak barındıran ilişki türüdür, fakat kesin olarak bir fiziksel sınırlamayı ifade etmez, en başta yaptığımız (köpek-köpek grubu) örnekte köpeğin köpek grubuna dahil olabilmesi veya olmayabilmesi durumunda herhangi bir anlamsal bozulma olmadığı durumunu tekrar hatırlayalım.

Aggregation ilişkisinin en önemli özelliği ise, bütünün (parent class,örnekteki köpek grubunun) parçaya (örnekteki köpek sınıfı, child class) sahip olmadan da mevcudiyetini sürdürebilmesidir. Tam tersi durumda da bu mantık geçerlidir yani bütün olmadan parça, parça olmadan bütün mevcudiyetini sürdürür ve hala ikisinin de anlamı vardır.

UML sınıf diyagramlarında aggregation ucunda içi boş bir elmas olan bir çizgi ile temsil edilir içi boş elmasın temas ettiği sınıf bütündür, elmasın temas ettiği sınıf ana sınıftır (bütündür) diğeri ise parçadır (child class).

Composition

Composition, aggregation ilişkisinin özel bir versiyonudur. Bu ilişki türünde eğer bütün (parent, whole object) yok edilirse, parça da (child object) bütün ile birlikte yok olur. Bu ilişki türü aggregation ilişkisinin güçlü bir türüdür, bütünün yok olması parçanın da yaşam döngüsüne son verdiğinden dolayı bazen “death relationship” (ölüm ilişkisi) olarak da geçer. Örnek olarak bir ev birden fazla oda ile kompoze edilmiş (bütünleştirilmiş) olabilir, eğer ev yok edilirse ev ile birlikte odalarda yıkılacaktır. Aşağıdaki kod bloğunda ev ve oda arasındaki bu kompoze ilişki (composition) gösterilmiştir.

Bütün parçanın oluşturulmasından veya yok edilmesinden doğrudan (directly) sorumlu.

public class House
{
   private Room room;
   public House()
   {
       room = new Room();
   }
}

Aggregation’da olduğu gibi composition da parça bütün (whole/part) ya da parent/child ilişkisidir. Ancak, composition’da parçanın (child object) yaşam döngüsü ona sahip olan bütün (parent object) tarafından kontrol edilir. Buradaki dikkat edilmesi gereken husus, bu kontrolün doğrudan (direct) yada geçişli (transitive) olabileceğidir yani bütün (parent) direkt olarak parçanın (child) oluşturulmasından veya yok edilmesinden sorumlu olabilir ya da zaten oluşturulmuş parçayı kullanabilir. Bu noktayı önemli gördüğüm için geçişli olarak kontrolün olduğu örneği yukarıdaki kodu düzenleyerek tekrar vereceğim böylelikle fark net bir şekilde anlaşılmış olacak.

Bütün parçanın oluşturulmasından veya yok edilmesinden geçişli olarak (transitive) sorumlu, hazır olarak oluşturulmuş parçayı kullanıyor.

public class House
{
   private Room room;
   public House(Room room)
   {
      this.room=room
   }
}

UML sınıf diyagramlarında composition ilişkisi içi dolu olan bir elmas işaretini içeren bir çizgi ile temsil edilir, elmasın içinin dolu olması bu ilişkinin güçlü aggregation ilişkisi olduğunu belirtmek amacıyla yapılan birşeydir. İçi dolu elmasın temas ettiği sınıf bütündür (parent class) diğeri ise parçadır (child class)

Sonuç Olarak..

Association bağlantı, ilişkilendirme anlamına gelir, nesneler arası ilişkileri temsil eder temel olarak iki başlıkta incelenir bunlar IS-A (Inheritance) ve HAS-A (Composition ve Aggregation) ilişkileridir.

Aggregation ve composition ilişkilerinin her ikisinde de bir sınıfın örnek nesnesi başka bir sınıfın örnek nesnesine sahip olabilir, ve parça (child object) tek bir bütüne (parent object) ait olmalıdır, son olarak aggregation ilişkisinde parça ve bütünün yaşam döngüsü birbirinden bağımsızdır. Composition ilişkisinde ise bütünün yok edilmesi parçanın da yok edileceği anlamına gelir.

Kaynakça

görseller haricinde başka bir kaynaktan yararlanılmamıştır.

Yorum bırakın