Programmazione orientata agli oggetti: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Orfanizzo Java (linguaggio) → Java (linguaggio di programmazione) using AWB |
m tag obsoleti |
||
Riga 46:
{{vedi anche|Oggetto (informatica)}}
Un ''oggetto'' è una istanza di una classe. Esso è dotato di tutti gli attributi e i metodi definiti dalla classe, ed agisce come un fornitore di "messaggi" (i metodi) che il codice eseguibile del programma (procedure o altri oggetti) può attivare su richiesta.<br />
''Inviare un messaggio ad'' un oggetto si dice, in gergo, ''invocare un metodo su'' quell'oggetto. Il metodo riceve come parametro (spesso implicito) l'oggetto su cui è stato invocato, che può essere referenziato tramite una parola-chiave o una sintassi apposita, anche se è passato come parametro implicito; per esempio, in [[C++]], in [[Java (linguaggio di programmazione)|Java]], e in [[C sharp|C#]] si usa la parola-chiave <
Dal punto di vista del calcolatore, ogni oggetto è identificato da una certa [[memoria RAM|zona di memoria]], nella quale sono memorizzati gli ''[[Attributo (programmazione)|attributi]]'', e il valore di questi ultimi determina lo stato interno dell'oggetto. ''Istanziare'' un oggetto vuol dire [[allocazione della memoria|allocare]] memoria ed eventualmente inizializzarla secondo le specifiche definite dalla classe. Molti linguaggi forniscono un supporto per l'inizializzazione automatica di un oggetto, con uno o più metodi speciali, detti ''[[Costruttore (informatica)|costruttori]]''. Analogamente, la fine della vita di un oggetto può essere gestita con un metodo detto ''[[distruttore (informatica)|distruttore]]''.
Riga 68:
; Esempio
Se nel programma esiste già una classe <
=== Sottotipizzazione ===
Riga 74:
Sebbene concettualmente esistano delle differenze ben marcate, il meccanismo di eredità fra classi (''subclassing''), attraverso il meccanismo del polimorfismo per inclusione, permette nei linguaggi ad oggetti di modellare l'eredità fra tipi (''subtyping'').
Secondo il [[principio di sostituzione di Liskov]], un tipo <
Con gli opportuni accorgimenti è possibile creare una relazione di classe-sottoclasse che rispetti anche i vincoli della relazione tipo-sottotipo. Da un punto di vista sintattico, ciò richiede che tutti i metodi della superclasse siano presenti nella sottoclasse, e che le rispettive ''[[Firma (programmazione)|signature]]'' siano compatibili. Di conseguenza, una sottoclasse che voglia definire un sottotipo può ridefinire i metodi della superclasse, ma non può eliminarli. La ''signature'' dei metodi può essere solo parzialmente modificata, rispettando dei vincoli sulla variazione dei parametri rispetto alla catena di eredità.
|