Comparație cu abordarea orientată spre clasă
În limbile bazate pe conceptul de "clasă", toate obiectele sunt împărțite în două tipuri principale - clase și instanțe. Clasa definește structura și funcționalitatea (comportamentul), aceeași pentru toate instanțele din această clasă. O instanță este un suport de date - adică are o stare. schimbarea în funcție de comportamentul dat de clasă.
Suporterii programării prototipului susțin adesea că limbile bazate pe clase duc la o concentrare excesivă asupra taxonomiei claselor și a relației dintre ele. În contrast, prototipul se concentrează asupra comportamentului unui număr mic de "eșantioane", care sunt apoi clasificate ca obiecte "de bază" și folosite pentru a crea alte obiecte. Multe sisteme bazate pe prototip sprijine prototipuri de schimbare în timpul rulării, în timp ce doar o mică parte din sistemele orientate spre clasă (de exemplu, Smalltalk) vă permite să modificați dinamic clase.
Deși marea majoritate a sistemelor bazate pe prototipuri se bazează pe limbi interpretate cu tastare dinamică, este posibil din punct de vedere tehnic să se adauge prototipuri în limbile cu verificare de tip static. Limba Omega este un exemplu al unui astfel de sistem.
Proiectarea obiectelor
În limbile orientate spre clasă, se creează o nouă instanță apelând constructorul de clasă (eventual cu un set de parametri). Copia rezultată are o structură și un comportament rigid definit de clasa sa.
În sistemele orientate pe prototipuri, sunt prevăzute două metode pentru crearea unui obiect nou: clonarea unui obiect existent sau crearea unui obiect de la zero. Pentru a crea un obiect de la zero, programatorul este prevăzut cu mijloacele sintactice de adăugare a proprietăților și metodelor obiectului. În viitor, o copie completă poate fi obținută din obiectul rezultat, o clonă. În procesul de clonare, copia moșteneste toate caracteristicile prototipului său, dar din acel moment devine independent și poate fi schimbat. În unele implementări, copiile stochează trimiteri la obiecte prototip, delegând o parte din funcționalitatea lor; în timp ce schimbarea prototipului poate afecta toate copiile sale. În alte implementări, obiectele noi sunt complet independente de prototipurile lor. Luați în considerare ambele cazuri.
delegare
În limbile orientate pe prototipuri care utilizează delegarea. mediu de execuție este capabil de a efectua apeluri de metode de planificare (sau de căutare date dorit) doar ca urmare indicii lanț de delegare (de la obiect la prototipul său) pentru a se potrivi. Spre deosebire de atitudinea de „clasă - o copie a“ atitudine „prototip - descendenții“ nu impune ca obiectele descendente păstrează similaritate structurală cu prototipul său. De-a lungul timpului, se pot adapta și îmbunătăți, dar nu este nevoie să reproiectăm prototipul. Este important să adăugați / ștergeți / modificați nu numai date, ci și funcții, în timp ce funcțiile sunt, de asemenea, obiecte din primul nivel. Ca rezultat, majoritatea limbajelor orientate pe prototipuri numesc datele și metodele obiectului "sloturi" (celule).
cascadă
Printre avantajele acestei abordări se numără faptul că creatorul unei copii poate schimba aceasta fără teama de efecte secundare printre alți descendenți ai strămoșului său. De asemenea, costurile computaționale pentru dispecerizare sunt reduse drastic, deoarece nu este nevoie să ocolim întregul lanț de posibili delegați în căutarea unui slot adecvat (metoda sau atribut).
Un alt dezavantaj este faptul că cea mai simplă punerea în aplicare a acestui model duce la creșterea (în comparație cu modelul de delegare) consumul de memorie, din moment ce fiecare clonă până când este modificată, va conține o copie a datelor prototip. Totuși, această problemă este separarea optimă a rezolvabilă datelor nemodificate și utilizarea de „copie leneș“ - care a fost utilizat în Kevo.
Susținătorii ale modelelor de obiecte orientate spre clasă, criticând abordarea prototip, de multe ori perturba aceeași problemă, ceea ce îngrijorat susținătorii dactilografiere statice în raport dinamic tastat limbi. În special, discuțiile se referă la subiecte precum corectitudinea. de siguranță. predictibilitatea și eficacitatea programului.
În ceea ce privește primele trei puncte, atunci clasele sunt adesea văzute ca tipurile (și, într-adevăr, așa cum este ea în cele mai orientate obiect limbi static tastate), și se presupune că clasele furnizează anumite acorduri și să se asigure că exemplarele se va comporta bine într-un anumit fel .