面向对象的分析和设计(Object Oriented Analysis And Design )3个重要的概念 -- 对象、分析、设计
封装(Encapsulation)
公布功能部分内容,隐含内部实现。
松散耦合(Loose coupling)
耦合代表一个系统使用另一个系统功能的深度或依赖程度,依赖程度越大对于修改所带来的维护就会越多,对其他系统的影响越大,通过接口定义实现前期考虑,这样,对接口内部的修改或者扩充都不会影响到系统其他部分
强内聚(Strong cohesion)
内聚指一个对象中的属性和方法对所描述和实现的内容的完整封装程度,强的内聚可以让程序更好理解,更可靠。
面向对象编程包括核心概念
类,属性,操作,对象,继承,组件,接口
组件:组件是相关类的集合,你可以理解为一个类库项目生成的dll,或者应用程序exe,或者asp.Net 网站
接口:接口你可以从两个方面去理解,
1.从interface理解,就是我们程序中interface文件,必须对他进行进一步的实现,提供了一些方法的约定。
2.接口是组件或者类提供的一组服务的定义,就是我们理解的调用接口,或者称它为使用方法,每个组件或者程序都会提供使用它的方法比如Button控件,提供了Text属性和Click事件,这就是接口。
接口的用意就是希望定义使用规则,而隐含实现细节
软件开发中,分析是研究并定义所要解决问题的过程。
他们包括要实现的需求,以及要达到的结果目标
面向对象的分析(OOA),是根据对象来定义问题,查找关注领域中的对象,分析这个对象,并验证这个对象是否符合我们的要求的过程。(用例图,部署图,组件图,术语表)
如果分析意味着定义问题,那么设计就是定义解决方案的过程,他包括定义一些方法,系统将使用这些方法来满足分析期间表示的每个需求。
面向对象的设计(OOD)是定义组件、接口、对象、类、属性和操作的过程(组件图和类图),以满足各种需求,细化需求模型中的定义,重点在:体系结构的设计(组件图,定义组成系统的模块和组件,子系统等),以及组件设计(类图,定义组件中的类和接口)
建立模型的目的是希望通过更简单更短时间,尽可能早的 对不存在的准备开发的系统进行更加深入的了解和沟通。
在使用UML的OOAD情况中,模型主要由图组成:
静态图描述了系统的结构,你可以确保每个组件或类可以访问执行它应当负责行为需要的接口和信息。
动态图则描述了系统的行为,你可以跟踪具体的行为,并且分析不同的情况结束。
OOAD过程的劳动结果是模型,生成多种模型
分析模型:该模型是针对已有的系统,终端用户的需求,以及这些需求的可能解决方案的高层次理解。(用例图,界面原型,术语表)
体系结构模型:解决方案的组件,接口和结构,该结构在多个节点间的部署(组件图和部署图),确定该结构的各种权衡和决策;
组件(设计)模型:以组件为单位,一个组件定义一个类图,类图中包含这个组件中的所用的所有的类,属性,操作,依赖关系,和行为。(类图)
图形画的再好也不如真正的软件来的直观,如果有可能还是希望拿出一些时间,做一个界面原型,利用界面原型去沟通可以发现很多存在的问题,给客户最真实的体验。
通过模型,我们可以更早的改变模型,而不是改变代码,在前期思考和解决80%的缺陷(bug),降低成本开销。
但是对于极限开发(XP),敏捷开发来说这套按部就班的方法已经过时了,他们认为现在的开发工具可以控制代码修改的开销。
每种观点都有他的道理,而这UP和XP却在很多关键思路上发生冲突,那么哪一种是正确的呢,还是自己体会吧。
如果你在一家小公司,没有协作那么建模的沟通也许意义也不大,自己的心里有数,并且你的经验能力可以,也许XP是可行的,但是如果是在一家正规的大企业,应对大的项目,支撑XP继续可行就需要演变,那么演变的方法方式实际上还是UP。
建模起到了引导的作用,可以使得我们的注意力更加的集中,问题更加的突出,时间更容易把握
建模好像对一本书建立一个提纲,这个提纲可以让我们有计划的,全面地在脑海里面拥有一个计划和概念框架,很多时候往往这些更加的重要。
当然我们不能忘记建模给交流和资料存档所带来的好处。
OOA
Object-Oriented Analysis (OOA):面向对象的分析与设计
OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。这一部分的工作被称为“需求分析”。
OOA的成果:
业务领域用例图
活动图
协作图
大量的业务文档资料
OOD
Object-oriented design (OOD),用面向对象的方法为真实世界建立一个
OOD的地位
OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。
OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师
系统架构设计师的任务
确定系统的总体框架---大多采用已有的领域框架
正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构---系统概要设计
分析现实的可获取的技术资源,分解出软件的各个组件,安排好开发任务流程---系统详细设计
OOD的成果
系统中有多少个类?
系统中这些类间有什么关系(系统静态特性)?
系统中这些类生成的对象如何协作来完成工作(系统动态特性)?
系统中如何管理这些类和对象?
类图,数据库模型,部署图,组件图,开发框架确定,用户UI确定
OOP
Object-oriented Program (OOP)
用一种面向对象的语言来实现OOD完成的系统设计
流行的面向对象语言简介
Java、C++、Object Pascal、C#、VB.net……
关于OOP
用面向对象的语言编程不是OOP!
OOP最重要的特征是面向对象理论的广泛应用
OOP的成果是可运行的实际系统
OOP中掺杂着OOD,OOP与OOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。