Bilgi Gizleme
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 12 / 87.
Bilgi gizleme, bir nesnenin dahili verilerine doğrudan erişimi kısıtlama ilkesidir. private alanları getter ve setter'lar ile birleştirerek, nesnenizin durumu etrafında koruyucu bir bariyer oluşturursunuz.
Bilgi gizleme (information hiding) olmadan neler olacağını düşünün:
public class Temperature {
public double celsius; // Doğrudan açığa çıkarılmış
}
// Herkes geçersiz değerler atayabilir
Temperature t = new Temperature();
t.celsius = -500; // Mutlak sıfırın altında - imkansız!Bilgi gizleme ile, verilerin nasıl erişildiğini ve değiştirildiğini kontrol edersiniz:
public class Temperature {
private double celsius;
public void setCelsius(double celsius) {
if (celsius >= -273.15) {
this.celsius = celsius;
}
}
public double getCelsius() {
return celsius;
}
}Artık geçersiz sıcaklıklar otomatik olarak reddedilir. Dahili temsil gizlidir - sınıfı kullanan kodu etkilemeden daha sonra sıcaklığın dahili olarak nasıl saklandığını (belki Kelvin'e) değiştirebilirsiniz.
Bu yaklaşım üç temel avantaj sunar: doğrulama veri bütünlüğünü sağlar, esneklik dış kodu bozmadan dahili değişikliklere izin verir ve kontrol verileriniz üzerinde tam olarak hangi işlemlere izin verileceğine karar vermenizi sağlar.
Görev
KolayHassas verileri koruyarak ve kontrollü erişim yoluyla güvenlik kurallarını uygulayarak bilgi gizlemeyi (information hiding) gösteren bir Password yönetim sınıfı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Password.java: Dahili verilerini gizleyen ve şifrelerin nasıl ayarlanacağını ve bunlara nasıl erişileceğini kontrol eden bir Password sınıfı oluşturun:- Gerçek şifreyi saklayan özel (private) bir
passwordalanı (String) - Kabul edilebilir minimum şifre uzunluğunu tanımlayan özel (private) bir
minLengthalanı (int) - Minimum uzunluk gereksinimini alan bir yapıcı (constructor)
- Yalnızca minimum uzunluk gereksinimini karşılayan şifreleri kabul eden bir ayarlayıcı (setter)
setPassword(String password). Geçerliyse, şifreyi saklayın vetruedöndürün; çok kısaysa, şifreyi değiştirmeyin vefalsedöndürün - Tüm karakterleri yıldız işareti (
*) ile değiştirilmiş şifreyi döndüren bir alıcı (getter)getMaskedPassword()- gerçek şifreyi asla ifşa etmeyin! - Deneme, saklanan şifreyle eşleşirse
true, aksi takdirdefalsedöndüren bircheckPassword(String attempt)yöntemi - Mevcut şifrenin uzunluğunu (veya şifre ayarlanmamışsa 0) döndüren bir alıcı (getter)
getLength()
- Gerçek şifreyi saklayan özel (private) bir
Main.java: Minimum uzunluğu 6 olan bir Password nesnesi oluşturun, ardından iki girdi okuyun: ayarlanacak bir şifre ve kontrol edilecek bir deneme. Üç satır yazdırın:Set: trueveyaSet: false(şifreyi ayarlamanın sonucu)Masked: ******(şifrenin maskelenmiş versiyonu)Match: trueveyaMatch: false(denemeyi kontrol etmenin sonucu)
İki girdi alacaksınız: ayarlanacak şifre ve kontrol edilecek şifre denemesi.
Gerçek şifreye sınıf dışından asla doğrudan erişilemediğine dikkat edin - bu, iş başındaki bilgi gizlemedir. Sınıf, tam olarak hangi bilgilerin ifşa edileceğini ve şifrenin nasıl değiştirilebileceğini kontrol eder.
Kopya kağıdı
Bilgi gizleme (information hiding), private alanları getter ve setter metotlarıyla birlikte kullanarak bir nesnenin dahili verilerine doğrudan erişimi kısıtlar.
Bilgi gizleme olmadan, alanlar dışarıya açıktır ve geçersiz değerlere ayarlanabilir:
public class Temperature {
public double celsius; // Doğrudan dışarıya açık
}
Temperature t = new Temperature();
t.celsius = -500; // Geçersiz değere izin verildiBilgi gizleme ile erişimi kontrol eder ve verileri doğrularsınız:
public class Temperature {
private double celsius;
public void setCelsius(double celsius) {
if (celsius >= -273.15) {
this.celsius = celsius;
}
}
public double getCelsius() {
return celsius;
}
}Bilgi gizlemenin temel faydaları:
- Doğrulama (Validation): Geçersiz değerleri reddederek veri bütünlüğünü sağlar
- Esneklik (Flexibility): Dış kodu etkilemeden dahili değişiklikler yapılmasına olanak tanır
- Kontrol (Control): Verileriniz üzerinde hangi işlemlere izin verileceğine karar vermenizi sağlar
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ayarlanacak şifreyi oku
String passwordToSet = scanner.nextLine();
// Kontrol edilecek şifre denemesini oku
String passwordAttempt = scanner.nextLine();
// TODO: Minimum uzunluğu 6 olan bir Password nesnesi oluşturun
// TODO: Şifreyi ayarlayın ve sonucu yazdırın ("Set: true" veya "Set: false")
// TODO: Maskelenmiş şifreyi yazdırın ("Masked: ******")
// TODO: Şifre denemesini kontrol edin ve sonucu yazdırın ("Match: true" veya "Match: false")
}
}
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ı