Java Dersleri – 22 – Encapsulation – Kapsülleme

By | 15 Eylül 2019

Encapsulation – Kapsülleme

Encapsulation yani kapsülleme konusunu anlatacağım ama konuyu aslında bir önceki dersimizde işledik. Bu derste hem bu konuya özel bir başlık ayıralım hem de daha iyi anlaşılsın diye farklı bir örnek işleyelim.
Encapsulation yani kapsülleme neden kullanılır ona cevap bulmaya çalışalım.

Örnek üzerinden anlatıma geçeyim hemen.
Örnek;

Bir kumanda düşünün genellikle en üstte kırmızı bir açma/kapama tuşu bulunur. Bu tuşa basıldığında yalnızca cihaz kapanır ya da açılır. Kanal değiştirmek ya da ses açma kapama için kullanılmaz yani.
Örneğimizi görelim sonra anlatıma devam edelim.

Main.java dosyası

public class Main {
    public static void main(String[] args) {
        KirmiziButon kirmiziButon = new KirmiziButon();
        kirmiziButon.buton = "Aç / Kapat";

        System.out.println("Gerçekleşecek İşlem : "+kirmiziButon.buton);
    }
}

KirmiziButon.java dosyası

public class KirmiziButon {
    public String buton;
}

Çıktısı;

Gerçekleşecek İşlem : Aç / Kapat

Bu örneğimizde buton field’ımız var.
KirmiziButon sınıfındaki özelliğimize erişip derğerini Aç / Kapat yaptık ve ona göre sonuç döndü.
Peki birisi gidip de Aç / Kapat yerine Kanal Değiştir yaparsa ne olacak!
buton bizim istemediğimiz bir amaç doğrultusunda çalışacak yani.

İşte bunun önüne geçmek için Kapsülleme uygulanır. Geliştirici kişi get-set ve erişim belirteçlerini kullanarak belirli şartlar altında düzenlemeye açık halde bırakır. Şimdi önceki dersimizde öğrendiğimiz get-set ve private erişim belirtecini kullanalım.

Main.java dosyası

public class Main {
    public static void main(String[] args) {
        KirmiziButon kirmiziButon = new KirmiziButon();

        kirmiziButon.getButon();
        kirmiziButon.setButon("Aç / Kapat");

        System.out.println("Gerçekleşecek İşlem : "+kirmiziButon.getButon());
    }
}

KirmiziButon.java dosyası

public class KirmiziButon {
    private String buton;

    public String getButon()
    {
        return this.buton;
    }

    public void setButon(String buton)
    {
        this.buton = buton;
    }
}

Çıktısı;

Gerçekleşecek İşlem : Aç / Kapat

N’oldu? Üstte yaptığımız kodla aynı çıktıyı verdi ama burada get-set ve erişim belirteçlerinden private’i kullandık. Bunlar sayesinde kodumuz üzerinde istediğimiz hakimiyeti sağlayabiliriz. Kırmızı Butonumuzun belirttiğimiz amaçlar dışında kullanılmasına aşağıdaki gibi yollarla engel olabiliriz.

Encapsulation / Kapsülleme Örneği

1-) set’i kaldıralım. Değerimizi önceden verelim ve yalnızca ekrana basma işlemi gerçekleşsin.

Main.java dosyası

public class Main {
    public static void main(String[] args) {
        KirmiziButon kirmiziButon = new KirmiziButon();

        kirmiziButon.getButon();

        System.out.println("Gerçekleşecek İşlem : "+kirmiziButon.getButon());
    }
}

KirmiziButon.java dosyası

public class KirmiziButon {
    private String buton;

    public String getButon()
    {
        return this.buton = "Aç / Kapat";
    }
}

çıktısı;

Gerçekleşecek İşlem : Aç / Kapat

Geliştirici kişi kodu böyle yazarak yani set’i kullanmayarak değerin değişmemesini istediğini açıkça belirtmiş. Yalnızca ekrana basma iznini veriyor.

2-) set bulunsun ama koşullu durumlar ile olayı kontrol altına alalım.

Bu yöntemde set bulunacak yani geliştirici kişi başkalarının bu değeri değiştirmesine izin verecek ama koşul koyarak bunun önüne geçecek yine.

Main.java dosyası

public class Main {
    public static void main(String[] args) {
        KirmiziButon kirmiziButon = new KirmiziButon();

        kirmiziButon.getButon();
        kirmiziButon.setButon("Kanal Değiştir");

        System.out.println("Gerçekleşecek İşlem : "+kirmiziButon.getButon());
    }
}

KirmiziButon.java dosyası

public class KirmiziButon {
    private String buton;

    public String getButon()
    {
        return this.buton;
    }

    public void setButon(String buton)
    {
        if (buton.equals("Aç / Kapat"))
        {
            this.buton = buton;
        }
        else
        {
            System.out.println("Bu buton başka bir amaç için kullanılmamalı!");
            buton = "Aç / Kapat";
            this.buton = buton;
        }
    }
}

Main.java dosyasında herhangi biri gidip set’i kendi amacı doğrultusunda Kullandı. Aç / Kapat olan görevi Kanal Değiştir olarak Değiştirdi. Bizde KirmiziButon.java dosyasında koşullu durumlarda kullanabileceğimiz if ile durumu kontrol altına aldık.
Peki durumu nasıl kontrol altına aldık ona bakalım hemen.
Biz durumu setButon içerisinde kontrol altına aldık. if (buton.equals(“Aç / Kapat”)) kısmında girilen butonun değeri Aç / Kapat ise sıkıntı yok. Her şey normal olarak çalışsın.
Ama girilen değer Aç / Kapat‘tan farklı ise (Kanal Değiştir gibi) Ekrana Bu buton başka bir amaç için kullanılmamalı! mesajı verilecek ve daha sonra girilen buton’un değeri ne olursa olsun biz bunu umursamayarak buton = “Aç / Kapat”; ile buton‘umuza kendi istediğimiz şeyi zorla dayattık. Yani kim ne değer girerse girsin bizim istediğimiz olacak 🙂

İşte Encapsulation mantığı budur. Bazı durumların bizim isteğimiz doğrultusunda gerçekleşmesini sağlamaktır aslında.

2 thoughts on “Java Dersleri – 22 – Encapsulation – Kapsülleme

  1. nyp düşkünü

    yav dehşet anlatmışsın reis harikasın.videolarda anlamadığımı okuyarak anladım burda.Allah razı olsun eyvallah

    Reply
  2. ismail

    Sahiden videolar da anlamıyorum ama sizin yazılarınızdan olayı ve mantığı çözdüm çok teşekkür ederim kral adamsın.

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir