Voici mon code:objet suggestion de conception orientée
class Soldier {
public:
Soldier(const string &name, const Gun &gun);
string getName();
private:
Gun gun;
string name;
};
class Gun {
public:
void fire();
void load(int bullets);
int getBullets();
private:
int bullets;
}
Je dois appeler toutes les fonctions membres de Gun sur un objet de soldat. Quelque chose comme:
soldier.gun.fire();
ou
soldier.getGun().load(15);
Alors, qui est une meilleure conception? Masquage de l'objet pistolet en tant que membre privé et accès avec la fonction getGun(). Ou en faire un membre public? Ou je peux encapsuler toutes ces fonctions rendrait la mise en œuvre plus difficile:
soldier.loadGun(15); // calls Gun.load()
soldier.fire(); // calls Gun.fire()
Alors, quel est selon vous le meilleur?
Combinez les réponses de Stephen et Frustrated. Avoir un 'get_gun()' privé qui fait le travail nécessaire pour que le soldat obtienne le pistolet, comme le montre Stephen, mais dire au * soldat * ce qu'il faut faire, pas l'arme, comme le montre Frustrated. – GManNickG
@GMan - Merci, je suis d'accord. Cependant, au lieu de l'approche de @ Frustrated, dire au soldat quoi faire serait l'approche d'Austin? par exemple. soldier.Attack() au lieu de "soldier.loadGun()". – Stephen
@Stephen: Oui, vous pouvez rendre l'encapsulation aussi profonde que vous le souhaitez. Ma question portait uniquement sur cette partie. Bien sûr, vous pouvez dire soldier.Attack() et à l'intérieur de cette fonction, vous pouvez vérifier si (! Gun.getBullets()) retourner ou des choses comme ça. – pocoa