Pure Java – 21 Coupling & Cohesion

Merhaba Arkadaslar,
Bu yazimda Java’ da Coupling / baglasim/baglanti yani “nesnelerin birbirine baglanmasi” ve Cohesion/baglilik/yapisiklik kavramlarindan bahsedecegim. Ilk bakista Turkce kelime karsiliklari benzer gozukebilir fakat yazi sonunda kavramlari anlamis olacagimizi umuyorum 🙂

Oncelikle sunu belirtmem gerekir ki Coupling ve Cohesion kavramlari Object Oriented yaklasiminda olmazsa olmazlardandir , Object Oriented yaklasiminin kalitesiyle dogrudan ilgilidir.

Iyi bir Object Oriented dizayninda loose coupling / gevsek baglanti ve high cohesion istenen bir durumdur.

Bir programda cesitli gorevleri yerine getirecek bir cok sinif bulunur. Bu siniflar birbirleriyle etkilesim haline girerek ortak bir sekilde calisirlar. Bu durumda nesneler arasinda bagimliliklar olusur. Bir sinif diger bir sinif hakkinda ne kadar fazla bilgiye sahipse o sinifa olan bagimliligi o derece artar ( bir nevi ask gibi 🙂 ) Dusunuldugunde bu bagimliliklari ortadan kaldirmak mumkun degildir cunku mutlaka siniflar birbirleriyle ortak calismak zorundadir. Bu durumda yapacagimiz sey esnek bagimliliklar olusturmaktir yani loose coupling.

Coupling
Bir sinifin diger siniflari ne kadar bildigi ve sinif uyelerine nasil eristigi ile ilgilidir.
A sinifi B sinifinin degiskenlerine direkt olarak ulasmamalidir, getter/setter metotlari uzerinden ulasmalidir. B sinifina ait instance degiskenler public tanimlanmamalidir.
Louse Coupling , A ve B sinifi orneginde oldugu gibi siniflarin iyi bir encapsulation kuralina uygun olarak tanimlanmasi , siniflarin birbirlerine olan referans degiskenlerini minimize etme yaklasimidir. Tight Coupling bu kurallara uymamak , Object Oriented in dibine dinamit koymaktir 🙂

class A {

	void doMore() {
		B b = new B();
		b.badBoy = "Levent";
		System.out.println(b.badBoy);
	}
}

class B {
	public String badBoy;
}

yerine ;

class A {

	void doMore() {
		B b = new B();
		b.setBadBoy("Levent");
		String goodBoy = b.getBadBoy();
		System.out.println(goodBoy);

	}
}

class B {
	private String badBoy;

	public String getBadBoy() {
		return badBoy;
	}

	public void setBadBoy(String badBoy) {
		this.badBoy = badBoy;
	}
}

Su Spring yazimda Coupling , De-Coupling konusunda farkli bilgiler yer almaktadir.
http://www.injavawetrust.com/spring-ders-1-baslangic-ve-kurulum/

Cohesion
Coupling ,siniflarin birbirleriyle etkilesim konusu ile ilgilidir. Cohesion ise tekil olarak her bir sinifin nasil dizayn edildigi ile ilgilidir. Her bir sinifin iyi tanimlanmis bir amaci bulunmalidir. Yani bir sinif icerisinde birbirinden farksiz isleri yapmak uygun bir davranis olmayacaktir. Her sinifin sorumlulugu ve rolu net ve iyi tanimli olmalidir.

Asagidaki kodu inceledigimizde bir sinif icerisinde bir cok is yapilmaktadir ve bu sinifin bir cok rolu bulunmaktadir.

class BudgetReport {
 void connectToDB() {
 }
 void generateReport() {
 }
 void saveFile(){
 }
 void print(){
 }
}

Bunun yerine isleri ilgili siniflara bolmek ve her sinifa iyi tanimlanmis birbiriyle ilgili gorevler yaptirmak istenen bir durumdur ve bu yaklasim high cohesion olarak adlandirilir.

class BudgetReport{
 void generateBudgeReport() {
 }
}

class ConnectDB {
 void getConnection() {
 }
}

class PrintStuff {
 void printdoc() {
 }
}

class FileSaver {
 void saveFile() {
 }
}

Yazimi burada sonlandiriyorum. Bu yazi ile Object Orientation konusunu bitirdik.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

 

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *