İlginizi Çekebilir
Java Erişim Belirleyicileri
  1. Ana Sayfa
  2. Java
  3. Java’da Erişim Belirleyiciler Nedir?

Java’da Erişim Belirleyiciler Nedir?

Nesne Yönelimli Programlama konusunun ilk adımı olarak kabul edilen erişim belirleyiciler (access modifiers) konusunda derinlemesine bir rehber konusu oluşturmam gerektiğini düşünerek “Java’da Erişim Belirleyiciler Nedir?” konusunu sizlerle paylaşmak istedim.

Programlarımızdaki erişim belirleyicileri bizi güvende tutabileceği gibi yanlış kullanım sonucunda bizleri dönülmez bir yola sürükleyebileceğini unutmamalıyız. Hazırsanız, dikkat edilmesi ve öğrenilmesi oldukça önemli olan erişim belirleyicileri kavramını incelemeye ve öğrenmeye birlikte başlayalım.👨‍🎓🔎

Java’da Erişim Belirleyiciler Nedir?

Her zaman anlatımlarımda önce teorik bilgiyi daha sonra bu teorik bilgiyi aktif yaşantımız içerisinden çeşitli örnekler ile tanımlamaya özen gösterdiğim gibi bu anlatımımı da bu şekilde gerçekleştireceğim. Eğer anlatımım esnasında aklınızda bir soru işareti meydana gelirse konun alt kısımlarında yer alan “yorum yap” kısmından benimle iletişime geçebileceğiniz unutmayın.

👨🏻‍🏫 Konu işleyişini nasıl gerçekleştireceğim konusunda bir fikir verdiğime göre artık erişim belirleyicilerini öğrenmeye ve programlarımızı güvende tutmaya başlayabiliriz.

Java’da Erişim Belirleyiciler, değişken tanımlamasında, metot ve sınıf oluşturulmasında kullandığımız bir yapıdır. Erişim belirleyicileri kullanarak herhangi bir java öğesinin (sınıf, metot veya değişken gibi) kimler tarafından erişim sağlanacağını ve hangi koşullar altında kullanılabileceğini belirlememize imkan veren yapılardır.

Bu yapılarımızı yakından tanıyabilmek ve örneğimiz içerisinde kullanabilmek için isimlerini tanımaya başlayalım. Bu kavramların genel isimleri:

  • Public
  • Protected
  • Private
  • Default / Friendly (Erişim Belirleyicisiz Tanımlama)

Yapılarımızın isimlerini öğrendiğimize göre basit bir örnek üzerinden erişim belirleyicilerini daha yakından tanımaya çalışabiliriz.

😎 Çevremizdeki insanlar ile ister istemez bir iletişim kurmak isteriz. Bu kurmak istediğimiz iletişim sonucunda kişilerin sıcak kanlı, tepkisiz, soğuk kanlı bir yapıda iletişim kurduklarını ya da iletişim kurmak istemeyebileceklerini gözlemleyebiliriz. Bu kişilerden sıcak kanlı olarak tabir ettiğim kişileri “public” erişim belirleyicisi olarak tanımlayabilirim.

👦🏻💭🧑🏻 Bu kişileri ele alarak diğer erişim belirleyicileri de tanımlamaya çalışmak istiyorum. Tepkisiz olarak belirttiğim kişiler genelde arkadaş çevrelerinde etkin iletişim kurmayı, onlar ile bilgi paylaşmayı sevdikleri için bu tür kişileri de “Default / Friendly” olarak tanımlayabilirim. 👦🏻💬🧑🏻‍🤝‍🧑🏻Bu kişilere benzer özelliklerde arkadaş çevresinde etkin ve ekstra olarak arkadaş çevresinin sonucunda ortaya çıkan yeni kişiler ve oluşan yeni arkadaş grupları ile iletişim kurabilen kişiler ise “protected” erişim belirleyicisine örnektir.

🔒 Şimdi geldi olayı birde “soğuk kanlı” kişiler tarafından düşünerek ele alalım. Bu kişiler genellikle dışarıdaki kişilere güvenmediği ya da iletişim kurmayı herhangi bir sebepten dolayı reddettiği için “private” yapılara birebir örnektir. Bu kişilerin yakın arkadaş çevresi sayesinde dış dünya ile iletişim kurmaya alışabilmesi ve esneklik sağlayabilmesini ise Java’da Encapsulation (Kapsülleme) konusuna bir örnek olacaktır.

Örneğimizi oluşturduğumuza ve teorik bilgimizi verdiğimize göre artık bu dört temel yapıyı yakından incelemek ve özelliklerini tanımaya başlayabiliriz.

Java Erişim Belirleyicileri Nedir
Java’da Erişim Belirleyicileri (Access Modifiers) Nedir?

Public Erişim Seviyesi (🔊)

Ataması yapılan değişken, metot veya sınıfın program üzerinde bulunan bütün paketlere erişimi açık bir şekilde olur. Yani programın üzerindeki her alandan verilere erişim sağlanabilir, değiştirilebilir ve silinebilir. Bu yüzden global çaplı projeleri tasarlarken public erişim seviyesini kullanmaktan çekinmeliyiz.

Protected Erişim Seviyesi (🔉)

Bir sınıf üzerinde gerçekleştirdiğimiz tanımlamalar sonucunda üretilen değişkenler ve metotların kaydını yaptığımız sınıftan üretilen alt sınıflar ve yer aldığı paket üzerindeki diğer sınıflardan kullanılmasına olanak sağlayan bir erişim seviyesidir.

Default / Friendly Erişim Seviyesi (🔈)

