Salta al contenuto principale

01 - Introduzione alla Programmazione Orientata agli Oggetti

Scopri i fondamenti della programmazione OOP: cosa sono le classi e gli oggetti, i 4 pilastri fondamentali, e quando usare questo paradigma nei tuoi progetti.

Cosa ne pensi di questo articolo?

In Breve

Scopri i fondamenti della programmazione OOP: cosa sono le classi e gli oggetti, i 4 pilastri fondamentali, e quando usare questo paradigma nei tuoi progetti.

Cos'è la Programmazione Orientata agli Oggetti

La Programmazione Orientata agli Oggetti (OOP) è un paradigma di programmazione che organizza il software attorno a oggetti anziché funzioni e logica. Un oggetto combina dati (attributi) e comportamenti (metodi) in un'unica entità, rispecchiando il modo in cui pensiamo al mondo reale.

💡 Concetti Fondamentali

  • Classe: Blueprint (modello) per creare oggetti
  • Oggetto: Istanza di una classe con dati specifici
  • Attributi: Dati/proprietà dell'oggetto
  • Metodi: Funzioni/comportamenti dell'oggetto

Dal Procedurale alla OOP

Nella programmazione procedurale, dati e funzioni sono separati. Nella OOP, sono incapsulati insieme, rendendo il codice più modulare e intuitivo.

Approccio Procedurale:

// Dati separati
let userName = "Mario";
let userAge = 30;

// Funzioni separate
function printUser(name, age) {{ '{' }}
  console.log(name, age);
{{ '}' }}

Approccio OOP:

// Dati e comportamenti insieme
class User {{ '{' }}
  name: string;
  age: number;

  print() {{ '{' }}
    console.log(this.name, this.age);
  {{ '}' }}
{{ '}' }}

I Quattro Pilastri della OOP

1. Incapsulamento

Nasconde i dettagli interni, esponendo solo ciò che è necessario attraverso modificatori di accesso (private, protected, public).

TypeScript - Incapsulamento
class BankAccount {{ '{' }}
  private balance: number = 0;

  deposit(amount: number) {{ '{' }}
    if (amount > 0) this.balance += amount;
  {{ '}' }}

  getBalance() {{ '{' }}
    return this.balance;
  {{ '}' }}
{{ '}' }}

const account = new BankAccount();
account.deposit(100);
console.log(account.getBalance()); // 100
// account.balance = 999; // ❌ Errore: balance è private

2. Ereditarietà

Permette di creare nuove classi basate su classi esistenti, riutilizzando e estendendo funzionalità.

TypeScript - Ereditarietà
class Animal {{ '{' }}
  protected name: string;

  constructor(name: string) {{ '{' }}
    this.name = name;
  {{ '}' }}

  move() {{ '{' }}
    console.log(`${{ '{' }}this.name{{ '}' }} si muove`);
  {{ '}' }}
{{ '}' }}

class Dog extends Animal {{ '{' }}
  bark() {{ '{' }}
    console.log(`${{ '{' }}this.name{{ '}' }} abbaia`);
  {{ '}' }}
{{ '}' }}

const dog = new Dog("Rex");
dog.move(); // "Rex si muove"
dog.bark(); // "Rex abbaia"

3. Polimorfismo

Permette di trattare oggetti di classi diverse attraverso un'interfaccia comune, con comportamenti specifici per ogni tipo.

TypeScript - Polimorfismo
interface Shape {{ '{' }}
  area(): number;
{{ '}' }}

class Circle implements Shape {{ '{' }}
  constructor(private radius: number) {{ '{' }}{{ '}' }}
  area() {{ '{' }} return Math.PI * this.radius ** 2; {{ '}' }}
{{ '}' }}

class Square implements Shape {{ '{' }}
  constructor(private side: number) {{ '{' }}{{ '}' }}
  area() {{ '{' }} return this.side ** 2; {{ '}' }}
{{ '}' }}

