Considera la seguente gerarchia nella notazione C ++:
class A
{
public:
virtual void doStuff()=0;
virtual void doOtherStuff()=0;
};
class B:public A
{
public:
void doStuff();
void doOtherStuff();
};
class C:public A
{
public:
void doStuff();
void doOtherStuff();
};
Supponiamo ora che il codice per doStuff sia identico in B e C. Qual è la migliore pratica di
- implementare doStuff in una classe D: pubblico A e lasciare che B e C derivino da A
- Lascia che il compito reale venga eseguito in una funzione chiamata da doStuff sia in B che in C
In qualche modo quest'ultimo sembra più pulito, vero? Va notato che ci sono altri metodi in B e C con implementazioni comuni, e che nel modello di sottostringa, il concetto di D non esiste.