Articolo originale: Object Oriented Programming in C++

La programmazione orientata agli oggetti, in breve OOP (Object Orienting Programming), mira a implementare entità del mondo reale come ereditarietà, incapsulamento e polimorfismo nella programmazione.

Lo scopo principale della OOP è di tenere insieme dati e funzioni che operano su di essi in modo che nessuna altra parte di codice possa accedere a tali dati eccetto queste funzioni.

Impareremo le diverse caratteristiche della programmazione orientata agli oggetti in linguaggio C++.

Oggetto

Gli oggetti costituiscono le entità base nella fase di esecuzione in un sistema orientato agli oggetti. Gli oggetti sono istanze di una classe, che è un tipo di dato definito dall'utente.

class person
{
    char name[20];
    int id;
public:
    void getdetails(){}
};
 
int main()
{
   person p1; //p1 è un oggetto 
}

Gli oggetti occupano spazio in memoria e hanno un indirizzo associato come un record in pascal o una struttura o union in C.

Quando un programma viene eseguito, gli oggetti interagiscono scambiandosi messaggi.

Ciascun oggetto contiene dei dati e del codice per manipolarli. Gli oggetti possono interagire senza aver bisogno di conoscere i dettagli o il codice di ciascun altro. È sufficiente sapere quale tipo di messaggio viene accettato e il tipo di risposta ritornata dagli oggetti.

Classe

Una classe è un modello che rappresenta dati e funzioni o metodi. Una classe non occupa spazio.

class nome_classe
{
  private:
     //dichiarazione di dati e funzioni membro
  public:
     //dichiarazione di dati e funzioni membro
  protected:
     //dichiarazione di dati e funzioni membro	
};

Una classe è un tipo di dato definito dall'utente come le strutture e le union in C.

Nella modalità predefinita, le variabili nella classe sono private, ma in caso di struttura sono pubbliche, nell'esempio più sopra person è una classe.

Incapsulamento e Astrazione Dati

Tenere insieme (combinare) dati e funzioni in una singola unità è noto come incapsulamento. I dati non sono accessibili direttamente dal mondo esterno, ma solo tramite i metodi e le proprietà esposti dalla classe. Questo isolamento dei dati dall'accesso diretto da un programma viene detto occultamento di dati oppure occultamento di informazioni.

Per astrazione dati ci si riferisce al fatto che vengono fornite solo le informazioni necessarie al mondo esterno e vengono nascosti i dettagli dell'implementazione.

Per esempio considera una classe Complex che contenga le funzioni pubbliche getReal() e getImag(). Possiamo implementare la classe come un array di due elementi oppure come due variabili.

Il vantaggio dell'astrazione è che possiamo modificare l'implementazione in qualsiasi momento e gli utenti della classe Complex non saranno interessati visto che l'interfaccia dei nostri metodi rimane la stessa. Se l'implementazione fosse stata pubblica, non saremmo stati in grado di modificarla.

Ereditarietà

L'ereditarietà è il processo per il quale oggetti di una classe acquisiscono le proprietà di oggetti di un un'altra classe. Supporta il concetto di classificazione gerarchica.

L'ereditarietà fornisce riusabilità. Il che vuol dire che possiamo aggiungere caratteristiche a una classe esistente senza modificarla.

Polimorfismo

Il polimorfismo fa riferimento alla capacità di assumere più di una forma. Un'operazione potrebbe manifestare comportamenti diversi per istanze diverse. Il comportamento dipende dai tipi di dato usati nell'operazione.

C++ supporta il sovraccarico dell'operatore e della funzione. Il sovraccarico dell'operatore consiste nel fare in modo che un operatore assuma comportamenti diversi in istanze diverse. Il sovraccarico della funzione consiste nell'usare un singolo nome di funzione per eseguire tipi di compito differenti. Il polimorfismo è usato estensivamente nell'implementazione dell'ereditarietà.

Collegamento Dinamico

Nel collegamento dinamico, il codice che deve essere eseguito in risposta alla chiamata di una funzione viene deciso in fase di esecuzione.  C++ ha le funzioni virtuali che supportano questo.

Passaggio di messaggi

Gli oggetti comunicano tra loro inviando e ricevendo informazioni da ciascun altro. Un messaggio per un oggetto è la richiesta che una certa procedura venga eseguita, pertanto verrà invocata una funzione nell'oggetto ricevente che genera i risultati attesi.

Il passaggio di messaggi implica l0 specificare il nome dell'oggetto, il nome della funzione e l'informazione da inviare.

Altre risorse

Object Oriented Programming Concepts: How to go from Zero to One with Objects

Come spiegare concetti di programmazione orientata agli oggetti a un bambino di 6 anni