İlginizi Çekebilir
Java Encapsulation Kavramı
  1. Ana Sayfa
  2. Java
  3. Java Encapsulation Nedir?

Java Encapsulation Nedir?

Java Encapsulation (Kapsülleme) kavramını programlarımız üzerinde koruma ve esneklik sağlamak için kullanırız. Java Encapsulation temel olarak bir sınıfın, içerisinde bulunan metotların ve değişkenleri koruması işlemidir. Programlarımızı oluştururken bazı bilgilerin her yerden ulaşılmamasını ve değiştirilmemesini isteyebiliriz. Bu durumda bilgilerimizi bir kasa içerisinde saklamamıza olanak sağlayan Java Encapsulation Nedir sorusuna yakından bir göz atalım ve cevap arayalım.

Java OOP Kapsülleme Mantığı
Java’da Erişim Seviyeleri

Java Encapsulation Nedir?

Programlama dilleri üzerinin bir çoğunda bulunan encapsulation kavramını kapsülleme olarak da görmeniz mümkündür. Java Kapsülleme kavramı bir sınıf içerisinde bulunan metot ve değişkenlere dışarıdan erişmenin istenilmediği durumlarda kullanılan bir yöntemdir. Bu açıdan kapsülleme kavramını, veriyi güvenli bir kasa içerisinde muhafaza etme işlemi olarak tanımlamam yanlış olmayacaktır. Java Encapsulation kullanımı ile sınıf üyeleri, dışardaki sınıflardan gizlenir. Tabi bu gizlilik kavramından bahsedeceksek önceki konularda gördüğümüz görseli kullanmamız lazım. Bu görsel üzerinde verilere ulaşabilmemizin kolaylığı ve zorluğunu görüyoruz. Bu kavramları önceki konularımızda erişim belirleyiciler olarak gördük. Tabii isterseniz erişim belirleyiciler ile alakalı ekstra bir arşiv oluşturabilir ve sizlerle paylaşabilirim.

Kapsülleme kavramını teorik olarak anlamamız aslında çok zor ama bilindik bir örnek üzerinden yardım alırsak bazı şeyler şekillenmeye başlayacaktır. Bilgisayarımızı açmak için güç tuşuna basmamız gerektiğini biliyoruz fakat bilgisayar açılırken arka plan üzerinde hangi işlemleri gerçekleştirdiğini bilmiyoruz. Sadece bu işlemlerin nasıl yapılacağını bilebiliriz. Bu işleme encapsulation diyoruz.

Java OOP (Nesneye Yönelik Programlama) konusunu anlatmaya başladığımda aklımızın karışacağı birçok olay ile karşı karşıya kalacağımızı dile getirmiştim ama aklınız karışmasın. Örnekler, görseller ve sade bir anlatım ile nesneye yönelik programlamanın temelini oluşturan kapsülleme kavramını öğreneceğiz.

Java Erişim Belirleyiciler

Kapsülleme kavramını anlamlandırabilmek için önce erişim belirleyicilerin çalışma prensiplerini iyi biliyor olmamız gerekmekte. Bunun için yukardaki hazırlamış olduğum görsele ek sizlere yeni bir görsel göstermek istiyorum. Bu görsel üzerinde erişim belirleyicilerin bizlere sağlamış olduğu kolaylığı, nerelerden ulaşmamıza olanak sağladığını göreceğiz.

Java Encapsulation Nedir
Java Access Modifiers

Kullanılan erişim belirleyicilere nerelerden ulaşabileceğimizi gördüğümüze göre bu görseli teorik bir kod dizisine dökerek çalıştıralım ve ekran çıktısına göz atalım. Kod dizisini oluştururken uyguladığım adımlar şu şekildedir;

#1 Öncelikle erişim seviyelerini daha iyi anlayabilmek için main sınıfımın dışında accessModifiers isminde bir sınıf tanımlaması gerçekleştirdim.
#2 Tanımladığım bu sınıf içerisinde dört adet erişim belirleyiciyi kullanarak çeşitli değişkenler ve metotların tanımlama işlemini gerçekleştirdim.

public class accessModifiers {
    // Public Metot ve Değişken Tanımlaması:
    public String webSite = "www.emrecelen.com.tr";
    public String mySite(){
        return "Web Adresim: ";
    }
    // Protected Metot ve Değişken Tanımlaması:
    protected String myName = "Emre";
    protected  String mySurName(){
        return "Çelen";
    }
    // Default Metot ve Değişken Tanımlanması:
    String birMerhaba = "Merhaba !";
    int myAge(){
        return 23;
    }
    // Private Metot ve Değişken Tanımlası:
    private String secretMail = "[email protected]";
    private void secretMethod(){
        System.out.println("Private Metot Erişim Sağlandı.");
    }
}

#3 Oluşturmuş olduğum bu kod dizilerine main sınıfımda ulaşabilmek için nesne tanımlamasını gerçekleştirdim. Ekrana yazdırma işlemini gerçekleştirebilmek için bir şablon hazırladım ve ulaşım sağladığım verileri ekrana yazdırdım.
Kod Çıktısı:

Erişim belirleyiciler örnek kod çıktısı
Java Erişim Belirleyiciler Örneği

