Hermetyzacja (informatyka): Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
Usunięto możliwia rozbicie modelu na mniejsze elementy, prowadzono Wyodrębnia interfejs
Poprawiono kolejność sekcji
Linia 16:
==== Przykład ====
Posiadając zdefiniowany interfejs programista klasy ma pełną swobodę implementacji mechanizmu, w jaki klasa będzie wykonywała swoje zdanie. Jeżeli klasa ma za zadanie np. gromadzić zbiór liczb podawanych do niej pojedynczo a następnie, w dowolnym momencie, zwrócić maksimum tej kolekcji, to interfejs w żaden sposób nie narzuca programiście klasy konkretnego sposobu wykonania tej implementacji. Na przykładzie języka [[C++]], klasa może to wewnętrznie wykonywać w oparciu o składową typu <code>std::set</code> jak również <code>std::vector</code>, który każdorazowo przez zwróceniem wartości maksymalnej będzie poddawany sortowaniu. Od strony użytkownika klasy sposób implementacji nie powinien być szczególnie interesujący, a co ważniejsze, nie powinien wpływać na sposób używania klasy.
 
==== Wyodrębnianie interfejsu w językach bez wsparcia enkapsulacji ====
W językach w których nie istnieje mechanizm enkapsulacji (np. [[Python]], [[C_(język_programowania)|C]]) stosuje się wyznaczanie interfejsu poprzez konwencję nazewnictwa, tj. składowe prywatne lub chronione mają specjalny przedrostek nazwy, np. ich nazwy zaczynają się od podkreślnika. Używanie metod wewnętrznych wiąże się z ryzykiem wywołania nieprawidłowego stanu programu co może prowadzić do awarii.
 
Niech dana będzie klasa interfejsowa definiująca jedynie interfejs, czyli zbiór jedynie publicznych, abstrakcyjnych i [[Metoda_wirtualna|wirtualnych metod]]. Metody te, zgodnie z definicją metody abstrakcyjnej, nie są wytłumaczone w obrębie tej klasy, a jedynie określono, że klasa dziedzicząca po tej klasie wytłumaczyć jak każda z tych metod działa. Na przykładzie:
Linia 57 ⟶ 54:
</source>
Korzyść z takiego podejścia polega na tym, że interfejs dzięki enkapsulacji całkowicie milczy o sposobie zaimplementowania klasy a dodatkowo korzystając z mechanizmu polimorfizmu można posiadać wiele wymiennych klas realizujących ten sam interfejs, a to która z nich będzie wykorzystana może być zmieniane choćby w trakcie działania programu.
 
==== Wyodrębnianie interfejsu w językach bez wsparcia enkapsulacji ====
W językach w których nie istnieje mechanizm enkapsulacji (np. [[Python]], [[C_(język_programowania)|C]]) stosuje się wyznaczanie interfejsu poprzez konwencję nazewnictwa, tj. składowe prywatne lub chronione mają specjalny przedrostek nazwy, np. ich nazwy zaczynają się od podkreślnika. Używanie metod wewnętrznych wiąże się z ryzykiem wywołania nieprawidłowego stanu programu co może prowadzić do awarii.
 
=== Uodparnia tworzony model na błędy ===