РЕДАКТОР: Я очень ценю всех участников. Я получил что-то от всех ответов и многому научился о OOD.
Я делаю простую виртуальную настольную военную игру. Чтобы представлять единицы на поле битвы, у меня есть следующая простая иерархия классов: абстрактный класс Unit и два производных класса, отряд и автомобиль.
У меня есть еще один класс, который имеет хэш-таблицу для всех единиц в игре. Значения хэш-таблицы имеют тип Unit, поэтому я могу ссылаться на них в O (1) раз.
По большей части это нормально, но иногда вызывающий НУЖНО знать, является ли что-то отрядом или транспортным средством для вызова определенных методов из этих производных классов. Чтобы учесть это, я создал два метода get, которые будут применять типы:
public Troop getTroop(String uniqueID) {
Unit potentialTroop = get(uniqueID);
if(potentialTroop instanceof Vehicle) {
throw new InternalError();
}
return (Troop) potentialTroop;
}
public Vehicle getVehicle(String uniqueID) {
Unit potentialVehicle = get(uniqueID);
if(potentialVehicle instanceof Troop) {
throw new InternalError();
}
return (Vehicle) potentialVehicle;
}
(Обратите внимание, что класс, для которого это принадлежит, просто расширяет Hashtable, поэтому метод get используется здесь - метод gethtable Java.)
Итак, я думаю, что это плохой дизайн OOD, потому что, если я еще больше расширяю модуль, мне придется добавить к этой хэш-таблице еще несколько проверок и больше методов #get.
Правильно ли я это говорю? Кто-нибудь имеет альтернативные предложения OOD, если это так?