Effettivamente avevo sentito parlare di questo appproccio "inverso".Originariamente inviato da MItaly
Se vuoi usare un approccio ad ereditarietà a container e algoritmi, devono essere i container ad ereditare dagli algoritmi, i quali tuttavia devono poter sapere "in anticipo" (tramite ereditarietà da una classe base astratta) quali saranno i metodi che le classi derivate impiegheranno per farle accedere ai dati.
Cioè la superclasse sarà "ordinamento", che però deve avere almeno in maniera "virtuale" delle classi di leggi e scrivi, che poi andranno ad essere implementate materialmente nelle classi figlio e varieranno da struttura dati a struttura dati, giusto?
Cioè io dichiaro ordinamento come superclasse che usa poi un'altra classe per leggere e scrivere.
Ma con la classe virtuale, ai fini dell'astrazione, come posso fare a dire in un secondo momento che quel leggi e scrivi si riferiscono ad una lista anzichè ad un array anzichè a non so che altro?
Se scrivessi superclasse Ordinamento che usa i metodi Matrice::Leggi e Matrice::Scrivi, poi dopo, dovrò a forza usare una matrice. Se volessi invece usare dei metodi "generali" e poi solo in un secondo momento dichiararli come "lettura di matrici" o di "liste"? O addirittura scegliere se si avvera una determinata condizione usa una lista, altrimenti una matrice?
Per capire un pò meglio all'atto pratico la cosa, sempre che non ti è troppo dispersivo in termini di tempo, ti andrebbe di dichiararmi in maniera pratica una classe ordinamento, che usa i metodi di una classe virtuale leggi e scrivi, e poi dichiarati in un secondo momento questa classe virtuale in modo da poter decidere se usare una lista o un array? Giusto perchè magari con un pò di codice alla mano su cui discutere magari mi riesce meglio capire![]()