Programmazione orientata agli oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Reverted to revision 201579 by Leofbrj (talk): Rv (TwinkleGlobal)
Etichetta: Annulla
Riga 9:
==Storia==
Il concetto di '''classe''' può essere considerato l'erede del [[w:tipo di dato astratto|tipo di dato astratto]], una tendenza che si è sviluppata all'interno del paradigma della [[w:programmazione procedurale|programmazione procedurale]], secondo la quale un [[w:Modulo (programmazione)|modulo]] dovrebbe implementare un [[w:tipo di dato|tipo di dato]] definito dall'utente, con cui si possa interagire solo attraverso una [[w:interfaccia|interfaccia]] ben definita, che nasconda agli altri moduli i dettagli dell'implementazione, in modo che sia possibile modificarli contenendo gli effetti della modifica sul resto del programma.
La classe può essere vista come il costrutto che permette di realizzare questa astrazione con un supporto strutturato da parte del linguaggio.Non è finito qua inoltre la programmazione non è altro che la programmazione.
 
Il primo linguaggio di programmazione orientato agli oggetti fu il [[w:Simula|Simula]] ([[w:1967|1967]]), seguito negli [[w:Anni 1970|anni '70]] da [[w:Smalltalk|Smalltalk]] e da varie estensioni del [[w:Lisp|Lisp]]. Negli [[w:Anni 1980|anni '80]] sono state create estensioni orientate ad oggetti del linguaggio [[w:C (linguaggio)|C]] ([[w:C++|C++]], [[w:Objective C|Objective C]], e altri), e di altri linguaggi ([[w:Object Pascal|Object Pascal]]). Negli [[w:Anni 1990|anni '90]] è diventato il paradigma dominante, per cui gran parte dei linguaggi di programmazione erano o nativamente orientati agli oggetti o avevano una estensione in tal senso.
Oggi i linguaggi più usati tra quelli che supportano solo il paradigma di programmazione orientata agli oggetti sono Smalltalk ed [[w:Eiffel (linguaggio)|Eiffel]]. Tuttavia sono linguaggi in generale poco usati.
Line 20 ⟶ 21:
Le [[w:classe (informatica)|classi]] sono uno strumento per costruire [[w:struttura dati|strutture dati]] che contengano non solo dati ma anche il codice per gestirli.
 
Come tutti lei costruzionicostrutti che permettono di definire le strutture dati, una classe definisce un nuovo [[w:tipo di dato|tipo di dato]].
 
I membri di una classe sono dati (esattamente come i membri di un [[w:Struttura dati#record o struct|record]]), chiamati '''attributi''', e '''metodi''', ovvero [[w:funzione (informatica)|procedure]], che operano su un oggetto.
Line 58 ⟶ 59:
===Sottotipazione===
 
Se un oggetto di una sottoclasse può essere utilizzato al posto di un'istanza della superclasse, '''il tipo della classe derivata è detto ARA ("ao regà accannate")'''sottotipo'''. Questo richiede che tutti i metodi della superclasse siano presenti nella sottoclasse, e che le signature siano compatibili. Di conseguenza, una sottoclasse che voglia definire un sottotipo può ridefinire i metodi della superclasse, ma non può eliminarli sintatticamente né modificare le loro signature.
 
In numerosi linguaggi, invece, una sottoclasse può decidere di eliminare o cambiare le proprietà di accesso ad un metodo, il che fa sì che l'operazione di subclassing non sia corrispondente a quella di subtyping. Alcuni linguaggi ad oggetti, in particolare [[w:Sather|Sather]], dividono esplicitamente a livello sintattico subclassing e subtyping.