Diğer erişim belirleyicilerinin aksine bu erişim seviyemizin bir anahtar kelimesi yoktur. Yani herhangi bir değişken tanımlamasında, metot veya sınıf oluşumunda herhangi bir erişim belirleyicisi tanımlaması yapmazsak programımız onu “default / friendly” erişim seviyesinde algılamaktadır. Bu erişim seviyesinde tanımlamalar sınıf içerisinden, dış alt sınıf oluşumlarından ve aynı paket üzerinden erişime açık olurlar.

Private Erişim Seviyesi (🔇)

Bazen güvenlik amacı ile değişkenlerimizin, metotlarımızın ve sınıf yapılarımızın içerisindeki yapıları gizlemek isteyebiliriz. Bu isteğimizi yerine getirmek için kullanacağımız private erişim belirleyicisi sayesinde sadece kullanılan sınıf içerisinde erişim sağlanabilir, kapsülleme yapılarak bazı esneklikler sağlanabileceğini unutmamalıyız. Java’da Kapsülleme konusu hakkında detaylı bir bilgi almak isterseniz daha önce paylaşımını yaptığım ilgili içeriğe göz atmanızı öneririm.

Bu yapıların kullanımını ve kod içerisindeki etkilerini gözlemleyebilmek için basit bir örnek oluşturarak konsol ekranımızda bazı değerlerin yazılmasını sağlayalım.

  1. Öncelikle erişim seviyelerinin arasındaki farkı gözlemleyebilmek adına “AccessModifiersManager” isminde bir sınıf oluşturarak işlemime başladım.
  2. Oluşturmuş olduğum sınıfta sırası ile public, protected, default/friendly ve private erişim seviyelerinde bazı metotlar ve değişkenler tanımladım. Tanımlamalar sonucunda sınıfım şu şekilde bir hâl aldı:
  3. package com.company;
    
    public class AccessModifiersManager {
    
        ///---> Public yapıda bazı tanımlamalar gerçekleştirelim. <---\\\
        public String welcomeText = "-> Merhaba,\n-> Bu örnek üzerinde Java'da Erişim Belirleyicilerini kullanarak çeşitli tanımalar gerçekleştirerek konsol ekranına yazdırmayı deneyeceğiz.";
        public int myAge = 23;
        ///---> Protected yapıda bazı tanımlamalar ve metotlar oluşturalım. <---\\\
        protected  String myName, mySurname ;
        protected  void whoAmI(String myName,String mySurname){
            this.myName = myName;
            this.mySurname = mySurname;
    
            System.out.println("------\n < Ben Kimim?> \n------\n-> İsmim: "+myName+"\n-> Soyadım: "+ mySurname +"\n-> Yaşım: "+ myAge+"\n------");
        }
        ///---> Default / Friendly yapıda bazı tanımlamalar: <---\\\
        String myWebsite = "www.emrecelen.com.tr";
        String getMyWebsite(){
            return myWebsite;
        }
        ///---> Private yapıda bazı tanımlamalar gerçekleştirelim: <---\\\
        private String myGlobalMail = "[email protected]", myPersonalMail = "[email protected]";
        private String getMailAdress (int mailType){
            /// Mail Type: [0] - Global Mail / [1] - Personal Mail
            if(mailType == 0)
                return myGlobalMail;
            else if (mailType == 1)
                return myPersonalMail;
            else
                return "Geçersiz bir mail tipi girişi gerçekleştirdiniz.";
        }
    }
    
  4. Tanımlamış olduğum bu verileri aynı paket üzerinde bulunan “Main” sınıfımda çağırabildiğim değerleri çağırarak bir ekran çıktısı almayı hedefledim. Bu işlemleri yaparken sınıfımın içeriği böyle bir hâl aldı:
  5. package com.company;
    
    public class Main {
        public static void main(String[] args) {
    
            AccessModifiersManager manager = new AccessModifiersManager();
            System.out.println("------\n"+manager.welcomeText+"\n------");
            // ---> Aynı pakette olduğumuz için protected ve default erişim seviyelerindeki tanımlamalarımıza erişim sağlayabiliyoruz.
            System.out.println("< Protected Erişim Belirleyici >");
            manager.whoAmI("Emre","Çelen");
            System.out.println("< Default / Friendly Erişim Belirleyici >\n------\n-> Web Sitem:"+manager.getMyWebsite()+"\n------");
            System.out.println("< Private Erişim Belirleyici >\n------");
            /// ---> Private erişim seviyelerine erişim sağlayamıyoruz.
    
        }
    }

Kod Çıktısı:

Java Access Modifiers Nedir
Java’da Erişim Belirleyiciler Nedir Örneği

Aynı paket üzerinde main sınıfımızda kullandığımız zaman erişebildiğimiz bilgiler yukarıdaki görseldeki gibi olacaktır. Eğer Java’da Erişim Belirleyiciler kavramını daha iyi anlayabilmek istersek gelin birde bu iki sınıfı farklı paketler üzerine taşıyarak erişebildiğimiz değerleri göreceğimiz kodun çıktısına bir göz atalım. 👀

Kod Çıktısı:

Java'da Erişim Belirleyiciler Nedir
Java Access Modifiers Nedir

Nesne Yönelimli Programlama konusunun en önemli konularından birisi olan Java’da Erişim Belirleyicileri kavramını bu sayede öğrenmiş olduk. Bu bilgilere ekstra olarak başka kaynak üzerinden de konuyu incelemek istiyorum derseniz Oracle tarafından hazırlanmış rehber konusuna buradan gidebilirsiniz.

Eğer konu ile alakalı aklınızda bir soru işareti, konuya katkı sağlayacak bir bilgi ya da önerinizi aşağıda bulunan yorum yap kısmından bana iletebileceğinizi unutmayın.

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