Приветствую!
Есть задание по ООП, программа-поезд.
Определить иерархию вагонов и локомотивов. Создать несколько
объектов. Собрать поезд с определением его общей грузоподъемности или числа
пассажиров.
В принципе ничего сложного, но встает вопрос как лучше хранить объекты локомотивов и вагонов для поезда.
Сначала подумал сделать 2 массива:
public class Train {
private boolean prepared;
private String name;
private String type;
private List<AbstractWagon> wagons = new ArrayList<AbstractWagon>();
private List<AbstractLocomotion> locomotions = new ArrayList<AbstractLocomotion>();
...
Сейчас структура программы такова:
Есть абстрактный класс для локомотивов, от которого наследуются конкретные локомотивы,
грузовой и пассажирский.
Есть абстрактный класс вагонов, от которого наследуются 4 вида вагонов, крытый, платформа,
пассажирский, цистерна...
Потом появилась мысль объединить и вагоны и локомотивы для поезда под одним интерфейсом,
то есть абстрактные классы локомотива и вагона унаследовались еще и от VehiclesSet (единицы
подвижного состава)
public List<VehiclesSet> trainSet = new ArrayList<VehiclesSet>();
хотя в данном случае мы скрываем реализацию для конкретных объектов и придется довольствоваться
инструментами интерфейса (абстрактного класса), либо делать нисходящее преобразование...
Прошу помочь с идеей, каким образом лучше организовать класс поезда для хранения в нем локомотивов и вагонов,
приветствую критику!
Re: Просьба помочь с идеей по ООП
От:
Аноним
Дата:
30.09.12 07:50
Оценка:
Два класса: состав и единица состава. Ну еще может быть енум завести Лоокомотив|Паасажирский Вагон|Грузовой Вагон| чтобы тип единицы состава константами не хранить. С наследованием и прочей оопешной бредятиной не связывайтесь, настанет война и пассажирский вагон сможет перевозить грузы и товарняк в грузовых вагонах сможет перевозить людей.
функциональные вагоны нас спасут? )
А>Два класса: состав и единица состава. Ну еще может быть енум завести Лоокомотив|Паасажирский Вагон|Грузовой Вагон| чтобы тип единицы состава константами не хранить. С наследованием и прочей оопешной бредятиной не связывайтесь, настанет война и пассажирский вагон сможет перевозить грузы и товарняк в грузовых вагонах сможет перевозить людей.
Локомотив это не locomotion, а locomotive. Locomotion означает "передвижение".
Ce n'est que pour vous dire ce que je vous dis.
Re: Просьба помочь с идеей по ООП
От:
Аноним
Дата:
30.09.12 08:40
Оценка:
Здравствуйте, sobakam, Вы писали:
S>Приветствую! S>Есть задание по ООП, программа-поезд. S>Определить иерархию вагонов и локомотивов. Создать несколько S>объектов. Собрать поезд с определением его общей грузоподъемности или числа S>пассажиров.
... S>Потом появилась мысль объединить и вагоны и локомотивы для поезда под одним интерфейсом, S>то есть абстрактные классы локомотива и вагона унаследовались еще и от VehiclesSet (единицы S>подвижного состава)
S>public List<VehiclesSet> trainSet = new ArrayList<VehiclesSet>();
S>хотя в данном случае мы скрываем реализацию для конкретных объектов и придется довольствоваться S>инструментами интерфейса (абстрактного класса), либо делать нисходящее преобразование... S>Прошу помочь с идеей, каким образом лучше организовать класс поезда для хранения в нем локомотивов и вагонов, S>приветствую критику!
Добавь в свой элемент подвижного состава
1. вместимость пассажиров (непр 100чел)
2. грузоподъёмность (напр 60т)
3. длинна
4. вес (20т)
5. мощность (напр 10,8, [МВт])
6. тяга (напр 78тонн, для локомотива >0 для вагонов <0 (~ -1тонна))
И потом можешь собирать поезд. Из критерия ограничения мощности на контактный провод, ограничения по длине станций и положительной тяги.
Всё что с положительной тягой в начало состава. Остальное сортируешь по другим критериям.
Всем огромное спасибо!
Да, Locomotion это я борщанул конечно
Короче долго думал думал и оставил таки 2 массива...
Просто потому, что локомотив и вагон какбы слишком разные объекты.
Локомотив не имеет полезной так сказать вместимости и не может перевозить полезный груз в отличие от вагона,
еще он имеет двигатель, и еще в расчетах грузоподъемности поезда его масса минусуется по идее.
В принципе мы то со своей программерской высоты можем плевать как хотим, но мне просто стремно,
что проверяющий обругает, если я эти вагоны и локомотивы солью воедино
Вагоны и локомотивы должны быть наследниками единого класса (или
интерфейса). Например "вагон". С методами "прицепить", "отцепить".
Например к поезд можно включить несколько локомотивов. Они имеют свой
вес! Притом и пассажирские тоже.
Отдельный класс "поезд", который содержит в себе вагоны. И он может быть
и без локомотивов. И должен быть метод, возвращающий текущий локомотив.
И класс знает какого типа поезд (пассажирский или грузовой). У поезда
может быть график следования (отдельный класс, с пунктами назначения), а
может и не быть.
У локомотива должны быть машинист и т.п., и в поезде должен быть метод
получения машиниста (в реализации берущие его в локомотиве). Также может
быть назначение (маневровый тепловоз, локомотив элекропоезда...).
Кстати, тебе снизят оценку если назовёшь хоть одно свойство "вид", "тип"
или "класс". А в реальном программировании за это бьют ногами. Потому
что только автору известно, что скрывается за словом "тип" — например
это "товарный/пассажирский" или "скорый/пассажирсикий"? Называй любыми
другими, смысловыми словами, а вот эти — табу!
PS. Не делай лишнего. Этого вполне достаточно, чтобы показать знания.