na czym polega hermetyzacja ?

0

Witam! Czy mógłby mi ktoś wytłumaczyć w prosty sposób na czym polega hermetyzacja ?

2

W dużym skrócie: na utworzeniu klasy w taki sposób aby bez dokładnego studiowania dokumentacji początkujący programista używając klasy nie był w stanie doprowadzić do takiej sytuacji że klasa:

  • powoduje wycieki pamięci
  • zawiera nie spójne dane
  • maże po pamięci
    i kilka innych.
0

Wystarczy używać w odpowiedni sposób atrybutów i metod prywatnych (private) klas. Hermetyzacja to m.in tworzenie metod, które regulują w odpowiedni sposób możliwości pracy z danymi atrybutami. Mając atrybut "wiek" publiczny istnieje możliwość, że ktoś poda mu wartość "-1" ale nie ma ujemnego wieku tak więc robimy ten atrybut jako prywatny i tworzymy metode, która pozwala zmienić wiek na wartość od np. "5" do "10".
Gdybyśmy tak nie zrobili, a np. obiekt innej klasy korzystałby z tej wartości i oczekiwał wieku od 0 do 10, a napotkał -1 to byłoby źle. Oczywście to lajtowy przypadek ale mogą się pojawić gorsze analogiczne :)

0

Podręcznikowo hermetyzacja służy ukrywaniu nieistotnych rzeczy (nieistotnych z punktu widczenia autora klasy) po to, żeby klasa była prostsza niż w rzeczywistości jest i po to, żeby użytkownik klasy nie zrobił sobie bynajmniej krzywdy robiąc coś czego wcześniej wspomniany autor nie przewidział.

Ten mechanizm ma też drugie oblicze i służy jako narzędzie dla projektantów bibliotek. Chodzi tutaj wyłącznie o to, żeby wyodrębnić kod, ktory pod wpływem czasu zmieni się nie do poznania. Bez tego mechanizmu aktualizacja biblioteki pociągałaby za sobą konieczność aktualizowania wielu aplikacji.

Wg mnie cudowność hermetyzacji jest przereklamowana i zarazem nadużywana. Rozumiem przypadki dla których robi się akcesor, który w momencie aktualizacji zmiennej coś jeszcze z nią robi, ale nie łapie sensu 99% akcesorów, które i tak nic nie robią poza zabezpieczaniem przyszłości kodu. Taka hermetyzacja to wymóżdżanie aplikacji po to, żeby pokazać ile to regułek się wyczytało z książek.

W kodzie pythonowym nie korzysta się z hermetyzacji w oparciu o modyfikatory public, protected, private. Tam po prostu koduje się możliwie wiele rzeczy publicznie, bo tak jest bardziej intuicyjnie. Natomiast jeśli mamy solidne zastrzeżenia wobec danej zmiennej to ją oznaczamy podkreśleniem z początku nazwy i poprzez to informujemy innych, by tego nie używali.

1 użytkowników online, w tym zalogowanych: 0, gości: 1