面向对象规范和面向对象编程是两码事。
面向对象规范好比基本的英语语法,这些语法教会了你怎么用一个个单词拼凑出一句句话来,
而面向对象编程教你怎么用类,怎么把一些属性和方法封装在一个类里,怎么串出类之间的继承关系
面向对象设计:
面向对象
复用
变化的代价极小
无需改代码即可扩展
S = 单一责任原则
"导致类变化的因素永远不要多于一个。"或者换行个说法:"一个类有且只有一个职责"。
O = 开闭原则
"软件实体(类,模块,函数等)应该对扩展开放,对修改关闭。"
类的层次关系展示了"开放-关闭"原则
在这个例子中, 添加了一个抽象的Server类, 并且客户端保持了抽象类的引用, 具体的Server类实现了这个抽象Server类. 所以, 由于某种原因Server的实现类发生了改变, 客户端不需要做任何改变.
这里的抽象的Server类对修改关闭, 具体的Server实现类对扩展开放.
L = Liscov替换原则
"使用基类引用的函数必须能够使用派生类而无须了解派生类."
在基本的面向对象原则中, "继承" 通常被描述成 "is a" 的关系. 如果一个 "开发者" 是"软件专业人员", 那么 "开发者" 类 应该 继承 "软件开发人员" 类. 这样的 "Is a" 关系 在类设计阶段非常重要, 但是这也很容易让设计者得意忘形从而以一个糟糕的继承设计告终.
"里氏替换原则" 仅仅是一种确保继承被正确使用的手段.
I = 接口隔离原则
"用户不应该被迫依赖他们不使用的接口。"
假如你有一些类,你通过接口暴露了类的功能,这样外部就能够知道类中可用的功能,客户端也可以根据接口来设计。当然那,如果接口太大,或是暴露的方法太多,从外部看也会很混乱。接口包含的方法太多也会降低可复用性, 这种包含无用方法的”胖接口“无疑会增加类的耦合。
这还会引起其他的问题。如果一个类视图实现接口,它需要实现接口中所有的方法,哪怕一点都用不到。所以,这样会增加系统复杂度,降低系统可维护性和稳定性。
接口隔离原则确保接口实现自己的职责,且清晰明确,易于理解,具有可复用性。
D = 依赖倒置原则
"高层次的模块不应该依赖于低层次的模块,而是,都应该依赖于抽象。"
可插拔,可替换。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。