Bai*_*ang 11 language-agnostic oop interface
假设我有这样的要求:
系统中的对象都派生自一个名为IObject的基类,它可能包含带颜色的对象,带有转换的对象,以及两者.
现在有两种方法来设计类层次结构.
第一个是:
只是让具体类派生自IObject,并选择"capability"接口作为其基类来表示它支持这样的行为,如interface:IHasColor,
IHasTransformation
第二个是:
组织基类,并从其中一个派生出具体类:IObject,IColorObject,ITransfromationObject,IColorAndTransformationObject
我更喜欢第一个(它有一个正式的名字?)因为它更灵活,你可以看到第二个可能有类组合爆炸问题,当有许多属性,如颜色,转换...
我想知道你的想法和建议.
谢谢.
Jor*_*oba 10
类抽象对象类型的真实概念.
接口抽象出对象的行为或能力的真实概念.
那么问题变成了,"颜色"是对象的属性还是对象的能力?
当您设计层次结构时,您将世界限制在更狭窄的空间中.如果将颜色作为对象的属性,那么您将拥有两种对象,即具有颜色的对象和不具有颜色的对象.这适合你的"世界"吗?
如果你把它建模为一个功能(接口),那么你将拥有能够为世界提供颜色的对象,比如演员.
对于转换,适用相同的逻辑.你可以将世界分成两种对象,即可以变换的对象和不能变换的对象,或者你可以将它视为一种能力,一个对象可能有能力将自己转化为另一种东西.
对我来说,从这个角度来看,有意义的是: