Quindi, probabilmente abbiamo tutti familiarità con l'esempio fornito nella maggior parte dei libri di testo del problema di sostituzione di Liskov che coinvolge una eredita da rettangolo . L'obiezione a questo approccio è che mentre un quadrato "è un" rettangolo in senso matematico, la classe genitrice, il rettangolo, non può essere facilmente descritta in termini di un quadrato e quindi questo modello viola una delle parti fondamentali della programmazione SOLIDA: il Liskov principio di sostituzione.
La mia domanda è che ha senso per noi invertire la dipendenza da "quadrato" è un "rettangolo in rettangolo" è un "quadrato". Ovviamente, in un contesto matematico questo è sbagliato. Ma una grande percentuale del motivo per cui utilizziamo OOP è ridurre la quantità di codice semi univoco che deve essere scritto o incollato da un posto all'altro. Sembra che una relazione tra queste due strutture abbia senso, ma chiaramente non è la relazione genitore-figlio che vediamo nella classica affermazione del problema.
Ho appena terminato un corso sull'ingegneria del software e non credo che questo punto sia stato chiaramente spiegato. So che solo perché esiste una relazione "è una" tra due classi non implica necessariamente che dovrebbe esserci alcuna astrazione, ma sembra soddisfacente in senso matematico perché ci sia una connessione tra le due classi.
Si noti inoltre che sto lavorando, come progetto collaterale, un piccolo motore di gioco e una sorta di astrazione tra di loro potrebbe avere senso.