Java OOP günlükleri - 2 Get ve Set metodları ve Encapsulation(kapsülleme)

Bir çok dili temel ve orta seviyede biliyorum. Java da temel bildiğim dillerden bir tanesi. Java'yı yıllardır bilmeme rağmen OOP konusunda takılıp/kendimi çok geliştirmeden kaldım. Bu blog'da bildiğim ve yeni öğrendiğim şeyleri kodları ile beraber sizlerle paylaşacağım.
Bundan önceki yazımda OOP'ye giriş yapmıştım.

Bundan önceki yazımda bahsettiğim gibi bir sınıf içerisinde fonksiyon veya değişken tanımlayabiliyorduk. Bu yazımda ise fonksiyonlarla değişkenleri ayarlama ve bunun öneminden bahsedeceğim. Nedir bu Get ve Set metodları?

Get(getter) Set(setter) metodları "Hello World!" gibi klasikleşmiş bir, fonksiyon üzerinden değişkene ulaşma/değiştirme metodudur.

Genelde Get metodu bir parametre almazken, Set metodu parametre alır. Yapısı da genel olarak şu biçimdedir.

Java:
class sayı{

    int degisken;

    int setDegisken(int degisken){
    
    this.degisken = degisken;
    
    }
    int getDegisken(){
    
        return degisken;
    }


}

Bundan önceki yazımda ali ve fatma'dan bahsetmiştim. Bu kodu get ve set metodları ile nasıl yapabileceğimizi anlatayım.

Bundan önceki kod;

Java:
class insan{

    int boy;
    int kilo;
    String isim;

}
public class Furkaninkosesi {
public static void main(String[] args) {

  insan ali = new insan();
  insan fatma = new insan();

  ali.boy = 175;
  fatma.boy = 170;

  System.out.println(ali.boy);
  System.out.println(fatma.boy);

}
}

Bu kodu çalıştırdığınız zaman175 ve 170 çıktılarını verir

Bu kodu:

Java:
class insan{

    int boy;
    int kilo;
    String isim;


    public void setBoy(int boy) {
        this.boy = boy;
    }
    public int getBoy() {
        return boy;
    }
}
public class Furkaninkosesi {
public static void main(String[] args) {

  insan ali = new insan();
  insan fatma = new insan();

  ali.setBoy(175);
  fatma.setBoy(170);

  System.out.println(ali.getBoy());
  System.out.println(fatma.getBoy());

}
}

Bu şekilde çalıştırırsanız da 175 ve 170 çıktılarını verir.

Peki neden get ve set metodlarını kullanıyoruz? Neden değişkenlere direkt olarak erişmiyoruz? Cevabı Encapsulation(kapsülleme). Kapsülleme değişkenin her kullanıcının elinden geçip kontrolsüz değiştirmesini önler. Burada işin içine erişim belirleyiciler giriyor.


1595897162511.png



Bir sınıf içerisindeki bir değişkeni "private" yaparak ona başka bir sınıftan erişilmemesini sağlayabilirsiniz. Örnek:

Java:
class insan{

    private int boy;
    private int kilo;
    private String isim;

}
public class Furkaninkosesi {
public static void main(String[] args) {

  insan ali = new insan();

  ali.boy(175);

  System.out.println(ali.boy());

}
}

Program çıktı olarak hata verdi. Çünkü boy değişkeni private olarak tanımlanmış. Bu değişkene dışarıdan ana sınıftan erişilemez.

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The method boy(int) is undefined for the type insan
The method boy() is undefined for the type insan

at Furkaninkosesi.main(Furkaninkosesi.java:13)


Peki bu private olayı ile get ve set metodları ne alaka?

Get ve set metodları private değişkenleri değiştirmek için kullanılır. Private olarak tanımlanmış değişkenlere aynı sınıf içinden erişebiliriz. get ve set metodları private olarak tanımlanmış değişkenin bulunduğu sınıf içinde tanımlandığından, değişkene erişebilir ve düzenleyebilir. Biz de bu fonksiyonları kullanarak değişkenlere erişiriz.

Örnek:

Java:
class insan{

    private int boy; //boy değişkenine sadece bu sınıf içerisinden erişebiliriz
    private int kilo; //kilo değişkenine sadece bu sınıf içerisinden erişebiliriz
    private String isim; //isim değişkenine sadece bu sınıf içerisinden erişebiliriz


    public void setBoy(int boy) {
        this.boy = boy; //boy değişkenini içine girilen parametre ile kaydeder.
    }
    public int getBoy() {
        return boy; //boy değişkenine diğer sınıflardan erişilemediği için boy değişkenin tuttuğu veriyi okumak için kullanılır.
    }
}
public class Furkaninkosesi {
public static void main(String[] args) {

  insan ali = new insan();
  insan fatma = new insan();

  ali.setBoy(175);
  fatma.setBoy(170);

  System.out.println(ali.getBoy());
  System.out.println(fatma.getBoy());

}
}

Bu kodu çalıştırdığınız zaman175 ve 170 çıktılarını verir.

Hadi birazcık güvenliği arttıralım. Kullanıcılar kafalarına göre veri giremesin. Diyelim ki bir insanın boyu 300 cm den büyük olamaz. Fonksiyon içinde bir if/else bloğu açarak bu güvenliği sağlayabiliriz.

Örnek:

Java:
class insan{

    private int boy;
    private int kilo;
    private String isim;


    public void setBoy(int boy) {
    
        if(boy >=300 || boy <= 0) {
            System.out.println("Bir insanın boyu 300'den büyük 0 dan küçük olamaz");
        }
        else {
            this.boy = boy;
        }
    
    
    
    }
    public int getBoy() {
        return boy;
    }
}
public class Furkaninkosesi {
public static void main(String[] args) {

  insan ali = new insan();
  insan fatma = new insan();

  ali.setBoy(500);
  fatma.setBoy(170);

  System.out.println(ali.getBoy());
  System.out.println(fatma.getBoy());

}
}

Program çalıştırıldığı zaman sıra ile Bir insanın boyu 300'den büyük 0 dan küçük olamaz0170 çıktısını verir.

Çıktılardan birinin "0" olmasının nedeni değişkenler tanımlandığı zaman varsayılan olarak "0" değerini alır.

Bu yazımın da sonuna geldim. Araştırmaya kendimi geliştirmeye devam edeceğim. Öğrendiğim bilgileri buraya yazacağım.
  • 1_CVpIFxOrnDsGwwaOKcKw_A.png
    1_CVpIFxOrnDsGwwaOKcKw_A.png
    18,5 KB · Görüntüleme: 119
Yazar hakkında
Furkaninkosesi
Bilgisayar ile 2 yazılım ile 10 yaşında tanışan biri.

Yorumlar


Blog girdisi detayları

Ekleyen
Furkaninkosesi
Okuma süresi
3 dakika okuma
Görüntüleme
630
Yorumlar
1
Son güncelleme

Yazılım kategorisindeki diğer girdiler

Furkaninkosesi adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı