面向对象。选择对象

标签 oop object subclassing

我是用 OOP 术语思考的相对新手,还没有找到正确的方法的“直觉”。作为练习,我试图找出不同类型物体之间的界限,以我 table 上的饮料为例。

假设我创建了一个对象 Drink , 具有类似 volume 的属性和 temperature ,以及类似 pour() 的方法和 drink() ,我正在努力寻找特定饮料“类型”的来源。

假设我有一种饮料类型 Tea , CoffeeJuice ,我的第一直觉是子类Drink因为它们有共同的属性和方法。

那么问题就变成了 TeaCoffee具有类似 sugars 的属性和 milk ,但是 Juice没有,而所有三个都有 variant (分别是伯爵灰色、脱咖啡因和橙色)。

同样,TeaCoffee有一个 addSugar()方法,而这对于 Juice 没有意义目的。

那么这是否意味着父类(super class)应该具有这些属性和方法,即使所有子类都不需要它们,或者我是否在子类上定义它们,特别是对于像 variant 这样的属性? ,其中每个子类都有自己的有效值列表?

但后来我得到了两个 addSugar()方法,在 Tea 上和 Coffee子类。

或者考虑到我最终将所有属性和方法放在父类(super class)上,因为大多数属性和方法至少在几种饮料类型之间共享,我想知道子类化的意义何在?

我担心我只是想抽象太多,但如果我想添加一个新类型,例如 Water,我不想让自己陷入困境。 —与 variant静止或闪闪发光——在路上。

最佳答案

面向对象的设计不是孤立进行的。您要问的问题是我的特定应用程序需要对 Drink 类做什么(如果有的话)?答案以及设计将因应用程序而异。在 OO 中失败的第一个方法是尝试构建完美的柏拉图类层次结构——这些东西只存在于完美的柏拉图世界中,在我们居住的现实世界中没有用。

关于面向对象。选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078838/

相关文章:

javascript - 在 Node.js 中使用函数创建对象

javascript - 为什么在 javascript 中使用链式原型(prototype)继承?

javascript - 如何使用面向对象的javascript调用谷歌地图API?

java - 在 Java 的 String 类中重新创建 valueOf(double d)

java - 如何访问 arrayList java 中包含的对象的参数

Delphi:如何以相反的顺序删除子类?

oop - Lua 和对象生成

其他方法中的Delphi nil对象

python - 模拟 list.insert() 方法作为 Python 列表的子类

ios - 使用构造函数来初始化实例变量子类 PFObject