La programmazione orientata agli oggetti

La programmazione orientata agli oggetti è un modo alternativo per affrontare un problema computazionale che riduce il numero di istruzioni nel programma. E' anche indicata con la sigla OO ( Object Oriented )

Come funziona la programmazione a oggetti? Nella programmazione procedurale tradizionale devo scrivere tutte le assegnazioni per ogni oggetto (dato). Nella programmazione a oggetti, invece, mi basta assegnare le proprietà a una classe. Poi associo ogni oggetto alla classe e l'oggetto eredita automaticamente tutte le proprietà della classe.
la differenza tra la programmazione procedurale e la programmazione orientata agli oggetti

Cos'è il paradigma orientato agli oggetti

E' un paradigma di programmazione più vicino al modo di pensare delle persone.

Si distingue dal paradigma procedurale che, invece, è più vicino al modo di elaborare i dati di una macchina.

Esempio. Quando penso allo smartphone, considero il suo stato (acceso o spento, livello di carica batteria, ecc) e alle cose che posso fare con lo smartphone (es. telefonare, navigare su internet, fotografare, ecc. ). Gli stati dell'oggetto sono i dati (es. variabili di istanza, attributi, campi) mentre le cose che si possono fare e il comportamento sono i metodi. Ad esempio, i metodi dello smartphone sono telefonare(), fotografare(), ecc.

Nella programmazione OO (Object Oriented) bisogna astrarre la realtà avvicinando i dati alle operazioni.

Devo creare degli oggetti tratti dalla realtà che mantengano il proprio stato (dati), siano interrogabili (metodi) e interagiscano tra loro.

Tutte le caratteristiche (proprietà+metodi) di un oggetto sono definite dalla classe (o dalle classi) a cui appartiene.

E ovviamente spetta al programmatore definire le classi.

un esempio di classe

Esempio. Tutti gli smartphone sono accomunati dalle stesse proprietà e funzioni che posso definire in una classe. Ad esempio, le proprietà di uno smartphone sono la memoria interna, la velocità del processore, ecc. mentre i metodi sono telefonare, fotografare, ecc.

Una volta definita la classe gli associo tramite un'istanza un oggettio che ne ereditano automaticamente le proprietà e metodi.

un esempio di istanza

Con più istanze posso creare più oggetti appartenenti alla stessa classe.

Gli oggetti appartenenti a una stessa classe hanno gli stessi metodi e le stesse proprietà (es. attributi, campi, variabili di istanza, ecc. ) ma possono comunque avere valori diversi.

Quindi, ogni oggetto ha comunque una propria identità che lo distingue dagli altri oggetti appartenenti alla stessa classe.

Una volta creati con un'istanza alla classe gli oggetti hanno una vita propria.

un esempio di classe e oggetti

Esempio. Due smartphone appartengono alla stessa classe "smartphone" e hanno le stesse proprietà "memoria interna" e "colore" ma il primo ha una memoria interna di 4GB ed è bianco mentre il secondo di 6GB ed è nero. Potrebbero anche avere comportamenti e metodi diversi. Ad esempio, il primo ha la fotocamera rotta mentre il secondo no.

Quando oggetti anche appartenenti a classi diverse comunicano tra loro si crea una rete di oggetti.

un esempio di rete di oggetti

Gli oggetti si riconoscono e comunicano tra loro tramite il riferimento, un valore univoco che identifica ogni oggetto presente nella rete.

Le classi, gli oggetti e gli attributi

Cos'è una classe?

Una classe è una famiglia di oggetti che ne definisce le proprietà.

Definisce le caratteristiche generali di un insieme di dati.

un esempio di classe e due oggetti

Esempio. La classe dei mammiferi definisce le caratteristiche comuni di tutti gli animali mammiferi.

Cos'è un oggetto?

Un oggetto è un dato o un'unità indipendente di codice utilizzabile in più programmi diversi.

Ogni oggetto può essere assegnato a una o più classe.

un esempio di appartenenza a due classi

Esempio. Il gatto e il cane sono due "oggetti" assegnati alla classe dei mammiferi. Contemporaneamente, possono anche essere assegnati alla classe degli animali carnivori. Vale la pena ricordare che nella programmazione informatica un oggetto è un dato e può essere qualsiasi cosa materiale o non materiale, vivente o non vivente. Quindi, anche un animale è un oggetto.

Cosa sono gli attributi?

Ogni classe è costituita da attributi (proprietà) comuni a tutti gli oggetti appartenenti alla classe.

A ogni attributo è assegnato un valore che può variare da un oggetto a un altro.

