Veysel Uğur KIZMAZ

Java Composition

04.04.2012Okunma Sayısı: 6067Kategori: Java

 Oluşturduğumuz bir sınıfı gerektiğinde başka bir sınıf içerisinde de kullanabilmek hem kodlamada aynı kodların yazılmasını önleyerek kod kirliliğini önüne geçer hem de hata riskini azaltmaktadır. Bu işlem için 2 temel yöntem bulunmaktadır:

1. Inheritence ( kalıtım)
2. Composition
 
Daha önceki makalemizde Java ile Kalıtım konusunu işlemiştik. Şimdi buna alternatif olarak kullanılan Composition yapısını inceleyelim.
 
Interface'de bir sınıf, başka bir sınıfa katılımıyla beraber tüm kullanım hakkını (public & protected) vermekteydi fakat iki sınıf da birbirinden bağımsız çalışmaktaydı. Composition'da ise sadece genel yapısına erişim vardır (public), yani kalıtımdan daha kısıtlı kullanım hakkına sahiptir. Fakat Composition'da bir sınıf diğer sınıfı bünyesinde barındırmaktadır şeklinde de düşünülebilir. Bu nokta ikisinin arasındaki en önemli farktır ve bunu diagramlarla inceleyelim. Öncelikle kalıtımın ilişki diagramını inceleyelim.
 
Örnek uygulama:  2 adet sınıfımız bulunsun : Dikdortgen & Kare. Kare de bir Dikdortgen olduğu için Kare sınıfında Dikdortgen ile ortak işlemleri yapmak yerine Dikdortgen'de hazırladığımız methodları kullanacağız.
 
Inheritence (kalıtım) ile bu işiki oluşturulsaydı aşağıdaki gibi bir yapı ortaya çıkacaktı:
 
Bu yapı Composition ile oluşturulduğunda ise aşağıdaki gibi bir yapı ortaya çıkacaktır.
 
 
 
 
 
 
 
 
 
 
 
Şimdi Composition'ı örnekleyelim:
Dikdortgen.java
public class Dikdortgen {
     
      //...
}
 
Kare.java
public class Kare {
      private Dikdortgen dikdortgen = new Dikdortgen();
      //...
}
 
Yukarıdaki örnekte yazıldığı gibi, Dikdortgen sınıfında tüm kodlarımızı hazırlayacağız, Kare sınıfında bir Dikdortgen nesnesi oluştuurp ortak işlemleri dikdortgen isimli nesne üzerinden gerçekleştireceğiz.
 
Örnek Uygulama : Dikdortgen sınıfı, en ve boy bilgisini Constructor'dan alsın, getAlan() methodu ile dikdörtgenimizin alanını alalım. Kare sınıfında ise kenar bilgisi Constructor'dan alınsın, getAlan() methodu ile karenin alanını alalım.
 
Öncelikle Dikdortgen sınıfımızı oluşturalım.
 
Dikdortgen.java
public class Dikdortgen {
     
      private double en;
      private double boy;
     
      public Dikdortgen(double en, double boy){
            this.en = en;
            this.boy = boy;
      }
     
      public double getAlan(){
            return this.en * this.boy;
      }
}
 
Şimdi Kare sınıfımızı, Dikdortgen sınıfıyla Composition oluşturacak şekilde hazırlayalım.
 
Kare.java
public class Kare {
      private Dikdortgen dikdortgen;
     
      public Kare(double kenar){
            this.dikdortgen = new Dikdortgen(kenar,kenar);
      }
     
      public double getAlan(){
            returnthis.dikdortgen.getAlan();
      }
}
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com
twitter: @vukizmaz