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

m
Wycofano edycje użytkownika 83.29.159.150 (dyskusja). Autor przywróconej wersji to 82.41.253.223.
Nie podano opisu zmian
m (Wycofano edycje użytkownika 83.29.159.150 (dyskusja). Autor przywróconej wersji to 82.41.253.223.)
'''Hermetyzacja''' (inna używana nazwa to enkapsulacja<ref>{{cytuj książkę|nazwisko=Grębosz|imię=Jerzy|tytuł=Symfonia C++ Standard|wydawca=Edition 2000|miejsce=Kraków|data=2005|strony=416|isbn=83-7366-073-9}}</ref>, [[język angielski|ang.]] ''encapsulation'') – jedno z założeń [[Programowanie obiektowe|programowania obiektowego]]. Hermetyzacja polega na ukrywaniu pewnych danych składowych lub [[metoda (programowanie obiektowe)|metod]] obiektów danej [[Klasa_(programowanie_obiektowe)|klasy]] tak, aby były one dostępne tylko metodom wewnętrznym danej klasy lub [[funkcja zaprzyjaźniona|funkcjom zaprzyjaźnionym]].
'''Herscscs'''czsdę nazywa się ''hermetyzacją pełną''.
 
Gdy dostęp do wszystkich pól danej klasy jest możliwy wyłącznie poprzez metody, lub inaczej mówiąc: gdy wszystkie pola w klasie znajdują się w sekcji prywatnej lub chronionej, to taką hermetyzację nazywa się ''hermetyzacją pełną''.
 
== Przyczyny stosowania hermetyzacji ==
Można wyróżnić trzy główne powody wprowadzenia hermetyzacji do programowania obiektowego:
#wyodrębnia interfejs
#sdcdszcsd
#uodparnia tworzony model na błędy,
#lepiej oddaje rzeczywistość,
 
=== Wyodrębnia interfejs ===
 
==== 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 klasycsacscklasy 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.
 
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:
 
<source lang="cpp">