Getter ve Setter Metotları
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 11 / 87.
Getter ve setter'lar, özel alanlara (private fields) kontrollü erişim sağlayan metotlardır. Bir getter bir alanın değerini alırken, bir setter onu değiştirir.
Adlandırma kuralı standart bir kalıbı takip eder: get veya set öneki ve ardından ilk harfi büyük yazılmış alan adı.
public class Product {
private String name;
private double price;
// name için Getter
public String getName() {
return name;
}
// name için Setter
public void setName(String name) {
this.name = name;
}
// price için Getter
public double getPrice() {
return price;
}
// Doğrulamalı Setter
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Setter'ların gerçek gücü, doğrulama mantığı ekleme yeteneğidir. Yukarıdaki örnekte, setPrice yalnızca negatif olmayan değerleri kabul ederek nesneyi geçersiz verilerden korur.
boolean alanlar için, getter'lar genellikle get yerine is önekini kullanır:
private boolean active;
public boolean isActive() {
return active;
}Sadece bir getter sağlayarak salt okunur alanlar veya sadece bir setter sağlayarak sadece yazılabilir alanlar da oluşturabilirsiniz. Bu, harici kodun nesnenizin verileriyle nasıl etkileşime gireceği üzerinde size hassas bir kontrol sağlar.
Görev
KolayDoğrulama mantığına sahip getter ve setter metotlarının gücünü gösteren bir Temperature dönüştürücü oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Temperature.java: Celsius cinsinden bir sıcaklık değerini saklayan bir Temperature sınıfı tanımlayın. Sınıf şunlara sahip olmalıdır:- Özel (private) bir
celsiusalanı (double) - Sıcaklığın fiziksel olarak mümkün olup olmadığını takip eden özel (private) bir
validalanı (boolean) - Celsius değerini döndüren bir getter
getCelsius() - Yalnızca mutlak sıfır (-273.15) veya üzerindeki değerleri kabul eden bir setter
setCelsius(). Eğer değer geçerliyse,validdeğerini true olarak ayarlayın; aksi takdirde celsius değerini değiştirmeyin vevaliddeğerini false olarak ayarlayın - Boolean alanı için bir getter
isValid()(unutmayın: boolean getter'larisönekini kullanır) - Şu formülü kullanarak sıcaklığı Fahrenheit'a dönüştüren ve döndüren bir getter
getFahrenheit():(celsius * 9/5) + 32
- Özel (private) bir
Main.java: Bir Temperature nesnesi oluşturun, girdi olarak bir celsius değeri okuyun, bunu ayarlamak için setter'ı kullanın, ardından sıcaklığın geçerli olup olmadığını ve Fahrenheit karşılığını yazdırın. Çıktınızı iki satır olarak biçimlendirin:Valid: trueveyaValid: falseFahrenheit: X.X(bir ondalık basamak göstererek)
Bir girdi alacaksınız: Celsius cinsinden bir sıcaklığı temsil eden double bir değer.
Fahrenheit çıktısını bir ondalık basamağa biçimlendirmek için String.format("%.1f", value) kullanabilirsiniz.
Kopya kağıdı
Getter ve setter'lar, özel (private) alanlara kontrollü erişim sağlayan metotlardır. Bir getter bir alanın değerini alırken, bir setter bu değeri değiştirir.
İsimlendirme kuralı standart bir kalıbı takip eder: get veya set öneki ve ardından ilk harfi büyük yazılmış alan adı gelir.
public class Product {
private String name;
private double price;
// name için Getter
public String getName() {
return name;
}
// name için Setter
public void setName(String name) {
this.name = name;
}
// price için Getter
public double getPrice() {
return price;
}
// Doğrulama içeren Setter
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Setter'lar, nesneleri geçersiz verilerden korumak için doğrulama mantığı içerebilir. Yukarıdaki örnekte, setPrice yalnızca negatif olmayan değerleri kabul eder.
boolean alanlar için getter'lar, get yerine is önekini kullanır:
private boolean active;
public boolean isActive() {
return active;
}Sadece bir getter sağlayarak salt okunur (read-only) alanlar veya sadece bir setter sağlayarak salt yazılır (write-only) alanlar oluşturabilirsiniz.
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: Bir Temperature nesnesi oluşturun
// TODO: Celsius değerini ayarlamak için setter metodunu kullanın
// TODO: Sıcaklığın geçerli olup olmadığını yazdırın (format: "Valid: true" veya "Valid: false")
// TODO: Fahrenheit karşılığını yazdırın (format: "Fahrenheit: X.X")
// İpucu: Bir ondalık basamak için String.format("%.1f", value) kullanın
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı