Ana Sayfa Programlama Dilleri Java Java’da Encapsulation

Java’da Encapsulation

1679
görünümler

Encapsulation Nedir?

Bir sınıfın özelliklerini başka bir sınıftan gizlemektir. Bunun için ne yapıyorduk sınıfın özelliklerini public yapmak yerine private yapıyorduk. Bu genel anlamda encapsulation un özeti diyebiliriz. Yani başka bir sınıfa kendi sınıfımızdaki özellikleri kapsüllüyoruz.

Encapsulation’ın bizim için 3 faydası var. Örnekler ile bunu öğrenmeye çalışalım.

İlk olarak özelliklerimizi tanımladık. Ancak bu sefer özelliklerimizi private değilde public olarak tanımladık. Bütün özellikleri public yaparak encapsulation a  aykırı bir durum yapmış olduk.

Ardından dogalgaz_kullan() metodumuzu oluşturduk. Miktar eğer bakiyemizden daha yüksek ise yeterli bakiye yok uyarısını verdik. Yeterli bakiyemiz var ise else durumuna girdik ve bakiyemizi azalttık. Ve diğer koşulları kontrol ettirdik.

Bir metot daha yazdık. bakiye_ogren() şeklinde.

Dikkat ederseniz constructor oluşturmadık. Constructor kullanmadan örneği daha iyi anlayacağız.

Şimdi main clasımıza geliyoruz.

Abone objemizi oluşturduk. Ve biz constructor oluşturmadığımız için java otomatik olarak bir constructor oluşturdu. isim , bakiye ve sehir özelliklerine değerlerimizi girdik ve dogalgaz_kullan() metodumuzu çağırdık. Ekran çıktısı “Bakiyeniz bitmiştir.Kredi yükleyiniz. Kredi Limiti:150 TL” olarak çıktı karşımıza.

Kodumuzun çalışmasında herhangi bir sorun yok gibi gözüküyor. Çalışıyor fakat biz encapsulation kullanmadığımız için 3 tane dezavantajımız bulunuyor.

Birinci Dezavantaj

Bakiye özelliğine direk olarak ulaşabildiğimiz için saçma bir değer verdik. Kredi limitine 150 TL demiştik. Yani en fazla 150 yazabilmemiz gerekirken biz 200 değerini verebildik. Bu özelliği public yerine private olarak belirtseydik direk ulaşamayacağımız için saçma bir değer verme şansımız ortadan kalkacaktı. Bu ilk dezavantajı.

İkinci Dezavantaj

Abone classımız içinde 3 tane özellik tanımladık. Ancak bizim 20 tane özelliğimiz olsaydı ve bir tanesinin değerini başlatmayı unutsaydık böyle bir durumda ne olacaktı? O zaman classımızda belli yerler yanlış çalışacaktı. Tek tek değer vererek birini unutma ihtimalimiz yüksek. Eğer bir constructor şeklinde yapsaydık hiçbir değeri unutmayacaktık. Birini unuttuğumuz zaman kodun bir yerinin çalışmama ihtimali olacaktı. Bu da 2. dezavantajı.

Üçüncü Dezavantaj

Abone classında tanımladığımız herhangi bir özelliğin adını değiştirdiğimizi düşünelim. Böyle bir durumda o özelliğin kullanıldığı main classında böyle bir özellik tanımlanamadı şeklinde uyarı ile karşılaşacaktık. Diyelim onu da düzelttik. Fakat bizim Abone classımızı bir çok class bir çok java programı kullansaydı böyle bir durumda tüm özellikleri tek tek düzeltecek miydik? İşte burda da 3. dezavantaj ortaya çıkıyor.

Şimdi yenidenen capsulation kurallarına uyarak bir Abone classını yazacağız.

Bu sefer özelliklerimizi private olarak tanımladık. Constructor ımızı yazdık. Ve diğer Abone classında yazmış olduğumuz aynı metotları ekledik. Classımız bu hali ile encapsulation kurallarına uyuyor. Şimdi main classımıza gidelim ve;

Yukarıda yazmış olduğumuz 3 tane dezavantajı yok etmeye çalışalım.

Bu classın herhangi bir özelliğine değer vermeden geçemeyiz. Çünkü constructora değer atamamız gerekiyor. Aşağıdaki gibi yaptığımız zaman java bize uyarı veriyor.

Değer vermeden devam edemiyoruz. Bir tane dezavantajdan bu sayede kurtulmuş oluyoruz.

Diğer bir dezavantajda saçma bir değer verebiliyorduk. Çünkü özellik public olduğu için direk erişebiliyorduk. EncAbone classını yaratırken özelliği hem private yaptık hem de 150 ye sabitledik.

Diğer bir dezavantajdan böylece kurtulmuş olduk.

Son dezavantajımız ise bir özelliğin adını değiştirdiğimizde ortaya çıkıyordu. Fakat biz EncAbone classımızda bir özelliğin adını değiştirdiğimizde sadece o classın içindeki özelliklerin adını değiştirmemiz yeterli. Diğer classlardakini değiştirmemize gerek kalmıyor. Son dezavantımızı da bu sayede yok etmiş oluyoruz.

Bir sonraki yazımızda polymorphism 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