Bir önceki yazımız Java’da Metodları Aşırı Yükleme (Overloading) konusunda overloading işleminin nasıl yapıldığını ve neden gerekli olduğu konusunu işlemiştik. Şimdi ise Java’nın en önemli konularından biri olan erişim kontrollerine değineceğiz.
Encapsulation, yani sarmalama Java’nın en önemli konularından birisidir. Nesne Yönelimli Programlama’nın temeli olan üç başlıktan biridir aynı zamanda. Encapsulation’ı bu kadar önemli yapan şey ise kodlarımızı dilediğimiz şekilde “koruyabilmemize” olanak sağlamasıdır. Daha iyi anlamak için bir örnekle ifade edelim:
Kullandığınız bilgisayarı düşünün. Bilgisayar kasasında birçok farklı donanım bulunur. USB girişi, HDMI girişi, klavye, fare, ekran, anakart, işlemci vb. birçok donanım bir araya gelerek uyumlu bir şekilde çalışıyor. Hiçbir donanım diğerinin alanına girmiyor, yani her donanım kendine has bir şekilde “sarmalanıyor” ve böylece sorunsuz bir sistem ortaya koyuluyor. İşlemcinin yapması gereken işlere RAM’in müdahele ettiği, klavye tuşuna basıldığında farenin hareket ettiği bir bilgisayarın takdir edersiniz ki kullanılması mümkün değildir.
İşte yazdığımız programlardaki sınıfların ve metotların birbirleriyle uyumlu ve birbirlerinden ayrı olarak sarmalanmış olması gerekiyor. Yani bir metot veya sınıf sadece uygun görüldüğü şekilde kullanılabilir olmalı. Aksi halde program tehlikelere açık bir duruma düşer, dışarıdan mühadelelere maruz kalabilir. Bu sarmalama işlemi Java’da üç anahtar sözcük ile gerçekleştirilir: public, protected, private.
public Belirteci
Bir sınıfa ait metot veya değişken public olarak tanımlandığında programın herhangi bir yerinden erişilebilir olduğu anlamına geliyor. Örneğin main metodumuzu her zaman public olarak tanımlıyoruz, bunun sebebi main metodumuz her yerden erişilebilir olmalı ki program çalışabilsin.
private Belirteci
Bir sınıfa ait metot veya değişken private olarak tanımlandığında sadece kendi sınıfının üyeleri tarafından erişilebilir olmaktadır. Dışarıdan erişim hiçbir şekilde mümkün değildir.
protected Belirteci
Bir sınıfa ait metot veya değişken protected olarak tanımlandığında sınıfın bulunduğu paketten ve sınıftan türetilmiş alt sınıflardan erişilebilir olmaktadır.
default
Herhangi bir erişim belirtecinin kullanılmadığı durumda Java otomatik olarak yine sarmalama işlemini gerçekleştirir. Bu durumda bulunduğu sınıf ve paket üzerinden metot ve değişkenlere erişim sağlanabilir.
Erişim belirteçlerine dair genel tabloyu şu şekilde gösterebiliriz:
Encapsulation oldukça sık kullanacağımız bir özelliktir. Büyük projelerle uğraşırken, özellikle programımızın güvenliğini sağlamak adına encapsulation gerekiyor. Bir örnek kod parçasıyla uygulamasını yapalım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// Created by MuhammedTutar | 2015 class Kapsul{ private int x = 10; public String s = "Kod5 Java Eğitimi"; protected double y = 3.14; private void kod5(){ System.out.println("İlkay Günel"); } public Kapsul(){ System.out.println("Yapılandırıcı metot çalıştı."); } } public class Encapsulation { public static void main(String[] args) { Kapsul nesne = new Kapsul(); System.out.println(nesne.s); System.out.println(nesne.x); // Bu satır hata verecektir. System.out.println(nesne.y); nesne.kod5(); // Bu satır hata verecektir. } } |
Bu kod parçacığını çalıştırmayı denediğinizde hata alacaksınız, zira private olarak tanımlanmış bir değişken ve metodu kullanmaya çalıştık. x değişkenini ve kod5() metodunun kullanıldığı satırları yorum satırı yaptığımızda konsolda şu çıktı olacaktır:
Yapılandırıcı metot çalıştı.
Kod5 Java Eğitimi
3.14
Görüldüğü gibi protected olan y değişkenini başka bir sınıf içerisinde kullanabildik.
private Olan Bir Değişkeni Kullanma
Örneğimizde kullanamadığımız x değişkenini setX() ve getX() metotları yardımıyla kullanabiliriz. Kodu şu şekilde düzenleyerek çalıştırdığımızda ekrana x değişkeni de yazılacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Created by MuhammedTutar | 2015 class Kapsul{ private int x = 10; public String s = "Kod5 Java Eğitimi"; protected double y = 3.14; private void kod5(){ System.out.println("İlkay Günel"); } public Kapsul(){ System.out.println("Yapılandırıcı metot çalıştı."); } void setX(int i){ x = i; } int getX(){ return x; } } public class Encapsulation { public static void main(String[] args) { Kapsul nesne = new Kapsul(); System.out.println(nesne.s); System.out.println(nesne.getX()); System.out.println(nesne.y); // nesne.kod5(); } } |
Java’da erişim belirteçlerinin kullanımı temel olarak bu şekildedir. Basit örnekler üzerinde gördüğümüz için belki ne kadar önemli oldukları anlaşılmamış olabilir ancak geniş çaplı projelerde, özellikle kalıtımın olduğu yerlerde sarmalama işleminin mutlaka uygulanacağı yerler olacaktır.
Bir sonraki yazıda ise static ve final Anahtar Sözcükleri konusunu ele alacağız.
Pingback: Java'da static ve final Anahtar Sözcükleri | Kod5.org()