Я пытаюсь действительно получить хорошее представление о том, как думать в терминах ООП, поэтому у меня в голове есть полус гипотетический сценарий, и я искал некоторые мысли.
Если бы я хотел разработать симуляцию для разных типов людей, взаимодействующих друг с другом, каждый из которых мог бы приобрести разные уровни мастерства в разных «навыках», каким был бы оптимальный способ сделать это?
Это действительно «навык», который меня немного увлек. Мои требования следующие:
-Каждый человек либо "имеет" навык, либо его нет
-Если у людей есть навыки, у них также есть «уровень квалификации», связанный с навыком.
-Мне нужен способ найти и выбрать каждого человека, который имеет определенные навыки вообще или на определенном уровне.
-Дизайн должен быть расширяемым (т.е. мне нужно иметь возможность добавить больше «навыков» позже)
Я рассмотрел следующие варианты:
есть гигантское перечисление для каждого включенного мной навыка, и пусть класс персонажа содержит
Участник "int Skills [TOTAL_NUM_SKILLS]". Массив будет иметь нули для «неприобретенных» навыков и от 1 до (макс.) Для уровней владения «приобретенными навыками».
имеют такое же гигантское перечисление, и класс персонажа содержит карту навыков (из перечисления) и числа, связанные с навыками, так что вы можете просто добавить только приобретенные навыки на карту и связать число таким образом.
Создайте конкретный класс для каждого навыка, и каждый из них наследует от абстрактного базового класса (скажем, ISkill), и пусть у класса персонажа будет карта
Действительно, вариант 1 кажется простым и понятным способом сделать это. Пожалуйста, критикуйте; есть ли причина, по которой это не приемлемо? Есть ли более объектно-ориентированный способ сделать это?
Я знаю, что вариант 3 сейчас не имеет особого смысла, но если бы я решил расширить его позже, чтобы навыки были чем-то большим, чем просто умения, связанные с ними (т.е. фактически связывали новые действия с навыками (ISkill) :: DoAction и т. Д.), Имеет ли это смысл в качестве опции?
Извините за широкий вопрос, я просто хочу посмотреть, имеет ли смысл эта линия мышления, или я вообще лаю не на том дереве.