У меня есть глубокий вопрос об архитектуре ООП.
Как правильно общаться между объектом и его членами?
Позвольте мне объяснить, что я имею в виду, на некоторых примерах. (Я использую C ++, но это вообще не связано с вопросом.)
class Shield
{
int toughness;
//...
void broke();
};
class Human
{
String name;
int age;
//...
Shield my_shield;
void scream();
void equip_shield(Shield);
};
Human vadim;
Shield aegis;
vadim.equip_shield(aegis);
aegis.destroy();
Итак, теперь я хочу, чтобы человек кричал каждый раз, когда его или ее щит разрушен. Но у щита нет способа вызвать метод его владельца. Он просто не знает, кто его владелец.
Еще один пример.
class Human
{
//...
void die();
};
class Crowd
{
vector<Humans> people;
//...
};
Итак, теперь я хочу, чтобы толпа сказала всем людям покинуть ее, если в толпе менее 10 человек. Толпа может сказать такие команды, но эта проверка должна выполняться каждый раз, когда кто-то умирает в толпе. Итак, опять же, человек должен как-то сообщить толпе, что он или она мертв, и попросить толпу перепроверить количество людей в нем.
Четкий способ разобраться в этой ситуации - сохранить указатель на толпу в каждом человеке. Но это свалка, потому что людей может быть много. Также здесь есть проблема синхронизации (та же самая проблема, фактически, как толпа может знать о факте, который оставил Джон?).
Я считаю, что существует какой-то триггерный механизм для решения подобных проблем.
Спасибо.