// Stesso metodo, comportamenti diversi
function printArea(shape: Shape) {{ '{' }}
  console.log(shape.area());
{{ '}' }}

printArea(new Circle(5));  // ~78.5
printArea(new Square(5));  // 25

4. Astrazione

Nasconde la complessità mostrando solo le caratteristiche essenziali. Definiamo "cosa" fa un oggetto, non "come" lo fa.

Quando Usare la OOP

✅ Usa OOP quando:

  • Il dominio del problema si modella bene con entità e relazioni
  • Serve riutilizzo del codice attraverso ereditarietà
  • Il progetto è complesso e crescerà nel tempo
  • Lavori in team e serve organizzazione chiara

❌ Evita OOP quando:

  • Il problema è semplice (script piccoli, utility)
  • Performance critiche (overhead delle classi)
  • Programmazione funzionale è più adatta (trasformazioni dati)

Esempio Pratico Completo

TypeScript - Sistema E-commerce
class Product {{ '{' }}
  constructor(
    public name: string,
    private price: number
  ) {{ '{' }}{{ '}' }}

  getPrice(): number {{ '{' }}
    return this.price;
  {{ '}' }}
{{ '}' }}

class ShoppingCart {{ '{' }}
  private items: Product[] = [];

  addItem(product: Product) {{ '{' }}
    this.items.push(product);
  {{ '}' }}

  getTotal(): number {{ '{' }}
    return this.items.reduce((sum, item) => sum + item.getPrice(), 0);
  {{ '}' }}

  checkout() {{ '{' }}
    console.log(`Totale: €${{ '{' }}this.getTotal(){{ '}' }}`);
    this.items = [];
  {{ '}' }}
{{ '}' }}

// Utilizzo
const cart = new ShoppingCart();
cart.addItem(new Product("Laptop", 999));
cart.addItem(new Product("Mouse", 25));
cart.checkout(); // "Totale: €1024"

Conclusione

La OOP è un paradigma potente che rende il codice più organizzato, riutilizzabile e manutenibile. I quattro pilastri (Incapsulamento, Ereditarietà, Polimorfismo, Astrazione) lavorano insieme per creare software robusto e scalabile. Nei prossimi articoli, esploreremo ciascun pilastro in dettaglio con esempi pratici avanzati.

🎯 Punti Chiave

  • OOP organizza codice attorno a oggetti con dati e comportamenti
  • Classe = blueprint, Oggetto = istanza con dati specifici
  • 4 pilastri: Incapsulamento, Ereditarietà, Polimorfismo, Astrazione
  • Usa OOP per progetti complessi che crescono nel tempo

Domande frequenti

Cos'è la Programmazione Orientata agli Oggetti?

La Programmazione Orientata agli Oggetti (OOP) è un paradigma di programmazione che organizza il software attorno a oggetti anziché funzioni e logica.

Quali sono le principali differenze tra la Programmazione Procedurale e la OOP?

Nella Programmazione Procedurale, dati e funzioni sono separati, mentre nella OOP sono incapsulati insieme, rendendo il codice più modulare e intuitivo.

Quali sono i Quattro Pilastri della OOP?

I Quattro Pilastri della OOP sono l'Incapsulamento, l'Ereditarietà, il Polimorfismo e l'Astrazione.

Perché la OOP è considerata un paradigma potente per lo sviluppo di software?

La OOP è considerata un paradigma potente perché rende il codice più organizzato, riutilizzabile e manutenibile grazie all'interazione dei Quattro Pilastri.

Fonti e approfondimenti

Prova Questi Strumenti

Strumenti gratuiti correlati a questo argomento.

Commenti

Caricamento commenti...

Accedi per commentare

Discuti questo articolo nella community

Unisciti al gruppo Telegram per discutere con altri sviluppatori, fare domande e condividere le tue esperienze.

Ti è piaciuto questo articolo?

Esplora altri contenuti sul blog o scopri i miei progetti