Anotasyon

Java Encapsulation

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize Java Nesne Yönelimli Programlama başlığı altında Java Encapsulation konusunu ele alarak devam ediyoruz.

Java Encapsulation

Encapsulation kelimesinin Türkçe yazılım dilinde karşılığı, Kapsülleme veya Sarmalama olarak belirtilebilir. Java Encapsulation aslında java sınıfı içerisinde tanımladığımız değişkenlerimizi korumak veya saklamak anlamanına gelmektedir. Tanımladığımız bir sınıf içerisindeki değişkenin direk olarak değiştirilememesi, bunun yerine bizim izin verdiğimiz ölçüde, metotlar aracılığıyla değiştirilmesi gerekmektedir. Bir değişkene sadece okuma yetkisi verebilir, sadece yazma yetkisi verebilir veya hem okuma hem yazma yetkisi verebiliriz. Elbetteki bu yetkileri Temel Java Derslerimizde bahsetmiş olduğumuz Erişim Belirleyiciler aracılığı ile verebiliriz.

Ufak bir örnek üzerinden devam edelim;

/**
 * Encapsulation olmadan oluşturulan bir değişken ve kullanımı
 **/

public class EncapsulationDemo1 {
  public static void main(String[] args) {
    EncapsulationDemo ed = new EncapsulationDemo();
    ed.ad = "mobilhanem";
  }
}

class EncapsulationDemo {
  public String ad;
}

Yukarıda ki örnekte görüleceği üzere encapsulation yapısından faydalanılmamış, bu sebeple EncapsulationDemo sınıfı içerisinde tanımlanan ad değişkeni kontrolden uzak kalmıştır. EncapsulationDemo sınıfından nesne üreten tüm kullanıcılar ad değişkenini istedikleri gibi kullanacaklar, ayrıca ad değişkenine değer verirken karışıklık yaşayacaklardır. Bu gibi durumların önüne geçilmesi için Java Encapsulation yapısından faydalanılmalıdır.

/**
 * Encapsulation kullanılarak oluşturulan bir değişken ve kullanımı
 **/
public class EncapsulationDemo2 {
  public static void main(String[] args) {
    EncapsulationDemo ed = new EncapsulationDemo();
    ed.setAd("mobilhanem");
    System.out.println(ed.getAd());
  }
}

class EncapsulationDemo {
  private String ad;
    public void setAd(String ad) {
      this.ad = ad;	
    }
    public String getAd() {
      return ad;	
    }
}

İkinci örnekte rahatlıkla görebileceğiniz gibi ad değişkeni private olarak tanımlandığı için direk olarak değiştirilemez. Bunun yerine public erişim belirtecine sahip getter ve setter metotları aracılığı ile değiştirilip kullanılabilir. Bu da bizim veri güncellerken veya kullanırken yaşanabilecek karışıklıkların önüne geçmemizi sağlar.

Bunların yanı sıra kullanıcıların ad değişkenine ait değeri değiştirmesini istemediğimiz takdirde, public void setAd(String ad) şeklinde tanımladığımız metodumuzun erişim belirtecini private olarak değiştirdiğimizde artık ad değişkeni kullanıcılar için sadece-okuma (read-only) yetkisine sahip oldukları bir değişken olacaktır. Bu şekilde erişim belirteçlerini değiştirerek sınıflar içerisinde değişkenlerimizi okuma-yazma (read-write), sadece okuma (read-only), sadece yazma (write-only) şeklinde yetkilendirebiliriz.

 Java Encapsulation ile yazılan kodların bakımı çok daha kolay hale gelecektir. Örnek vermek gerekirse bir class yazdınız. Sadece o class’ın içinde kullandığınız bir değişkeni ve ya metodu public yaptınız. Bu metoda ve ya değişkene başka class’lardan rahatça erişilecek. Bu class’ı tekrar güncellerken public metod ve değişkenimizi istediğimiz gibi değiştiremeyiz. Çünkü başka class’lardan bu değişkene ve ya metoda erişilmiş olabilir. Dolayısıyla en baştan kodumuzu yazarken Class’ın içindeki değişken ve ya metodumuzu private (Encapsulation yaparak) tutarak ilerleyen zamanlarda ki değişikliklerde daha rahat olalım.

Sonuç

Java Encapsulation yapısından faydalanılarak yazılan kodlar bakımı daha kolay, değiştirmeye ve geliştirmeye daha açık ve daha esnek hale gelmektedir. Java ile bir proje geliştirirken Nesne Yönelimli Programlama yapılarına dikkat edilmeli ve bu dersimizde öğrendiğimiz Java Encapsulation yapısından her zaman faydalanılmalıdır.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Java Dersleri için tıklayınız..

161

Eren Başaran

Software Developer
Mobilhanem Yazarı

4 Yorum

  • Merhaba, konu anlatımı için teşekkür ederim.Sade ve açıklayıcılığı net olmuş.Küçük bir sorum olucaktı.

    public void getAd(String ad) –> burdaki public belirtecini private yaptığımızda bu sefer ad değişkeninin sadece yazma yetkisini kullanabiliyoruz dimi.Çünkü private yaptığımız için değeri okuyamıyoruz başka classlardan.

    • Yorumun için teşekkürler.

      public void setAd(String ad);

      Bu kod ilgili değişkenin değerini belirtmek için kullanılır yani senin bahsettiğin şekliyle yazma izni vermiş oluruz.

      public String getAd();

      Bu kod ilgili değişkenin değerini almak için kullanılır yani senin bahsettiğin şekliyle okuma izni vermiş oluruz.

      Bu metotlardan birini private olarak tanımladığımızda farklı sınıflardan okuma veya yazma iznini iptal etmiş oluruz. Daha detaylı bilgi için Erişim Belirleyiciler dersini inceleyebilirsin.

  • Bugün harika bir site keşfettim. Anlatım çok güzel. Çok teşekkür ederim müdavim kazandınız 🙂

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?