Introducere în programarea orientată-obiect prototip

Lumea obiectelor

În timpul zilei - atunci când conduci la locul de muncă, stau la birou, face sarcini atribuite, mânca, plimbare în parc - puteți interacționa, de obicei, cu lumea, fără o înțelegere detaliată a legilor fizice care o guvernează. Puteți vedea diferitele sisteme cu care vă ocupați în fiecare zi, ca elemente sau obiecte. Luați complexitatea lor ca o realitate care nu necesită dovada și, în schimb, concentrați atenția asupra interacțiunii cu aceste obiecte.

De obicei, primul limbaj orientat pe obiecte este limba de modelare a lui Simula. Apoi au venit Smalltalk, C ++, Java și C #. În acel moment, în majoritatea limbilor orientate spre obiecte, obiectele au fost definite folosind clase. Ulterior, dezvoltatorii de limbaj de programare Smalltalk au creat o metodă alternativă, mai simplă de definire a obiectului, numită programare orientată pe obiecte bazată pe prototipuri, sau programare prototip orientată pe obiecte.

Obiective orientate (OO) de programare, care este o încercare de a crea sisteme de lucru în mod similar de software, este un foarte eficient și incredibil de popular instrument de modelare pentru dezvoltarea de software. Popularitatea sa este explicată prin ceea ce reflectă viziunea noastră asupra lumii ca un set de obiecte care pot interacționa unul cu celălalt și care pot fi manipulate în diverse moduri. Eficacitatea programării orientate pe obiecte constă în două principii:

Incapsulare Permite dezvoltatorilor să ascundă funcționarea internă a structurilor de date, prezentând interfețe de programare robuste care pot fi folosite pentru a crea un software modular și adaptabil. Encapsularea poate fi considerată drept ascunderea informațiilor. Moștenire Îmbunătățește puterea motorului de încapsulare, permițând obiectelor să moștenească comportamentul încapsulat al altor obiecte. Moștenirea poate fi reprezentată ca schimbul de informații.

Aceste principii sunt bine cunoscute de majoritatea dezvoltatorilor, deoarece toate limbile de programare obișnuite susțin programarea orientată pe obiecte (și, în majoritatea cazurilor, sunt forțate să o utilizeze). În ciuda faptului că toate limbile orientate pe obiecte într-o formă sau alta susțin cele două principii de bază specificate, în timp, cel puțin două au apărut în căile radicale diferite de definire a obiectelor.

Ce este un prototip? Clase și prototipuri

Clasa oferă o definiție abstractă a obiectelor în care structurile și metodele de date partajate sunt definite pentru întreaga clasă sau colecție de obiecte. Fiecare obiect este definit ca o instanță a clasei sale. Clasele sunt, de asemenea, responsabile pentru construirea obiectelor de clasă în funcție de definițiile lor și (posibil) pe baza parametrilor utilizatorului.

Un exemplu clasic este utilizarea clasei Point și a descendentului Point3D pentru a defini punctele bidimensionale și tridimensionale. Lista 1 arată cum ar putea arăta clasele specificate în codul Java.

Listarea 1. Clasa de puncte în Java

Între sistemele obiect clasice și prototip, există o diferență fundamentală. Obiectele clasice sunt definite abstract ca parte a unui anumit grup conceptual și moștenesc caracteristicile altor clase sau grupuri de obiecte. Dimpotrivă, obiectele prototip sunt definite special ca obiecte speciale și moștenesc comportamentul altor obiecte speciale.

Astfel, un limbaj de programare orientat pe obiecte bazat pe clase are o dublă natură care necesită cel puțin două construcții fundamentale: clase și obiecte. Ca urmare a acestei dualități, pe măsură ce software-ul de clasă se extinde, există o tendință de a dezvolta ierarhii complexe de clasă. De regulă, nu este întotdeauna posibil să se prevadă în prealabil toate metodele de utilizare ulterioară a clasei, prin urmare, pentru a facilita introducerea de schimbări, este necesară refactorizarea constantă a unei astfel de ierarhii de clase.

Limbile bazate pe prototipuri elimină necesitatea de a ține cont de această dualitate și de a simplifica crearea directă și manipularea obiectelor. Lipsa obiectului legat de clase vă permite să creați sisteme de obiecte cuplate în mod liber care să vă ajute să mențineți modularitatea și să reduceți nevoia de refactorizare.

- Picioarele lui LT, ca și Emmitt.
- Poate să treacă linia ca și Emmitt.
"Da, el conduce o milă în exact cinci minute!".

Puteți potrivi acest exemplu cu modelul clasic, unde puteți defini o clasă RunningBack (player de back line) care moștenește atributele din clasa FootballPlayer (jucător de fotbal american). "LT" și "emmitt" ar fi instanțe ale clasei RunningBack. Aceste clase ar putea să arate ca în cod Java, după cum se arată în Lista 4.

Listing 4. Trei clase Java

Modelul clasic este asociat cu un „deasupra capului“ semnificativ mai mare conceptual, dar nu oferă un control detaliat asupra copiilor și a claselor Emmitt - lt o oportunitate pe care le obține atunci când se utilizează un model prototip. (În corectitudine, trebuie remarcat faptul că clasa FootballPlayer nu este de 100% este necesar, este utilizat aici pentru comparație cu exemplele care urmează.) Uneori, aceste „deasupra capului“, poate fi util, dar de multe ori ele sunt pur și simplu o povară.

De asemenea, puteți crea un alt obiect lineBacker. moștenind atributele jucătorului de fotbal. așa cum se arată în Lista 6.

Listing 6. Moștenirea obiectelor

Așa cum se arată în Lista 7, puteți adăuga comportament la obiectele lineBacker și runningBack prin adăugarea la obiectul footballPlayer.

Listing 7. Adăugarea comportamentului

În acest exemplu, lucrați cu fotbalul ca o clasă. De asemenea, puteți crea obiecte pentru Emmitt și LT, după cum se arată în Lista 8.

Listing 8. Crearea obiectelor

Deoarece obiectul lt moște atribute din obiectul emitet. puteți chiar să lucrați cu emitetul ca o clasă, după cum se arată în Lista 9.

Lista 9. Moștenirea și clasele

Apoi, puteți crea acest obiect utilizând noul cuvânt cheie, la fel ca și în codul Java (a se vedea Listing 11).

Listing 11. Crearea unui obiect
Afișare 12. Adăugarea unei metode

Împreună cu funcțiile constructorului, puteți utiliza modelul de mostenire pseudo-clasică, așa cum se arată în Lista 13.

Listarea 13. Modelul de moștenire pseudo-clasică
Lista 14. Definirea unui obiect

Apoi, după cum se arată în Lista 15, implementați moștenirea utilizând Object.create.

Listing 15. Moștenirea folosind Object.create
Listing 16. Model de moștenire funcțională

Pentru a genera obiectele, se utilizează constructorul, definirea elementelor particulare fiind realizată intern, iar instanțele sunt create prin trecerea speculației către constructor, așa cum se arată în Lista 17.

Listing 17. Crearea instanțelor

concluzie

În acest articol, dăm doar o idee superficială despre programarea prototipică orientată pe obiecte. Un model prototip este implementat de multe alte limbi, de exemplu, Self, Lua, Io și REBOL. Modelul prototip poate fi implementat în orice limbă, inclusiv prin tipărire statică. De asemenea, poate fi utilă în dezvoltarea oricărui sistem care necesită flexibilitate și simplitate.

Descărcați resurse

Subiecte conexe

Articole similare