Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 26.04.2019
Сообщений: 3

Наследование, классы "сумки" и "обувь"

26.04.2019, 11:03. Показов 8338. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В магазине продаются сумки и обувь. Все товары имеют след характеристики: название, цена, количество, цвет и материал. Сумки дополнительно характеризуются габаритами (длина, ширина, высота) и количеством отделений; обувь - минимальный и максимальный размер. Описать соответствующие классы, для которых возможны ввод, вывод, и редактирование информации о товаре
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2019, 11:03
Ответы с готовыми решениями:

Создать абстрактный класс Footwear (Обувь), включающий базовые характеристики Обувь.
Создать абстрактный класс Footwear (Обувь), включающий базовые характери- стики Обувь. На его основе реализовать классы Boots (Сапоги) и...

Спроектируйте абстрактный класс Tovar и классы–потомки: Obuv (обувь), Odejda (одежда), Posuda (посуда)
Спроектируйте абстрактный класс Tovar и классы–потомки: Obuv (обувь), Odejda (одежда), Posuda (посуда). Задайте общие (название, цена) и ...

Классы. Шаблоны. Создать шаблон, наследование шаблона с параметром, наследование от параметра
Задание было: 1) создать шаблон 2) сделать наследование шаблона с параметром 3) сделать наследование от параметра Первые два...

29
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.04.2019, 18:14
Студворк — интернет-сервис помощи студентам
eva2326,
Я имел ввиду, что все не так однозначно
Вот у автора в задаче сказано, что нужно иметь возможность добавлять/печатать/редактировать информацию о товаре.
Мне честно говоря не очень понятно каким образом в данном случае хранение данных в виде одной строки будет проще чем каждому по классу и наследование.

А по поводу БД которую вы упомянули:
Например с тем же ORM-ом вариант "все данные в одной строке" не подойдёт.
К тому же в программе может понадобится например сортировать товары по цене на выбор пользователя уже после того как данные были взяты из БД. Достать эту цену из текста будет труднее чем если бы она была записана в соответствующее поле
1
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
26.04.2019, 19:45
Цитата Сообщение от Undisputed Посмотреть сообщение
Мне честно говоря не очень понятно каким образом в данном случае хранение данных в виде одной строки будет проще чем каждому по классу и наследование.
Не понятно, откуда вы взяли своё "в виде одной строки".
Вас никто не заставляет держать все данные в виде одной строки.

Цитата Сообщение от DesignerSwapMot Посмотреть сообщение
Все товары имеют след характеристики: название, цена, количество, цвет и материал.
Все эти характеристики удобно сделать отдельными полями
одного единственного класса "предметов учета".

Зачем здесь вообще нужно наследование?
Зачем для такой задачи вообще плодить множество классов?

Один единственный класс item покрывает всю область применения.

Цитата Сообщение от Undisputed Посмотреть сообщение
Например с тем же ORM-ом вариант "все данные в одной строке" не подойдёт.
Неужели? ))

Добавлено через 2 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кретинизма в заданиях (типа удалить из массива все отрицательные элементы) хватает и без ООП. В данном топике я не заметил такого.
Цитата Сообщение от eva2326 Посмотреть сообщение
На самом деле для данной задачи вообще не нужно никакое наследование
тц тц тц
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.04.2019, 20:22
eva2326,
"в виде одной строки" взял из вашего кода (поле m_description).
других выводимых данных о товаре которые указаны в задаче у вас в коде нет

