Voglio modellare alcune strutture matematiche. Per questo scopo voglio definire un'interfaccia, una classe astratta per algoritmi di uso generale e implementazioni concrete di quella classe (ne ho in mente tre).
Ora sorge la situazione che gli algoritmi di scopo generale che non dipendono dai dettagli della struttura dati, ma dipendono solo dai tre metodi fondamentali int Length()
, Set<int> DescentSet()
e int[] Normalform()
. Normalmente questo significa che userò il modello di modello di metodo, cioè, vorrei rendere astratti questi tre metodi e lasciare che le implementazioni concrete si occupino di esso.
Ma: quei metodi sono interdipendenti. Ho solo bisogno di qualcuno per definire gli altri due. Quindi dovrei davvero farne uno solo astratto. Ma le tre implementazioni previste sono esattamente diverse su quale di esse preferirebbero essere il metodo astratto: il primo ha un calcolo del tempo facile Length
, il secondo può facilmente calcolare DescentSet
e il terzo ottiene Normalform
gratuitamente.
Qual è la soluzione più pulita per questa situazione?