Oggetto (informatica)

Da Wikipedia, l'enciclopedia libera.

Con oggetto, in informatica ed in particolar modo nell'ambito della programmazione, si intende nella maniera più generica una regione di memoria allocata.
Poiché i linguaggi di programmazione usano variabili per accedere agli oggetti, i termini oggetto e variabile sono spesso usati in alternativa tra loro. In ogni caso finché un'area di memoria non è allocata nessun oggetto può esistere.

Ambiti[modifica | modifica sorgente]

In particolare nella programmazione orientata agli oggetti, l'oggetto è un esemplare (in inglese: instance, comunemente anche se impropriamente tradotto con istanza) di una classe, unico e separato da altri oggetti (secondo il concetto di incapsulamento) con i quali può tuttavia "comunicare".

Generalmente si considerano come oggetti tutte quelle entità dotate di una propria identità. Tuttavia non tutte le entità di un problema devono essere necessariamente oggetti, dipende dalla natura del problema, che può consentire o richiedere di trascurare o meno certe entità perché non significative per il problema stesso. Gli oggetti, inoltre, possono anche essere composti da altri oggetti, in tal caso si deve approfondire l'analisi ed individuare i singoli componenti sino a che il livello più basso contenga soltanto oggetti atomici.

Per definire un oggetto è quindi necessario individuare:

  • le sue caratteristiche (attributi), effettuando la cosiddetta astrazione sui dati.
  • le azioni che può compiere e/o subire (metodi), effettuando la cosiddetta astrazione funzionale.

Un'istanza è un particolare oggetto di una determinata classe. Ogni istanza è separata dalle altre, ma condivide le sue caratteristiche generali con gli altri oggetti della stessa classe. Per esempio, il mio cane, "Killer", può essere rappresentato da un oggetto istanziato a partire dalla classe "cane".

In certi casi, alcuni oggetti possono essere immaginati come sottoprogrammi che possono comunicare fra di loro ricevendo o inviando messaggi attraverso i metodi.

Una classe può essere vista come un tipo di variabili e un oggetto (istanza) come una delle variabili di quel tipo. Infatti creando una classe, si definisce un nuovo tipo di dati.

In un linguaggio ad oggetti ogni elemento del linguaggio è chiamato oggetto perché lo si intende come una astrazione del medesimo oggetto del mondo reale. Un oggetto per essere tale può avere delle proprietà (variabili di istanza) e può compiere delle azioni, solitamente denominate metodi. Ritornando all'esempio precedente del cane, l'oggetto cane potrà avere come proprietà il numero di zampe, la tipologia del pelo, il colore, mentre i suoi metodi potrebbero essere 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. Questo oggetto definisce dei metodi e delle variabili d'istanza generiche, perché da questo oggetto si faranno poi discendere tutti gli altri oggetti, in questo modo:

  • object
    • animale
      • rettile
      • mammifero
        • canide
          • cane
        • felino
          • gatto

In una branca strettamente matematica dell'informatica il termine oggetto viene usato in senso puramente matematico per riferirsi a qualsiasi "cosa". Mentre questa interpretazione è utile nella discussione della teoria astratta, non è abbastanza concreta per essere utilizzata come primitiva nella discussione di materie più concrete (come la programmazione) che sono più vicine all'information processing. In questo caso, gli oggetti sono ancora entità concettuali, ma generalmente corrispondono a blocchi contigui di memoria (informatica) di una determinata dimensione in un determinato posto. Questo è dovuto al fatto che la computazione ed il processo dell'informazione alla fine richiedono uno schema di memoria. Gli oggetti, in questo senso, sono primitive necessarie per definire accuratamente concetti tipo reference, variabili, e name binding. Questo è il motivo per cui il resto dell'articolo si focalizzerà sull'interpretazione concreta di oggetto piuttosto che su quella astratta.

Nonostante un blocco di memoria possa apparire contiguo ad un livello di astrazione e non contiguo ad un altro, la cosa importante è che appaia contiguo al programma che lo tratta come oggetto. Ovvero, il programma si preoccupa che l'oggetto debba essere libero da reference interne, perché altrimenti non sarebbe più una primitiva. In altre parole, i dettagli di memorizzazione privata dell'oggetto non devono essere mostrati ai client dell'oggetto, e devono essere in grado di cambiare senza modificare il codice client.

