什么是OOA与OOD
OOD模型设计
OOD模型设计目录1 面向对象设计(OOD)的定义? (3)2 面向对象设计(OOD)与面向对象分析(OOA)的关系? (3)3 面向对象设计(OOD)的特点? (3)4 面向对象设计(OOD)过程以及过程模型? (4)4.1 问题域部分的设计 (6)4.2 人机交互部分的设计 (7)4.3 控制驱动部分的设计 (8)4.4 数据管理部分的设计 (9)4.5 构件及部署部分的设计 (10)1 面向对象设计(OOD)的定义?在面向对象分析阶段,已经针对用户需求建立起用面向对象概念描述的系统分析模型。
在设计阶段,要考虑为实现系统而采用的计算机设备、操作系统、网络、数据库管理系统以及所采用的编程语言等有关因素,进一步运用面向对象的方法对系统进行设计,最后形成一个可以实现的设计模型,即面向对象设计模型。
2 面向对象设计(OOD)与面向对象分析(OOA)的关系?在面向对象分析阶段,针对的是现实世界,把需求转化为面向对象概念所建立的模型,以易于理解问题域和系统责任,最终建立一个映射问题域,满足用户需求,独立于实现的OOA模型,面向对象的设计就是在面向对象分析的基础上运用面向对象方法主要解决与实现有关的问题,目标是产生一个符合具体实现条件的OOD模型。
由于OOD以OOA为基础,且OOA与OOD采用一致的表示法,使得从OOA到OOD不存在转换,只需做必要的修改与调整。
OOA与OOD之间不存在传统方法中分析与设计之间的鸿沟,二者能够紧密衔接。
OOA与OOD之间不强调阶段划分,但是OOA与OOD有着不同的侧重点和不同的分工,并因此具有不同的开发过程及具体策略。
“分析”只针对问题域和系统责任,不考虑实现有关的因素,建立一个独立于实现的OOA模型;”设计“则考虑与实现有关的问题,如选用的编程语言、数据库系统和图形用户界面等,建立一个针对具体实现的OOD模型。
3 面向对象设计(OOD)的特点?•以面向对象的分析为基础,一般不依赖结构化分析•与相应的OOA方法共同构成OOA&D方法体系,OOA和OOD采用一致的概念与原则,但属于软件生命周期的不同阶段,有不同的目标和策略•较全面地体现了面向对象方法的概念与原则•大多数OOD方法独立于编程语言,但是具体应用OOD时,则要考虑特定编程语言,因为它通过面向对象的设计所得到的系统模型,要由确定的编程语言实现4 面向对象设计(OOD)过程以及过程模型?在OOA 阶段只考虑问题域和系统责任,在OOD阶段则要考虑与具体实现有关的问题,这样做的目的是•使反映问题域本质的总体框架和组织结构长期稳定,而细节可变•把稳定部分(问题域部分)与可变部分(与实现有关的部分)分开,使得系统能从容地适应变化•有利于同一个分析模型用于不同的设计和实现•支持系统族和相似系统的分析与设计•使一个成功的系统具有超出其生存期的可扩展性为达到上述目的,设计如下的面向对象设计模型从一个侧面观察OOD模型,它包括一个核心部分,即问题域部分;还包括四个外围部分,即人机交互部分、控制驱动部分、数据管理部分以及构件及部署部分。
什么是OOA和OOD
什么是OOA和OODOOA-面向对象分析OOD-面向对象设计这两个都是指在软件开发过程中,需求分析和设计阶段中采用的一种方式。
即利用面向对象的思想对软件进行开发和设计。
设计模式则是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
说通俗点就是在设计过程中的经验和窍门。
OO设计原则就是面向对象的设计原则。
因为面向对象是将数据和行为封装在一起,更符合现实世界中的运行模式。
所以它是一种比较先进的设计原则。
当然,还有其他的设计原则,如结构化设计的设计原则。
综上,ooa和ood是在软件工程中,利用OO设计原则进行的软件工程的两个阶段,而在ood的中可以反复使用的就是设计模式了。
OOA = Object Oriented Analysis面向对象分析评估用户需求和需要解决的问题。
针对用户问题的静态、动态和功能等,输出会提供相应的概念设计。
分析对象的属性(attribute)、关联(association)、生命周期(lifecycle)和相关的域规则(domain rule)产生出的产品为域产品(domain model)OOD = Object Oriented Design面向对象设计将OOA的结果转化成与现实需求更贴切的系统和对象设计利用一系列相互协作的软件对象来进行软件设计,兼顾应用需要经典的OO概念,如多态(polymorphsim)、接口(interface)、消息(messaging)和继承(inheritance)。
工件为包图 (package diagram) ,类图 (class diagram ),交互图 (interaction diagram)。
OOA与OOD
交互界面子系统的设计:与界面有关的类及类间结构的设计,以及有关算法的设计。.
交互界面子系统和应用之间接口的设计。.
应用控制部分的设计:这部分对象主要完成应用的驱动工作。这部分对象不同于从现实
世界中抽象出来的对象,在现实世界和问题域中没有原型,它们同界面子系统中的对象及问题
OOA和OOD方法,Shlaer&Mellor的OOA方法,Rumbaugh的OOAD方法等。不同的方法
体系都分别体现了人们对OOA、OOD,以及面向对象软件开发过程的不同认识。本文的主要
目的就是,试图通过对现有OOA与OOD方法的共性进行纵观分析,弄清二者之间的边界问
题,评析从OOA到OOD过渡的难易,并讨论实现这种过渡所涉及的主要工作。
了理解问题;而在OOD阶段,它们的引入则主要是针对软件的构造和实现。分类结构通过继
承机制来实现,因而代码得到了有效地复用;组装结构则将一些类组合在一起构成较大的软件
构件。
7)OOA并没有考虑对象的产生问题,当其对应的实体在现实世界中出现时,它也就在问
题域中产生了。OOA也不考虑对象属性的取值和服务算法的实现。而在OOD阶段这些问题
要求进行这方面的工作,有的则将它放到设计阶段去完成,这主要是由OOA、OOD阶段划分
的不同所造成的。动态模型一般由一组状态转换图构成,从这组状态转换图可以映射到对象模
型。系统的动态模型从对象行为的角度刻划了系统功能,方便了从OOA到OOD的过渡。有的
方法虽未提供动态模型,但也提供了表示对象行为的类似方法。早期的OOA方法对建立系
什么是OOA/OOD
Object Oriented Analyzing
浅谈OOA,OOD,OOP的理解
浅谈OOA,OOD,OOP的理解OOA(⾯向对象分析)、OOD(⾯向对象设计)、OOP(⾯向对象编程),这3个概念,对于我们JAVA程序员来讲,或多或少应该都有所了解,或者说⾄少都听说过。
但是要谈到对其理解,可能对于多数⼊⾏不深的从业者来说,确实不是那么容易做到。
特别是对于绝⼤多数的3年以内的低中级软件⼯程师⽽⾔。
因为他们的⼯作更多是需要按照项⽬经理分配的任务来编写功能代码,很少有多余的时间去阅读或者思考⼀些概念性的东西。
说起这个问题,我也在⽹络上也搜索过很多的资料,⼤多摘录⾄书籍,⽐较官⽅化。
让初学者⽆从理解。
为了⼴⼤的新从业者或者应聘者,在这⾥,我们以⼀种实例的⽅式来对这3个概念进⾏重新的阐述:业务场景:建⾏卡持有者,张三与李四两⼈,现在需要张三给李四转账⼈民币5000元整。
按照业务分析后的流程图如下:对于分析业务流程,常见的2种:⾯向过程分析(POA),⾯向对象分析(OOA)⾯向过程分析(Procedure Oriented Analysis):是⼀种以过程为中⼼的编程思想,以数据流向为主要导向。
为了解决问题,将解决问题的业务过程,按照⼀定的顺序划分成为⼀个⼜⼀个的事件,然后再封装成⼀个⼜⼀个的函数,最后由⼀个函数统⼀的按照顺序⼀步⼀步的调⽤即可。
在⾯向过程分析中,顺序很重要,要实现功能只需要按照⼀定的顺序相互调⽤函数即可。
上述业务场景按照⾯向过程分析出来的结果就是:1. 程序检查张三卡中余额是否⾜够5000元⼈民币(事件1,满⾜则调⽤事件2)2. 程序从张三卡中扣除5000元⼈民币(事件2)3. 程序向李四卡中加⼊5000元⼈民币(事件3)4. 程序检测李四卡中是否正常⼊账(事件4,满⾜则结束整个业务)5. 程序向张三卡中加⼊5000元⼈民币(事件5)在上述过程中,我们将这个业务过程,分成了5个步骤,也叫做5个事件,那么如果需要在程序中完成该转账业务的话,那么我们只需要按照1-2-3-4-5这样的顺序依次调⽤函数⽅法即可。
第10章 面向对象分析
第10章 面向对象分析
第10章 面向对象分析
• 面向对象软件开发技术
– 面向对象分析(OOA) – 面向对象设计(OOD) – 面向对象实现(OOP)
面向对象技术是一个有全新概念 的开发模式,其特点是:
(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的; (2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;
取消交易
顾客可在按下选择键前任何一个时刻,拉动退币杆取 消交易收回硬币。
自动售货系统系统
-端1 * -端2
自动售货系统::售货
*
顾客
-端2
-端1 *
自动售货系统::供货
*
供货人
-端1 * -端2
自动售货系统::取货款
*
收银员
自动售货系统系统
-端1 *
-端2
售货
*
<<extends>>
售散装饮料
顾客
• 业务中的执行者扮演什么角色?这些角色可以 看作类,如客户、操作员等。
(2)筛选对象类,确定最终对象类 我们可以用以下选择特征来确定最终的对象: 1) 保留的信息:仅当必须记住有关潜在对象的 信息,系统才能运作时,则该潜在对象在分 析阶段是有用的; 2) 需要的服务:潜在对象必须拥有一组可标识 的操作,它们可以按某种方式修改对象属性 的值; 3) 多个属性:在分析阶段,关注点应该是“较 大的”信息(仅具有单个属性的对象在设计 时可能有用,但在分析阶段,最好把它表示 为另一对象的属性);
定义服务
• 对象=属性+操作(服务) • 因为在动态模型和功能模型中更明确地描 述了每个类中应该提供哪些服务,所以在 建立了这两个模型后才能最终确定类中应 有的服务。 • 事实上,在确定类中应有的服务时,既要 考虑该类实体的常规行为,又要考虑在本 系统中特殊需要的服务。
面向对象分析方法
面向对象分析方法1/2面向对象分析方法(Object-Oriented Analysis,OOA),是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。
OOA与结构化分析有较大的区别。
OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。
在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。
分类结构就是所谓的一般与特殊的关系。
组装结构则反映了对象之间的整体与部分的关系。
OOA在定义属性的同时,要识别实例连接。
实例连接是一个实例与另一个实例的映射关系。
OOA在定义服务的同时要识别消息连接。
当一个对象需要向另一对象发送消息时,它们之间就存在消息连接。
OOA 中的5个层次和5个活动继续贯穿在OOD(画向对象的设计)过程中。
OOD模型由4个部分组成。
它们分别是设计问题域部分、设计人机交互部分、设计任务管理部分和设计数据管理部分。
一、OOA的主要原则。
(1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。
抽象是形成概念的必须手段。
抽象原则有两方面的意义:第一,尽管问题域中的事物是很复杂的,但是分析员并不需要了解和描述它们的一切,只需要分析研究其中与系统目标有关的事物及其本质性特征。
第二,通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批事物的抽象概念。
抽象是面向对象方法中使用最为广泛的原则。
抽象原则包括过程抽象和数据抽象两个方面。
过程抽象是指,任何一个完成确定功能的操作序列,其使用者都可以把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。
数据抽象是根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。
软件工程导论_第十章
2. OOA基本任务是:
运用面向对象的方法,对问题域和系统责任 进行分析和理解,找出描述问题域及系统责任所需的 对象,定义对象的属性、服务以及它们之间的关系。 目标是建立一个符合问题域、满足用户功能需求的 OOA模型。
问题域:被开发系统的应用领域,记载现实世界中要
由这个系统进行处理的业务范围。现实世界中系统 所要解决问题的领域为“问题域”,如“银行业务” 属于“银行的问题域”。 系统责任:所开发的系统应该具备的职能。
• “小镇”是牙科诊所的地址属性,不是独 立的对象;“软件系统”和“系统”是 同义词,指的是将要开发的软件产品, 不是问题域中的对象;“就诊时间”、 “预约时间”和“约定时间”在本问题 陈述中的含义相同,指的都是预约的就 诊时间,实际上,预约的就诊时间既包 括日期又包括时间,但是,它们是预约 登记表包含的属性,不是问题域中的独 立的对象;“名字”和“姓名”是同义 词,应该作为病人和预约登记表的属性;
我们目标是尽可能全面的发现属性,宁可多费时, 也不要遗漏所需要的属性。
10.3.5 识别继承关系
继承关系的建立实质上是知识抽取过程,它应该 反映出一定深度的领域知识,因此必须有领域专家密 切配合才能完成。通常,许多归纳关系都是根据客观 世界现有的分类模式建立起来的,只要可能,就应该 使用现有的概念。
10.3 建立对象模型(类图)
1. 描述系统静态的对象模型(类图)是面向对象
的三个模型中的基本模型。 2. 它表述了系统中各个对象的类型及其间存在 的各种关系。在面向对象建模中,建立类图是最 基本的任务;建立类图也是最需要花费精力和时 间的技术活动。
3. 该模型主要关心系统中的:
①对象的结构; ②属性; ④关联; ⑤类的层次。 ③操作和方法;
OOA、OOD、OOP分别是什么?
OOA、OOD、OOP分别是什么?
什么是⾯向对象分析(OOA)?
"⾯向对象分析是⼀种分析⽅法,这种⽅法利⽤从问题域的词汇表中找到的类和对象来分析需求。
"
什么是⾯向对象设计(OOD)?
“⾯向对象设计是⼀种设计⽅法,包括⾯向对象分解的过程和⼀种表⽰法,这种表⽰法⽤于展现被设计系统的逻辑模型和物理模型、静态模型和动态模型”。
这⾥定义2个要点:
(1)⾯向对象设计导致了⾯向对象分解
(2)⾯向对象设计使⽤了不同的表⽰法来表达逻辑设计(类和对象结构)和物理设计(模块和处理架构)的不同模型,以及系统的静态和动态特征。
什么是⾯向对象编程(OOP)?
”⾯向对象编程是⼀种实现的⽅法,在这种⽅法中,程序被组织成许多组互相协作的对象,每个对象代表某个类的⼀个实例,⽽类则属于⼀个通过继承关系形成的层次结构“
这⾥定义有三个要点:
(1)利⽤对象作为⾯向对象编程的基本逻辑构建块,⽽不是利⽤算法
(2)每个对象都是某个类的⼀个实例
(3)类与类之间可以通过继承关系联系在⼀起。
它们之间的关系基本上,⾯向对象分析的结果可以作为开始⾯向对象设计的模型,⾯向对象的设计结果可以作为蓝图,利⽤⾯向对象编程⽅法最终实现⼀个系统。
12 第十二讲 OOA OOD OOP
阶段主要输出物:代码和开发文档
本次课程小结及上机安排
重点 了解并基本掌握OOA/OOD/OOP的思想
上机练习
1
n
概念模型
Account Userid Accountid Balance Currency Password Type InterestRate LastModified
概念类
面向对象分析OOA
需求 分析
查询 ATM 图形界面
插入银行卡
帐户
数据访问接口
…… ……
输入密码 提示输入密码 验证用户密码 读取帐户信息
Account 1 -Accountid:string -password:string -count:int +validate(accountno,pass) +getBalance()
软件类
DAO +getAccountInfo(accountno)
面向对象分析OOD
Customer Userid Username Address Phone Mobile Email Idtype IDNum 1 n Account Userid Accountid Balance Currency Password Type InterestRate LastModified
查询
1.客户插入银行 卡 2.系统提示客户 输入密码 3.客户输入密码 4.系统验证 ……
点击查询按钮
提示选择功能 读取帐户余额
显示帐户余额
序列图
面向对象分析OOD
OOD:Object-Oriented Design,面向对象设计 设计阶段则主要是确定实现用户需求的方法,即怎样做才 能满足用户需求,并构造出系统的实现蓝图。 面向对象设计引入了面向对象的概念和原则来指导设计工 作。OOD首先从OOA的结果开始,并将其从问题域映射到实现域, 为满足实现的需要,还要增加一些类,并对原有类及属性进行调 整。此外,还要完成应用控制、人机交互界面的设计等。 OOD的主要工作有: 1)问题域部分的设计主要是对OOA结果进行改进和精化,有 以下几个方面:
OOAD
OOAD 与UML---------author:Lujianyu一、基本内容:OOA/D 面向对象的分析与设计。
方法论、哲学;架构师、项目经理、设计人员OOA ——Object Oriented Analysis面向对象的分析,以业务为中心来分析解决问题,不涉及求解方案。
(问题空间)OOD ——Object Oriented Design面向对象的设计,计算机世界来体现现实世界。
(解空间)UML ——统一建模语言。
是一种图形化的语言,它可以帮助我们在OOAD 过程中标识元素、构建模块、分析过程并可通过文档说明系统中的重要细节。
(外企注重UML )面向对象的好处:让分析阶段和设计阶段平滑地过渡。
可以用解决日常问题的思路来解决计算机世界的问题。
二、开发过程:1.瀑布模型特点:用户需求一改,过程从上到下不可逆。
适合于小项目。
一般不推荐使用。
2.统一开发过程(USDP )由Retional 公司(已经被IBM 收购)提出。
特点:◆大项目分解为一些子项目——用例◆使用UML 工具◆统一软件开发过程是一个迭代、递增的开发过程每一次迭代均会越来越接近最终目标①初试②构造③细化④提交四个阶段:说明:图中蓝色部分面积表示工作量;第一次迭代需求等过程比较多;第二次迭代分析、设计、实现过程较多;第三次迭代…每次迭代都有各自重点。
一般一次迭代持续2周左右。
时间顺序Test这种方式的优点:过程中需求的改变不会影响到整体项目开发,项目控制比较灵活。
◆降低成本◆便于更好地维护项目进度◆便于团队的协作开发◆便于适应用户需求的动态变化80/20原则:把80%的精力花在20%的重点上。
三、OO设计:1.OOP的主要特征(1)、抽象:对现实生活中的建模。
(2)、封装:控制对象的边界以及控制对象对外的接口;封装使我们对边界内部代码的修改不会影响到边界外部代码的实现。
(3)、继承:is a关系。
从一般到特殊,表现了一种分类关系。
(4)、多态:一种行为在不同的条件下会表示出不同的行为方式。
高效的OOD和OODA方法
高效的OOD和OODA方法正面对抗、快速反应、灵活决策、持续优化是现代企业面临的共同挑战。
如何在面对这些挑战时更好地应对?OOD和OODA方法启示了我们:融合优势、快速学习、迭代决策、持续改进。
OOD(Object-Oriented Design,面向对象设计)是一种软件设计思想。
将程序中的对象看作独立的个体,并且各自拥有不同的属性和方法。
OOD方法论的出现,使得程序开发变得更为简单、方便、高效。
但是,在实际落地应用中,OOD方法不光可以用于程序开发,也可以被更广泛的应用于企业管理中。
OOA(Object-Oriented Analysis,面向对象分析)是OOD方法的前置工作,也是OOA方法产生的重要原因。
OOD需要程序实现的具体细节,而OOA则要求我们对系统的需求、问题、目标等作出抽象分析和分类,形成面向对象的概念体系,并在此基础上进行具体设计。
OOD的思想方法体现了解耦、分工、协作、动态的优势。
企业从生产制造、服务业到行业协同等方面都可以借鉴OOD的管理思路,实现企业的协调运营。
随着时代的发展,OOD已不能单独应对企业管理面临的挑战。
OODA(Observe-Orient-Decide-Act,观察-取向-决策-行动)方法论相信,每个决策都依赖于现实时间内的信息。
因此基于持续观察,企业应该不断调整自己的取向;快速地决策并做出行动,从而加快迭代速度,提高效率。
OODA方法还强调了决策速度、信任的建立和迅速行动。
针对OODA中的决策速度,企业应该制定快速决策机制,并通过风险评估等方式控制成本。
同时,处理实际业务时应该建立共享价值观和信任,使得所有人都是团队的一部分,共享决策和行动带来的稳定和收益。
例如,OODA方法可以在敏捷开发、领导危机、组织调整等方面值得借鉴。
对于敏捷开发来说,它可以促进开发团队快速响应市场变化和客户需求;对于领导危机,它可以使领导者快速分析问题并做出决策;而对于组织调整,它可以通过强调数据的分析和决策优先级来做好各方面的迭代调整。
面向对象分析方法
(3)按照子类(也称为派生类)和父类(也称为基类)的关系,把若干 个类组成一个层次结构的系统。在这种类层次结构中,通常下层的派生类 具有和上层的基类相同的特征(包括数据和方法),这一特性称为继承 (Inheritance)。 (4)对象与对象之间只能通过传递消息进行通信(Communication with Message)。
面向对象的开发方法
1.Booch方法 Booch最先描述了面向对象的软件开发的基础问题,指出面向对象开发 是一种根本不同于传统的功能分解的设计方法。面向对象的软件分解更接 近人对客观事物的理解。 2.Coad方法 Coad方法是1989年Coad和Yourdon提出的面向对象的开发方法,经典著 作有“OOA”, “OOP”,该方法比较完整而系统地介绍了面向对象的分析 和面向对象的设计。 3.OMT方法 OMT方法是1991年由James Rumbaugh等5人提出来的,其经典著作为 “面向对象的建模与设计”。 4.UML建模语言 UML(Unified Modeling Language)语言是一种统一建模语言,产生于90 年代中期,它不仅统一了Booch方法、OMT方法、OOSE方法的概念和表示 法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语 言。UML语言的出现具有重要的、划时代的意义,将是面向对象技术领域 内占主导地位的标准建模语言。
面向对象分析方法 OOA
Object-Oriented Analysis
传统的结构化方法适合需求比较确定的应用领域。但事实上系统的需 求却往往是变化的,而且用户对系统到底要求做什么也不是很清楚,而这 些在面向对象方法中不再成为问题,因而对象技术发展十分迅速,成为90 年代十分流行的软件开发技术。 面向对象的开发包括三个主要阶段:面向对象分析(Object-Oriented Analysis)、面向对象设计(OOD)和面向对象程序设计(OOP)。其中,OOA是 指系统分析员对将要开发的系统进行定义和分析,进而得到各个对象类以 及它们之间的关系的抽象描述;OOD是指系统设计人员将面向对象分析的 结果转化为适合于程序设计语言中的具体描述,它是进行面向对象程序设 计的蓝图;OOP则是程序设计人员利用程序设计语言,根据OOD得到的对 象类的描述,建立实际可运行的系统。
面向对象的OOA_OOD软件开发技术分析
第25卷 第5期2009年10月 忻州师范学院学报JOURNAL OF X I N ZHOU TE ACHERS UN I V ERSI TY Vol.25 No.5 Oct.2009 面向对象的OOA、OOD软件开发技术分析任胜兰(太原师范学院,山西太原030012)摘 要:面向对象是当前计算机界关心的重点,是上个世纪90年代软件发展的主流,实际上,面向对象的概念和应用已经超越程序设计和软件开发,而且已经渗透到了系统模拟、数据库、多媒体、图形技术、网络管理系统、CAD技术、人工智能等多个领域。
文章主要讨论面向对象的开发方法OOA和OOD,并且对面向过程与面向对象加以比较,阐述了面向对象的OOA、OOD之不足及适用范围,同时也分析了发展中存在的争论问题。
关键词:面向对象;OOA;OOD;软件开发中图分类号:TP311 文献标识码:A 文章编号:1671-1491(2009)05-0039-04 面向对象(Object-O riented,简称OO)技术是一种以对象为中心的分析和解决问题的新方法,它克服了传统方法中对象与行为之间联系松散的缺点,更能体现软件开发中的三个重要概念,即抽象、信息隐蔽和模块化。
因此面向对象技术已广泛应用于软件开发的各个阶段,从而产生了面向对象的分析方法OOA(Object-O riented Analysis),面向对象的设计方法OOD(Object-O riented Design)等面向对象的技术。
面向对象(OO:Object-O riented)是当前计算机界关心的重点,是90年代软件发展的主流,实际上,面向对象的概念和应用已经超越程序设计和软件开发,而且已经渗透到了系统模拟、数据库、多媒体、图形技术、网络管理系统、CAD 技术、人工智能等多个领域。
一些新的工程概念及其实现,如并发工程、综合集成工程等,也需要面向对象的支持。
实践证明,采用面向对象的方法在提高软件的可靠性、可理解性和可维护性,提高软件质量和生产效率,降低生产成本等方面都具有重要的意义。
【OOA、OOD、OOP、MVC概述】面向对象体系结构概述
【OOA、OOD、OOP、MVC概述】⾯向对象体系结构概述OOA、OOD、OOP、MVC概述OOA⾯向对象分析 Object Oriented Analysis是确定需求或者业务的⾓度,按照⾯向对象的思想来分析业务。
例如,OOA只是对需求中描述的问题进⾏模块化的处理,描述问题的本质,区别每个问题的不同点、相同点,确定问题中的对象。
OOA与结构化分析有较⼤的区别。
OOA所强调的是在系统调查资料的基础上,针对OO⽅法所需素材进⾏的归类分析和整理,⽽不是对管理业务现状和⽅法的分析。
OOA的基本步骤:第⼀步,确定对象和类。
第⼆步,确定结构(structure)。
第三步,确定主题(subject)。
第四步,确定属性(attribute)。
第五步,确定⽅法(method)。
OOD⾯向对象设计(Object Oriented Design)主要作⽤是对OOA分析的结果做进⼀步的规范化整理,以便能够被OOP直接接受。
OOD的⽬标是管理程序内部各部分的相互依赖。
为了达到这个⽬标,OOD要求将程序分成块,每个块的规模应该⼩到可以管理的程度,然后分别将各个块隐藏在接⼝(interface)的后⾯,让它们只通过接⼝相互交流。
⽐如说,如果⽤OOD的⽅法来设计⼀个服务器-客户端(client-server)应⽤,那么服务器和客户端之间不应该有直接的依赖,⽽是应该让服务器的接⼝和客户端的接⼝相互依赖。
这种依赖关系的转换使得系统的各部分具有了可复⽤性。
还是拿上⾯那个例⼦来说,客户端就不必依赖于特定的服务器,所以就可以复⽤到其他的环境下。
如果要复⽤某⼀个程序块,只要实现必需的接⼝就⾏了。
OOD是⼀种解决软件问题的设计范式(paradigm)。
使⽤OOD这种设计范式,可以⽤对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和⾏为。
OOD是⼀种抽象的范式。
抽象可以分为很多层次,从⾮常概括的到⾮常特殊的都有,⽽对象可能处于任何⼀个抽象层次上。
软考知识点梳理--面向对象方法
软考知识点梳理--⾯向对象⽅法⾯向对象(Object-Oriented,OO)⽅法认为,客观世界是由各种对象组成的,任何事物都是对象,每⼀个对象都有⾃⼰的运动规律和内部状态,都属于某个对象类,是该对象类的⼀个元素。
复杂的对象可由相对简单的各种对象以某种⽅式⽽构成,不同对象的组合及相互作⽤就构成了系统。
OO⽅法是当前的主流开发⽅法,拥有很多不同的分⽀体系,主要包括OMT(Object Model Technology,对象建模技术)⽅法、Coad/Yourdon⽅法、OOSE(Object-Oriented Software Engineering,⾯向对象的软件⼯程)⽅法和Booch⽅法等,⽽OMT、OOSE和Booch已经统⼀成为UML(United Model Language,统⼀建模语⾔)。
使⽤OO⽅法构造的系统具有更好的复⽤性,其关键在于建⽴⼀个全⾯、合理、统⼀的模型(⽤例模型与分析模型)。
与结构化⽅法类似,OO⽅法也划分阶段,但其中的系统分析、系统设计和系统实现三个阶段之间已经没有 “缝隙”。
也就是说,这三个阶段的界限变得不明确,某项⼯作既可以在前⼀个阶段完成,也可以在后⼀个阶段完成;前⼀个阶段⼯作做得不够细,在后⼀个阶段可以补充。
OO⽅法使系统的描述及信息模型的表⽰与客观实体相对应,符合⼈们的思维习惯,有利于系统开发过程中⽤户与开发⼈员的交流和沟通,缩短开发周期。
OO⽅法可以普遍适⽤于各类信息系统的开发,但是,OO⽅法也存在明显的不⾜。
例如,必须依靠⼀定的OO技术⽀持,在⼤型项⽬的开发上具有⼀定的局限性,不能涉⾜系统分析以前的开发环节。
当前,⼀些⼤型信息系统的开发,通常是将结构化⽅法和OO⽅法结合起来。
⾸先,使⽤结构化⽅法进⾏⾃顶向下的整体划分;然后,⾃底向上地采⽤OO⽅法进⾏开发。
因此,结构化⽅法和OO ⽅法仍是两种在系统开发领域中相互依存的、不可替代的⽅法。
OOA 的基本任务是运⽤OO⽅法,对问题域进⾏分析和理解,正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。
面向对象分析与设计
类(class)和实例(instance)
把具有相同特征和行为的对象归在一起就形成了类。类成为 对象的模板,抽象地描述了属于该类的全部对象的属性和操 作。 属于某个类的对象叫做该类的实例。
王辉 属性 王辉 男 湖南 计算机控制 1979.1 9#楼320室 服务 杨芳 属性 杨芳 女 北京 系统结构 1979.12 5#楼418室 服务 学生 属性 姓名 性别 籍贯 专业 出生年月 住址 服务 看书 实验 上课 运动
对象(object) 一般意义来讲,对象是现实世界中存在的一 个事物。可以是物理的,如一张桌子,也可 以是概念上的,如一个开发项目。 对象具有自己的静态特征(用数据描述)和动 态特征(行为或具有的功能)。
对象的分类: 外部实体:与软件系统交换信息的外部设备、相关子系统、操作 员或用户等。 信息结构:问题信息域中的概念实体,如信号、报表、显示信息 等。 需要记忆的事件:在系统运行过程中可能产生并需要系统记忆的 事件,如单击鼠标左键、击打键盘“”键等。 角色:与软件系统交互的人员所扮演的角色,如经理、部长、技 术支持等。 组织机构:有关机构,如单位、小组等。 位置:作为系统环境或问题上下文的场所、位置,如客户地址、 收件人(机构)地址等。 操作规程:如操作菜单、某种数据输入过程等。
通过在不同程度上运用抽象的原则,可以得到较一般的类和 较特殊的类。持殊类继承一般类的属性与服务,从而简化系 统的构造过程及其文档。 复杂的对象可以用简单的对象作为其构成部分(称作聚合)。 对象之间通过消息进行通信,以实现对象之间的动态联系。 通过关联表达对象之间的静态关系。 同名服务提供不同功能实现对象的多态性。
面向对象分析与设计 OOA&OOD
1 面向对象方法概述
软件工程第11章面向对象设计
2. 重用已有的类
重用已有类(代码重用)实现分析模型;若没有可以重用类而需要创建新 类时,则在设计这些新类时需要考虑其可重用性。
对于已有的可重用类,典型重用方法和过程如下: 1)选择可能被重用的已有类,标出类中对本问题无用的属性和服务,选 择那些能使无用的属性和服务最少的类; 2)从被重用的已有类派生出问题域类(继承重用类而产生问题域类); 3)标出从已有类继承来的属性和服务,而无须在分析类内定义;
6. 可重用
软件重用是提高软件开发生产率和目标系统质量的重要途径。 重用有两方面的含义: 一是尽量使用已有的类(类库或已建立的类), 二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将 来的可重复使用性。
11.2
启发规则
与结构设计规则类似,通过OOD实践也总结了一些设计规则: 1. 设计结果应该清晰易懂 设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要 措施。保证设计结果清晰易懂的主要因素为:用词一致;使用已有的 协议;避免模糊的定义等。
1)层次组织:这种组织方案把软件系统组织成一个层次系统,每层是一 个子系统。上层和下层自系统形成C/S结构 层次结构的两种模式:封闭式和开放式:封闭式,每层子系统仅仅使用其 直接下层提供的服务;开放式,任一层次可以向下跨层次调用。 2)块状组织:把软件系统垂直地分解成若干个相对独立的、松耦合的子 系统,一个子系统相当于一块,每块提供一种类型的服务。
第11章
11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11
面向对象设计
面向对象设计的准则 启发规则 软件重用 系统分解 设计问题域子系统 设计人机交互子系统 设计任务管理子系统 设计数据管理子系统 设计类中的服务 设计关联 设计优化
OOA、OOD和UML
2021/4/15
12
C++中的面向对象特性
继承
相对于结构化编程中 的模块重用,面向对 象中的继承体系显得 更灵活,对代码的控 制手段更多,从而推 动了代码复用的程度, 但却加大了学习掌握 的难度。
2021/4/15
13
C++中的面向对象特性
多态
同名的函数,参数个数不同
Programmers Software management
Process View
System Integrators Performance Scalability Throughput
Deployment View
System Engineering System topology
Delivery, installation communication
2021/4/15
54
设计过程(四)---数据结构
Struct VS Class
1. 结构化编程时代:
程序=数据结构+算法
2. 面向对象软件时代:
软件=对象+对象之间的关系
2021/4/15
55
数据结构设计结果
2021/4/15
56
设计过程(五)---数据对象的 管理?
OO软件的显著特点之一是如何管理对象
OOA、OOD和UML
面向对象技术的C++ OOD实践
2021/4/15
1
主要内容
OOA、OOD与UML基础 Rose如何介入软件开发的全过程 案例:编写一个自己的简化版WinZip 案例:设计自己的事件驱动系统 案例:将缓冲池思想应用于数据集 案例:三层杂志社管理软件系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
。这样,分析和设计人员就可以从宏观与微观、整体与局部等不同角度来分析问题,便于透彻地
认识和理解问题。
OOD方法:
析阶段主要是明确用户的功能需求,及满足用户所需的系统部件及其结构。设计阶段则主
要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。面向
. 服务:OOA只给出了服务的接口,其具体实现算法要在OOD阶段完成。.
类及对象:在OOA阶段有助于问题理解的一些类在OOD阶段成为冗余,需要删除,而为
了优化调整继承关系还要增加一些类。所有的类都确定以后还要明确哪些类的对象会引发哪
些类创建新对象。
. 结构:对类间结构进行优化调整。
了理解问题;而在OOD阶段,它们的引入则主要是针对软件的构造和实现。分类结构通过继
承机制来实现,因而代码得到了有效地复用;组装结构则将一些类组合在一起构成产生问题,当其对应的实体在现实世界中出现时,它也就在问
题域中产生了。OOA也不考虑对象属性的取值和服务算法的实现。而在OOD阶段这些问题
主要工作包括:
.交互界面子系统的设计:与界面有关的类及类间结构的设计,以及有关算法的设计。
.交互界面子系统和应用之间接口的设计。
.应用控制部分的设计:这部分对象主要完成应用的驱动工作。这部分对象不同于从现实
世界中抽象出来的对象,在现实世界和问题域中没有原型,它们同界面子系统中的对象及问题
统动态模型认识不足,这主要是因为当时的许多方法是受数据模型的启发而产生的。现在越来越
多的人认识到了系统动态分析工作的重要性,并在分析方法中引入了相应概念。除
此之外,许多OOA方法还引入了问题复杂性控制机制。如,Coad&Yourdon在其方法中
引入了主题的概念;Wirfs&Brock在其方法中引入了子系统的概念。问题复杂性控制机制主
要求进行这方面的工作,有的则将它放到设计阶段去完成,这主要是由OOA、OOD阶段划分
的不同所造成的。动态模型一般由一组状态转换图构成,从这组状态转换图可以映射到对象模
型。系统的动态模型从对象行为的角度刻划了系统功能,方便了从OOA到OOD的过渡。有的
方法虽未提供动态模型,但也提供了表示对象行为的类似方法。早期的OOA方法对建立系
OOD的主要工作有:
2问题域部分的设计问题域部分的设计是任何OOD方法都必须完成的工作,它主要是对OOA结果进行改进和
精化,并将其由问题域转化到解域,具体来说,
有以下几个方面:
.属性:有些属性在分析阶段有助于问题的理解,而到了设计阶段则可以由其他属性导出或
根本没必要保留。因此,应将它们去掉。相反地,为了实现服务算法还需要增加相应的一些属性。
对象设计也是如此,只不过是引入了一些面向对象的概念和原则,用以指导设计工作。OOD首
先从OOA的结果开始,并将其从问题域映射到实现域;为满足实现的需要,还要增加一些类
、结构及属性和服务,并对原有类及属性进行调整。此外,还要完成应用控制、人机交互界面的设计等。在现有方法中,Coad等人的OOD就是比较全面的设计方法。
都必须详细考虑。
8)OOD涉及到重载问题;而OOA没有考虑,因为考虑过多的实现细节对理解问题和分
析用户需求没有多大帮助。
1)个体特征分析:标识对象及其属性和服务。有的方法在标识特征时对属性的要求可能
弱一些,这是因为对象是属性和操作的封装体,对象的访问可以通过接口--操作来实现。这
样在标识对象时对象的内部特征可暂不考虑,仅考察外部行为。每种分析方法在完成这些工作
时各具特色,如:Coad&Yourdon方法只给出了一些标识对象及其特征的一般原则和思路;R
的关系;OOD则侧重于系统的实现,设计人员关心的是对象的行为及其实现。
3)OOA标识了一组对象,并通过其相互作用来刻划系统,该阶段的工作与程序设计语言
无关;OOD定义了一组类,并设计出系统的实现蓝图,概要设计与程序设计语言无关,但详细
设计则与之有比较密切的联系。
4)OOA识别的对象是对客观世界实体的抽象,标识对象的准则是:该对象的引入是否有助于对问题域的理解;OOD中构造类的准则是:该类的构造是否可行,是否有效地实现了抽象
Object Oriented Analyzing
Object Oriented Design
Object Oriented Programming
ooa(object oriented analysis)面向对象分析
ood(object oriented design)面向对象设计
ooa:分析阶段所做的主要工作是理解问题和需求构模,将现实世界中的问题映射到问题域。在该
阶段,要明确用户提出了哪些功能要求,为完成这些要求,系统应有哪些构件,采用什么样的结构,并写出详细的需求规约。OOA中引入了许多面向对象的概念和原则,如,对象、属性、服务
、继承、封装等,并利用这些概念和原则来分析、认识和理解客观世界,将客观世界中的实体抽
数据类型,是否有助于系统的实现和提高软件质量。
5)两个阶段都没有提及系统对象,但原因不同。在OOA阶段,分析与实现无关,分析所涉
及的范围与解域无关,系统对象自然不用考虑。OOD建立的对象模型本身就是要设计的软件
系统,对系统对象的考虑是隐含的。
6)组装结构和分类结构在两个阶段所起的作用不同。在OOA阶段,它们的引入主要是为
. 对象行为:明确对象间消息传递的实现算法,依据动态模型确定对象间消息发送的先后顺
序,并设计相应算法,协调对象的行为。
2 2 人机交互与应用控制部分的设计有些设计方法并没有提到交互界面的设计,一方面是因为这些系统中交互界面不十分重要;另一方面是因为这部分的设计很有规律,设计方法也比较成熟,但为完整起见,仍将其列出。
强调OOD。尽管OOA和OOD存在着某些交叉和联系,但它们之间仍有许多差别,如:
1)OOA将现实世界中的实体抽象为问题对象,并构造问题域中的系统需求模型;OOD将
问题对象转化为解域中的类并在解域中构造出问题的解。
2)OOA侧重于用户需求的分析和对问题域的理解,分析人员关心的是系统结构及对象间
如所熟知,面向对象作为一种程序设计技术最早于60年代后期提出,用于Simula的应用程
序开发。到了70年代,面向对象成为Smalltalk语言的一个重要特征。当时,面向对象技术主要
用于程序设计。进入90年代,人们的注意力逐渐从程序设计转向系统分析和设计,用对象的观
点来认识现实世界、设计问题的可行解,随之也就出现了许多OOA和OOD方法。但这些方法
OOA和OOD方法,Shlaer&Mellor的OOA方法,Rumbaugh的OOAD方法等。不同的方法
体系都分别体现了人们对OOA、OOD,以及面向对象软件开发过程的不同认识。本文的主要
目的就是,试图通过对现有OOA与OOD方法的共性进行纵观分析,弄清二者之间的边界问
题,评析从OOA到OOD过渡的难易,并讨论实现这种过渡所涉及的主要工作。
象为问题域中的对象,即问题对象,分析客观世界中问题的结构,明确为完成系统功能,对象间
应具有的联系和相互作用。
因此,下述问题是OOA阶段必须回答的:
1)为完成用户要求系统应提供哪些功能?
2)系统应有哪些对象构成?
3)每个对象应有哪些属性和服务?
4)对象间应有怎样的联系?要
回答这些问题,就需要从静态和动态两方面来认识、分析现实世界对象。具体地说,要进行:
对象发生作用,控制系统的运行。
OOA与OOD的区别
上讨论了OOA阶段和OOD阶段所应完成的主要工作,由于这两个阶段的划分没有公认
的标准,有些工作是在OOA阶段完成还是在OOD阶段完成还存在着争议。有人认为OOA和
OOD可以交叉进行;有人认为OOD是对OOA结果的改进和细化,所以只提OOA;有人则更
.Abbott认为,可以通过分析非形式化英语的问题描述,将名词标识为对象,将形容词标识为属
性,将动词标识为服务;Bailin等人则采用结构化与面向对象技术相结合的方法。
2)静态分析:分析和描述系统的静态结构。一般地,对象系统中的类或对象之间存在着两
种关系:一般—特殊关系和整体—部分关系。其中,前者更具普遍性,它的一种重要实现形式
就是继承机制,也是面向对象程序设计语言所支持的语言设施。同样,大多OOA方法也都为
继承提供了相应的表示方法。因此,系统静态分析主要是分析、识别对象或类间的一般—特殊
结构,并添加一些必要的类,构造继承关系。
3)动态分析:分析对象及之间的行为及其控制关系,建立系统的动态模型。多数分析方法
还不很成熟,在OOA与OOD的边界划分上也存在着争议。如:有人认为面向对象软件开发
过程可以分为面向对象分析、面向对象设计和面向对象程序设计三个阶段;有人认为分析和设
计可以交叉进行不必做严格区分;还有人沿用传统方法进行分析和设计,用面向对象程序设计
语言来实现系统。O
OA/OOD的一些较有代表性的工作有Gray.Booch的OOAD方法,Coad&Yourdon的