Abstrakcja w OOP: Ukrywanie złożoności

Prowadzisz samochód, naciskając pedały i kręcąc kierownicą. Nie musisz rozumieć działania wtrysku paliwa ani ruchu tłoków. Samochód ukrywa przed Tobą te szczegóły. Korzystasz jedynie z prostego interfejsu.

Oprogramowanie działa w ten sam sposób.

Pomyśl o wysyłaniu e-maila. Twój kod prawdopodobnie wygląda tak:

emailService.send(email);

Wygląda to prosto. Za kulisami system wykonuje wiele zadań:

Nie musisz widzieć tych kroków. Interesuje Cię tylko to, że e-mail zostaje wysłany.

Jeśli wyeksponujesz każdy krok, stworzysz problemy. Wyobraź sobie, że każdy programista musiałby ręcznie wywoływać:

To sprawia, że Twój kod jest kruchy. Jeśli zmienisz dostawcę poczty e-mail, będziesz musiał zaktualizować każde miejsce w swojej aplikacji. Twój kod staje się silnie powiązany z implementacją.

Abstrakcja rozwiązuje ten problem.

Abstrakcja ujawnia, co obiekt robi. Ukrywa to, jak to robi. Pokazujesz użytkownikowi tylko to, czego potrzebuje.

Użytkownik wchodzi w interakcję ze stabilnym interfejsem. Nie obchodzi go Twoja logika uwierzytelniania ani strategia ponawiania prób. Te szczegóły pozostają ukryte.

Wiele osób myli abstrakcję z enkapsulacją. Oto różnica:

Enkapsulacja pyta: Kto może zmienić stan tego obiektu? Chroni dane.

Abstrakcja pyta: Jakie szczegóły powinien widzieć użytkownik? Ukrywa złożoność.

Współpracują ze sobą, aby budować lepsze systemy.

Następnie omówimy dziedziczenie. Przyjrzymy się temu, jak obsługiwać wspólne zachowania bez pisania tego samego kodu dwa razy.

Źródło: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111