Aquí está mi código:objeto de diseño orientado sugerencia
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;
}
Tengo que llamar a todas las funciones miembro de la pistola sobre un objeto soldado. Algo así como:
soldier.gun.fire();
o
soldier.getGun().load(15);
Entonces, ¿cuál es un mejor diseño? Ocultar el objeto de arma como un miembro privado y acceder a él con la función getGun(). ¿O convertirlo en un miembro público? O puedo encapsular todas estas funciones que harían la implementación más difícil:
soldier.loadGun(15); // calls Gun.load()
soldier.fire(); // calls Gun.fire()
Entonces, ¿cuál crees que es la mejor?
Combina las respuestas de Stephen y Frustrated. Tener un 'get_gun()' privado que funcione para que el soldado consiga el arma, como muestra Stephen, pero dile al * soldado * qué hacer, no el arma, como muestra Frustrado. – GManNickG
@GMan - Gracias, estoy de acuerdo. Sin embargo, en lugar del enfoque de @ Frustrado, decirle al soldado qué hacer sería el enfoque de @Austin. p.ej. soldier.Attack() en lugar de "soldier.loadGun()". – Stephen
@Stephen: Sí, puedes hacer que la encapsulación sea tan profunda como quieras. Mi pregunta fue solo sobre esta parte. Por supuesto, puede decir soldier.Attack() y dentro de esta función puede verificar si (! Gun.getBullets()) devuelve o cosas por el estilo. – pocoa