Oop 面向对象设计-专门化:继承与属性

Oop 面向对象设计-专门化:继承与属性,oop,inheritance,object-oriented-analysis,Oop,Inheritance,Object Oriented Analysis,我通常会遇到一些设计问题,在这些问题中,我可以选择通过子类继承类来专门化类,或者通过为类定义分类属性来专门化类。例如,对于汽车组件的集合,我们可以定义类(例如车轮、轮胎、门等),也可以定义单个类“CarComponent”,该类具有名为“Type”的属性,该属性从列出不同类型汽车组件的枚举中获取值 我们如何比较这两种方法,以及每种方法都推荐哪些设计模式 谢谢。继承是关于改变行为的。如果不改变行为,就不需要子类。继承永远不应该是为每个名词创建一个类,不管它看起来有多漂亮 CarComponent在

我通常会遇到一些设计问题,在这些问题中,我可以选择通过子类继承类来专门化类,或者通过为类定义分类属性来专门化类。例如,对于汽车组件的集合,我们可以定义类(例如车轮、轮胎、门等),也可以定义单个类“CarComponent”,该类具有名为“Type”的属性,该属性从列出不同类型汽车组件的枚举中获取值

我们如何比较这两种方法,以及每种方法都推荐哪些设计模式


谢谢。

继承是关于改变行为的。如果不改变行为,就不需要子类。继承永远不应该是为每个名词创建一个类,不管它看起来有多漂亮

CarComponent在问题背景下有什么行为

那么,车轮、轮胎和车门有哪些不同的行为

如果它们的行为不同,则它们可能是CarComponent的子类(但不一定,请参见下文)。如果他们的行为没有不同,他们只是一种类型

如果他们表现不同,你能用作文完成同样的事情吗?你能将行为转化为策略吗


“更喜欢组合而不是继承”不仅仅是一个口号,它是一个好主意。

继承是关于改变行为的。如果不改变行为,就不需要子类。继承永远不应该是为每个名词创建一个类,不管它看起来有多漂亮

CarComponent在问题背景下有什么行为

那么,车轮、轮胎和车门有哪些不同的行为

如果它们的行为不同,则它们可能是CarComponent的子类(但不一定,请参见下文)。如果他们的行为没有不同,他们只是一种类型

如果他们表现不同,你能用作文完成同样的事情吗?你能将行为转化为策略吗


“更喜欢组合而不是继承”不仅仅是一个口号,这是一个好主意。

我认为方法的不同将取决于您在这些不同分类中需要的行为。我认为方法的不同将取决于您在这些不同分类中需要的行为。