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

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.



Per scrivere un commento

knowledge base
  1. La programmazione
  2. Gli algoritmi
  3. Il linguaggio macchina
  4. Cos'è uno pseudocodice
  5. I programmi informatici
  6. Le variabili
  7. Le espressioni
  8. Le strutture di controllo
  9. Le funzioni