Добавлено через 4 минуты
Один единственный класс item покрывает всю область применения
Дело в том что каждый тип товара может иметь характеристики которые относятся только к его типу.
Если сделать общий item, то придётся там хранить все свойства всех товаров.
В итоге некоторые объекты будут занимать лишнюю память, которая им вовсе не нужна.
Да и не логично это. Пользуемся объектом который представляет собой молоток, но почему то этот объект в то же время обладает полем размер бензобака. Логично, да?
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.04.2019, 20:49
Цитата Сообщение от eva2326 Посмотреть сообщение
тц тц тц
Ещё бы чуть членораздельнее и уже можно было бы принять во внимание. Ритмично. Но однообразно.
Цитата Сообщение от eva2326 Посмотреть сообщение
На самом деле для данной задачи вообще не нужно никакое наследование
Данная задача поставлена не теми кто знает о том как вы о них думаете.
eva2326, тот примитив который вы предлагаете, сводится к артикулярному номеру и описанию
Цитата Сообщение от DesignerSwapMot Посмотреть сообщение
название, цена, количество, цвет и материал
И этого наверное для данной группы данных вполне достаточно. Я не уверен, имеют ли преподаватели замыслившие такое задание торговый опыт (хотя кто в наше время не барыжил?), но если даже у каждого из них вторая специальность - товаровед, то они правы в том, что не стали отягощать такой товар как обувь категориями пола, размера, и пр. Хотя в реальной жизни оно и нужно. Магазину нужно знать когда есть опасность остаться без 38 размера женских босоножек или 43 - мужских кроссовок... Это не потому они так решат, что им не важны последние соображения. Это потому они так решат, что первая специальность у них - преподаватель информационных технологий. И поскольку тема - полиморфизм и наследование, то пример не отягощён деталями.
eva2326, если бы они уже проходили шаблонные классы то можно было бы предположить решение и без наследования. Но тогда вероятно вопрос бы выглядел иначе. Тут от ТС многое зависит, конечно, но у меня нет оснований думать, что он не аккуратен.
1
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
27.04.2019, 14:44
Цитата Сообщение от Undisputed Посмотреть сообщение
"в виде одной строки" взял из вашего кода (поле m_description).
Мой код показывает, как при помощи лямбды задавать любую произвольную функцию
инициализации любого произвольного товара.

Я предполагала, что поняв идею кастомизации,
вы легко сможете сделать заполнение любой информации,
любых полей, любых классов.

Я же не думала, что вас за ручку водить нужно:

https://rextester.com/CDXQIG6985

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <functional>
#include <iostream>
#include <cassert>
 
class item
{
    using str_t = std::string;
    using input = std::function<void()>;
public:
    item() noexcept
        : m_input()
        , m_description()
        , m_cost()
        , m_id(getID())
    { assert(this->m_id>0); }
    
    template<class callback>
    void setInput(callback&& func)
    {
        this->m_input = std::forward<callback>(func);
        assert(this->m_input);
    }
    
    void init()
    {
        assert(this->m_input);
        this->m_input();
    }
    
    void setDecription(str_t value) noexcept
    {
        this->m_description = std::move(value);
    }
    void setCost(const size_t value)
    {
        this->m_cost = value;
    }
private:    
    template<class ostream> friend
    ostream& operator<<(ostream& os, const item& obj) noexcept
    { 
        assert(obj.m_id > 0);
        os 
            << 
            "ID товара: " << obj.m_id          << ", "
            "описание: '" << obj.m_description << "', "
            "стоимость: " << obj.m_cost        << " руб.";
        return os;
    }
private:
    static size_t getID() noexcept
    {
        static size_t id;
        return ++id;
    }
private:
    input m_input;
    str_t m_description;
    size_t m_cost;
    size_t m_id;
};
 
 
item createBook()
{
    item book;
    
    // --- можно указать любую произвольную процедуру 
    // --- заполнения данных предмета
    const auto input = [&book]
    {
        book.setDecription("книга");
        book.setCost(1000);
    };
    book.setInput(input);
    return book;
}
 
int main()
{
    auto book = createBook();
    
    // --- предмет знает, где ему взять значния своих данных
    book.init();
    
    std::cout << book << '\n';
}
Цитата Сообщение от Undisputed Посмотреть сообщение
Дело в том что каждый тип товара может иметь характеристики которые относятся только к его типу.
Товар - это не реальный предмет реального мира со своими реальными характеристиками.
Товар - это всего лишь единица учета складского учета.

У товара может быть "цена", "количество", "дата прихода на склад", "номенклатурный номер",
который связывает товар с табличной "наименований" и "описаний" товара.
Может быть ещё "категория" (одежда, продукты, etc),
если товаров много и хочется сделать удобную фильтрацию для различных выборок.
И в общем то все.

