chiaro scuro wrote:
object based: ha gli oggetti, ma non alcune delle capabilities dell’object
orientation come ereditarieta’, polimorfismo, etc.
In realtà non c’è consenso sul termine object-based, è piuttosto ambiguo.
Non ho trovato fonti per il significato che indichi tu, che solitamente
pare usato per descrivere VisualBasic (insieme ad altri aggettivi più
dispregiativi ).
In generale però il significato più diffuso in ambito teorico è come
sinonimo di prototype-based, cioè un linguaggio in cui l’ereditarietà
non è centrata sulle classi ma sui singoli oggetti; gli oggetti vengono
creati per clonazione da un oggetto esistente, da cui ricevono anche un
“prototype”, che non è altro che un “esempio” delle proprietà e dei
metodi che il nuovo oggetto
avrà.Il nuovo oggetto però può ridefinire, anche a runtime, i propri metodi,
e addirittura cambiare prototype.
Esempio:
pele = {:name => “Pele”, :sport => “football”, :position => “Forward”}
pele_jr = {:name => “Pele Jr.”}
pele_jr.prototype = pele
pele_jr.name # => “Pele Jr.”
pele_jr.sport # => “football”
pele_jr.position # => “forward”
I linguaggi più diffusi che seguono questo paradigma sono Self, Lua,
JavaScript.
Ma anche Ruby ha caratteristiche che lo rendono un buon linguaggio
prototype-based (il fatto che sia interpretato, dinamico e basato su
message-passing). In effetti, l’esempio sopra è scritto in Ruby e viene
da Ruby Q. 214 [1]
Molti fanno l’errore di pensare che i linguaggi prototype-based siano
“inferiori” a quelli class-based, ma tipicamente queste sono le persone
che conoscono solo JavaScript, e male
1:
http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/0a7ff16b7d1c5d52/525f102359e5c801?lnk=raot&fwc=2&pli=1
Ciao,
Andrea