Gli oggetti esistono solo all'interno di contesti che li riconoscono come tali; una parte di memoria contiene un oggetto solo se un programma lo tratta come tale (per esempio riservandolo per uso esclusivo di specifiche procedure e/o associandogli un tipo di dato). Per cui, la vita di un oggetto è l'intervallo di tempo durante il quale viene trattato come oggetto. Questo è il motivo per cui sono ancora entità concettuali, malgrado la loro presenza fisica in memoria.

In altre parole, i concetti astratti che non occupano spazio di memoria durante l'esecuzione non sono, per definizione, oggetti; ad esempio, il comportamento mostrato da un insieme di classi o tipi di dati nei programmi.

Per enfatizzare il fatto che un oggetto contiene informazioni utili, il termine data object è a volte usato per riferirsi a quell'oggetto.

Oggetti nella Programmazione orientata agli oggetti[modifica | modifica sorgente]

Nella Programmazione orientata agli oggetti (OOP), un'istanza di un programma è la rappresentazione in memoria RAM della classe a cui l'oggetto corrisponde. Gli oggetti nella OOP estendono la più generale nozione di oggetto descritta sopra includendo uno specifico tipo, che tra le altre cose tiene conto di:

  1. i membri dati che rappresentano i dati associati all'oggetto.
  2. metodi che accedono ai dati membri in modi predefiniti.

Nel caso di oggetti multipli, si può accedere ai dati membri solo attraverso i metodi, facilitando la garanzia che i dati siano sempre coerenti. Alcuni linguaggi non fanno differenza tra dati membri e metodi.

In un linguaggio in cui ogni oggetto viene creato da una classe, l'oggetto viene chiamato istanza di quella classe. Se ogni oggetto ha un tipo, due oggetti della stessa classe avranno lo stesso tipo di dato. Creare un'istanza di una classe a volte viene detto istanziare la classe.

Un esempio nel mondo reale potrebbe essere il "mio cane", che è un'istanza di un tipo di dato (una classe) chiamata "cane", che è a sua volta una sottoclasse di "animale". Nel caso di oggetto polimorfico, alcuni dettagli del suo tipo possono essere ignorati selettivamente, per esempio un oggetto "cane" potrebbe essere usato da una funzione che cerca un "animale". Lo stesso vale per "gatto, perché anche lui deriva dalla classe "animale". Mentre accediamo come "animale", alcuni attributi di "cane" e "gatto" restano inaccessibili, ad esempio l'attributo "coda", perché non tutti gli animali hanno una coda.

Tre proprietà caratterizzano gli oggetti:

  1. identità - la proprietà di un oggetto di distinguersi dagli altri
  2. stato - descrive i dati contenuti nell'oggetto
  3. comportamento - descrive i metodi che costituiscono le azioni dell'oggetto e le proprietà attraverso le quali l'oggetto può essere usato

Alcuni termini per tipi di oggetto speciali sono:

  • Oggetto singleton - un oggetto che rappresenta l'unica istanza di una classe nell'esecuzione di un programma.
  • Functor (oggetto funzione) - un oggetto con un solo metodo (in C++, questo metodo potrebbe essere l'operatore di funzione, "operator()") che agisce come una funzione (simile ad un puntatore C/C++ ad una funzione).
  • Oggetto costante - un oggetto con uno stato fissato all'atto della creazione e che non si modifica in seguito.
  • Oggetto First-class - un oggetto che può essere usato senza restrizioni.
  • Oggetto Container - un oggetto che contiene altri oggetti.
  • Oggetto Factory - un oggetto preposto alla creazione di altri oggetti.
  • Metaobject - un oggetto da cui altri oggetti possono essere creati (confrontare con classe, che non è necessariamente un oggetto)
  • Oggetto Prototipo - un metaobject specializzato da cui altri oggetti possono creati attraverso la copia.

Voci correlate[modifica | modifica sorgente]


informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica