Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Выбор классов (http://forum.oszone.net/showthread.php?t=200979)

Glorh 03-03-2011 08:23 1626031

Выбор классов
 
Здравствуйте!

Моя проблема не связана с написанием кода. Мне нужен совет - какие классы нужно создать (предметная область - автомобилизм и грузоперевозки), дабы в будущем реализовать на них наследование (в т.ч. множественное), полиморфизм и т.п.(все возможные отношения) Ещё некие контейнерные классы.

Почему спрашиваю, а не придумаю их сам. Дел в том, что ООП я почти вообще не знаю. Сейчас вот изучаю, а классы нужно придумать заранее, для диаграмм (требования курсовой). Но у меня есть опасения, что придумав какой-то класс, я не смогу на нём реализовать какое-то отношение (иерархия классов).
Извините за путаность и неточность в высказываниях.

Два класса даны: авто и грузовик.
класс Vehicle, что содержит в себе такие элементы (точнее будет содержать):
- поле «скорость» int Speed;
- поле «вес» int Mass;
- метод получение веса int GetMass();
- метод остановки void Stop(); (швидкість=0);
- конструктор с параметрами Vehicle(int Speed, int Mass).
от класса Vehicle наследуется класс Truck, что содержит в себе такие элементы:
-поле «вместимость» int Capacity;
-поле «вес груза» int Cargo;
-конструктор с параметрами Truck(int Speed, int Mass, int Capacity);
-метод «загрузить груз» int Load(int Mass); (если успешно, то возвращает 0, иначе -1);
-метод «выгрузить груз» int UnLoad(); (возвращает вес груза и устанавливает его в 0).


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

Заранее спасибо. надеюсь на помощь, т.к. диаграмму нужно сдать уже завтра:(

С уважением.

Beyound 03-03-2011 18:01 1626501

вы забыли написать зачем все это нужно, какая перед вами задача. Ибо классы пишутся под задачи. А так вдруг вам нужно будет посчитать количество шайб 12 размера у всех автомобилей только в двигателе а у вас в классе такой переменной нет. А вообще лучше как сделать - написать/нарисовать блок-схему программы и определиться, какие значения вам нужны,- вот их то и помещайте в классы, объявляйте еще гдето и т.п.
определиться с наследованием можно точно также - есть скажем класс-родитель машина у которой есть показатели скажем скорость движения, расход топлива, топлива в баке, количество дверей и т.д. далее думаете - а что вас интересует более детально. Ага - двигатель, пусть тогда это будет отдельный класс, который будет объявлен переменной в классе "машина", ну и в двигателе соответственно предусмотрено там обороты, объем движка и т.д. что интересует. Создадим класс-наследник "Лада-калина", родитель "машина" и добавим к нему функции ломаться, неработать габариты, переменные какиенить... так что тут мона извращаться пока фантазия не кончится. Определитесь что вам нужно и пишите под это классы.

Glorh 03-03-2011 19:38 1626588

Цитата:

Цитата Beyound
определиться с наследованием можно точно также - есть скажем класс-родитель машина у которой есть показатели скажем скорость движения, расход топлива, топлива в баке, количество дверей и т.д. далее думаете - а что вас интересует более детально. Ага - двигатель, пусть тогда это будет отдельный класс, который будет объявлен переменной в классе "машина", ну и в двигателе соответственно предусмотрено там обороты, объем движка и т.д. что интересует. Создадим класс-наследник "Лада-калина", родитель "машина" и добавим к нему функции ломаться, неработать габариты, переменные какиенить... так что тут мона извращаться пока фантазия не кончится. Определитесь что вам нужно и пишите под это классы. »

Спасибо за объяснения.

Это задача по курсовому проекту(1 курс) и на примере классов нужно показать работоспособность классов и работу всех этих отношений. Формулировка более чем расплывчатая, понимаю.) Но в задании, увы, точно не сказано как это делать. А с учётом того что С++ я почти не знаю - я в растеряности.

Всё это нужно пока всего лишь для UML-диаграмм, но потом то, что я там "нарисую" надо будет закодить. У меня есть опасения, что я не смогу это сделать - поэтому и прошу помощи.

Так что блок-схема отпадает.

А за быстрый совет спасибо ещё раз:)

Hilaly 05-03-2011 10:11 1627656

В качестве контейнеров можно было бы использовать шаблоны из std, но если вам надо их реализовать самому, можно поступить так:

class ConteinerVehicle
{
private:
Vehicle vehicles[MAX_COUNT];
int Count;
public:
int GetCount();
Vehicle GetVehicle(int i);
void PutVehicle(Vehicle& data);
}
конечно можно объявить поля как public и работать с ними как с обычными переменными, но считается что лучше их скрыть и объявить методы для доступа к полям. Тем более что у вас курсовая работа)
Теоретически вы можете помещать в этот контейнер и производные классы, правда как вы будете с ними работать?))) ;)
аналогично можно объявить контейнер для любого класса
но лучше использовать шаблоны, вот пример:

template<class T>
class Conteiner
{
private:
T items[MAX_COUNT];
int Count;
public:
int GetCount();
T GetItem(int i);
void PutItem(T& data);
}


Время: 16:53.

Время: 16:53.
© OSzone.net 2001-