Если бы вы когда нибудь имели дело с товаро-учетом,
вы бы знали, что например, сумки могут делиться на "мало-габаритные" или "средне-габаритные",
но у вас никогда не возникло бы потребности задавать конкретные цифры для их габаритов.

То есть "габаритность" сумки - это часть её "описания", и не более того.
Выделять персонально для сумок отдельный класс,
который будет хранить три отдельные переменные
для точного обозначения габаритов - это бессмысленно.

Просто представьте себе, что вы - владелец магазина.
И вы ведете тетрадь "учета товаров".

Она у вас будет разлинована по нескольким столбикам, как то так:
Code
1
2
3
id|   название   | стоимость, руб | описание
1 |  кока-кола   |      100       | вода газированная
2 |  сумка furla |     10000      | сумка женская, малогабаритная
Редактировать товар - это значит ввести новый текст описания (категории, еtс)
А не вводить сколько там сантиметров в длину/высоту занимает конкретная сумка,
или каков процент сахара в конкретной газировке.

Только этим: описанием/наименованием/артикулом разные товары и различаются.

Добавлено через 54 секунды
Цитата Сообщение от IGPIGP Посмотреть сообщение
тот примитив который вы предлагаете, сводится к артикулярному номеру и описанию
Бинго!
Я знала!)
Я в вас верила))

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.04.2019, 15:12
Цитата Сообщение от eva2326 Посмотреть сообщение
Бинго!
Я знала!)
Я в вас верила))
спасибо)
Но
Цитата Сообщение от eva2326 Посмотреть сообщение
Товар - это не реальный предмет реального мира со своими реальными характеристиками.
eva2326, реальный мир есть (к лешему Канта и любой иной субъективизм), а вот реальных характеристик нету. Есть контекст в котором объект рассматривается (характеризуется). В этом смысле программист может рассматриваться как голова и два уха, например.
Поля могут быть и булевыми. То есть, сумки бывают мужскими, женскими ( и унисекс ). А вот бельевые прищепки и зубочистки не обладают такими качествами, в обычных для европейцев контекстах. Это значит, что базовый интерфейс может расширяться. И подкатегории могут объявлять свои - более частные интерфейсы в расширение к уже унаследованным. Вообще, формализация внешних систем (моделирование) - проецирование фрагментов реального мира в область абстракций, это не тривиальная область деятельности. Многие математики не понимают, того простого факта, что отсутствие математической теории моделирования, следует из отсутствия математической теории искусственного интеллекта. Сложность моделей описываемых при помощи использования и комбинации распространённых патернов не высока, но достаточно полезна. Наследование - один из инструментов. И вряд ли стоит с этим спорить. А то, что студентам задают потрогать молоток, а не бабахнуть им по чему ни попадя, вполне разумно. Обучение, это тоже объектно анализируемая ситуация, кстати.
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
27.04.2019, 20:32
Цитата Сообщение от IGPIGP Посмотреть сообщение
к лешему Канта
реальный мир и наше его восприятие это не одно и тоже:
но людям плевать и они снова и снова юзают абстракцию, считая свое восприятие за реальный мир.

По теме наследования в задаче магазина:
Товар может быть очень много разных типов.
Это уже один раз нужно постараться кодеру, чтобы на каждый тип завести класс.
А если регулярно появляются новые типы товара, то как быть:
магазину нужно иметь штатного программиста?

