Sobes.tech
Junior — Middle

Spiega cosa significa il principio di sostituzione di Liskov e come viene applicato nella programmazione orientata agli oggetti.

sobes.tech AI

Risposta dell'AI

Il Principio di Sostituzione di Liskov (Liskov Substitution Principle, LSP) è uno dei cinque principi SOLID nella programmazione orientata agli oggetti. Esso afferma che gli oggetti di una sottoclasse devono poter essere sostituiti agli oggetti della classe base senza alterare la correttezza del programma.

In parole semplici, se la classe B eredita da A, allora gli oggetti di B devono comportarsi in modo tale da poter essere usati al posto di quelli di A senza errori imprevisti o modifiche nella logica.

Questo si ottiene assicurando che la sottoclasse non:

  • Violare gli invarianti della classe base.
  • Restringa le precondizioni dei metodi (richiedendo dati di input più rigorosi).
  • Espanda le postcondizioni (fornendo risultati meno garantiti).

Esempio:

class Bird {
    func fly() {
        print("L'uccello vola")
    }
}

class Sparrow: Bird {
    override func fly() {
        print("Il passero vola")
    }
}

// Violazione del LSP se si aggiunge una classe Penguin che non può volare
class Penguin: Bird {
    override func fly() {
        fatalError("Il pinguino non può volare")
    }
}

In questo esempio, Penguin viola il LSP perché non può essere usato al posto di Bird senza errori. Sarebbe più corretto definire un'interfaccia separata per gli uccelli che volano.

In questo modo, il LSP aiuta a creare gerarchie di classi facili da estendere e mantenere, evitando errori imprevisti durante la sostituzione degli oggetti.