La Programmazione Orientata agli Oggetti (OOP) è un paradigma di programmazione che consiste nella definizione di robe chiamate oggetti, in grado di interagire tra di loro attraverso lo scambio di messaggi.

Vantaggi della OOP

La OOP rende più semplice l'esistenza terrena e ultraterrena in caso di interfacce grafiche ma, generalmente consente:

  • Naturale modellazione della realtà;
  • Stratificazione e specializzazione di dati e comportamenti;
  • Modularità del software;
  • Più semplice gestione e manutenzione di grandi progetti;

Classi ed Oggetti

Un oggetto è formato da dati e comportamenti.

Attributi e Metodi di un Ogetto

Cos'è una classe?

La programmazione orientata agli oggetti prevede l'organizzazione di strutture dati e procedure, in contenitori chiamati classi.

Una classe è un'astrazione di un modello reale, ed è definita come un tipo di dato astratto (ADT). In una classe troviamo attributi (dati) e metodi(comportamenti).

Cos'è un oggetto?

Un oggetto è un'istanza di una classe, ovvero un singolo esemplare di una certa categoria. Possono essere presenti più istanze della stessa classe, quindi più oggetti dello stesso tipo (a meno che non siano dei singleton, che vedremo in un altro articolo).

Caratteristiche dei linguaggi orientati agli oggetti

In genere un linguaggio si definisce ad oggetti se prevede:

  • Ereditarietà: attributi e metodi di una classe vengono ereditati dalle classi figlie;
  • Incapsulamento: alcuni attributi vengono resi privati, per poter essere modificati/acceduti solo tramite metodi dell'oggetto;
  • Polimorfismo: l'oggetto può assumere il tipo di una sua superclasse.

Vediamo meglio queste proprietà.

Ereditarietà

Permette di estendere una classe, facendole ereditare le proprietà di un'altra classe e ridefinendone altri (overriding). Da questo segue che possiamo definire tipi e sottotipi.

L'ereditarietà ci permette di vedere le relazioni di parentela tra classi che ereditano dalla stessa superclasse, come un albero radicato.

Ereditarietà nella Programmazione Orientata agli Ogetti

classe Mezzo {
    acceso (tipo booleano);
    posizione (tipo Posizione);
    velocita (tipo float);
    destinazione (tipo Luogo);

    accendi();
    spegni();
}
classe Aereo estende Mezzo {
    quota (tipo float);
    carrelloAperto (tipo booleano);
    ...
    }

La classe Aereo eredita le proprietà della classe Mezzo, aggiungendone due: quota e carrelloAperto.

Incapsulamento

Incapsulamento nella Programmazione Orientata agli Ogetti

Prevede l'alterazione dello stato dell'oggetto, utilizzando sue proprie procedure.

Ad esempio, per accedere un'auto, dovò usare un'apposito metodo accendi(), invece che accedere direttamente l'attributo acceso, rischiando di creare inconsistenze.

Polimorfismo

Proprietà per cui un oggetto può assumere la forma di un oggetto più generico che lo descrive (per questo poliforme). Questo concetto è legato all'ereditarietà, e permette la creazione di un oggetto A, istanziandolo da una sua sottoclasse B (cioè che eredita).

Mezzo boeing747 = new Aereo();