Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Hassas 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 password alanı (String)
    • Kabul edilebilir minimum şifre uzunluğunu tanımlayan özel (private) bir minLength alanı (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 ve true döndürün; çok kısaysa, şifreyi değiştirmeyin ve false dö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 takdirde false döndüren bir checkPassword(String attempt) yöntemi
    • Mevcut şifrenin uzunluğunu (veya şifre ayarlanmamışsa 0) döndüren bir alıcı (getter) getLength()
  • 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: true veya Set: false (şifreyi ayarlamanın sonucu)
    • Masked: ****** (şifrenin maskelenmiş versiyonu)
    • Match: true veya Match: 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 verildi

Bilgi 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")
        
    }
}
quiz iconKendini test et

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