Per questa ragione sono anche dette variabili-istanza.

esempio classi attributi e metodi

Esempio. La classe delle automobili è composta dagli attributi "cilindrata", "alimentazione, "trazione", "colore", "peso", "marca". Ogni oggetto appartenente alla classe delle automobili condivide lo stesso elenco di attributi. Tuttavia, può avere valori diversi assegnati agli attributi. Nell'esempio precedente i due oggetti hanno lo stesso valore soltanto nell'attributo "trazione" mentre negli altri due attributi hanno valori diversi.

Cosa sono i metodi?

A ogni classe sono associati anche i metodi.

Un metodo è una funzione che definisce il comportamento degli oggetti.

Esempio. La classe degli esseri viventi è assegnata ai metodi nasce, muore, si riproduce, ecc. La classe delle automobili ai metodi parcheggiare, trasportare, viaggiare, ecc.

L'ereditarietà degli attributi e dei metodi

Una delle caratteristiche della programmazione a oggetti è l'ereditarietà.

Gli oggetti appartenenti a una classe ereditano gli attributi e i metodi della classe.

l'ereditarietà degli attributi e dei metodi

A cosa serve? Grazie all'ereditarietà è più facile definire gli oggetti. Devo solo associare gli oggetti alle classi e aggiungere eventualmente le caratteristiche particolari di ogni singolo oggetto.

Le sottoclassi e le superclassi

Anche una classe può appartenere ad altre classi ( dette superclassi ) ed ereditare metodi e attributi.

In questo caso è detta sottoclasse.

le sottoclassi e le superclassi

Esempio. La classe dei mammiferi è una sottoclasse degli animali. Eredita dalla classe degli animali molti attributi e metodi, senza doverli scrivere due volte ( es. durata della vita, riproduzione, ecc. ).

L'ereditarietà caratterizza tutti i linguaggi basati sulla programmazione a oggetti.

Possono comunque esserci delle differenze.

Esempio. Il linguaggio C adotta l'ereditarietà multipla, ogni classe può avere più superclassi. Il linguaggio Java, invece, usa l'ereditarietà singola, ogni classe può avere soltanto una superclasse.

Un esempio pratico

Creo la classe "mammifero".

Poi definisco una proprietà ( "genere" ) della classe e gli assegno un valore ( "animale" ).

mammifero.genere=animale

Definisco un'altra proprietà ( "essere-vivente" ) della classe per indicare se si tratta di un essere vivente oppure no.

mammifero.essere-vivente=si

A questo punto, apro un'istanza ( "gatto" ) e la associo alla classe ( "mammifero" ).

gatto=mammifero()

L'istanza eredita immediatamente tutte le proprietà della classe a cui è associata.

un esempio di programmazione a oggetti

Pertanto, se chiedo la proprietà "genere" dell'oggetto "gatto", il programma restituisce "animale".

gatto.genere=animale
gatto.essere-vivente=si

Inoltre, se chiedo la proprietà "essere-vivente" dell'oggetto "gatto", il programma restituisce "si".

In pratica, l'oggetto "gatto" ha ereditato la proprietà "genere" e "essere-vivente" dalla classe "mammifero".

Qual è il vantaggio del linguaggio a oggetti?

In un linguaggio procedurale avrei dovuto scrivere due istruzioni per associare alla variabile "gatto" le informazioni "mammifero" e "essere vivente".

Con la programmazione a oggetti, invece, è bastato un solo passaggio.

Nota. Quando gli oggetti sono migliaia e le proprietà sono centinaia, diventa considerevole il vantaggio del linguaggio a oggetti rispetto a quello procedurale.

lo schema della programmazione per classi, istanze e proprietà

Un esempio pratico

Se dovessi assegnare 10 proprietà a ogni oggetto, con il linguaggio a oggetti agirei nel seguente modo:

  1. creo una classe
  2. digito le 10 proprietà della classe
  3. associo ogni oggetto alla classe.

In questo modo, evito di dover scrivere decine di assegnazioni per ogni singolo oggetto.

il numero delle operazioni di assegnazioni nella programmazione a oggetti e procedurale

Esempio. Se dovessi assegnare 10 proprietà comuni agli oggetti “gatto”, “cane” e “cavallo”, con il linguaggio procedurale dovrei scrivere 30 assegnazioni (10+10+10). Con il linguaggio orientato agli oggetti ne bastano 13 (10+1+1+1). Quanto più sono i dati da assegnare, tanto maggiore è il vantaggio della programmazione a oggetti.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

La programmazione OOP