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 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 zaman
175
ve 170
çıktılarını verirBu 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.
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)
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 zaman
175
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 olamaz
0
170
çı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.