Java Eğitimleri 31 – Encapsulation(Kapsülleme)

Merhabalar. Bu yazımızda encapsulation yani kapsülleme işlemini anlatacağız ve avantajlarını hep birlikte bir örnek yardımıyla ele alacağız.

          Encapsulation;  bir sınıfın özelliklerini, diğer bir sınıfa gizlemek için kullanılır. Bunu sağlamak için de değişkenlerden faydalanılır: private gibi. Public ve private gibi değişkenlerin detaylarını erişim belirleyicileri konusunda öğrenmiştik. Tüm bu değişkenler aslında encapsulation işlemini de sağlamaktadır.

 

Encapsulation işlemini kullanmak bize avantaj sağlamaktadır:

  • Constructor(yapılandırıcı) kullanarak, daha önce tanımlamış olduğumuz değişkenleri unutmamızı engeller.
  • Yanlış değişken değerleri kullanmamıza izin vermez. (Örnekte ayrıntılı olarak inceleyeceğiz)
  • Değişken ismini değiştirdiğimizde, kodlarda hata yapmamızı engeller.

 

Bu avantajları bir örnek çerçevesinde inceleyelim.

Örneğin, ATM’ye para çekmek için gidiyoruz. Ancak çekmek istediğimiz tutar, ATM’deki tutardan daha fazla. Bu problemi console kısmına yazdırarak kullanıcının bilgilendirilmesini sağlamak istiyoruz.

 

Öncelikle bu işlemi public kullanarak yapacağız. Bu nedenle burada 2 sınıf kullanacağız: Banka ve Yazdir.

 

Banka sınıfındaki kodlarımız:

package Encapsulation;

public class Banka {

    
    
    public String isim;
    public int bakiye;
    public String Banka_Adi;
    public int ATM_bakiye=3000;
    
    
    public void Para_Cek(int miktar){
        
        
        if((this.bakiye-miktar) < 0){
            
            System.out.println("Yeterli Bakiyeniz Bulunmamaktadır. ");
            

        
        }else if(miktar>ATM_bakiye){
            
            System.out.println("Malesef, ATM'de Yeterli Nakit Yok.");
        }   
        
        else{
            
            this.bakiye-=miktar;
            System.out.println("Kalan Bakiyeniz : " + this.bakiye);
            
        }
        
    }
    
    
    
}

 

 

Yazdir adlı sınıftaki kodlarımız:

 

package Encapsulation;

public class Yazdir {

    public static void main(String[] args) {
        
        
        Banka b = new Banka();
        
        b.Banka_Adi = "Ziraat";
        b.isim = "Neslihan Sezer";
        b.bakiye = 3000;
        
        b.Para_Cek(3050);       
        
        
        
                
    }

}

 

Burada ATM’deki bakiyemizi 3000 TL olarak, kart bakiyemizi de 3000 TL olarak belirledik. Ancak çekmek istediğimiz para 3050 TL. Yani hem kart bakiyemizden fazla hem de ATM’deki çekilebilecek miktardan fazla. Buradaki çıktımız:

 

 

 

 

 

 

 

Eğer burada ATM bakiyesini kodlama satırında değiştirip, tekrar çalıştıracak olursak çıktımız yine aynı olacaktır.

Şimdi de aynı kodları private kullanıp oluşturalım. Yine 2 sınıf oluşturuyoruz: GelismisBanka ve Yazdir.

 

GelismisBanka adlı sınıfımız:

 

package Encapsulation;

public class GelismisBanka {

    
    private String isim;
    private String Banka_Adi;
    private int ATM_bakiye = 3000;
    private int bakiye;
    
    public GelismisBanka(String isim,String Banka_Adi,int bakiye){ //Constructor        
        
        this.isim=isim;
        this.Banka_Adi=Banka_Adi;
        
        if((this.bakiye>=0) && (this.bakiye<=ATM_bakiye)){
            
            this.bakiye=bakiye;
        }
        
    }
    
    public void Para_Cek(int miktar){
        
        
        if((this.bakiye-miktar) < 0){
            
            System.out.println("Yeterli Bakiyeniz Bulunmamaktadır. ");
            

        
        }else if(miktar>ATM_bakiye){
            
            System.out.println("Malesef, ATM'de Yeterli Nakit Yok.");
        }   
        
        else{
            
            this.bakiye-=miktar;
            System.out.println("Kalan Bakiyeniz : " + this.bakiye);
            
        }       
    }       
}

 

Yazdir adlı sınıfımız:

 

package Encapsulation;

public class Yazdir {

    public static void main(String[] args) {
        
        GelismisBanka g = new GelismisBanka("Neslihan Sezer","Ziraat Bankası",5000);
        g.Para_Cek(4000);

 

 

Bu kodlara göre ATM bakiyesini 3000 TL, kart bakiyesini 5000 TL ve çekilecek tutarı 4000 TL olarak belirlediğimizde ise çıktımız:

 

 

 

 

 

 

Çekilecek tutarı 6000 TL olarak belirlediğimizde ise çıktımız:

 

 

 

 

 

 

         

 

         Private olarak tanımladığımız değişkenlerin değerini değiştirdiğimizde, ATM bakiyesini baz alarak çıktıyı verecektir.  Ancak public olarak tanımlandığında sadece bakiyeyi baz alarak çıktı oluşturacaktır. İşte, private tanımının avantajlarından biri de budur.

         Public olarak tanımladığımız değişken isimlerini değiştirdiğimizde, tüm sınıflardaki ismini değiştirmemiz gerekir. Ancak private olarak tanımlanan değişkenlerde böyle bir zorunluluk yoktur, sadece tanımlanan sayfadaki isimlerini değiştirmek gerekir.

         Encapsulation işlemi ve avantajları bu şekilde özetlenebilir. Kısa kodlu projelerde kullanılması çok gerekmeyebilir ancak uzun kodlu işlemlerde, büyük hataları engelleyebilmektedir.

         Java ile alakalı tüm sorularınız için bana neslihannsezer@gmail.com mail adresimden ulaşabilirsiniz. İyi çalışmalar 🙂

 

Leave a comment