Моделирование нескольких дополнительных интерфейсов (ООП) - PullRequest
0 голосов
/ 28 октября 2018

Я столкнулся с проблемой моделирования системы.

Представьте себе следующий сценарий:

  • Человек - это класс
  • Ученик - это человек
  • Программист - это Персона
  • Футбольный фанат - это Персона

Очевидно, что Персона была бы суперклассом из этих трех, но я хочу иметь возможностьЧеловек, который является студентом и Программистом без необходимости создавать отдельный класс, реализующий их как интерфейсы для каждой отдельной комбинации.Какой обычный способ моделировать что-то подобное?

Спасибо,

Антон

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Не следует путать виды, несущие личность, с ролями, которые они играют.Вместо этого вы должны использовать экземпляр Person со ссылками на экземпляры, представляющие роли, которые играет Person.Таким образом, Человек (или даже Робот) может одновременно играть роль Футбольного болельщика и Студента.

0 голосов
/ 29 октября 2018

Человек может иметь несколько ролей, которые могут время от времени меняться. Если вы работаете с Person и Role как с двумя отдельными понятиями и, имея отношение 1: n между двумя понятиями, вы избегаете идеи суперкласса.

Таким образом, высказывание «студент - это человек» также можно сформулировать как «человек может иметь роль ученика в течение определенного периода времени».

Person versus roles

0 голосов
/ 28 октября 2018

Ты не. StudentProgrammer, вероятно, просто Student, но определенно не Programmer, так как последний делает это для жизни. A StudentProgrammer это новый класс. Вы можете получить его из Student, в конце концов. Из моего POV это всегда хорошая идея, чтобы соотнести с объектами реального мира. Без вас заканчиваются странные конструкции, такие как множественное наследование, что просто неестественно. Автомобиль-амфибия не наследуется от автомобиля и корабля. Это собственный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...