Quote Originariamente inviata da shodan Visualizza il messaggio
Io non la vedo. Se in natura non esistono quadrati, allora il problema quadrato => caso particolare del rettangolo è solo un problema umano. E dato che la geometria è stata inventata dall'uomo, all'uomo fa comodo definire un caso particolare del rettangolo, quadrato.
Invece c'è perché dato che siamo noi a creare la gerarchia definendola siamo noi che abbiamo creato il quadrato. La natura non ha una definizione di quadrato e non ha una definizione di figura per il semplice fatto che queste non esistono ma sono nostre rappresentazioni (Che Schopenhauer sia con me). A parte tutto questo discorso filosofico: è semplicemente innaturale per l'uomo non pensare al quadrato come un caso speciale di rettangolo e rombo e, di conseguenza, è innaturale per ogni cosa "creata dall'uomo". Che poi tu dica: "Meglio andare contro le definizioni e la natura umana perché così è più semplice" è un'altro discorso, ma così non definisci la corretta e gerarchia.

Ma qui si sta parlando di OOP non di geometria. Se per sua natura l'OOP è meno precisa della geometria, si adatta la geometria all'OOP non viceversa.
OOP è un po' generico: ad esempio già utilizzando Eiffel come linguaggio si dimezzano i problemi.
E quindi? Il concetto rimane quello di raffinare il grezzo. Il punto di partenza scelto è tra quelli che ci fa più comodo. Altrimenti dovrei dire che in ultima analisi il quadrato è un caso particolare di punto in movimento. Bello, ma poco pratico
No, il concetto è diverso: puoi partire da più in alto o saltare delle astrazioni se non ti servono, ma non puoi modificare la gerarchia pretendendo che rimanga "corretta in linea teorica". Può funzionare anche da alterata, ma non è comunque corretta: ed è proprio qui che emergono evidenti problemi nell'oop, specialmente in quello a ereditarietà singola: perché come principio si propone di ricostruire la gerarchia reale, ma non ne è in grado perché troppo limitato (già Eiffel migliora molto la situazione).
Se non ricordo male Java ha tolto questa possibilità e nemmeno in C++ che chi ne è entusiasta. Io in C++ userei l'ereditarietà protetta, più che altro per nascondere l'interfaccia del rettangolo e definire la nuova interfaccia solo per il quadrato. Ma si può fare in Java (non lo conosco molto)?
In C++ l'ereditarietà multipla fa altamente schifo, è per questo che ho citato Eiffel.
Ce ne saranno altri. Non mancano i problemi, mancano le soluzioni
Non ho detto che questo è l'unico problema, ma che la tua soluzione, seppur possibile, è concettualmente sbagliata. La soluzione di non consentire modifiche invece può essere implementata senza errori concettuali.

Con questo non voglio dire che uno non possa scrivere la tua soluzione, ma che non si attiene alla realtà umana e che quindi commette errori concettuali e non si attiene al proposito dell'OOP.

Note:
Natura: che non riguarda l'uomo.
Natura umana/dell'uomo: modo di agire o pensare innato nell'uomo che impone i suoi schemi di ragionamento sul reale.
Rappresentazione: realtà mediata dagli schemi mentali umani.