OOP'de ilişkilendirme, toplama ve kompozisyon açıkladı

Birleşik Modelleme Dili (UML), nesne yönelimli sistemleri modellemek için fiili bir standarttır. UML'de beş farklı ilişki türü vardır: ilişkilendirme, toplama, bileşim, bağımlılık ve miras. Bu makale, bu kavramlardan ilk üçünün bir tartışmasını sunarak geri kalanlarını başka bir blog gönderisine bırakıyor.

Nesne yönelimli programlamada ilişkilendirme

İlişki, aksi halde ilgisiz nesneler arasındaki anlamsal olarak zayıf bir ilişkidir (anlamsal bir bağımlılık). İlişki, nesnelerin kendi yaşam sürelerine sahip olduğu ve sahibinin olmadığı iki veya daha fazla nesne arasındaki "kullanım" ilişkisidir.

Örnek olarak, bir doktor ve bir hasta arasındaki ilişkiyi hayal edin. Bir doktor birden fazla hastayla ilişkilendirilebilir. Aynı zamanda, bir hasta tedavi veya konsültasyon için birden fazla doktoru ziyaret edebilir. Bu nesnelerin her birinin kendi yaşam döngüsü vardır ve "sahibi" veya ebeveyni yoktur. İlişkilendirme ilişkisinin parçası olan nesneler bağımsız olarak oluşturulabilir ve yok edilebilir.

UML'de bir ilişki ilişkisi tek bir okla temsil edilir. Bir ilişki ilişkisi bire bir, bire çok veya çoktan çoğa (aynı zamanda kardinalite olarak da bilinir) olarak temsil edilebilir. Esasen, iki veya daha fazla nesne arasındaki ilişki ilişkisi, bir nesnenin diğerine bir mesaj gönderebilmesi için aralarında bir iletişim yolunu (bağlantı da denir) belirtir. Aşağıdaki kod parçacığı, iki sınıfın, BlogAccount ve BlogEntry'nin birbiriyle nasıl ilişkilendirildiğini gösterir.

genel sınıf BlogAccount

   {

       özel BlogEntry [] blogEntries;

       // BlogAccount sınıfının diğer üyeleri

   }

genel sınıf BlogEntry

   {

       Int32 blogId;

       dize başlığı;

       dize metni;

       // BlogEntry sınıfının diğer üyeleri

   }

Nesne yönelimli programlamada toplama

Toplama, her nesnenin kendi yaşam döngüsüne sahip olduğu, ancak aynı zamanda bir mülkiyetin de bulunduğu iki veya daha fazla nesne arasında özel bir ilişki biçimidir. Birleştirme, tipik bir tam / parça veya ebeveyn / çocuk ilişkisidir, ancak fiziksel sınırlamayı gösterebilir veya göstermeyebilir. Bir toplama ilişkisinin temel bir özelliği, bütünün veya ebeveynin (yani sahip) parça veya alt öğe olmadan var olabilmesidir ve bunun tersi de geçerlidir.  

Örnek olarak, bir çalışan bir organizasyondaki bir veya daha fazla departmana ait olabilir. Ancak, bir çalışanın departmanı silinirse, çalışanın nesnesi yok edilmeyecek ve yaşayacaktır. Bir toplamaya katılan nesneler arasındaki ilişkilerin karşılıklı olamayacağına dikkat edin - yani, bir departman bir çalışana "sahip olabilir", ancak çalışanın departmana sahip olmaması. Aşağıdaki kod örneğinde, BlogAuthor ve BlogAccount sınıfları arasında bir toplama ilişkisi belirgindir.

genel sınıf BlogAuthor

   {

       özel Int32 yazar kimliği;

       özel string firstName;

       özel string lastName;

       // BlogAuthor sınıfının diğer üyeleri

   }

genel sınıf BlogAccount

   {

       özel BlogEntry [] blogEntries;

       // BlogAccount sınıfının diğer üyeleri

   }

Toplama genellikle UML'de içi boş baklava biçimli bir çizgi kullanılarak temsil edilir. İlişkilendirme gibi, toplama, katılan nesneler arasında bire bir, bire çok veya çoktan çoğa bir ilişki içerebilir. Bire çok veya çoka çok ilişki durumunda, bunun gereksiz bir ilişki olduğunu söyleyebiliriz.

Nesne yönelimli programlamada kompozisyon

Kompozisyon, özel bir toplama biçimidir. Kompozisyonda, ana nesne yok edilirse, alt nesneler de varolmaz. Kompozisyon aslında güçlü bir toplama türüdür ve bazen "ölüm" ilişkisi olarak anılır. Örnek olarak, bir ev bir veya daha fazla odadan oluşabilir. Ev yıkılırsa evin bir parçası olan tüm odalar da yıkılır. Aşağıdaki kod parçacığı, House ve Room olmak üzere iki sınıf arasındaki bir kompozisyon ilişkisini gösterir.

public class House

{

   özel oda odası;

   Halk Evi()

   {

       oda = yeni Oda ();

   }

}

Toplama gibi, kompozisyon da bir bütün / parça veya ebeveyn / çocuk ilişkisidir. Bununla birlikte, kompozisyonda parçanın veya çocuğun yaşam döngüsü, ona sahip olan bütün veya ebeveyn tarafından kontrol edilir. Bu kontrolün doğrudan veya geçişli olabileceği unutulmamalıdır. Yani, çocuğun yaratılmasından veya yok edilmesinden doğrudan ebeveyn sorumlu olabilir veya ebeveyn, önceden yaratılmış bir çocuğu kullanabilir. Benzer şekilde, bir ana nesne, alt nesneyi yok etmek için denetimi başka bir üst öğeye devredebilir. Kompozisyon, UML'de, nesneleri diğer nesnenin sahibi olan nesnenin ucundaki düz bir elmasla birleştiren bir çizgi kullanılarak temsil edilir.

Umarım bu ilişkilendirme, toplama ve kompozisyon ilişkileri tartışması, bu üç kavramın nasıl farklılaştığını anlamanıza yardımcı olmuştur. Birleştirme ve kompozisyonun her iki ilişkilendirmenin alt kümesi olduğunu unutmayın. Hem toplamada hem de kompozisyonda, bir sınıfın bir nesnesi, başka bir sınıfın bir nesnesinin sahibi olabilir. Ve hem toplamada hem de kompozisyonda, alt nesneler tek bir ana nesneye aittir, yani yalnızca bir sahibi olabilirler.

Son olarak, bir toplama ilişkisinde, ana nesnelerin ve alt nesnelerin yaşam döngüleri bağımsızdır. Bir kompozisyon ilişkisinde, bir ana nesnenin ölümü aynı zamanda çocuklarının ölümü anlamına gelir.