我是用 OOP 术语思考的相对新手,还没有找到正确的方法的“直觉”。作为练习,我试图找出不同类型物体之间的界限,以我 table 上的饮料为例。
假设我创建了一个对象 Drink
, 具有类似 volume
的属性和 temperature
,以及类似 pour()
的方法和 drink()
,我正在努力寻找特定饮料“类型”的来源。
假设我有一种饮料类型 Tea
, Coffee
或 Juice
,我的第一直觉是子类Drink
因为它们有共同的属性和方法。
那么问题就变成了 Tea
和 Coffee
具有类似 sugars
的属性和 milk
,但是 Juice
没有,而所有三个都有 variant
(分别是伯爵灰色、脱咖啡因和橙色)。
同样,Tea
和 Coffee
有一个 addSugar()
方法,而这对于 Juice
没有意义目的。
那么这是否意味着父类(super class)应该具有这些属性和方法,即使所有子类都不需要它们,或者我是否在子类上定义它们,特别是对于像 variant
这样的属性? ,其中每个子类都有自己的有效值列表?
但后来我得到了两个 addSugar()
方法,在 Tea
上和 Coffee
子类。
或者考虑到我最终将所有属性和方法放在父类(super class)上,因为大多数属性和方法至少在几种饮料类型之间共享,我想知道子类化的意义何在?
我担心我只是想抽象太多,但如果我想添加一个新类型,例如 Water
,我不想让自己陷入困境。 —与 variant
静止或闪闪发光——在路上。
最佳答案
面向对象的设计不是孤立进行的。您要问的问题是我的特定应用程序需要对 Drink 类做什么(如果有的话)?答案以及设计将因应用程序而异。在 OO 中失败的第一个方法是尝试构建完美的柏拉图类层次结构——这些东西只存在于完美的柏拉图世界中,在我们居住的现实世界中没有用。
关于面向对象。选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078838/