OOD与OOP的思想的感悟
Walking on water and developing software from a specification are easy if both are frozen)
-Edward V. Berard (当你掌握了这两种思想,就算在水里行走(一片混沌的理解),从规范中开发软件也是很容易的);
OOD:面向对象设计
面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。
OOP:面向对象编程
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
如果你代码能做到以下几点,那么你就正在OOD:
- 面向对象
- 复用
- 能以最小的代价满足变化
- 不用改变现有代码满足扩展
SOLID的5原则:
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) 不好意思,这两个模式我还不知道,网上没找到满意的举例理解。
"共同封闭原则":这是说"相关类应该打包在一起";
"稳定抽象原则":这是说"类越稳定,越应该由抽象类组成";
OOD与OOP的思想的感悟的更多相关文章
- 面向对象的OOA、OOD、OOP
OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的 ...
- OOA、OOD、OOP
复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构 ...
- 复习面向对象的OOA、OOD、OOP
复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,依照面向对象的思想来分析问题. OOA与结构化 ...
- iOS - 对OOA、OOD、OOP的理解
很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...
- OOA,OOD,OOP区别
定义: OOA(Object-Oriented Analysis,面向对象分析方法) OOD(Object-Oriented Design,面向对象设计) OOP(Object Oriented Pr ...
- OOD、OOP、AOP区别
OOD:面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节.其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受. OOP:面 ...
- OOA、OOD、OOP分别是什么?
什么是面向对象分析(OOA)? "面向对象分析是一种分析方法,这种方法利用从问题域的词汇表中找到的类和对象来分析需求." 什么是面向对象设计(OOD)? "面向对象设计是 ...
- oop编程思想
oop的编程思想:抽象.封装.继承.多态. 1.抽象: 数据抽象:类描述的对象的属性或状态 行为抽象:类描述的对象的行为或功能 举例: 时钟:Class 数据:int Hour,Minute,Seco ...
- 基于 CSP 的设计思想和 OOP 设计思想的异同
LinkerLin Go语言推崇的CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者的重视.标准库的很多设计保留了很浓的OOP的味道.本篇Blog想比较下从设计的角度看,CSP和OO ...
随机推荐
- Flask初级(三)flash使用模板
Project name :Flask_Plan 模板文件夹未在创建项目时设定的是templates 我们不能总是用return 每个页面去写html,老长了. flask提供了模板引擎,其实也是别人 ...
- 如何高效使用Google
摘自http://simplyy.space/ 核心思想 1.首先,想好你想要寻找什么. 哪些词能够最好地描述你要寻找的信息或者概念? 哪些词是你能够用来替换的? 有没有那些词是可以不必包括在你想要搜 ...
- DevExpress v17.2新版亮点—WinForms篇(四)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.开篇介绍了DevExpress WinForms v17.2 Data Grid Control ...
- 增量打包DOC版
压缩zip的命令有的系统没有的自己去下载一个,否则关闭压缩zip的命令. 有需要的自行更改,这是满足我需求的. 执行 publish.bat 即可,当然需要将文件清单写好放在 resources.tx ...
- SharePoint SSS(Security Store Service)服务-PowerShell
1. 获取SSS应用程序的标识 Get-SPServiceApplication 2. 获取指定的SSS应用程序实例 $sss = Get-SPServiceApplication -Identity ...
- 安装sybase服务器并连接数据库
一. 安装sybase服务器(根据安装指南安装) win32位的系统安装1550_winx86_32+补丁包eBF18157 win64位的系统安装ase157_winx64_安装包 如果不创建服务器 ...
- python打包工具pyinstaller的使用
安装PyInstaller pip install pyinstaller 安装完后,检查安装成功与否: pyinstaller --version 安装成功后,就可以使用下面的命令了: pyinst ...
- Android Kernel save defalut config
/********************************************************************************* * Android Kernel ...
- 【opencv基础】图像翻转cv::flip详解
前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...
- 《DSP using MATLAB》Problem 4.1
用到的z变换的计算公式: 代码: %% ------------------------------------------------------------------------ %% Outp ...