Oggetto (informatica)

Con il termine oggetto, in informatica ed in particolar modo nell'ambito della programmazione, si intende nella maniera più generica una regione di memoria allocata.

Ambiti

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

Generalmente, si considerano come oggetti tutte le entità dotate di una propria identità. Non tutte le entità di un problema, però, 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 giungere a un livello che contenga soltanto oggetti atomici.

Per "definire" un oggetto è quindi necessario individuare:

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

Un'"istanza" è un particolare oggetto di una determinata 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 chiamato "Nome" che contiene la stringa "Bobbi".

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

Una classe può essere vista come un tipo complesso (rispetto ai tipi semplici predefiniti, detti primitivi) di variabili e un oggetto (istanza) può essere visto come una delle variabili di quel tipo. Creando una classe, infatti, si definisce un tipo di dato nuovo rispetto a quelli predefiniti e forniti con le librerie del linguaggio usato.

In un linguaggio ad oggetti (come Java) ogni elemento del linguaggio è un oggetto e deve essere inteso come l'astrazione di un corrispondente oggetto del mondo reale.

Un oggetto del mondo reale ha delle caratteristiche e dei comportamenti, mentre un oggetto nella OOP è la rappresentazione informatica di un oggetto del mondo reale. Nella OOP le caratteristiche degli oggetti reali sono rappresentate usando (variabili di istanza) mentre i loro comportamenti sono rappresentati con blocchi di istruzioni detti "metodi".

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 sempre da un altro oggetto, di cui eredita ed estende le funzionalità.

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).

L'oggetto Object definisce dei metodi e delle variabili d'istanza generiche, perché da questo oggetto si faranno poi discendere tutti gli altri oggetti.

Ad esempio:

  • 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 è d'uso focalizzarsi 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 corrisponde all'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

Nella programmazione orientata agli oggetti (OOP), un'istanza di un programma è la rappresentazione in memoria RAM della classe a cui l'oggetto corrisponde.

Una classe (class) è una raccolta di dati, o meglio della loro descrizione e delle variabili che servono per descriverli e dei metodi usati per elaborarli. 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, che tra le altre cose tiene conto:

  1. dei suoi attributi o campi (fields) o dati membri che rappresentano e contengono i dati associati all'oggetto;
  2. dei suoi 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 nome "Nome" potremmo scrivere nella sua classe:

private String Nome;

Alcuni linguaggi non fanno differenza tra dati membri e metodi.

In un linguaggio OOP ogni oggetto viene creato da una classe e definito come una "istanza" della sua classe. Perciò, se ogni classe rappresenta un tipo di dato, due oggetti creati a partire dalla stessa classe avranno lo stesso tipo di dato.

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).

Notare che la classe contiene solo la descrizione dei dati e dei comportamenti degli oggetti creati sulla base di quella classe. Prima di definire un oggetto, quindi, si dovrà descrivere in astratto la sua classe e 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. Occorre 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", si potrà rappresentarlo come un'istanza del tipo (classe) "Cane", che a sua volta sarà una sottoclasse della classe "Animale".

Nel caso di oggetto 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". Quando si accede a un oggetto di tipo "Animale", alcuni attributi di tipo "Cane" e "Gatto" potrebbero essere inaccessibili, ad esempio l'attributo "Coda", perché non tutti gli animali hanno una coda.

A questo punto si può fare un altro passo avanti nella comprensione del concetto di oggetto della OOP. tutti gli oggetti hanno tre caratteristiche:

  1. l'Identità - è la proprietà di un oggetto di distinguersi dagli altri ed è rappresentata dal suo nome;
  2. lo Stato - che è costituito dai dati associati a un oggetto, ed è rappresentato attraverso variabili associate a quell'oggetto;
  3. il Comportamento - è descritto attraverso metodi che evocano le azioni che può compiere quell'oggetto.
  4. In particolare esistono diversi tipi di oggetti:
  5. Alcuni nomi sono usati per indicare alcuni oggetti speciali:
  • 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 venir creati attraverso la copia.

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:

