Esiste una best practice per qualcosa di simile?
(Esempio in C ++)
class A {
public:
int usefulParameter;
std::vector<B*> bContainer;
};
class B {
public:
void needsUsefulParameter(int u);
};
Ci sono dei buoni modi per gli oggetti della classe B
di accedere ai campi dalla classe A
, anche se potrebbero non essere strettamente correlati? In questo caso, A
"ha un" B
, ma non necessariamente "possiede un".
Lo scopo della funzione è responsabilità di A
, oppure si trova con B
?
Per utilizzare il campo di A
e il campo di B
, potrebbe succedere come
class A {
public:
int usefulParameter;
void needsUsefulParameter(B* b);
};
dove A
ha la responsabilità di realizzare l'azione richiesta. Potrebbe anche succedere sul B
side
class B {
public:
int b_field;
void needsUsefulParameter(A* a);
};
Esempio: un gioco ha uno stato mondiale. I giocatori interagiscono con il mondo e le loro azioni dipendono dallo stato del mondo. Ad esempio, vogliamo confrontare la valuta, ma il valore della valuta cambia con la stagione. Durante l'estate (lo stato di gioco lo terrebbe), il gelato è una valuta di alto valore. In inverno, la lana è una valuta di alto valore.
In c ++, sarebbe bello sovraccaricare gli operatori di <, > <=, >=, ==
.
class Currency{
string currencyobject;
}
Currency w("wool");
Currency w("icecream");
cout << wool < icecream << endl;
Ma l'oggetto-mondo dovrebbe essere responsabile del calcolo di quel confronto, o le monete dovrebbero estrarre i campi dall'oggetto-mondo?
Scusa se non sono sicuro di quale sia il modo migliore per dirlo. Parte del mio problema è trovare le parole giuste da cercare. Qual è il nome per un super-oggetto che è un'aggregazione di sotto-oggetti? ecc. ecc. ecc.