8 Aralık 2015 Salı

Sınıflar arasında birleşim ve gruplama ilişkileri

Bennet, McRıbb and Farmer "gruplama" (aggregation) ilişkisini bütün-parça ilişkisine benzetiyor.
Birleşim (composition) ilişkisini de daha kuvvetli bir gruplama ilişkisi olarak tanımlıyorlar.

Bir nesne başka nesnelerin grubunu içeriyorsa, üst nesneyi temsil eden sınıf ile alt nesneleri temsil edilen sınıflar arasında bir gruplama ilişkisi vardır. Üst nesne bütünüyle alt nesnelerin birleşiminden oluşuyorsa, üst nesne sınıfı ve alt nesne sınıfları arasında birleşim ilişkisi vardır.


Bir gruplama ilişkisi aşağıdaki gibi çizilir. Önce üst sınıftan başlayan bir "aggregation" bağlantı türü seçersiniz:


"New Class" seçeneğiyle eklettiğiniz bağlantılı sınıfa bir ad verdikten soınra gruplama ilişkisini çizdirmiş olursunuz:


İlişki bağlanan sınıf tarafındaki bir boş baklava sembolüyle gösterilir. Arzu edenler baklava bağlantısını çokluk gösterimleri vb. Ekleyerek tatlandırabilirler.

Gruplama ilişkisinde, üst sınıf türü bir nesne alt sınıf türlerinden nesneleirn bir grubunu içerir, ama tümüyle o gruptan ibaret değildir.

Buna karşın, birleşim ilişkisi de bağlanan sınıf tarafındaki bir dolu baklava sembolüyle gösterilir:



Birleşim ilişkisinde üst sınıf türü bir nesne tümüyle alt sınıf türlerinden nesnelerin bir birleşimidir

2 Aralık 2015 Çarşamba

Özelliklerin Tanımlanması ve Sınıflarla Eşleştirilmesi

Bir kullanım şemasına göre üzerinde işlem yapılacak her tür bilgi bir sınıf şemasında bir sınıfa ait bir özellik olarak gözükecektir. Sorun özelliğin ait olacağı sınıfı bulmaktır.

Bennet, McRobb and Farmer kitabı bu konuda bir mülakatı örnek veriyorlar.

Örnek mülakatta Agate Reklamcılık şirketinin bir yöneticisi  idarecilerin kendi maaşlarını performans göre yaptıkları pazarlıklarla belirlediklerini, ama alt düzey çalışanların maaşlarının kadro derecelerine göre belirlendiğini söylüyor. Kadro derecesi de çalışanın amirinin performans değerlendirmesi sonucu değişebiliyor.
Bu bilgilerden anlıyoruz ki "Çalışan" adlı bir sınıf bir çalışanı temsil edecekse, ona ait maaş bilgisi de "Çalışan" sınıfındaki bir "Kadro Derecesi" bilgisinden elde edilecek. Belki de kadro derecesi ayrı bir sınıf olmalı ve "Çalışan" ve "Kadro Derecesi" sınıfları arasında bir kullanım ilişkisi olmalı ki birinin diğeri türünden özelliği olduğu anlaşılsın.
Mülakatın devamında Agate yöneticisi kadro derecelerine göre hakedilen maaşların her yıl sonunda ekonomik parametrelere göre yeniden belirlendiğini açıklıyor.
Demek ki "Kadro Derecesi" sınıfına ait bir "Maaş Katsayısı" gibi bir bilgi var ve o da zaman zaman değişebiliyor. Yani kadro derecesinin o anki değeri o anki maaşın para cinsinden değerini veriyor. Belki maaş katsayısı bile kendi başına bir sınıf olabilir.
Sonra öğreniyoruz ki şirketin genel performansına göre maaş katsayıları enflasyon gibi ekonomik parametrelerin de ötesinde arttırılabiliyormuş. Bunların belirlediği maaşlardan ayrıca çalışanın kişisel performansına bağlı primler de varmış.

Bu bilgileri toparlarsak, "Çalışan" sınıfında yalnızca çalışanın kimlik ve iletişim bilgileri yer alsın diyebiliriz. Bu sınıfın kullanım ilişkisi içinde olduğu bir "Kadro derecesi" sınıfı olur, o sınıfta da kadro derecesinin sayısal veya kodlanmış değeri, başlangıç ve bitiş tarihleri olur. "Maaş Katsayısı" sınıfı da "Kadro derecesi" sınıfıyla bağlantılı olur ve bir kadro derecesine karşılık gelen maaş katsayısı değerinin geçerlilik tarihleri olur. Şu küçük şema parçasında bunları göstermeye çalıştık:

Bu şemadan şunu anlamalıyız: "Çalışan" sınıfında "KadroDerecesi" türünden bir bilgi, bir özellik tanımı var. "KadroDerecesi" sınıfını sırf o özellik tanımındaki ek bilgilerin bir grubu olarak oluşturduk. Bu nedenle "KadroDerecesi" sınıfı aslında bir "ilişki sınıfı" (associational class) sayılır. Aynı projenin başka kısımlarında da gerekecek bir sınıf değil. Sırf "Çalışan" sınıfında tanımlanması gereken bilginin ayrıntılarını göstermek için şemaya eklenmiş bir sınıf. "KadroDerecesi" türünden bir nesnede de bir maaş katsayısı bilgisi var ki o bilgiyi oluşturan ayrıntıları da "MaaşKatsayısı" adlı bir ilişki sınıfında grupladık.

Çokluk derecelerini de açıklayalım: Her çalışan için geçmiş ve şimdiki olmak üzere bir veya daha fazla "KadroDerecesi" türünden bilgi var. Bunu kullanım ilişkisinin bitimindeki 1..* çokluk derecesinden anlıyoruz. Öte yandan bir kadro derecesine sahip mutlaka bir eleman olacak diye bir kural yok. Bazı kadro derecelerine sahip eleman belli bir anda olmayabilir. O nedenle ilişkinin o ucunda çokluk derecesi 0..*, yani olmayabilir de, birden fazla olabilir de. Buna karşın, her bir "KadroDerecesi" örneği için geçerlilik tarihlerini de belirten bir veya daha fazla "MaaşKatsayısı" bilgisi olabilir (o kadronun geçmiş ve şimdiki katsayı karşılıkları). Bu ilişkinin çoklukları da bir tarafta ", diğer tarafta 1..*