Walking on water and developing software from a specification are easy if both are frozen)html
-Edward V. Berard (当你掌握了这两种思想,就算在水里行走(一片混沌的理解),从规范中开发软件也是很容易的);编程
面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要做用是对OOA分析的结果做进一步的规范化整理,以便可以被OOP直接接受。架构
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个可以起到子程序做用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现总体运算,每一个对象都可以接收信息、处理数据和向其它对象发送信息。函数
若是你代码能作到如下几点,那么你就正在OOD:spa
S = 单一职责原则 Single Responsibility Principle O = 开放闭合原则 Opened Closed Principle L = Liscov替换原则 Liscov Substitution Principle I = 接口隔离原则 Interface Segregation Principle D = 依赖倒置原则 Dependency Inversion Principle
S:单一职责原则,"引发类变化的因素永远不要多于一个。" 一个类,只作它的业务,无论其余类的事务;好比一个超市(项目),包含收银员,只负责收银,保安员,只负责维持秩序!等等
O:开放闭合原则::"软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。" 装饰模式就是这个原则的实现, 能够动态的添加功能,可是不能修改主体代码;
好比手机,能够贴膜,能够加保护盖,可是不能拆里面的零件;
L:李氏替换原则:"子类型必须可以替换它们基类型" ; 多态的思想; 策略模式就是这个原则的实现。 把会变化的方法封装起来,方便不一样的实现;
好比鸟类,有的会飞,有的不会飞;那么就把飞的方法单独设计成一个接口,鸡就继承不会飞的,燕子就继承会飞的;
I:接口隔离原则 "客户端不该该被迫依赖于它们不用的接口。" 把没必要要的接口,不要设计在一块儿。也就是抽象类,只保留最核心的接口,其余的能够设计成扩展;
好比鸟类,吃(),睡(),飞(); 由于飞的函数,对于一些实现类是没有必要的,因此应该隔离掉;只保留核心部分;
D:依赖倒置原则 "高层模块不该该依赖底层模块,二者都应该依赖其抽象";
好比车(项目),包含引擎和轮胎两个属性,那么它们就能够设计成接口,而后各自有不一样的实现,并且引擎和轮胎还能够复用到飞机,自行车中去,达到代码复用。
http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html 参考
C:"组合替代(优于)继承" (Composite/Aggregate Reuse Principle,CARP)
这关系到 is a 是一个和 hava a 有一个; 好比一个轮胎类,一个车类,那么车须要使用轮胎,就必需要继承轮胎这个类吗? 代码能够这样写,可是不符合逻辑;
因此能够把轮胎类当作属性,添加到车类中去,这就是组合,有继承的优势,而没有它的缺点,更加灵活。
"笛米特法则" (Law of Demeter LoD)"你的类对其它类知道的越少越好" 门面模式(Facade)和中介模式(Mediator) 很差意思,这两个模式我还不知道,网上没找到满意的举例理解。
"共同封闭原则":这是说"相关类应该打包在一块儿";设计
"稳定抽象原则":这是说"类越稳定,越应该由抽象类组成";htm