Oggetto (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: correzione andate a capo e spazi
Riga 4:
 
== Ambiti ==
 
In particolare nella [[programmazione orientata agli oggetti]] (OOP), l'oggetto è un esemplare (in [[lingua inglese|inglese]]: ''instance'', comunemente anche se impropriamente tradotto con istanza) di una [[classe (informatica)|classe]], unico e separato dagli altri oggetti (secondo il concetto di [[Incapsulamento (informatica)|incapsulamento]]) con i quali può tuttavia "comunicare".
 
Line 13 ⟶ 12:
* le azioni che può compiere e/o subire ('''metodi'''), con la cosiddetta astrazione funzionale.
 
Un''''''istanza''''' è un particolare oggetto di una determinata [[classe (informatica)|classe]]. Ogni istanza è separata dalle altre, ma condivide con gli altri oggetti della stessa classe le sue caratteristiche generali, attraverso la comune descrizione dei campi e dei metodi.
 
Per esempio, il mio cane, "Bobbi", può essere rappresentato da un oggetto di nome bobbi creato come istanza della classe "Cane", con un attributo nome che contiene la stringa "Bobbi".
Line 21 ⟶ 20:
Una classe può essere vista come un tipo complesso (rispetto ai tipi semplici predefiniti detti primitivi) di [[Variabile (informatica)|variabili]] e un oggetto ([[Istanza (informatica)|istanza]]) può essere visto come una delle variabili di quel tipo. Infatti, creando una classe, si definisce un nuovo tipo di dato (nuovo, rispetto a quelli predefiniti e forniti con le librerie del linguaggio usato).
 
In un [[linguaggio di programmazione|linguaggio]] ad oggetti (come per es. Java) ogni elemento del linguaggio è un oggetto ed è inteso come una astrazione di un corrispondente oggetto del mondo reale.
 
Un oggetto del mondo reale ha delle caratteristiche e dei comportamenti. Mentre, un oggetto OOP è la rappresentazione informatica di un oggetto del mondo reale. Nella OOP le caratteristiche degli oggetti reali sono rappresentate usando ([[variabile di istanza|variabili di istanza]]) mentre i loro comportamenti sono rappresentati con blocchi di istruzioni detti ''metodi''.
Line 27 ⟶ 26:
Ritornando all'esempio del cane Bobbi, l'oggetto OOP corrispondente potrebbe avere delle variabili che descrivono il numero di zampe, la tipologia del pelo, il nome, il colore, e dei metodi con nomi significativi come ''corri'', ''mangia'', ''abbaia'', ''scodinzola''.
 
Un oggetto, dal punto di vista logico, non è mai un elemento a sé stante, ma deriva (ovvero estende ed ''eredita'' le funzionalità) sempre da un altro oggetto.
 
Solitamente, l'oggetto principale viene chiamato ''Object'' proprio per identificarlo con un oggetto del mondo reale quanto più generico possibile.
 
Per esempio, in Java, tutti gli oggetti sono una estensione della super classe Object da cui ereditano tutti gli attributi (variabili e metodi).
Line 53 ⟶ 52:
 
== Oggetti nella Programmazione orientata agli oggetti ==
Nella [[Programmazione orientata agli oggetti]] (OOP), un'istanza di un programma è la rappresentazione in [[memoria RAM]] della [[Classe (informatica)|classe]] a cui l'oggetto corrisponde.
 
Una classe (class) è una raccolta di dati, o meglio della loro descrizione e delle variabili per contenerli e dei metodi che operano su quei dati. Combinati assieme, dati e metodi descrivono lo stato e il comportamento di un oggetto.
Nella [[Programmazione orientata agli oggetti]] (OOP), un'istanza di un programma è la rappresentazione in [[memoria RAM]] della [[Classe (informatica)|classe]] a cui l'oggetto corrisponde.
 
Una classe (class) è una raccolta di dati, o meglio della loro descrizione e delle variabili per contenerli e dei metodi che operano su quei dati. Combinati assieme, dati e metodi descrivono lo stato e il comportamento di un oggetto.
 
Gli oggetti nella OOP estendono la più generale nozione di oggetto descritta sopra, includendo uno specifico [[tipo di dato|tipo]], che tra le altre cose tiene conto:
Line 63 ⟶ 61:
# dei suoi [[Metodo (programmazione)|Metodi]] che accedono ai dati associati a quell'oggetto, in modo predefinito.
 
Nel caso dei linguaggi OOP più rigorosi è possibile accedere ai dati di un oggetto solo attraverso i suoi metodi, facilitando la garanzia che i dati siano sempre coerenti.
In Java, questa esclusività è ottenuta anteponendo al tipo della variabile campo la parola riservata "private".
Per esempio, in Java, volendo rappresentare un oggetto reale caratterizzato dal suo nome potremmo scrivere nella sua classe:
Line 73 ⟶ 71:
In un linguaggio OOP (come per es. Java) ogni oggetto viene creato da una [[Classe (informatica)|classe]] e l'oggetto viene definito come una '''istanza''' della sua classe. Perciò, se ogni classe rappresenta un tipo di dato, due oggetti della stessa classe rappresenteranno lo stesso [[tipo di dato]]. Creare un'istanza di una classe viene detto anche '''[[istanziazione|istanziare]]''' la classe.
 
In pratica, un oggetto viene creato in base a un modello astratto chiamato classe.
Una classe consiste in un blocco di istruzioni caratterizzato da un proprio nome, che contiene la descrizione dei dati e delle variabili per contenerli (i campi) assieme alla descrizione delle istruzioni (metodi) per gestirli (leggerli e modificarli).
 
Notate che la classe contiene solo la descrizione dei dati e dei comportamenti degli oggetti creati sulla base di quella classe.
Perciò, prima di definire un oggetto dovremo descrivere in astratto la sua classe e dovremo definire le variabili necessarie a contenere i suoi dati e i metodi per gestirli.
 
In concreto l'oggetto è creato come istanza della sua classe e prende vita ricevendo da altri oggetti i dati costituiti dai valori da assegnare alle sue variabili. Giova ricordare che nella OOP ogni programma è costituito da oggetti che interagiscono tra loro (ricevendo dati da altri oggetti e trasmettendo dati ad altri oggetti).
 
Per esempio, dovendo rappresentare un cane di nome "Bobbi" potremo rappresentarlo come un'[[Istanza (informatica)|istanza]] di tipo ([[Classe (informatica)|classe]]) "Cane", che a sua volta sarà una sottoclasse della [[Classe (informatica)]] "Animale".
 
Nel caso di oggetto [[polimorfismo (informatica)|polimorfico]], alcuni dettagli del suo tipo possono essere ignorati selettivamente, per esempio un oggetto della classe "Cane" potrebbe essere usato da una funzione che cerca un oggetto di tipo "Animale". Lo stesso vale per un oggetto di tipo "Gatto", perché anche lui deriva dalla classe "Animale". Mentre accediamo a un oggetto di tipo "Animale", alcuni attributi di tipo"Cane" e "Gatto" potrebbero essere inaccessibili, come ad esempio l'attributo "coda", perché non tutti gli animali hanno una coda.
Line 90 ⟶ 88:
#l'[[Identità (informatica)|Identità]] - è la proprietà di un oggetto di distinguersi dagli altri ed è rappresentata dal suo nome;
#lo Stato - che è costituito dai dati associati a un oggetto, ed è rappresentato attraverso variabili associate a quell'oggetto;
#il [[Comportamento (informatica)|Comportamento]] - è descritto attraverso metodi che evocano le azioni che può compiere quell'oggetto.
#
#In particolare esistono diversi tipi di oggetti:
Line 105 ⟶ 103:
 
=== Esempi ===
Per capire meglio cosa sia un oggetto vediamo un semplice esempio del codice che in linguaggio Java è necessario per creare un oggetto che rappresenta un cane di nome "Bobbi".
 
Per prima cosa definiremo la classe Cane:
Line 154 ⟶ 152:
 
== Voci correlate ==
 
* [[Design pattern]]
* [[Programmazione orientata agli oggetti]]