Sınıflar Arasındaki İlişkiler

Bir proje nesne yönelimli olarak modellenecekse, proje içerisindeki tüm gerçek nesneler ve kavramlar birer sınıf ile temsil edilir ve sınıflar arasındaki ilişkiler betimlenir, en sonda da kodlama yapılır.

Genel olarak yazılımın seviyesi yükseldikçe ( yani kodlama kolaylaştıkça ) planlama faaliyetinin önemi artar. Bir projeden beklenenlerin belirlenmesi, gereksinimlerin belirlenmesi, işlerin nasıl yürüdüğünün incelenmesi, projenin adımlara ayrılması, kişilere dağıtılıp yönetilmesi, müşteriyle ilişkiler, bakım süreci önemli aşamalardır. Yazılımın seviyesi düştükçe, planlamanın önemi azalır, kodlama becerisinin önemi artar. Örneğin bir işletim sisteminde planlamadan daha çok yazılımın gerçekleştirilmesi daha zordur. Sınıflar arasında beş tür ilişki söz konusu olabilir.

1. İki sınıf arasında hiçbir ilişki söz konusu olmayabilir.
2. İçerme ilişkisi (Composition) : Bu ilişkide bir sınıf türünden nesne başka bir sınıf türünden nesnenin bir parçasını oluşturmaktadır. İçerilen nesne tek başına anlamlı değildir, ancak başka bir nesnenin parçası olunca anlamlıdır. Bu ilişkinin belirlenmesi için iki ölçüte bakılmalıdır:

a. İçerilen nesne tek bir nesne tarafından içerilmelidir. Birden fazla nesne tarafından içirilemez.
b. İçerilen nesne ile içeren nesnenin ömürleri yaklaşık aynıdır.

Anahtar Notlar: Bu ölçütler %100’ lük bir katıklıkla ele alınırsa her şeyin bir istisnası olabilir. Fakat tipik durum ele alınmalıdır. Yani %99’ luk bir oran.

Örneğin insan bir sınıfla temsil edilse, karaciğer de bir sınıfla temsil edilse, bu iki sınıf arasında içerme ilişkisi vardır. Çünkü karaciğer tek bir insana ait olabilir ve insan doğduğunda karaciğeriyle doğar. Fakat örneğin hastane sınıfıyla doktor sınıfı arasındaki ilişki böyle değildir. Çünkü bir doktor birden fazla hastanede çalışıyor olabilir ve doktorla hastanenin ömürleri aynı değildir. Odayla duvar arasındaki ilişkide içerme ilişkisi değildir. Fakat arabayla motor arasındaki ilişki içerme ilişkisidir.

UML sınıf diyagramlarında içerme ilişkisi içeren sınıf tarafında içi dolu bir yuvarlakçık yada baklavacık ile ifade edilir.

İçerme ilişkisi C#’ da şöyle oluşturulur: içeren sınıfın İçerilen sınıf türünden bir referans veri elemanı vardır. İçerilen sınıf nesnesi, içeren sınıfın başlangıç methodun da new operatörüyle yaratırlır.

Burada yukarıda açıklanan her iki koşulda sağlanmaktadır.


3. Birleşme ilişkisi (Aggregation) :
Bu ilişkide bir sınıf diğer sınıfı kullanır. Kullanma yine sınıfsal düzeydedir. Fakat bu ilişkinin içerme ilişkisinden farkı kullanılan nesneyle kullanan nesne, aynı ömre sahip değildir ve kullanılan nesne tek bir nesne tarafından kullanılmak zorunda değildir. İçerme ilişkisine benzeyen fakat içerme ilişkisi olmayan ilişkilerin çoğu birleşme ilişkisidir. Örneğin hastaneyle doktor arasında birleşme ilişkisi vardır. Odayla duvar arasındaki ilişki de birleşme ilişkisidir. Bilgisayarla fare, masaüstü bilgisayarla monitör arasındaki ilişkiler bu biçimdedir.

Birleşme ilişkisi UML sınıf diyagramlarında içi boş bir yuvarlakçık yada baklacıkla gösterilir.

C#’ da birleşme ilişkisi şöyle oluşturulur: Kullanan sınıfın kullanılan sınıf türünden bir referans veri elemanı vardır. Fakat bu referans elemanına dışarıdan atama yapılır. Yani sınıfın başlangıç methodu yada property’ si bu methoda atama yapmaktadır. Sınıfın diğer methodlarıda bunu kullanırlar.

4. Türetme ilişkisi : Bir sınıf hem bir çeşit başka sınıf ise hem de ondan fazlalığı varsa bu iki sınıf arasında türetme ilişkisi vardır. Türetme ilişkisine İngilizce “is a” ilişkiside de denmektedir. Örneğin bir aracın tüm genel özellikleri taşıt sınıfında toplansın. Yani taşıt sınıfı her taşıtta bulunan ortak özellikleri içersin, otomobil bir çeşit taşıttır. Fakat genel taşıt kavramından fazlalıkları vardır. İşte otomobil sınıfıyla taşıt sınıfı arasında türetme ilişkisi vardır. Halbuki içerme ilişkisi İngilizce “has a” ilişkisi denir. Birleşme ilişkisine ise “Hold a” ilişkisi denmektedir.

5- Çağrışım ilişkisi:

Bu ilişkide bir sınıf diğerini kullanmaktadır; fakat kullanma biçimi bütünsel değil, kısmidir. Örneğin; sınıfın bir metodu parametre olarak kullanılan sınıfı almıstır ve o sınıf yalnızca o metoda kulanılmaktadır.
Çağrışım ilişkisi UML sınıf diyagramlarında ince bir ok ile gösterilir.

Okun hacmi yoktur incedir ve o kun yönü kullanan sınıftan kullanılan sınıfadır. Örn:
Person isimli bir sınıf olsun ve sınıfın bir metodu kullanılan bilgileri dosyaya yazsın.
Ör:

Class Person
{
//…
Public void writeFile(FileStream fs)
}
//…

Burada person sınıfı ile filestream sınıfı arasında bir çağrışım ilişkisi vardır.

Kaynak:Kaan Aslan Hocanın Dersinde Tuttuğum Ders Notlarıdır.

Leave a Reply

Site Footer