// Car states : START, RUN, STOP
// START ==> RUN ==> STOP ==> Write
// CarFromStartToStop() :
// Car is initailly at STOP phase.
// We start the and car comes in RUN phase.
// Then at the end car comes in STOP phase.
// WriteCarResults() :
// Writes car's current status. eg : oil status, odometer etc.
class Info1 {
public:
void Run(){
CarFromStartToStop();
WriteCarResults();
}
private:
void CarFromStartTopStop(){
// Its own impelementation of how car will run.
}
void WriteCarResults(){
// Write car's current status for running from start to finish.
}
Car c;
};
// RUN ==> STOP ==> Write
// CarFromRuningToStop() :
// The car is in RUN phase.
// Then at the end car comes in STOP phase.
// WriteCarResults() :
// Writes car's current status. eg : oil status, odometer etc.
class Info2 {
public:
void Run(){
CarFromRuningToStop();
WriteCarResults();
}
private:
void CarFromRuningToStop(){
// Its own impelementation of how car will run.
}
void WriteCarResults(){
// Write car's current status for running from start to finish.
}
Car c;
};
Ho queste due classi. A prima vista direi che potremmo usare l'ereditarietà. Loro più di meno fanno la stessa cosa. Corrono l'auto e scrivono i dati. Ma quando guardo da vicino, non sono sicuro se l'eredità è una buona scelta.
Perché?
Poiché l'unico metodo comune (utilizzare lo stesso codice esatto) tra due classi è WriteCarResults. Altro quindi che non esiste un codice comune.
La mia domanda: come posso assicurarmi di non dover scrivere il codice che è comune tra la classe (WriteCarResults).
Opzioni:
-
Utilizza l'ereditarietà (per qualche motivo ritengo che questo approccio sia davvero artificiosa).
-
Estrai la funzione writeCarResults () dalla classe. (Mi piace questo approccio, ma non sono sicuro se questo è buono. Un altro problema che sento con questo approccio WriteCarResults () dovrebbe essere parte delle informazioni * classe).
Per favore fatemi sapere se esiste un design che non mi permetta di scrivere la funzione writeCarResults () due volte.