我是SOLID和DRY等软件设计原则的忠实粉丝。面向对象软件设计还有哪些其他原则?
笔记。我不是在寻找诸如“评论你的代码”之类的答案,而是寻找像鲍勃叔叔所讨论的那样的面向对象设计原则。
我是SOLID和DRY等软件设计原则的忠实粉丝。面向对象软件设计还有哪些其他原则?
笔记。我不是在寻找诸如“评论你的代码”之类的答案,而是寻找像鲍勃叔叔所讨论的那样的面向对象设计原则。
来自维基百科的一个相当全面的列表:
http://en.wikipedia.org/wiki/List_of_software_development_philosophies
选择组合而不是继承,就是其中之一。
许多人,尤其是那些刚接触 OO 的人,当他们真正需要的是使用组合时,就会开始扩展类。真的,如果您应该问自己,新的B级是A级吗?如果没有,那么你不应该延长。
例如,假设我有一个Person
Class,一个Car
Class,我想创建一个名为 class 的新DrivenCar
类。一个天真的实现会说(假设我们有多重继承)
class DrivenCar extends Person, Car { ... }
DrivenCar 是 Person 的一种吗?不,所以它不应该扩展 Person。DrivenCar 是汽车吗?是的,所以扩展是有意义的
使用组合,实现看起来像
class DrivenCar extends Car {
private Person driver;
}
GRASP模式。是的,它们看起来相当微不足道。更像是精炼成其他更复杂的模式所展示的核心品质。
界面。大多数设计模式都基于接口和实现的分离。
当您的 API 预计会增长时,请使用抽象类而不是接口。在接口中添加一个新方法需要更改所有实现它的类。