1 OOD:
面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。
2 OOP:
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
如果你代码能做到以下几点,那么你就正在OOD:
· 面向对象
· 复用
· 能以最小的代价满足变化
· 不用改变现有代码满足扩展
3 OOA:
Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
4 OO:
OO(Object Oriented,面向对象)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
例子 :小时候你首先学会字母表,学了单词,并学会如何根据字母表造词。后来你学会了一些造句的语法。例如时态,介词,连词和其他一些让你能造出语法正确的句子。例如: "I" (代词) "want" (动词) "to" (介词) "learn" (动词) "OOD"(名词)。按照某些规则组合了单词,并且你选择了有某些意义的正确的单词结束了句子。
面向对象原则与这类似。OOP指的是面向对象编程的基本原则和核心思路。在这里,OOP可以比作英语基础语法,这些语法教你如何用单词构造有意义且正确的句子,OOP教你在代 码中构造类,并在类里封装属性和方法,同时构造他们之间的层次关系。
现在假定你需要就某些主题写几篇文章或随笔。你也希望就几个你擅长主体写几本书。对写好文章/随笔或书来说,知道如何造句是不够的,对吗?为了使读者能更轻 松的明白你讲的内容,你需要写更多的内容,学习以更好的方式解释它。
现在,如果你想就某个主题写一本书,如学习OOD,你知道如何把一个主题分为几个子主题。你需要为这些题目写几章内容,也需要在这些章节中写前言,简介,例子和其他段落。 你需要为写个整体框架,并学习一些很好的写作技巧以便读者能更容易明白你要说的内容。这就是整体规划。在软件开发中,OOD是整体思路。
在某种程度上,设计软件时,你的类和代码需能达到模块化,可复用,且灵活,这些很不错的指导原则不用你重新发明创造。
软件开发唯一的真理是“软件一定会变化”。一个设计敏捷的软件能轻松应对变化,能被扩展,并且能被复用。
如果你代码能做到以下几点,那么你就正在OOD:
· 面向对象
· 复用
· 能以最小的代价满足变化
· 不用改变现有代码满足扩展
SOLID的5原则(感谢Uncle Bob,伟大OOD导师)。
S = 单一职责原则 Single Responsibility Principle
"并不是因为你能,你就应该做"。"引起类变化的因素永远不要多于一个。"
O = 开放闭合原则 Opened Closed Principle
“我不需要改变我的身体而可以穿上衣服。” "软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。"
L = Liscov替换原则 Liscov Substitution Principle
"子类型必须能够替换它们基类型。"或者"使用基类引用的函数必须能使用继承类的对象而不必知道它。"
I = 接口隔离原则 Interface Segregation Principle
"客户端不应该被迫依赖于它们不用的接口。" 接口应该仅包含必要的方法,而不该包含其它的
D = 依赖倒置原则 Dependency Inversion Principle
高层模块不应该依赖底层模块,两者都应该依赖其抽象。
如果代码中不用依赖倒置,我们将面临如下风险:
· 使用低级类会破环高级代码;
· 当低级类变化时需要很多时间和代价来修改高级代码;
产生低复用的代码