1. Znajomość zasad OOP

Dziś odkryjesz nowy, ciekawy świat. Ten świat nazywa się OOP - programowanie obiektowe . Wcześniej spotkałeś się już z klasami i przedmiotami. Dziś dowiecie się o nich jeszcze więcej, dużo więcej.

OOP pojawił się jako odpowiedź na rosnącą złożoność programów. Kiedy liczba zmiennych i funkcji w pierwszych programach zaczęła sięgać dziesiątek tysięcy, stało się jasne, że trzeba coś z tym zrobić. Jednym z rozwiązań było połączenie danych i współpracujących z nimi funkcji w osobne obiekty.

Teraz programiści musieli oddzielnie opisywać interakcję obiektów i akcje, które miały miejsce wewnątrz obiektu. To znacznie uprościło zrozumienie i pisanie programów. Otwarte pozostało jednak pytanie, które funkcje powinny znajdować się wewnątrz obiektu, a które między obiektami.

Wypróbowaliśmy wiele podejść i bazując na najlepszych praktykach sformułowaliśmy 4 zasady OOP . Są to: abstrakcja, enkapsulacja, dziedziczenie i polimorfizm . Wcześniej było ich tylko trzech, ale potem postanowili dodać również abstrakcję.


2. Abstrakcja

W Runecie ludzie wciąż spierają się o definicję abstrakcji w OOP . I problem nie polega nawet na tym, że wszyscy się mylą, ale na tym, że wszyscy mają rację . Im mniejszy program, tym więcej abstrakcji wiąże się z językiem Java, im większy, tym bardziej związany jest z modelowaniem/uproszczaniem obiektów świata rzeczywistego.

Ale wydaje się, że najtęższe umysły zgodziły się, że:

Abstrakcja to użycie tylko tych cech obiektu, które reprezentują go z wystarczającą dokładnością w programie. Główną ideą jest reprezentacja obiektu z minimalnym zestawem pól i metod, a jednocześnie z dokładnością wystarczającą do rozwiązania problemu .

W języku programowania Java abstrakcję uzyskuje się za pomocą abstrakcyjnych klas i interfejsów.

Abstrakcja w prawdziwym życiu

Dobrym przykładem abstrakcji w prawdziwym życiu jest opis stanowisk w firmie lub organizacji. Tytuł stanowiska to jedno, ale obowiązki na każdym konkretnym stanowisku to zupełnie co innego.

Wyobraź sobie, że projektujesz strukturę swojej przyszłej firmy. Obowiązki sekretarki można podzielić: „rozrzucić” je na kilka innych stanowisk. Stanowisko dyrektora wykonawczego można podzielić na kilka niezależnych stanowisk: dyrektora finansowego, dyrektora technicznego, dyrektora marketingu, dyrektora kadr. Albo np. połącz w jedno stanowisko kierownika biura i rekrutera.

Wymyślasz tytuły stanowisk w swojej firmie, a następnie rozkładasz obowiązki na te stanowiska. Abstrakcja to odwrócenie uwagi od integralności obiektu i podkreślenie jego głównych właściwości i komponentów, których potrzebujemy.

Wprowadzenie do zasad OOP.  Abstrakcja

Z punktu widzenia programowania abstrakcja to powiedzmy poprawny podział programu na obiekty . Zwykle każdy duży program może być reprezentowany na dziesiątki sposobów jako obiekty oddziałujące na siebie. Abstrakcja pozwala na wybranie głównych cech i pominięcie drugorzędnych.


3. Hermetyzacja

Celem enkapsulacji jest poprawa jakości interakcji między rzeczami poprzez ich uproszczenie.

Wprowadzenie do zasad OOP Enkapsulacja

A najlepszym sposobem na uproszczenie czegoś jest ukrycie wszystkiego skomplikowanego przed wścibskimi oczami. Na przykład, jeśli zostaniesz umieszczony w kokpicie Boeinga, nie od razu wymyślisz, jak go kontrolować:

Wprowadzenie do zasad OOP Enkapsulacja

