Programmazione orientata agli oggetti: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Formattazione; aggiunto soggetto a frase. Etichette: Modifica da mobile Modifica da web per mobile Modifica da mobile avanzata |
→Descrizione: Spaziatura Nota #1; punteggiatura; forma; formattazione. Etichette: Nowiki inseriti da dispositivo mobile Modifica da mobile Modifica da web per mobile Modifica da mobile avanzata |
||
Riga 20:
La parte del programma che fa uso di un oggetto si chiama ''client''.
Un linguaggio di programmazione è definito ''ad oggetti'' quando permette di implementare tre meccanismi usando la sintassi nativa del linguaggio
* [[#Incapsulamento|incapsulamento]];
* [[#Ereditarietà|ereditarietà]];
* [[#Polimorfismo|polimorfismo]].
L<nowiki>'</nowiki>'''incapsulamento''' consiste nella separazione della cosiddetta [[Interfaccia (informatica)#Interfaccia nella programmazione orientata agli oggetti|interfaccia]] di una classe dalla corrispondente implementazione, in modo che i client di un oggetto di quella classe possano utilizzare la prima, ma non la seconda.
L<nowiki>'</nowiki>'''ereditarietà''' permette essenzialmente di definire delle classi a partire da altre già definite.
Il '''polimorfismo''' permette di scrivere un client che può servirsi di oggetti di classi diverse, ma dotati di una stessa [[Interfaccia (informatica)#Interfaccia nella programmazione orientata agli oggetti|interfaccia]] comune;
=== Classi ===
Riga 36:
La classe è composta da:
* ''attributi'' (analoghi ai membri di un [[Struttura dati#Record o struttura|record]]), cioè delle [[variabile (informatica)|variabili]] e/o [[costante (informatica)|costanti]] che definiscono le caratteristiche o proprietà degli oggetti instanziabili invocando la classe; i valori inizializzati degli attributi sono ottenuti attraverso il cosiddetto [[Costruttore (informatica)|costruttore]];
* ''metodi'', ossia
Un paragone (impreciso) con la [[matematica]] è il seguente: si può pensare che una classe definisca un [[insieme]] in modo intensivo, ovvero indicandone le caratteristiche invece che elencandone gli elementi, e che gli oggetti siano gli elementi di quell'insieme. Tuttavia, in matematica, il [[cardinalità|numero degli elementi]] è una caratteristica intrinseca dell'insieme stesso, e risulta definito nel momento in cui si definisce l'insieme, mentre in programmazione è possibile istanziare una classe un numero di volte arbitrario (teoricamente, da zero ad infinito; in pratica, da zero fino a esaurimento della [[memoria RAM|memoria]] del calcolatore) e che dipende dall'esecuzione del programma. Per questo motivo, è preferibile considerare la classe come un modello astratto istanziabile.
In altri termini, una classe è paragonabile al [[progetto]] di un'[[infrastruttura]] che può poi essere messa in opera/esercizio ovvero realizzata o meno con l'istanziazione dei suoi oggetti tutti con le medesime caratteristiche, ovvero gli attributi (con valori diversi), su cui opereranno i metodi o funzioni.
=== Oggetti ===
{{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
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]]''.
|