10 Kasım 2022 Perşembe

Sınıflar Arası İlişki

 


1-) ASSOCİATİON (Çağrışım)

A Sınıfının B sınıfını o an kullanıp bırakması şeklinde ifade edilir. Paremetre alması yada return type olarak kullanması gibi


2-) AGGREGATİON (Birleşme)

- A holds B ilişkisini ifade eder.
- B nesnesi A nesnesinden bağımsız bir şekilde var olabilir.



Yukarıda Person nesnesi Address nesnesinin ömrünü yönetmiyor. Person nesnesi yok edilse bile
Address nesnesi hala mevcut olacaktır.


3-) COMPOSİTİON (İçerme)

- A has B ilişkisini ifade eder.
- B nesnesi A nesnesinden bağımsız bir şekilde var olamaz.


4-) İNHERİTANCE (Miras)

Var olan sınıfın özelliklerini korumak ve buna eklenti yapma amacıyla kullanılır.
Kalıtımı kullanmaya karar verirken;
B is a A and B can do everything that A can do (liskov substitution principle)


İNHERİTANCE VS. COMPOSİTİON

Prefer composition over inheritance.

Component objeleri bir araya gelerek composite objeyi oluşturur. 
Composite Class, Component classların nesnelerini member olarak içerir.
Bir sınıfın metodunu kullanmak için o metotdan türemek yerine(inheritance) bu sınıfın
nesnesini member olarak içermek(composition) daha sağlıklıdır.
İnheritiance ile kodlar arası sıkı bir bağ oluşur. Base classdaki bir değişiklik tüm subclasslara gider.
Oysa Composition ile oluşan bağ gevşektir. Daha fazla esneklik sağlar.


COHESİON VE COUPLİNG

Coupling modüllerin birrine bağlılık derecesi, Cohesion ise modüllerin içindeki elemanların
bir birine bağımlılığının ölçüsüdür.

COHESİON

Bir modülün/sınıfın sorumluluklarının netliğini ifade eder. Dolayısıyla Cohesion modülün nasıl
tasarlandığına odaklanır.
Modülümüz sadece bir görevi yerine getiriyorsa ve başka hiç birşey yapmıyorsa ve net bir amacı 
varsa modülün cohesionu yüksektir.
Single Responsibility Prensibi son derece yüksek Cohesionlu bir sınıf oluşturmayı amaçlar.

Cohesionun Faydaları
- Azaltılmış modül karmaşıklığı(daha basit, daha az operasyona sahip)
- Domaindeki mantıksal değişiklikler daha az modülü etkilediği için ve bir modüldeki değişiklikler
diğer modullerde daha az değişiklik gerektirdiği için artan sistem sürdürülebilirliği sağlar.
- Arttırılmış Modül Yeniden Kullanılabilirliği

Low Cohesionda, Ortak olmayan bir çok işi yürütmekten sadece tek bir sınıf sorumlu tutulmuştur.
Yeniden kullanılabilirlik bu sınıf için azalmıştır.

High Cohesionda, Daha iyi bir yeniden kullanılabilirlik ve tüm işler için ayrı bir sınıf oluşturulmuştur.

COUPLİNG

Modüller arası bağlılığın derecesidir.
OOP dillerinde bir sınıfın başka bir sınıfa erişmesi/içermes kalıtım yada bir sınıfın başka bir 
sınıfa referens ile bağlanmasıyla gerçekleşir.
Sıkı sıkıya bağlılık kavramında, İlişki içinde bulunan bir sınıf üzerinde yapılacan değişiklik
diğer bağlantılı sınıflarıda etkileyebiliyor. Buda modülerliği ve bakım maliyetini etkileyen bir durumdur.

Aşağıdaki durumlarda A ve B classlarının Couplingi artar.
- A Has an attribute that refers to B - Aggregation
- A calls an services of an object B
- A has a method that reference B(return type or parameter) - Association
- A is a subclass of B - İnheritance

Low Coupling : Bir modülün başka bir modülle basit ve kararlı interface aracılığıyla etkileşime girdiği
ve diğer modülün implemantasyonuyla ilgilenmesi gerekmediği bir ilişkiyi ifade eder.
Subclass Coupling : Subclass ve Base class bağımlılığıdır.Sadece  Subclass, Baseclassa bağımlıdır.
Temporal Coupling : İki eylem aynı anda gerçekleştiği için tek bir modülde bir araya getirildiğinde
oluşan bağımlılıktır.
Dynamic Coupling : Her bir modülde interfacenin aynı olduğu durumda, run-time esnasında bağımlılığın dinamik olarak değiştirilebildiği noktadaki couplingdir.









Hiç yorum yok:

Yorum Gönder