Java’da Composition

3863
görünümler

Composition nedir?

Bir classı oluşturduktan sonra başka bir class içerisinde kullanmamızı sağlayan yapıya composition denir. Bu sayede her kodlamada aynı kodu yazmak zorunda kalmayacak ve oluşabilecek kod kirliliğinin önüne geçmiş olacaksınız.

Composition da sahiplik ilişkisi vardır. Bizim bir masaüstü bilgisayarımızın olduğunu düşünelim. Bu bilgisayarı oluştururken kasa , monitor , anakart , ram vs. alıyoruz. Tüm bunları birleştirerek bir bilgisayar ortaya çıkarıyoruz. Bu bilgisayarı OOP ile tasarlayacağımızı düşünürsek bu bilgisayar objesinin içinde aslında bir tane kasa objesi , bir tane anakart objesi , bir tane ram objesi , bir tane monıtor objesi vs. olacak. Yani bunlar birleşerek bir tane bilgisayar objesi oluşturuyorlar. Compositionun tam olarak anlamı bu.

Örneklerle anlamaya çalışalım;

İlk olarak Anakart classımızı yaratıyoruz.

model , uretici , yuva_sayisi ve isletim_sistemi özelliklerimizi yazdık. Ardından constructorımızı oluşturduk. Getter ve setter metotlarımızı yazdık. Ve ek olarak isletim_sistemi_yukle() metodumuzu String bir parametre alacak şekilde  ekledik.

Şimdi Kasa classımızı oluşturuyoruz.

Kasa classımızın özelliklerini (model , uretici , malzeme ) yazdık. Constructorımızı oluşturduk. Getter ve setter metodlarımızı yazdık. Bu ikisini sağ tıklayıp “insert code” dediğinizde karşınıza çıkan ekranda constructor veya getter setter seçeneğine tıklayıp kısayol ile oluşturabilirsiniz. Önceki yazılarımızda bu kısayoldan bahsetmiştim. Ve ek olarak bilgisayari_ac() metodumuzu yazdık.

Şimdi Resolution classımızı oluşturuyoruz.

Resolution classımızın özelliklerini (en , boy) tanımladık. Constructorımızı ve getter setter metodlarımızı oluşturduk.

Şimdi Monitor classımızı oluşturuyoruz.

Monitor classımızın özelliklerini yazdık. model , uretici , boyut ve resolution. Özelliklerden biri Resolution classından bir obje. İşte composition aslında bu.

Şimdi Bilgisayar classımızı oluşturuyoruz.

Bilgisayar classımızın içinde Monitor classımızdan monıtor objesini , Kasa classımızından kasa objemizi ve Anakart classımızdan anakart objemizi özellik olarak tanımladık.

Şimdi bunların hepsini Main classımız içinde kullanalım.

İlk olarak Resolution objemizi oluşturduk. Şimdi resolution objemizi monıtor objemizin içine yerleştirmemiz gerekiyor. Monıtor objemizi oluştururken resolution objemizi içine yerleştirdik. Ardından kasa ve anakart objelerimizi oluşturduk. Ve en sonunda Bilgisayar objemizi yarattık ve içine monıtor , kasa ve anakartı gönderdik.

Peki Kasa classının içindeki bilgisayari_ac() metodunu kullanmak istersek ne yapmalıyız?

bilgisayari_ac metoduna erişmek için ilk olarak kasa objesine erişmemiz lazım. Yani Bilgisayar classının içindeki kasa objesine erişmemiz lazım.

Buna nasıl erişeceğiz?

Bilgisayar classının içindeki getKasa() ile erişebiliriz. getKasa yaptığımız zaman Kasa referansını bize dönüyor. Bu referans üzerinden direk bilgisayari_ac() fonksiyonunu kullanabiliriz.

İşte compositionun mantığı bu. Bizim iç içe objelerimiz var. Ve referanslar sayesinde bunlara erişebiliyoruz. Yine aynı şekilde getMonıtor() ve getAnakart() ile de diğer sınıfların içindeki metotlara erişebiliriz.

Çıktımızı yukarıdaki gibi aldık. Composition larımız içinde has a ilişkisi yani sahiplik ilişkisi var. Bilgisayar anakarta , monıtore , kasaya sahiptir. Burada inheritance kullanamazsınız. Çünkü anakart , monıtor , kasa bir bilgisayar değil. Sadece bilgisayarın bileşenleri. İnheritance ı daha önceki derslerde yapmış olduğumuz örneklerdeki gibi şirket çalışanlarında kullanabilirsiniz. Şirketteki herkes bir çalışandır ama herkesin farklı özellikleri olabilir.

Bir sonraki yazmızda encapsulation konusuna değineceğiz. Sonraki derse geçmek için tıklayınız.

 

 

 

 

 

2 YORUMLAR

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz