Menu
Coddy logo textTech

Ukrywanie informacji

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 12 z 87.

Ukrywanie informacji to zasada ograniczania bezpośredniego dostępu do wewnętrznych danych obiektu. Łącząc pola private z metodami pobierającymi i ustawiającymi, tworzysz barierę ochronną wokół stanu obiektu.

Zastanów się, co się dzieje bez ukrywania informacji:

public class Temperature {
    public double celsius;  // Bezpośrednio dostępne
}

// Każdy może ustawić nieprawidłowe wartości
Temperature t = new Temperature();
t.celsius = -500;  // Poniżej zera absolutnego – niemożliwe!

Dzięki ukrywaniu informacji kontrolujesz sposób uzyskiwania dostępu do danych i ich modyfikowania:

public class Temperature {
    private double celsius;
    
    public void setCelsius(double celsius) {
        if (celsius >= -273.15) {
            this.celsius = celsius;
        }
    }
    
    public double getCelsius() {
        return celsius;
    }
}

Nieprawidłowe temperatury są teraz automatycznie odrzucane. Reprezentacja wewnętrzna jest ukryta — możesz później zmienić sposób przechowywania temperatury wewnętrznie (na przykład na kelwiny), nie wpływając na kod korzystający z tej klasy.

To podejście oferuje trzy kluczowe korzyści: walidacja zapewnia integralność danych, elastyczność pozwala wprowadzać wewnętrzne zmiany bez psucia zewnętrznego kodu, a kontrola umożliwia dokładne określenie, jakie operacje na danych są dozwolone.

challenge icon

Wyzwanie

Łatwy

Utwórzmy klasę do zarządzania Password, która demonstruje ukrywanie informacji przez ochronę wrażliwych danych i egzekwowanie zasad bezpieczeństwa za pomocą kontrolowanego dostępu.

Utworzysz dwa pliki, aby uporządkować swój kod:

  • Password.java: Utwórz klasę Password, która ukrywa swoje dane wewnętrzne i kontroluje sposób ustawiania haseł oraz uzyskiwania do nich dostępu:
    • Prywatne pole password (String), które przechowuje rzeczywiste hasło
    • Prywatne pole minLength (int), które określa minimalną akceptowalną długość hasła
    • Konstruktor, który przyjmuje wymaganie dotyczące minimalnej długości
    • Setter setPassword(String password), który akceptuje tylko hasła spełniające wymaganie dotyczące minimalnej długości. Jeśli hasło jest prawidłowe, zapisz je i zwróć true; jeśli jest za krótkie, nie zmieniaj hasła i zwróć false
    • Getter getMaskedPassword(), który zwraca hasło ze wszystkimi znakami zastąpionymi gwiazdkami (*) — nigdy nie ujawniaj rzeczywistego hasła!
    • Metoda checkPassword(String attempt), która zwraca true, jeśli próba pasuje do zapisanego hasła, a w przeciwnym razie false
    • Getter getLength(), który zwraca długość bieżącego hasła (lub 0, jeśli nie ustawiono hasła)
  • Main.java: Utwórz obiekt Password z minimalną długością 6, a następnie odczytaj dwa dane wejściowe: hasło do ustawienia i próbę hasła do sprawdzenia. Wypisz trzy wiersze:
    • Set: true lub Set: false (wynik ustawiania hasła)
    • Masked: ****** (zamaskowana wersja hasła)
    • Match: true lub Match: false (wynik sprawdzania próby)

Otrzymasz dwa dane wejściowe: hasło do ustawienia oraz próbę hasła do sprawdzenia.

Zwróć uwagę, że rzeczywiste hasło nigdy nie jest bezpośrednio dostępne spoza klasy — to właśnie działanie ukrywania informacji. Klasa dokładnie kontroluje, jakie informacje są ujawniane i w jaki sposób można zmodyfikować hasło.

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Odczytaj hasło do ustawienia
        String passwordToSet = scanner.nextLine();
        // Odczytaj próbę podania hasła do sprawdzenia
        String passwordAttempt = scanner.nextLine();
        
        // TODO: Utwórz obiekt Password o minimalnej długości 6
        
        // TODO: Ustaw hasło i wypisz wynik ("Set: true" lub "Set: false")
        
        // TODO: Wypisz zamaskowane hasło ("Masked: ******")
        
        // TODO: Sprawdź próbę podania hasła i wypisz wynik ("Match: true" lub "Match: false")
        
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online