Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой код лучше соответствует ООП ? 
:(
    Опции темы
akizelokro
Дата 14.12.2013, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Менеджер точек и игроков всяко понадобится (контейнер точек можно и отбросить, если их множество достаточно прозаично и легко описывается "плоским" множеством (т.е., достаточно простой набор без дополнительных свойств точек). Функции перемещения нужны и там, и там (в классе игрока и в классе менеджера). Здесь должны учитываться такие зависимости, может ли в одной точке находиться более одного игрока, если нет, то менеджер делает перебор контейнера (множества игроков) с целью определить доступность хода, если ход разрешён, то вызывает для конкретного игрока метод Player::MoveTo(Point &)



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
akizelokro
Дата 14.12.2013, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Проблема вообще в рзаработанности ТЗ для задачи, написано оно, например, мной, или кем-то ещё (находится в стадии постоянного пересмотра). Если в стадии пересмотра и доработки, значит, придётся менять структуру и функциональную нагрузку схемы классов (что-то добавится, а может быть, и не добавится). В случае если добавится, то структура классов и функциональная нагрузка на классы и методы должна быть максимально гибкой, но и сразу включать необходимый набор ограничений, которые, вероятней всего, понядобятся в последующем.

Например, на первоначальном этапе выбрана схема "одна точка - не больше одного игрока", а в последующем может осуществиться переход к схеме "одна точка - от нуля до бесконечного числа игроков". Так что метод самого хода прописать в класс игрока Player::MoveTo(Point & dest), а более общий метод Game::MoveTo(Player & victim, Point& dest) в классе, содержащем контейнер игроков, и этот общий метод будет проверять допустимость хода и в случае возможности вызывать

Код

 Game::MoveTo(Player & victim, Point& dest) 
{
...
if(StepToExist(victim, dest))
victim.MoveTo(dest);
...
}


Для соображений удобства может показаться приемлемым написание что-то навроде функции
Код


Class Player {
  friend void MoveTo(Player &, Point dest);
}

Но тут надо понимать, что раз пишется "менеджер", то на стадии неокончательной схемы классов такие функции несут в себе риск появления ошибок.

Это сообщение отредактировал(а) akizelokro - 15.12.2013, 13:06


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.