Выход(если очень коротко):
Вынести проверку юзерских типов за пределы компилятора в реалтайм.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.04.2019, 21:54
Цитата Сообщение от XLAT Посмотреть сообщение
реальный мир и наше его восприятие это не одно и тоже:
Да, конечно. Но он есть, независимо от нашего восприятия. Восприятие - вопрос контекста. Поэт и астроном смотрят на Луну по разному, обычно. И астроном достаточно объективен.
Цитата Сообщение от XLAT Посмотреть сообщение
но людям плевать и они снова и снова юзают абстракцию
Это не коррелирующие вещи. Абстракция это контекст для выделения каких-то свойств, которые представляют конкретный объект реального мира и не видно иного пути построения моделей. Не вижу тут ни чего плёвого. Однако, эффективно абстрагировать и понимать границы абстракции, это не то же самое, что её использовать. Язык программирования, который позволяет явно выражать внешнюю логику и в то же время обеспечивает очень хорошую скорость, это благо и ООП в С++ это его сердце. Можно сколько угодно говорить о мультипарадигменности, но это именно, от нежелания спорить с теми с кем может и не имеет смысла спорить.
Цитата Сообщение от XLAT Посмотреть сообщение
Это уже один раз нужно постараться кодеру, чтобы на каждый тип завести класс.
А если регулярно появляются новые типы товара, то как быть:
магазину нужно иметь штатного программиста?
XLAT, студенческое задание не об этом. Грамотное построение расширяемого и масштабируемого обобщения, это не для лабы.
Цитата Сообщение от XLAT Посмотреть сообщение
Выход(если очень коротко):
Вынести проверку юзерских типов за пределы компилятора в реалтайм.
Это верно. Но мы тут уже совсем ушли куда-то. Как я понял, говорить о разумности и полезности динамического связывания вряд ли имеет смысл. Тут существенно, - нужно ли в этом задании разрисовать иерархии или нет. Я по ряду признаков нашёл это нужным. Осмотр тела задачи и исследование материала под ногтями жертвы говорят о том, что перечисление:
Цитата Сообщение от DesignerSwapMot Посмотреть сообщение
сумки и обувь
не случайно. Зачем в задании это указано? Практика сценической композиции говорит о том, что если в комнате слона на стене висит ружье, куртка и обувь, то слон обязательно наденет куртку и съест обувь. Причём, бывалые режиссёры сходятся в том, что ружьё обязательно выстрелит. Это трудная ситуация.
Вот почему, я считаю, что две группы имеющие общие свойства и интерфейс имеют также и специфичные для каждой группы свойства. И эти свойства по разному отражаются на реализацию работы общего интерфейса. То есть, обувь разных размеров (в пределах артикула, модели и пр.) имеет как правило разную цену. Для отражения такого поведения, даже схематичного - в пределах лабораторки, нужно попотеть. Но это выполнимо и полезно для практики. Думаю, наследование вполне уместно.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
29.04.2019, 12:00
eva2326,
Я понимаю о чем вы говорите
Просто помоему вы как то однозначно выражаете свою позицию (типа это всегда так и должно быть)...
Где то ваш вариант прокатит, где то нет...
Именно из этих соображений я и отправил это сообщение
Наследование, классы "сумки" и "обувь"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.04.2019, 13:40
Цитата Сообщение от Undisputed Посмотреть сообщение
Где то ваш вариант прокатит, где то нет...
Undisputed, - правильно! В теме, где так много сказано про ООП головного мозга, нельзя не сказать о вкусовщине. Гурманы любят учить своих преподавателей, дающих задания о наследовании и получать пересдачи, отработки и нелестные замечания. Как вы правильно отразили в приведенной ссылке, ссылку можно не только кликнуть. Её можно и прочесть. Что бы вас не запутывать (слоны с сумками в хоботах, в которых сокрыты другие слоны вооружённые ружьями и в куртках, это жесть конечно) я скопирую её название как обычный текст:
Цитата Сообщение от DesignerSwapMot Посмотреть сообщение
Наследование, классы "сумки" и "обувь"
Я выделил жирным шрифтом не для давления на мозг. Это чтобы вам было легче найти то, на что мне хочется обратить ваше внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2019, 13:40

Наследование, базовые классы и производные классы
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.)
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы, наследование
Здравствуйте, столкнулся с этой задачей и не могу её решить, буду крайне благодарен за советы или примеры реализации. Классы программа...

Классы и наследование
Помогите написать программу, в которой описана иерархия классов: геометрические фигуры(ромб, параллепипед, эллипс). Реализовать методы...

Классы, наследование
Реализовать следующие иерархии объектов и заданные методы для них на c++. Для всех объектов реализовать конструктор, конструктор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru