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

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
Paweł Ziemian BOT (dyskusja | edycje)
m Dodaję nagłówek przed Szablon:Przypisy
drobne redakcyjne
Linia 1:
'''Hermetyzacja''' (inna[[kalka używana nazwa to(językoznawstwo)|kalk.]] enkapsulacja„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>, w starszych pozycjach „kapsułkowanie”, od [[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ą''.
Linia 54:
}
</source>
Korzyść z takiego podejścia polega na tym, że interfejs dzięki enkapsulacjihermetyzacji 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 enkapsulacjihermetyzacji ====
W językach w których nie istnieje mechanizm enkapsulacjihermetyzacji (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 ===
Linia 149:
</source>
 
Mamy klasę <code>KontoBankowe</code>. Nie powinno się tak zdarzyć, że stan konta mógłby być modyfikowany przez zwykłe odwołanie się do danej <code>saldo</code> (np.: <code>mojeKonto.saldo = 123;</code>). Tu <code>saldo</code> konta bankowego jest daną prywatną (dostęp jest ''private''), do której dostęp mają tylko funkcje zaprzyjaźnione lub funkcje składowe (wewnętrzne) (tu: <code>podajStanKonta</code>, <code>wplac</code> i <code>wyplac</code>). Powinno się zapewnić maksymalne bezpieczeństwo w odniesieniu do danej <code>saldo</code>. Stąd też metoda <code>TypPieniedzy podajStanKonta()</code> jest oznaczona jako <code>const</code>, wartość kwoty w metodach <code>bool wplac( const TypPieniedzy kwota )</code> i <code>bool wyplac( const TypPieniedzy kwota )</code> jest określona również jako <code>const</code>, aby jej wartość nie została „przypadkiem” zmieniona w trakcie działania tych metod.
 
Hermetyzacja ma też na celu sprawdzanie poprawności wpisywanych danych, np. czy pozwolić użytkownikowi wpłacić na konto kwotę mającą wartość ujemną?