Hazırlamış olduğum kod içerisinde private erişim belirleyicisini kullanarak tanımladığım değişken ve metot verilerine erişim sağlayamadım. Peki kapsülleme mantığı içerisinde bu verilere daha güvenli bir şekilde saklayarak ulaşabileceğimizi söylemiştim bu işlemi nasıl yapacağız? Bu sorunun cevabını ise sizlere bir aşağı başlıkta vereceğim.

Getter ve Setter Metotlar

Java Encapsulation kavramı ile ayrılmaz bir ikili konumunda olan getter ve setter metotlar oldukça önemli bir konudur. Erişim belirleyiciler başlığı altında oluşturmuş olduğum tabloda ve örnek üzerinde private olarak tanımladığımız elemanlara, başka bir sınıf üzerinde erişim sağlayamayacağımızı anlatmıştım. Java’da bu gizli olarak tuttuğumuz bu bilgilere ulaşabilmemiz için C# dilinde get-set olarak bilinen metotları kullanacağız.

Bir nevi anahtar görevi gören bu metotlar sayesinde private olarak tanımlı elemanlar okunabilir veya içerisindeki değerleri değiştirebiliriz. Bu verileri okuyabilmek için getter, içerisindeki verileri değiştirmek için setter metotlarını kullanırız.

Getter ve Setter kavramını daha iyi anlayabilmek için örnek bir veri tabanı giriş bilgilerini tutacak private bir sınıfımızdaki verileri kontrol ederek giriş yapmamıza imkan sağlayacak bir giriş uygulaması oluşturalım. Bu örnek için uygulayacağım adımlar şu şekildedir;
#1 Öncelikle veri tabanı ile bağlantı kurmamı sağlayacak temel bilgileri tutacak dataBaseManager sınıfında private eleman tanımlamaları gerçekleştirdim.
#2 Giriş başarılı olursa bir bilgi mesajı göstermek için dbLog() isimli bir metot tanımlaması gerçekleştirdim. Bu metot içerisinde anlık tarihi kullanabilmek için java.time.LocalDate sınıfını ve java.time.format.DateTimeFormatter sınıfını import ettim.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class dataBaseManager {
    // İşlem Tarihi Almak İçin Calendar Sınıf tanımlaması:
    LocalDate localDate =  LocalDate.now();
    // Private Eleman Tanımlamaları:
    private String dbName = "root", dbPass="root123";
    private String userName;

    protected void dbLog(){
        System.out.println("-----------------------\nOturum Başarılı Şekilde Açıldı.\nİşlemi Gerçekleştiren: "+userName);
        System.out.println("İşlem Tarihi: "+ DateTimeFormatter.ofPattern("dd/MM/yyyy").format(localDate)+"\n-----------------------");
    }
    // Private Elemanlarda Verilere Erişim:
    public String getDbName() {
        return dbName;
    }
    public String getDbPass() {
        return dbPass;
    }
    // Private Elemanlardaki Verileri Değiştirme:
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

#3 Bu işlemler sonunda main klasörüme girerek gerekli giriş bilgilerini kullanıcıdan alacak bir şablon hazırladım.
#4 Aldığım verileri kontrol edebilmek için if-else yapısına soktum ve eğer bilgiler eşleşiyor ise ekrana dbLog() metodunu yazdırdım ve programımı sonlandırdım.

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        // Ekrana Yazdırma Sınıfını Tanımlama:
        Scanner scanner = new Scanner(System.in);
        // dataBaseManager Sınıfının Tanımlanması:
        dataBaseManager dataBaseManager = new dataBaseManager();
        // Değişken Tanımlaması:
        String kullaniciAdi,dbName,dbPass;
        // Ekrana Yazdırma İşlemleri:
        System.out.print("Merhaba!\nLütfen Kullanıcı Adını Girin: ");
        kullaniciAdi = scanner.nextLine();
        System.out.print("-----------------------\n-> Database İsmini Girin: ");
        dbName = scanner.nextLine();
        System.out.print("-> Database Şifresini Girin: ");
        dbPass = scanner.nextLine();
        if(dataBaseManager.getDbName().equals(dbName) && dataBaseManager.getDbPass().equals(dbPass)){
            dataBaseManager.setUserName(kullaniciAdi);
            dataBaseManager.dbLog();
        }
        else{
            System.out.print("\n-----------------------\n-> Hatalı Giriş Gerçekleştirdiniz.\n-----------------------");
        }
    }
}

Kod Çıktısı:

Java Encapsulation Get ve Set Metotları
Java Encapsulation Nedir – Get ve Set Kullanımı

Java Encapsulation nedir sorusunu teorik bilgi ve çeşitli örnekler göstermiş olsam bile farklı bir kaynaktan kapsülleme konusuna göz atmak isterseniz Oracle tarafından hazırlanmış ilgili rehber içeriğe buradan göz atabilirsiniz.. Önemli bilgilerimizi bir kasa içerisinde tutarak kullanmak istediğimiz yerde görüntülemek veya içerisindeki veriyi değiştirmek için getter ve setter metotlarını kullanıyoruz. İlerleyen örneklerimizde ve konularımızda Java Encapsulation kavramını sıklıkla kullanacağız o yüzden aklınıza takılan soru veya konu anlatımı hakkında bir öneriniz var ise benimle aşağıda “yorum yap” kısmında iletişime geçebilirsiniz.

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap