Se 2 classi hanno le seguenti caratteristiche in comune:
- parte del modo in cui è rappresentato il loro stato (entrambi hanno un contenitore lineare)
- più metodi identici (codice identico, non solo firma)
Ma non sono sostituibili, cioè: svolgono ruoli diversi.
Allora come evito di ripetere quei metodi?
La soluzione ovvia sarebbe ereditaria, ma ho letto: "l'ereditarietà non è per il riutilizzo del codice". (Questo si applica qui? È davvero un caso di riutilizzo del codice?)
Non ti sto deliberatamente dicendo quale lingua, perché spero in una risposta agnostica per la lingua.
I metodi sono lunghe un paio di righe, tutti modificano il contenitore, uno di essi trasforma / estrae una sorta di "risultato finale" dal contenitore. Per ruoli intendo: sostituire l'uno con l'altro sarebbe valido codice eseguibile (nei luoghi in cui vengono utilizzati solo i metodi comuni), ma risulterebbe in errore logico / semantico. Per ereditarietà intendevo che introdurre una 3a classe come base / super con i metodi comuni, ma che sarebbe virtuale. Quindi per sostituzione intendevo sostituire un tipo "fratello" e non un sottotipo.