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的思想的感悟的更多相关文章

  1. 面向对象的OOA、OOD、OOP

    OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的 ...

  2. OOA、OOD、OOP

      复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构 ...

  3. 复习面向对象的OOA、OOD、OOP

    复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,依照面向对象的思想来分析问题. OOA与结构化 ...

  4. iOS - 对OOA、OOD、OOP的理解

    很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...

  5. OOA,OOD,OOP区别

    定义: OOA(Object-Oriented Analysis,面向对象分析方法) OOD(Object-Oriented Design,面向对象设计) OOP(Object Oriented Pr ...

  6. OOD、OOP、AOP区别

    OOD:面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节.其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受. OOP:面 ...

  7. OOA、OOD、OOP分别是什么?

    什么是面向对象分析(OOA)? "面向对象分析是一种分析方法,这种方法利用从问题域的词汇表中找到的类和对象来分析需求." 什么是面向对象设计(OOD)? "面向对象设计是 ...

  8. oop编程思想

    oop的编程思想:抽象.封装.继承.多态. 1.抽象: 数据抽象:类描述的对象的属性或状态 行为抽象:类描述的对象的行为或功能 举例: 时钟:Class 数据:int Hour,Minute,Seco ...

  9. 基于 CSP 的设计思想和 OOP 设计思想的异同

    LinkerLin Go语言推崇的CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者的重视.标准库的很多设计保留了很浓的OOP的味道.本篇Blog想比较下从设计的角度看,CSP和OO ...

随机推荐

  1. httpclient RequestConfig类

    RequestConfig类解析 这个类位于org.apache.he.http.client.config包下,主要用于获取和配置一些外部的网络环境,它下面有一个嵌套类RequestConfig.B ...

  2. Beta 冲刺(7/7)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10129067.html 作业博客:https://edu.cnblogs.com/campus ...

  3. 团队项目之UML图设计

    团队 学号 姓名 本次作业博客链接 031602428 苏路明(组长) https://www.cnblogs.com/Sulumer/p/9822854.html 031602401 陈瀚霖 htt ...

  4. STL标准库-迭代器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 本节主要介绍STL六大部件中的Iterators迭代器. 在语言方面讲,容器是一个class template, 算法是一个仿函 ...

  5. 一款经典的 jQuery Lightbox 灯箱效果

    一个灯箱效果的图片展示插件. 版本: jQuery v1.2.3+ jQuery Lightbox v2.7.1 github 实例预览 使用方法 载入 CSS 文件 <link rel=&qu ...

  6. C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏

    //欲练此功必先自宫!!!     //第一天:C语言的基础     //进制     //2进制, 10进制, 8进制, 16进制     //注:8进制数前加0, 16进制数前加0x        ...

  7. Ajax请求数据的两种方式

    ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...

  8. 转载:二次指数平滑法求预测值的Java代码

    原文地址: http://blog.csdn.net/qustmeng/article/details/52186378?locationNum=4&fps=1 import java.uti ...

  9. [Data Structure] Linked List Implementation in Python

    class Empty(Exception): pass class Linklist: class _Node: # Nonpublic class for storing a linked nod ...

  10. 和菜鸟一起学linux内核源码之基础准备篇

    来源:http://blog.csdn.net/eastmoon502136/article/details/8711104 推荐阅读:linux内核源码最初版linux内核源代码,简单易懂,适合初学 ...