Programmazione Orientata agli Oggetti in C++
Classi, oggetti, ereditarietà e polimorfismo per codice modulare e riutilizzabile
La Programmazione Orientata agli Oggetti (OOP) è un paradigma che permette di modellare il mondo reale attraverso entità chiamate classi e oggetti.
🎯 Vantaggi dell’OOP:
Riuso del codice, incapsulamento, astrazione, manutenzione più semplice e organizzazione migliore
1. Classi e Oggetti
📌 Differenza fondamentale:
Classe: Modello/template | Oggetto: Istanza concreta della classe
1.1 Struttura di una Classe
P
private
Accessibile solo all’interno della classe
Protegge i dati interni
private: int eta;
U
public
Accessibile da ovunque
Interfaccia pubblica della classe
public: void stampa();
R
protected
Accessibile dalla classe e dalle classi derivate
Utile per l’ereditarietà
protected: string nome;
1.2 Esempio Pratico: Classe Persona
Persona {
:
:
💡 Spiegazione:
• Incapsulamento: Gli attributi sono privati e accessibili solo tramite metodi pubblici
• Costruttore: Inizializza gli oggetti quando vengono creati
• Getter/Setter: Controllano l’accesso ai dati privati
2. Costruttori e Distruttori
📌 Funzioni speciali:
Chiamate automaticamente alla creazione e distruzione degli oggetti
2.1 Tipi di Costruttori
D
Default
Nessun parametro
Valori predefiniti
Persona()
P
Parametrizzato
Con parametri
Inizializzazione specifica
Persona(string n, int e)
C
Copia
Copia un oggetto esistente
Creazione per copia
Persona(const Persona& p)
2.2 Esempio Completo
Punto {
:
:
3. Ereditarietà
📌 Concetto chiave:
Le classi derivate ereditano attributi e metodi dalle classi base, favorendo il riuso del codice
3.1 Tipi di Ereditarietà
P
public
public → public
protected → protected
Mantenimento accesso
R
protected
public → protected
protected → protected
Limitazione accesso
V
private
public → private
protected → private
Accesso solo in classe
3.2 Esempio: Gerarchia Animale
Animale {
:
:
Cane : public Animale {
:
:
Gatto : public Animale {
:
:
4. Polimorfismo
🎭 Cos’è il polimorfismo?
“Molte forme” – lo stesso metodo si comporta diversamente a seconda del tipo dell’oggetto
4.1 Polimorfismo con Puntatori
Forma {
:
:
Rettangolo : public Forma {
:
:
Cerchio : public Forma {
:
:
💡 Spiegazione del polimorfismo:
• Metodo virtuale puro: = 0 rende la classe astratta
• Binding dinamico: A runtime viene deciso quale metodo chiamare
• Puntatori base: Possiamo gestire oggetti diversi con lo stesso tipo di puntatore
• Distruttore virtuale: Garantisce la corretta deallocazione
🎯 Esempio Completo: Sistema Veicoli
Applicazione pratica di tutti i concetti OOP
Sistema di Gestione Veicoli
Veicolo {
:
:
Auto : public Veicolo {
:
:
Moto : public Veicolo {
:
:
Concessionario {
:
:
6. Best Practices OOP
Regole fondamentali:
✅ Incapsulamento
Rendi gli attributi privati e fornisci metodi pubblici per l’accesso
✅ Distruttori Virtuali
Usa sempre distruttori virtuali nelle classi base con metodi virtuali
✅ Ereditarietà Pubblica
Preferisci l’ereditarietà pubblica per il polimorfismo
✅ Composizione over Ereditarietà
Preferisci la composizione quando possibile (“has-a” vs “is-a”)
✅ RAII
Resource Acquisition Is Initialization – gestisci risorse nei costruttori/distruttori
Conclusioni
Punti chiave dell’OOP:
✅ Classi e Oggetti
I mattoni fondamentali che racchiudono dati e funzioni in un’unica entità
✅ Costruttori e Distruttori
Gestiscono l’inizializzazione e la pulizia automatica degli oggetti
✅ Ereditarietà
Permette il riuso del codice e la creazione di gerarchie
✅ Polimorfismo
Rende il codice flessibile attraverso il binding dinamico
La Programmazione Orientata agli Oggetti rappresenta un modo potente e organizzato di sviluppare software. Gli esempi forniti, dalla semplice classe Persona fino al sistema complesso di gestione veicoli, dimostrano come l’OOP possa essere applicata per risolvere problemi reali in modo modulare, manutenibile ed efficiente. Buon coding! 🚀
🚀 Esercitazioni Pratiche C++
Metti in pratica ciò che hai imparato con queste esercitazioni complete
📚 Tutte le Esercitazioni
12 esercitazioni complete per padroneggiare il C++