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

[wersja przejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
Mała koretka w kodzie, wprowadzenie inkrementacji licznika
Nie podano opisu zmian
Linia 1:
'''Herscscs'''czsdę nazywa się ''hermetyzacją pełną''.
'''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]].
 
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:
#sdcdszcsd
#wyodrębnia interfejs
#uodparnia tworzony model na błędy,
#lepiej oddaje rzeczywistość,
 
=== Wyodrębnia interfejs ===
Linia 15 ⟶ 11:
 
==== 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.klasycsacsc
 
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">