Z drugiej strony dla pasażerów samolotu wszystko wygląda prościej: kupiłem bilet, wsiadłem do samolotu, wystartowałem i wylądowałem. Możesz łatwo latać z kontynentu na kontynent, mając tylko umiejętności „kup bilet” i „wejdź na pokład samolotu”. Wszystkie trudności w postaci przygotowania samolotu do lotu, startu, lądowania i różnych sytuacji awaryjnych są przed Tobą ukryte. Nie mówiąc już o nawigacji satelitarnej, autopilocie i centrach kontroli lotnisk. I to ułatwia nam życie.

Z perspektywy programowania enkapsulacja to „ukrywanie implementacji”. Podoba mi się ta definicja. Nasza klasa może zawierać setki metod i implementować bardzo złożone zachowania w różnych sytuacjach. Ale możemy ukryć wszystkie jego metody przed wścibskimi oczami (oznacz je modyfikatorem private) i pozostawić tylko kilka metod interakcji z innymi klasami (oznacz je modyfikatorem public). Wtedy wszystkie inne klasy naszego programu zobaczą tylko trzy metody w tej klasie i wywołają je. A wszystkie trudności będą ukryte w klasie, jak kokpit od szczęśliwych pasażerów.


4. Dziedziczenie

Dziedziczenie ma dwie strony . Strona programistyczna i strona realna. Z perspektywy programowania dziedziczenie jest specjalną relacją między dwiema klasami . Ale o wiele bardziej interesujące jest to, czym jest dziedziczenie z punktu widzenia prawdziwego życia.

Jeśli musimy stworzyć coś w prawdziwym życiu, mamy dwa rozwiązania:

  1. Stwórz rzecz, której potrzebujemy od podstaw, poświęcając dużo czasu i wysiłku.
  2. Stwórz potrzebną nam rzecz na podstawie już istniejącej.

Najbardziej optymalna strategia wygląda tak: bierzemy istniejące dobre rozwiązanie, trochę je modyfikujemy, dopasowujemy do naszych potrzeb i wykorzystujemy.

Jeśli prześledzimy historię powstania człowieka, okaże się, że od narodzin życia na planecie minęły miliardy lat. A jeśli wyobrazimy sobie, że człowiek powstał z małpy (na podstawie małpy), to minęło zaledwie kilka milionów lat. Budowanie od podstaw trwa dłużej. Dużo dłużej.

Również w programowaniu możliwe jest stworzenie jednej klasy na podstawie innej. Nowa klasa staje się potomkiem (dziedzicem) istniejącej. Jest to bardzo korzystne, gdy istnieje klasa, która zawiera 80% -90% danych i metod, których potrzebujemy. Po prostu deklarujemy odpowiednią klasę jako rodzica naszej nowej klasy, a nowa klasa automatycznie będzie miała wszystkie dane i metody klasy nadrzędnej. Czy to naprawdę wygodne?


5. Polimorfizm

Polimorfizm to pojęcie z dziedziny programowania. Opisuje sytuację, gdy za jednym interfejsem kryją się różne implementacje. Jeśli spróbujesz poszukać jego odpowiedników w prawdziwym życiu, jednym z nich będzie proces sterowania maszyną.

Jeśli dana osoba może prowadzić ciężarówkę, można ją umieścić za kierownicą karetki i za kierownicą samochodu sportowego. Osoba może prowadzić samochód niezależnie od tego, jaki to samochód, ponieważ wszystkie mają ten sam interfejs sterowania: kierownicę, pedały i dźwignię zmiany biegów. Wewnętrzna struktura maszyn jest inna, ale wszystkie mają ten sam interfejs sterowania.

Jeśli wrócimy do programowania, to polimorfizm pozwala na jednolity dostęp do obiektów różnych klas (zwykle mających wspólnego przodka) – rzecz, którą trudno przecenić. Jego wartość jest tym większa, im większy program.

OOP to zasady. prawa wewnętrzne. Każdy z nich w jakiś sposób nas ogranicza , dając w zamian ogromne korzyści, gdy program rozrośnie się do dużych rozmiarów. Cztery zasady OOP są jak cztery nogi krzesła. Usuń tylko jeden, a cały system stanie się niestabilny.