Почему плохая практика — наследовать каждый класс, а затем просто создавать один объект из производного класса для выполнения всех операций в oop?

Я новичок в c ++, у меня есть простой вопрос по реализации хлебобулочных изделий, имеющих продукты (например, кондитерские изделия, пончики) и пекарную машину для работы с этими продуктами (подсчет калорий, температуры выпечки и т. Д.). Я только что сделал два класса, написал все функции, а затем унаследовал их, чтобы создать один класс, и выполнил свою работу, но мой наставник не доволен этим. я хочу спросить, что там не так? Как это влияет на повторное использование кода? Вот прототипы функций, которые я сделал. Постскриптум Я новичок в ООП

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <cstdlib>
#include <map>
#include <time.h>
using namespace std;
int minimum(vector<int>);
struct Inventory
{
string Name;
map<string,float> inputfromfile;
};
class BakedItem
{
public:
BakedItem(){}
~BakedItem() {}

protected:
string Item;
float TemperatureForBakingItem;
vector <string> ShapesPossible;
vector <string> Ingredients;
void GetIngredients(string);
void ShapesPossibility(void);
void GetTemperature(string);
};
class Bakery:BakedItem
{
public:
Bakery(){}
~Bakery(){}
time_t * ViewManufactureDate(void);
float ViewPrice(void);
void GetInput(string);
void ViewShapesPossible(void);
protected:
time_t DateManufacture;
float PriceOfItem;
float Calories;
void GetManufactureDate(void);
void CalculateCalories(void);
void CalculatePrice(void);
void GetInventory(void);
};

0

Решение

Потому что он не только игнорирует отношения между различными классами, но и создает неправильные отношения. Наследование — это отношения «есть». когда Cat инвентарь AnimalОтношения «Кошка-животное».

Это не верно для вашего ООП. Bakery должен не быть BakedItem, Скорее, пекарня имеет ноль или более выпеченных изделий. Иначе, что это значит для Bakery иметь список возможных фигур? Мы обсуждаем планы этажей? Когда вы расширяете класс, подкласс должен соблюдать контракт суперкласса.

Например, BakedItem класс может иметь описание:

Этот класс представляет продукт питания, который нагревался в духовке при определенной температуре в течение определенного времени.

Если Bakery продолжается BakedItemОзначает ли это, что сама пекарня была помещена в какую-то гигантскую печь размером с здание?

… Вы можете видеть, как следование логическим отношениям, описанным в настоящее время вашим кодом, быстро становится бессмысленным.


Помните, что поля являются отношением «есть», а наследование представляет собой отношение «есть»; Используйте их для точного моделирования ваших объектов, потому что это будет иметь больше смысла относительно того, что делает цель каждого класса и как каждый метод работает и взаимодействует с объектами.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector