1. Introducerea principiilor OOP

Astăzi vei descoperi o lume nouă și interesantă. Lumea programării orientate pe obiecte ( OOP ). Ați învățat anterior despre clase și obiecte. Astăzi vei afla mai multe despre ei, mult mai multe.

OOP a apărut ca răspuns la complexitatea tot mai mare a programelor. Când variabilele și metodele din programe au început să numere zeci de mii, a devenit clar că trebuia făcut ceva. O soluție a fost combinarea datelor și a metodelor asociate în obiecte separate.

Acum programatorii au trebuit să descrie separat modul în care obiectele interacționează în exterior și cum se comportă în interior. Acest lucru a făcut mult mai ușor de înțeles și de scris programe. Cu toate acestea, a rămas o întrebare: ce metode ar trebui să fie interne unui obiect și care ar trebui să fie disponibile pentru alte obiecte?

S-au încercat multe abordări. Și pe baza celor mai bune practici descoperite, au apărut 4 principii ale POO . Ele sunt abstracția, încapsularea, moștenirea și polimorfismul . Anterior, erau doar trei, dar experții au decis ulterior să adauge și abstracția.


2. Abstracția

Oamenii de pe Internet încă se ceartă asupra definiției abstracției în POO . Problema nu este că toată lumea greșește. Este că toată lumea are dreptate . Cu cât un program este mai mic, cu atât mai multă abstractizare este legată de limbajul Java. Cu cât un program este mai mare, cu atât mai multă abstractizare este legată de modelarea/simplificarea obiectelor din lumea reală.

Dar cele mai bune minți par să fie de acord că:

Abstracția este utilizarea doar a acelor caracteristici ale unui obiect care îl reprezintă suficient de precis într-un program. Ideea principală este de a reprezenta obiectul cu cel mai mic set de câmpuri și metode care permit simultan rezolvarea sarcinilor dumneavoastră cu suficientă acuratețe .

În Java, abstracția se realizează prin clase și interfețe abstracte.

Abstracția în viața reală

Un bun exemplu de abstractizare în viața reală sunt fișele posturilor la o companie sau organizație. Titlul unei poziții este un lucru, dar responsabilitățile specifice atribuite unui post sunt o chestiune complet diferită.

Imaginați-vă că proiectați structura organizațională a viitoarei companii. Puteți împărți responsabilitățile de secretariat, împrăștiindu-le în mai multe poziții diferite. Puteți împărți postul de CEO în mai multe poziții separate: CFO, CTO, CMO, Director HR. Sau, de exemplu, puteți combina posturile de manager de birou și de recrutor într-una singură.

Gândiți titlurile posturilor și apoi împărțiți responsabilitățile pentru aceste posturi. Abstracția înseamnă ruperea de obiect în ansamblu și selectarea proprietăților și componentelor esențiale de care avem nevoie.

Prezentarea principiilor OOP.  Abstracția

Din punct de vedere al programării, abstractizarea este împărțirea corectă a unui program în obiecte . De obicei, există zeci de moduri de a reprezenta orice program mare ca obiecte care interacționează. Abstracția vă permite să selectați caracteristicile esențiale și să le ignorați pe cele neesențiale.


3. Încapsulare

Scopul încapsulării este de a îmbunătăți interacțiunile simplificând obiectele.

Și cel mai bun mod de a simplifica ceva este să ascunzi orice lucru complicat de privirile indiscrete. De exemplu, dacă sunteți pus în cabina unui avion Boeing jumbo, nu veți înțelege imediat cum să îl operați:

Dar pentru pasagerii din avion totul este mai simplu: cumperi un bilet și te urci în avion, care decolează și apoi aterizează. Puteți zbura cu ușurință de pe un continent pe altul doar cu posibilitatea de a „cumpăra un bilet” și de a „urca într-un avion”. Toată complexitatea pregătirii aeronavei pentru zbor, decolare, aterizare și diverse situații de urgență vă este ascunsă. Ca să nu mai vorbim de centrele de navigație prin satelit, pilot automat și de control al traficului aerian. Și asta ne simplifică viața.

Din punct de vedere al programării, încapsularea înseamnă „ascunderea implementării”. Îmi place această definiție. Clasa noastră poate conține sute de metode și poate implementa comportamente foarte complexe în diverse situații. Dar putem ascunde toate metodele sale de privirile indiscrete (marcându-le cu modificatorul privat) și lăsați doar două sau trei metode pentru a interacționa cu alte clase (marcându-le cu modificatorul public). Apoi, toate celelalte clase ale programului nostru vor vedea doar cele trei metode publice și le vor apela, dar nu și altele. Și toată complexitatea va fi ascunsă în interiorul clasei, la fel cum cabina este ascunsă de pasagerii fericiți.


4. Moștenirea

Moștenirea are două părți . Moștenirea în programare și moștenirea în viața reală. În programare, moștenirea este o relație specială între două clase . Dar moștenirea în viața reală este mult mai interesantă.

Dacă trebuie să creăm ceva în viața reală, avem două opțiuni:

  1. Creați lucrul de care avem nevoie de la zero, petrecând mult timp și efort.
  2. Creați lucrul de care avem nevoie pe baza a ceva care există deja.

Strategia optimă este aceasta: luați o soluție bună existentă, modificați-o puțin, ajustați-o pentru a se potrivi nevoilor noastre și apoi folosiți-o.

Dacă urmărim istoria omenirii până la începuturile sale, descoperim că au trecut miliarde de ani de când a început viața pe planetă. Dar dacă considerăm că punctul de plecare al oamenilor este strămoșii noștri primate (adică oamenii sunt „bazați pe” strămoși primate), atunci au trecut doar câteva milioane de ani. Construirea de la zero durează mai mult. Mult mai lung.

În programare, puteți face ceva similar creând o clasă bazată pe alta. Noua clasă descinde din (moștenește) clasa existentă. Acest lucru este foarte benefic atunci când o clasă existentă are 80-90% din datele și metodele de care avem nevoie. Pur și simplu declarăm clasa corespunzătoare ca părinte a noii noastre clase și toate datele și metodele clasei părinte apar automat în noua clasă. Convenabil, nu?


5. Polimorfism

Polimorfismul este un concept de programare. Descrie o situație în care diferite implementări sunt ascunse în spatele unei singure interfețe. Privind la viața reală pentru un omolog, descoperim că operarea unui vehicul se potrivește bine.

Dacă cineva poate conduce un camion, atunci ea poate fi pusă și la volanul unei ambulanțe sau la volanul unei mașini sport. O persoană poate conduce o mașină, indiferent de tipul de mașină, deoarece toate mașinile au aceeași interfață de control: un volan, pedale și schimbător de viteze. Interiorul mașinilor este diferit, dar toate au aceeași interfață de control.

Revenind la lumea programării, polimorfismul permite accesarea în același mod a obiectelor din clase diferite (având de obicei un strămoș comun), proprietate a cărei valoare poate fi cu greu supraevaluată. Valoarea acestuia crește pe măsură ce programul crește.

OOP înseamnă principii. Legile interne. Fiecare dintre ele ne limitează într-un fel, dar oferă mari beneficii în schimb atunci când programul devine mare. Cele patru principii ale OOP sunt ca cele patru picioare ale unei mese. Luați unul și întregul sistem devine instabil.