Не могу разобраться с логикой задания

89
01 февраля 2022, 11:30

На учёбе выдали вот такое задание:

Разработать программу, для обработки информации о строительных материалах: поступление, учет и отгрузка. Для этого требуется разработать классы. Базовый класс должен быть абстрактным. Первый производный класс определяет количество стройматериалов каждого типа, например 50 перекрытий. Другой класс хранит данные о каждом виде стройматериалов, например площадь и стоимость за квадратный метр. Далее следует класс, хранящий описание каждого вида стройматериалов, которое включает название и сорт материала.

Помогите разобраться, как эта иерархия вообще должна выглядеть?

• Почему один класс хранит информацию обо всех видах стройматериалов?

• Базовый класс должен быть абстракцией чего?

• Да вообще куча вопросов, не понимаю само задание.

Буду рад любой помощи: перефразируйте, сделайте рисунок, ну или что-то подобное.

Answer 1

Каждая задача имеет многие способы решения. Перед вами стоит задача и конкретный способ решения.

Почему один класс хранит информацию обо всех видах стройматериалов?

ответ на подобные вопросы однозначен: Потому что предлагается именно такой способ решения.

Для этого нужно просто взять ручку с бумагой и записывать точно так же, как требуется(если опыта не хватает для решения сходу): Нужно обработать информации о строительных материалах:

  • поступление,
  • учет,
  • отгрузка.

Как обработать, вы пока не решили(не знаете), но вы точно знаете, что для каждого из этих пунктов вы должны выполнять какие_то действия, а значит их можно написать в виде функций, которые и станут методами абстрактного класса Складское_помещение, или, вернее, информация о поступлении строительных материалов, поскольку вы еще не знаете что и как должно выполниться. Записывая, таким образом, информацию о том, что нужно делать, мы можем написать первоначальный вид наших классов. Например так:

class Info {
protected:  
    using Record = std::map<std::string, size_t>;
    Record map; //записывается название и количество
public:
    //поступление материалов
    virtual  size_t contains(const size_t);
    //учет материалов
    virtual Record& registration() = 0;
    //отправка
    virtual void dispatch() = 0;
};
//класс, определяющий  количество материалов каждого типа
class Identify : public Info {  
public:     
    Record& registration() final {/*...*/ }
    void dispatch() final {/*...*/ }
};
//описание
class Dep : public Info {
    //информацию получать из map
    enum Kind { I, II, III }; // какого сорта
public:     
    Record& registration() final;
    void dispatch() final;
    //количество поступившего материал
    size_t contains(const size_t) final;        
    //тут функция, для выдачи(вывода) названия и сорта
    //каким то образом(способ выбирайте сами)
};

Следующим делом является обнаружение недостатков, написанного. Лично я, пока не стал разбираться в каком классе какие методы стоит определять, и, следовательно, какие методы (не) нужно представлять как чисто виртуальными...

READ ALSO
Перемещение камеры вслед за персонажем

Перемещение камеры вслед за персонажем

Как сделать так, чтобы камера не флипалась (поворачивалась) вместе с персонажем, но перемещалась за с ним?

78
Передать DependencyProperty UserControl всем дочерним UserControl

Передать DependencyProperty UserControl всем дочерним UserControl

Есть 3 UserControl, вложенных друг в другаДля старшего UserControl прописаны DependencyProperty - цвет элементов, которые будут задаваться в разметке и привязываться...

154
Скрипт не видит rigidbody

Скрипт не видит rigidbody

Делаю скрипт для перемещения персонажа по урокам в интернетеЗастрял на моменте прыжка

178