Enkapsulacja to jedna z kluczowych zasad programowania obiektowego (OOP), która pojawiła się z potrzeby grupowania danych z funkcjami, które te dane przetwarzają, oraz ukrywania szczegółów implementacji przed użytkownikiem.
Od czasów powstania OOP, enkapsulacja była ukierunkowana na zwiększenie niezawodności programów, zmniejszenie błędów i poprawę łatwości utrzymania kodu. W C++ jest realizowana za pomocą mechanizmów ukrywania danych oraz zapewniania interfejsu do interakcji z obiektem.
Bez enkapsulacji wewnętrzne dane i szczegóły implementacji klasy są dostępne do zmiany z dowolnej części programu. To prowadzi do błędów, trudności w wprowadzaniu zmian i złej zarządzalności kodem.
Enkapsulacja w C++ osiągana jest za pomocą modyfikatorów dostępu (private, protected, public) w klasach. Wewnętrzne dane klasy są deklarowane jako private lub protected, a dostęp do nich odbywa się przez otwarte metody (gettery i settery).
Przykład kodu:
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
Kluczowe cechy:
Czy człon protected może być dostępny z dowolnego miejsca programu, gdzie jest obiekt klasy?
Nie, człony protected są dostępne tylko z metod samej klasy, przyjaciół i klas pochodnych, ale nie z innych klas i nie przez obiekt zewnętrzny.
Czy publiczny człon klasy może być "enkapsulowany"?
Nie, człony publiczne nie są enkapsulowane, ich zadanie polega na zapewnieniu zewnętrznego interfejsu. Czasami zbyt otwarte człony publiczne naruszają zasadę enkapsulacji.
Czy modyfikator private zwiększa bezpieczeństwo kodu w czasie wykonywania?
Nie, modyfikatory dostępu działają tylko na poziomie kompilatora i nie zapobiegają dostępowi do danych w pliku wykonywalnym — ale ograniczają błędy projektowe.
Programista uczynił wszystkie zmienne klasy publiczne dla "prostoty logiki biznesowej".
Zalety:
Wady:
Dane zadeklarowane jako private, interakcja przez gettery/settery z obowiązkową walidacją.
Zalety:
Wady: