gpt4 book ai didi

java - 为什么继承每个类然后简单地创建派生类的单个对象来执行 oop 中的所有操作是一种不好的做法?

转载 作者:行者123 更新时间:2023-11-28 05:46:43 25 4
gpt4 key购买 nike

我是 C++ 的新手,我有一个简单的问题来实现一个面包店,有产品(例如糕点、 donut )和烘焙机来处理这些产品(计算卡路里、烘焙温度等)。我只做了两个类,写了所有的功能,然后继承它们做一个类,完成了我的工作,但我的导师对这种方式不满意。我想问问那里有什么问题吗?它如何影响代码的可重用性?这是我制作的函数原型(prototype)。附言我是 OOP 新手

#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);
};

最佳答案

因为它不仅忽略了不同类之间的关系,而且创建了不正确的关系。继承是一种“is-a”关系。当 Cat 实现 Animal 时,关系是“Cat is-an Animal”。

这对您的 OOP 来说并非如此。 Bakery 应该BakedItem。相反,面包店有零个或多个烘焙食品。否则,Bakery 有一个可能的形状列表意味着什么?我们在谈论平面图吗?当您扩展一个类时,子类必须遵守父类(super class)的契约。

例如,BakedItem 类可能有以下描述:

This class represents a food item which has been heated in an oven at a specific temperature for a specific amount of time.

如果 Bakery 扩展了 BakedItem,这是否意味着面包店本身已被放入某个建筑物大小的巨型 toastr 中?

...您可以看到遵循代码当前描述的逻辑关系如何很快变得荒谬。


请记住,字段是“has-a”关系,而继承代表“is-a”关系;使用它们可以准确地为您的对象建模,因为这样可以更清楚地了解每个类的用途以及每个方法如何工作以及如何与对象交互。

关于java - 为什么继承每个类然后简单地创建派生类的单个对象来执行 oop 中的所有操作是一种不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36076120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com