L'estensione di una classe di ruby viola l'LSP?

0

Sto leggendo sui principi SOLID. Nelle esercitazioni e negli esempi di codice di Ruby, vedo spesso estensioni di sottoclassi come:

class House
  attr_reader :items
end

class Room < House
  attr_reader :chair
end

p House.chair = 'baroque_style'# => NoMethodError

Ovviamente gli esempi sono utili per mostrare quanto facilmente le classi siano manipolate in ruby, ma non si tratta di una violazione del Principio di sostituzione di Liskov?

    
posta atmosx 27.10.2015 - 18:17
fonte

1 risposta

4

No, LSP afferma che se S è un sottotipo di T, dovresti essere in grado di usare una S ogni volta che è previsto un T.

Nel tuo esempio, Room è un sottotipo di House , quindi dovremmo essere in grado di passare un'istanza di Room a qualcosa che si aspetta un House . Quello che poi fai è passare un House nel codice aspettando un Room (quindi stai usando una T, dove è prevista una S).

    
risposta data 27.10.2015 - 18:24
fonte

Leggi altre domande sui tag