Хорошо, скажите, что я моделирую следующий футбольный клуб: Все люди - люди. Игрок является лицом и, следовательно, расширяет Индивидуум. Участник является лицом и, следовательно, расширяет Индивидуум.Если не полиморфизм, как я могу моделировать эти классы
суперкласса:
Individual {name, eyeColour}
Подклассы:
Player extends Individual {position}
Member extends Individual {subscription}
Том является владельцем футбольного клуба:
Individual i = new Individual("Tom", "Blue")
Боб & Тони являются Игроки:
Player p1 = new Player("Bob", "Green", "Goalkeeper")
Player p2 = new Player("Tony", "Blue", "Striker")
Стив является членом:
Member m = new Member("Steve", "Brown", 5.00)
Частные лица, игроки и члены все сохранялось в той же рода (Individual) в хранилище данных GAE с использованием объективизации.
name eyeColour position subscription ^d Tom Blue [missing] [missing] Individual Bob Green Goalkeeper [missing] Player Tony Blue Striker [missing] Player Steve Brown [missing] 5.00 Member
Что делать, если, например, Боб решает стать членом, а также игроком? Я хочу сохранить подписку. Я не могу рассказать Бобу индивидуальному персонажу, а затем опуститься до члена. Java не позволяет этого. Я не могу создать нового пользователя и скопировать все свойства объекта игрока Боба и сохранить его с тем же идентификатором - я потеряю его свойство Position. Мне нужен Боб, чтобы быть как членом, так и игроком в datstore, но НЕ в форме объекта (я не после многократного наследования) Я все еще хочу получить (Player.class, «Bob») и иметь объект Player или получить (Member.class, «Bob») и иметь объект Member. Мне не нужен объект, у которого одновременно есть свойства позиции и подписки.
Я также хочу, чтобы избежать этого является хранилищу:
name eyeColour position subscription ^d Tom Blue [missing] [missing] Individual Bob Green Goalkeeper [missing] Player Bob Green [missing] 10.00 Member Tony Blue Striker [missing] Player Steve Brown [missing] 5.00 Member
потому что Боб теперь имеет дублирование данных по имени и eyeColour, которые могли бы привести к inconsistancy данных.
Любые идеи о том, как смоделировать это?
Также, если Том станет игроком, или Стив станет участником?
Помимо решения OO, вы действительно можете быть Игроком, не являющимся членом? – sudocode
ОК, так что это плохой пример - предположим, что игроки по умолчанию не являются участниками. – Kevin