class Cane {

  private String nome;

  // metodo costruttore
  Cane(String nome) { 
       this.nome = nome;
  }

  public getNome() {
       return nome;
  }
}

Dopo avere definito la classe "Cane" potremo creare l'oggetto "bobbi" come sua istanza con l'istruzione:

new

Il modo più semplice per impostare i dati dell'oggetto bobbi è quello di chiamare il metodo costruttore (omonimo della classe Cane) passandogli la stringa "Bobbi" attraverso le istruzioni (da inserire nel metodo main):

Cane bobbi = new Cane("Bobbi");

Per far visualizzare il contenuto della variabile d'istanza nome associato all'oggetto di tipo Cane e nome bobbi basterà scrivere:

System.out.print(bobbi.getNome());

Altri esempi Java:

class ObjectRecall {
     public static void main(String args[]) {
          Object O1 = new Object(); //Costruisce l'oggetto "O1" nella classe "Object"
          Object O2 = new Object(); //Costruisce l'oggetto "O2" nella classe "Object"

          String printFirstObject = O1.printMessage(); /*Richiama attraverso l'oggetto "O1" il metodo "printMessage" presente nella classe "Object" e lo assegna alla variabile "printFirstObject"*/
          String printSecondObject = O2.printMessage(); /*Richiama attraverso l'oggetto "O2" il metodo "printMessage" presente nella classe "Object" e lo assegna alla variabile "printSecondObject"*/

          System.out.println(printFirstObject); 
          System.out.println(printSecondObject); /*Stampa a schermo il contenuto di "printSecondObject", che (se il metodo "printMessage" stampa casualmente stringhe casuali) può essere diverso dalla precedente stampa in quanto richiamato con un diverso oggetto: "O2"*/
       }
}

Voci correlate

Altri progetti

Collegamenti esterni

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

Read other articles:

Pour les articles homonymes, voir Letnica (homonymie). Letnicë Letnica, Летница L'église catholique de l'Assomption de Letnica Administration Pays Kosovo District Gjilan/Gnjilane (Kosovo)Kosovo-Pomoravlje (Serbie) Commune Viti/Vitina Démographie Population 267 hab. (2011) Géographie Coordonnées 42° 17′ 31″ nord, 21° 27′ 07″ est Altitude 755 m Localisation Géolocalisation sur la carte : Kosovo Letnicë Géolocalisation sur la...

 

Family of transport proteins See also: Cardiac action potential Calcium channel, voltage-dependentCrystallographic structure of the L-type calcium channel complex (subunits α1S, α2, δ, β, and γ).IdentifiersSymbolCalcium channel, voltage-dependent Immunohistochemical analysis of L-type calcium channel Cav1.3 (CACNA1D) in human adrenal cortex. Marked immunoreactivity was detected in the zona glomerulosa. In the figure: ZG = zona glomerulosa, ZF = zona fasciculata, AC = adrenal capsule. Imm...

 

Mausoleum - Tomb Tower in Amol, IranTomb of Haydar AmuliNative name Persian: آرامگاه میر حیدر آملیTomb of Haydar AmuliTypeMausoleum - Tomb TowerLocationAmol, IranBuilt6th century ADLocation of Tomb of Haydar Amuli in Iran The Tomb of Haydar Amuli or Mir Heydar Amoli Tomb Tower and Monument Seyyed Se Tan (Persian: آرامگاه میر حیدر آملی) is the burial place of Haydar Amuli, the Iranian Mystic and Philosopher.[1] The mausoleum is located in Amol, Iran....

Scholastique MukasongaBiographieNaissance 20 décembre 1956 (67 ans)Province de Gikongoro (Ruanda-Urundi)Nationalités rwandaisefrançaiseActivité ÉcrivaineAutres informationsSite web scholastiquemukasonga.net/frDistinctions Liste détailléePrix Renaudot (2012)Prix Ahmadou-Kourouma (2012)Prix Simone-de-Beauvoir pour la liberté des femmes (2021)Chevalier des Arts et des LettresŒuvres principales Notre-Dame du Nil, La femme au pieds nus (d)modifier - modifier le code - modifier Wikida...

 

