qui cadi in contradizione: dato che la natura non ha forme rigide la natura non può pensare niente del quadrato perché non esiste.
questo è un problema dell'OOP e non della geometria.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).
errato: il parallelogramma è solo un caso speciale di poligono a 4 lati che a sua volta è un caso speciale di poligono che è un caso speciale di poligonale... figura. Inoltre rombo e rettangolo sono un caso speciale di parallelogramma e quadrato un caso speciale di questi ultimi due.La soluzione la suggerisci tu quando dici:
ergo "un quadrato è un caso speciale di parallelogramma".
Io parlo di figura geometrica più generale, ma il concetto è quello.
Edit: ovviamente il quadrato è anche un caso speciale di parallelogramma, ma lo è allo stesso modo in cui è un caso speciale di linea.
Una soluzione già accennata da MItaly è la ereditarietà multipla.@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?
Questa è la soluzione più logica ed è anche il motivo per cui nei linguaggi che adottano principi funzionali non si incorre in questi problemi.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.