Domanda

Steve Yegge ha recentemente pubblicato un post di blog interessante su quello che chiama il modello di design universale. Lì in dettaglio usa i prototipi come uno strumento di modellazione, anziché le classi. Mi piace il modo in cui questo introduce meno accoppiamento rispetto all'eredità. Ma questo è qualcosa che si può ottenere anche con le classi, implementando le classi in termini di altre classi, anziché ereditarietà. Qualcun altro ha storie di successo sull'uso dei prototipi e può forse aiutare a spiegare dove l'uso dei prototipi è vantaggioso rispetto alle classi. Immagino che dipenda dalla modellazione statica rispetto alla modellazione dinamica, ma altri esempi sarebbero molto graditi.

È stato utile?

Soluzione

Un aspetto interessante è che è facile fare in modo che un linguaggio basato su prototipo agisca su OO, ma è difficile far sì che un linguaggio basato su OO sia basato su un prototipo.

Non è del tutto chiaro come sarebbe OO come prototipo, a parte la composizione contro l'eredità, come dici tu.

Un linguaggio prototipo semplifica il comportamento ereditario complesso. Puoi implementare eredità multipla , comportamento simile a mixin , oppure scegli e scegli ciò che vuoi da un oggetto per aggiungerlo a un altro.

L'articolo di Wikipedia menziona: " I sostenitori della programmazione basata su prototipi spesso sostengono che questa classe linguaggi basati su principi incoraggiano un modello di sviluppo che si concentra innanzitutto sulla tassonomia e sui rapporti tra le classi. Al contrario, la programmazione basata su prototipi viene vista come incoraggiante il programmatore a concentrarsi sul comportamento di alcuni set di esempi e solo successivamente si preoccupa di classificare questi oggetti in oggetti archetipici che verranno successivamente utilizzati in modo simile alle classi. & Quot;

Questo non vuol dire che il paradigma del prototipo sia tutto pro e nessun contro. Se OO è più restrittivo, è perché sceglie di esserlo. Posso vedere dove tutta quella flessibilità potrebbe metterti nei guai se non stai attento.

Altri suggerimenti

I prototipi sono una forma di eredità, è solo che gli oggetti ereditano attributi e comportamenti direttamente da altri oggetti, invece di ottenere i loro attributi e comportamenti dalla loro classe, che eredita da altre classi.

Ad esempio, controlla qualsiasi codice orientato agli oggetti in un linguaggio basato su prototipi come , ad esempio JavaScript.

Per gli interessati, NewtonScript era (è) un doppio linguaggio: avevi prototipi e hai avuto lezioni. Puoi scegliere se ereditare da una classe, da un prototipo o da entrambi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top