D'accordo, ma la geometria è stata inventata e sviluppata dall'uomo. E se all'uomo fa comodo pensare un quadrato come a un caso speciale di rettangolo o rombo non è che la natura pensi allo stesso modo.
"In natura non esistono linee dritte" disse Gaudì a proposito delle sue costruzioni strane.
Nella OOP pensare un quadrato come un rettangolo e/o rombo particolare (geometricamente parlando) porta a creare interfacce sconnesse e piene di errori (e non lo dico io, ma l'articolo).
La soluzione la suggerisci tu quando dici:
ergo "un quadrato è un caso speciale di parallelogramma".tecnicamente un quadrato è un caso speciale di rettangolo, e rettangolo sarebbe un caso speciale di parallelogramma
Io parlo di figura geometrica più generale, ma il concetto è quello.
@gaten
Io farei proprio così per semplicità. Se si trattasse di C++ al massimo farei ereditare Quadrato da Rettangolo in modo protected, ma poi come la mettiamo col Rombo?Quindi, in questo caso, conviene creare una interfaccia "Figura" e "Rettangolo" e "Quadrato" che implementano l'interfaccia "Figura", dopodichè implemento distintamente i metodi setWeight e setHeight in Rettangolo e Quadrato.
Tra l'altro io sarei anche più "talebano": toglierei la possibilità di modificare le dimensioni di una figura i metodi appositi set_qualcosa() e ne permetterei il dimensionamento solo attraverso il costruttore e successivo assegnamento.

Rispondi quotando