Mir Bacha KotDistrikNegara AfghanistanProvinsiProvinsi KabulPopulasi (2009)[1] • Total32.461Kode Pos1063 Mir Bacha Kot, Kabul adalah distrik di Provinsi Kabul, Afghanistan. Jumlah penduduk di provinsi ini pada tahun 2009 yaitu 32,461 jiwa. Referensi ^ (Inggris) Kabul Province. Diarsipkan dari versi asli (html) tanggal 2012-12-20. Diakses tanggal 2012-09-19.  lbsProvinsi KabulIbu kota: KabulDistrik Bagrami Char Asiab Deh Sabz Farza Guldara Istalif Kabul Kalak...

 

Ancient style of Chinese characters Seal scriptScript type Logographic Time periodc. 700 BC – c. 200 ADDirectionTop-to-bottom LanguagesOld ChineseRelated scriptsParent systemsOracle bone scriptSeal scriptChild systems Clerical script Regular script  This article contains phonetic transcriptions in the International Phonetic Alphabet (IPA). For an introductory guide on IPA symbols, see Help:IPA. For the distinction between [ ], / / and &...

保良局馬錦明夫人章馥仙中學Po Leung Kuk Mrs.Ma-Cheung Fook Sien College翻漆後的校舍東北面(2022年3月)地址 香港新界離島區大嶼山東涌富東邨类型津貼中學宗教背景無隶属保良局创办日期1997年学区香港離島區東涌校長柯玉琼女士副校长鄭健華先生,劉俊偉先生助理校长梁煥儀女士职员人数56人年级中一至中六学生人数約700人,24個班別校訓愛、敬、勤、誠校歌保良局屬下校歌�...

 

Despacito oleh Luis Fonsi menampilkan Daddy Yankee telah menjadi video dengan jumlah disukai terbanyak sejak Juli 2017, dengan total melebihi 34 juta pada Juli 2019. Artikel ini berisi daftar video yang paling banyak disukai di YouTube yang berisi 30 video dengan jumlah disukai terbanyak di platform video YouTube. Jumlah data disukai diambil dari halaman video itu sendiri. YouTube menerapkan tombol disukai dan tidak disukai pada halaman ini pada Maret 2010, bagian dari desain ulang utama situ...

 

UFC mixed martial arts event in 2012 UFC on Fuel TV: Franklin vs. LeThe poster for UFC on Fuel TV: Franklin vs. LeInformationPromotionUltimate Fighting ChampionshipDateNovember 10, 2012VenueCotaiArenaCityMacau, SAR, ChinaAttendance8,415[1]Total gate$1,300,000[1]Event chronology UFC 153: Silva vs. Bonnar UFC on Fuel TV: Franklin vs. Le UFC 154: St-Pierre vs. Condit UFC on Fuel TV: Franklin vs. Le (also known as UFC on Fuel TV 6) was a mixed martial arts event held by the Ultima...

يوهانا من النمسا   دوقة توسكانا الكبرى القرينة فترة الحكم21 أبريل 1574 - 11 أبريل 1578 معلومات شخصية الميلاد 24 يناير 1547 [1]  براغ  الوفاة 11 أبريل 1578 (31 سنة) [2]  فلورنسا  سبب الوفاة اضطراب النفاس  مكان الدفن كنيسة القديس لورينزو  مواطنة النمسا  الزوج فرانش�...

 

KlépierreIndustriPerumahan komersialDidirikan1990KantorpusatPrancisWilayah operasiSeluruh duniaTokohkunciJean-Marc Jestin (CEO)Pendapatan$1,242 miliarSitus webhttps://www.klepierre.com/ Klépierre ini adalah salah satu pemain utama di sektor real estat komersial dalam skala Eropa, dan pemain Eropa pertama yang berspesialisasi dalam pusat perbelanjaan, dengan portofolio senilai 23,8 miliar euro per 31 Desember 2017.[1] Itu terdiri dari pusat perbelanjaan besar dengan kantor yang terle...

 

