Esistono linguaggi di programmazione orientati agli oggetti che non sono basati su classi?

44

Esistono linguaggi di programmazione orientati agli oggetti che non si basano sul paradigma di classe?

    
posta blunders 20.10.2011 - 21:04
fonte

8 risposte

74

Per quanto ne so, Self è la lingua originale che ha inventato il paradigma "class-free" basato su prototipi . Esisteva già (in una fase sperimentale) negli anni '80 e spinge l'uso elegante di Smalltalk . http://en.wikipedia.org/wiki/Prototype_pattern">prototype pattern all'estremo, in modo tale che le classi siano completamente eliminate.

Ha influenzato tutte le altre lingue OO "class free" che conosco:

  • il più prominente Javascript,
  • il linguaggio e l'ambiente di programmazione classici Squeak (che è costruito su Smalltalk)
  • il linguaggio di script multi-paradigma Lua .
risposta data 20.10.2011 - 21:18
fonte
32

Lingue come JavaScript sono basate su prototipi , in cui il comportamento viene riutilizzato clonando oggetti esistenti. L'articolo di Wikipedia che ho collegato indica che Lua, ActionScript e un certo numero di altre lingue seguono questo paradigma.

    
risposta data 20.10.2011 - 21:09
fonte
13

Il più popolare linguaggio di programmazione orientato agli oggetti nel mondo non ha classi, si chiama Javascript ed è basato su prototipi: link

    
risposta data 20.10.2011 - 21:11
fonte
6

L'orientamento all'oggetto è un termine generico per diversi concetti importanti che sono solo in parte condizionati l'uno dall'altro. Ad esempio, l'ereditarietà può essere dichiarata caso per caso tra istanze anziché tra classi, oppure l'intera classe può essere rappresentata da un oggetto concreto prototype , come ha scritto Thomas. È solo più usuale separare la descrizione della struttura dalla creazione dell'istanza. Allo stesso modo, l'associazione tardiva significa che gli oggetti con lo stesso metodo nominalmente non fanno la stessa cosa quando vengono invocati e che la decisione viene presa in fase di runtime. Ciò è anche possibile con l'approccio basato sul prototipo. E l'incapsulamento è essenzialmente completamente indipendente dal fatto che i tuoi oggetti siano istanze di classi dichiarate o meno.

Detto questo, la maggior parte delle lingue OO è saldamente nel campo basato sulla classe. Ma anche in questo caso ci sono idiomi che offuscano la linea: il design guidato dal dominio spesso porta a sistemi in cui l'identità di oggetti particolari è molto più importante del diagramma di classe statico, ei decoratori consentono agli oggetti della stessa classe o interfaccia di avere molto comportamento diverso.

    
risposta data 20.10.2011 - 21:15
fonte
6

strongzza è un linguaggio orientato agli oggetti basato su tratti invece che su classi. La differenza è principalmente nella composizione di implementazione. Il comportamento di un oggetto (definizioni del metodo) è ancora determinato dalle dichiarazioni in un punto specifico nel testo del programma. Quindi in questo senso è simile ai sistemi basati sulla classe.

Ci sono calcoli a oggetti (secondo Cardelli, credo), che sono puramente basati su oggetti. Ogni metodo è un membro di istanza. Si formano nuovi oggetti prendendo il contenuto di un oggetto esistente e aggiungendo, rimuovendo o sostituendo alcuni dei suoi membri. È leggermente diverso dai prototipi, poiché il nuovo oggetto non ha alcun collegamento al vecchio oggetto, solo alcuni dei suoi contenuti.

IIRC, è possibile programmare in modo simile usando Python e altri linguaggi orientati all'hashtable: puoi aggiungere una funzione come membro di un'istanza e quindi chiamarla come metodo.

    
risposta data 20.10.2011 - 23:20
fonte
5

Ada, a partire dalla sua revisione del 1995, Ada è orientato agli oggetti, ma a differenza di molti altri linguaggi OO non combina tipi e moduli orientati agli oggetti in un singolo costrutto chiamato "classe". Piuttosto che dichiarare un tipo come "classe Foo" e inserire tutte le dichiarazioni di metodo associate all'interno della dichiarazione di classe, dichiarare un pacchetto e dichiarare il tipo (come record ) e altre cose all'interno del pacchetto. Non è "senza classe" nel modo in cui alcune delle altre lingue menzionate sono, è solo un modo leggermente diverso di organizzare le cose.

Le funzionalità orientate agli oggetti di Ada 95 sono state aggiunte alla versione esistente del 1983 della lingua; ha esteso i costrutti di record e di pacchetto esistenti per supportare l'ereditarietà et al.

    
risposta data 21.10.2011 - 00:42
fonte
5

Io è un altro linguaggio orientato agli oggetti basato su prototipi. In realtà trae ispirazione da molte delle lingue già menzionate in altre risposte.

Io is a dynamic prototype-based programming language. The ideas in Io are mostly inspired by Smalltalk (all values are objects), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), Lisp (code is a runtime inspectable / modifiable tree) and Lua (small, embeddable).

    
risposta data 21.10.2011 - 13:06
fonte
4

Erlang. E sì, Erlang è un linguaggio orientato agli oggetti, poiché soddisfa tutti e tre i punti della definizione di OO.

    
risposta data 21.10.2011 - 01:53
fonte

Leggi altre domande sui tag