For the former theater, see Regal Theater, Chicago. Avalon Regal TheaterAddress1641 East 79th StreetChicago, IllinoisUnited StatesCoordinates41°45′05″N 87°35′01″W / 41.75139°N 87.58361°W / 41.75139; -87.58361OwnerCommunity Capital Investment, LLCOperatorChicago Regal Foundation 501(c)(3)DesignationChicago Landmark(June 17, 1992)TypePerforming Arts CenterAfrican American Cultural CenterCapacity2,250 seatsConstructionOpenedAugust 29, 1927[citation needed&...

Dutch settlement (1624–1664) This article is about the settlement that became New York City. For other uses, see New Amsterdam (disambiguation). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: New Amsterdam – news · newspapers · books · scholar · JSTOR (January 2022) (Learn how and when to remove this mess...

 

The Timber and Stone Act of 1878 in the United States sold timberland in surveyed public lands of the United States within the states of California, Oregon, and Nevada, and in the Washington Territory. The legislation specifically noted that military, Indian, or other reservations of the United States within these territories were exempt. The price of sale was $2.50 per acre ($618/km2), and land was sold in 160 acre (0.6 km2) blocks.[1] Land that was deemed unfit for farming was ...

 

Рейксмюсеумнидерл. Rijksmuseum Amsterdam Здание Рейксмюсеума, 2019 год Дата основания 1800 Дата открытия 1885 Местонахождение Музеумплейн[англ.] Адрес Rijksmuseum Amsterdam, Postbus 74888, 1070 DN Amsterdam Посетителей в год 2 700 000 чел. (2019)[1]625 000 чел. (2021)[2] Директор Тако Диббитс[вд][3] С...

Rugby Africa Cup 2021-20222021-22 Rugby Africa CupCoupe d'Afrique 2021-22 Logo della competizione Competizione Rugby Africa Cup Sport Rugby a 15 Edizione 19ª Organizzatore Rugby Afrique Date dal 5 giugno 2021al 10 luglio 2022 Luogo Burkina Faso, Costa d'Avorio, Kenya, Uganda, Zimbabwe e Francia Partecipanti 14 Formula fase a gironi + play-off Sede finale Stadio Maurice David (Aix-en-Provence) Risultati Vincitore Namibia(9º titolo) Finalista Kenya Terzo Algeria Cronologia ...

 

Public park in Manhattan, New York Coleman PlaygroundHarold Hunter Skate Park Coleman Square Chinatown Skatepark[1] LES SkateparkColeman Playground in 2012TypeUrban parkLocationLower East Side, ManhattanNearest cityNew York CityCoordinates40°42′40″N 73°59′37″W / 40.7112°N 73.9937°W / 40.7112; -73.9937CreatedNew York City Department of Parks and RecreationOpenAll yearTerrainConcretePublic transit accessQ, F, D Trains Coleman Playground is a publ...

 

State of Brazil For other uses, see Bahia (disambiguation). Not to be confused with Bahai. This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs to be updated. Please help update this article to reflect recent events or newly available information. (October 2018) This article's lead section may be too short to adequately summarize the key points. Please consider expanding the...

For the data structure, see binary tree. Human settlement in EnglandBintreeBintry Mill 2005BintreeLocation within NorfolkArea5.99 km2 (2.31 sq mi)Population300 (2001 census[1]) 329 (2011)[2]• Density50/km2 (130/sq mi)OS grid referenceTG019236Civil parishBintreeDistrictBrecklandShire countyNorfolkRegionEastCountryEnglandSovereign stateUnited KingdomPost townDEREHAMPostcode districtNR20PoliceNorfolkFireNorfolkAmbulanceEast...

 

Residences of bureaucrats in imperial China Not to be confused with Yemen. For place in Guangdong, see Yamen, Guangdong. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Yamen – news · newspapers · books · scholar · JSTOR (October 2008) (Learn how and when to remove this message) YamenThe former yamen in Kowl...