《面向对象分析第六章第七章.ppt》由会员分享,可在线阅读,更多相关《面向对象分析第六章第七章.ppt(91页珍藏版)》请在三一文库上搜索。
1、2019/8/2,共27页 第1页,1.面向对象的基本概念与模型(6章) 2.面向对象分析(7章) 3.面向对象设计(8章) 4.面向对象软件的实现与测试(9章),第三篇 主要内容,2019/8/2,共27页 第2页,本章要解决的问题:,面向对象方法学概述 传统方法和面向对象方法有何不同? 面向对象方法学的主要优点 面向对象的概念 面向对象建模,第六章面向对象的概念与模型,2019/8/2,共27页 第3页,面向对象方法概述,什么是开发模式? 什么是面向对象开发模式? 为什么要用面向对象方法?,2019/8/2,共27页 第4页,一、软件开发模式(Paradigm),1、什么是开发模式 开发模
2、式又称为范型、范例、风范或模式(Pattern)。开发模式定义了: 特定问题和应用的开发过程中将遵循的步骤; 确定将用于表示问题和解的那些成分的类型; 利用这些成分表示与问题解决有关的抽象; 直接得到问题的结构。,2019/8/2,共27页 第5页,2、开发模式的影响,开发模式的选择影响到整个软件开发生存期。开发模式支配了: 设计方法 编码语言 测试和检验技术,2019/8/2,共27页 第6页,3、几种流行的开发模式,目前流行的开发模式有多种,它们提供了可进行系统分解的多种方法。 面向过程的开发模式; 面向对象的开发模式; 面向存取的开发模式; 面向进程的开发模式; 逻辑性的开发模式; 函数
3、型的开发模式; 说明性的开发模式。,2019/8/2,共27页 第7页,开发模式所具有的的共性:,每个开发模式都有它的支持者和用户; 每个开发模式都特别适合于某种类型的问题或子问题; 每一个开发模式都用不同的方式考虑问题; 每一个开发模式都使用不同的方法来分解问题; 每一个开发模式都导致不同种类的块、过程、产生规则。,2019/8/2,共27页 第8页,4、混合开发模式,在大型系统的开发中,只用一种开发模式很难说哪种开发模式对整个问题的解决最好。 系统开发时,通常把大型问题分解成一组子问题。对于每个子问题可以采用适当的软件开发模式。 这种设计需要有某种实现语言或一组协同语言的支持。许多流行的功
4、能不断增强的语言可支持不只一种设计开发模式。,2019/8/2,共27页 第9页,一个智能数据分析系统的设计,可把它看做是 4 个子系统。系统有: 一个数据库界面。使用了面向存取的开发模式进行设计; 智能数据分析。使用逻辑性的开发模式完成; 一组分析算法。分析算法是过程性的,所以使用过程性的开发模式设计; 用户界面。使用面向对象开发模式。,例:,2019/8/2,共27页 第10页,几个常用的术语,面向对象(OO) 面向对象方法(OOM) 面向对象分析(OOA) 面向对象设计(OOD) 面向对象程序设计(OOP) 面向对象测试(OOT) 面向对象需求分析(OORA) 面向对象领域分析(OODA
5、) 面向对象数据库系统(OODBMS) 面向对象计算机辅助软件工程(OOCASE),2019/8/2,共27页 第11页,第七章 面向对象分析,如何用OO软件工程方式进行系统分析? 如何描述OO系统?如何对OO系统建模? 如何建立对象模型? 如何建立动态模型? 如何建立功能模型,结构化分析模型的组成结构,数据流图 (DFD),E-R图,状态变迁图 (STD图),加,工,说,明,控制说明,数,据,对 象,说 明,数据字典 (DD),面向对象分析模型的组成结构,动态模型,对象 模型,功能 模型,使用实例 (Use Case),静,态,结 构,交互次序,据,变 换,数,2019/8/2,共27页 第
6、14页,传统方法数据与过程是分离的,过程1,输入,输出,过程2,过程3,数据实体,属于该对象 的数据,对象,处理数据的方法,消息,消息,对象把数据和处理数据的方法封状成一个单元,2019/8/2,共27页 第15页,面向对象分析是软件开发过程中的问题定义阶段。这一阶段的两个重要步骤: 领域域分析:建立概括的系统实现模型 应用分析:根据特定应用的需求对论域分析的模型进行细化 最后成果:得到对问题领域的清晰而精确的定义。,2019/8/2,共27页 第16页,7.1 分析过程需要完成: 找到特定对象 基于对象的公共特性组合这些对象 标识出对问题的抽象 标识出抽象之间的关系,2019/8/2,共27
7、页 第17页,对象模型化技术(三视点技术) (Object Model Tech. OMT),对象模型化技术用于把分析时收集的信息构造在三类模型中,即对象模型、功能模型和动态模型。 这个模型化的过程是一个迭代过程。,2019/8/2,共27页 第18页,分析模型 对象模型: 描述静态结构, 定义做 事情的实体 功能模型: 描述处理(数据变换), 指明系统应“做什么” 动态模型: 描述交互过程, 规定什么 时候做,OMT模型系统分析和设计过程概观图,产生需求,结构及对象 设计,建立模型,问题描述,对象模型、动态模型、功能模型,详细的对象模型 详细的动态模型 详细的功能模型,分 析 阶 段,设 计
8、 阶 段,2019/8/2,共27页 第20页,基于三个模型的分析步骤:,需求陈述 对象建模 动态建模 功能建模 添加操作反复建模,2019/8/2,共27页 第21页,OOA的基本过程,从理解系统的使用方式开始,确定使用场景(脚本),构造问题域模型。 OOA概念模型由五个层次组成: 主题层 类与对象层 结构层 属性层 服务层 这五个层次是分析过程中的层次,每个层次的工作都为系统的规格说明增加了一个组成部分。,2019/8/2,共27页 第22页,OOA的层次结构,7.2 需求陈述(软件需求说明书 (SRS)),(Software Requirement Specification) 需求分析
9、阶段要完成的文档。 SRS的作用: 开发者与用户间事实上的技术合同书 开发者下一步设计和编码的基础 测试验收目标系统的依据,S R S 大 纲,1引言 1.1编写目的 1.2背景 1.3定义 1.4 参考资料 2任务概述 2.1目标 2.2用户的特点 2.3假定盒约束 3需求规定 3.1对功能的规定 3.2对性能的规定 3.3输入输出要求 3.4数据管理能力要求 3.5故障处理要求 3.6其他专门要求,(GB9385-88),4运行环境规定 4.1设备 4.2支持软件 4.3接口 4.4控制,2019/8/2,共27页 第25页,7-3 对象模型,对象模型是三个模型中最关键的一个模型,它的作用
10、是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。,2019/8/2,共27页 第26页,(1)对象模型的表示:,2019/8/2,共27页 第27页,实例连接:又称为链,用于表达对象之间的静态联系(通过对象属性表示一个对象对另一个对象之间的依赖关系。,(2)实例连接与关联关系的表示,阶,2019/8/2,共27页 第28页,类 1,连接名称 m n,类 1,连接 属性,链属性的表示:,允许实例连接带有一组属性,这些属性通过关联来描述,2019/8/2,共27页 第29页,关联关系 (链属性),为之工作,工资 职务,雇主,雇员,个人 名字 身份证号,公司 名字
11、地址,题目 答辩时间 成绩,教师,学生,指导论文 0,m 1,2019/8/2,共27页 第30页,(3)相关的图形符号:,多个,一个,链属性,2019/8/2,共27页 第31页,说明:,聚合:代表整体与部分的关系,这是一种特殊形式的关联。 限定:用以对关联的含义做某种约束。 角色:用来说明关联的一端。由于多数关联具有两个端点,因而涉及到两个角色。 连接属性:允许使用附加的属性说明对象之间的连接,2019/8/2,共27页 第32页,(4)定义结构和层次,类模型的结构及由类和子类构成的类层次,表示问题域中的复杂关系,是客观世界实体间关系的抽象。 类及对象间的关系可概括为: 归纳关系:(一般/
12、特殊结构、分类结构) 针对事物类之间的组织关系 组合关系:(整体/部分结构、组装结构) 表示事物的整体与部分之间的组合关系,2019/8/2,共27页 第33页,一般/特殊结构表示法:,子类的公共属性和操作归属于一般类并被每一个子类共享,每一个子类都继承了一般类的特征。,一般类 (父类、基类、超类),特殊类 (子类),表示一般与 特殊结构,2019/8/2,共27页 第34页,存户,一般/特殊结构举例(归纳关系):,一般类 (父类、基类、超类),特殊类 (子类),继承,一个特殊类中的所有对象可继承一般类中的属性、服务、关系,账号 姓名 余额,存款 取款,支票存户,储蓄存户,利息率,2019/8
13、/2,共27页 第35页,建立对象模型,2019/8/2,共27页 第36页,整体/部分结构(分类结构):,整体/部分结构是一种特定的连接. 整体类中的一个对象(或称聚合)是由各部分类的对象(或称成分)构成的. 这一结构是对象间的一种关系.,2019/8/2,共27页 第37页,整体/部分结构表示法:,一个整体对象可有不同类型的部分对象. 一个部分对象也可同时属于多个整体对象.,传递性,2019/8/2,共27页 第38页,整体/部分结构表示法举例 :,2019/8/2,共27页 第39页,建立对象模型,2019/8/2,共27页 第40页,例:一家公司的对象模型,职员,公司,为某公司开发信息
14、管理系统,该公司有三个部门, 每个部门可以开发多个产品.该公司有多名项目经理, 员工上百人.有四个正在进行的项目,每个项目必 须有一个项目经理,每个员工可参与一个或多个项目. 请画出该公司的对象模型.,2019/8/2,共27页 第41页,例:一家公司的对象模型,为之工作,管理 0,1,姓名 性别 身份证号码 地址,职员,名 电话 经营项目 地址,公司,职务,雇用 解雇,项目名 预算 优先级,项目,产品名 成本 重量,产品,职员,经理,部门,部门名,主持,参加,1+,1+,1+,1+,1+,生产,2019/8/2,共27页 第42页,建立对象模型的步骤:,标识类及对象 标识结构 标识主题 定义
15、属性及实例连接 定义服务及消息连接 五个步骤常根据需要交叉进行,2019/8/2,共27页 第43页,1、识别类和对象,面向对象分析的第一个层次主要是识别类和对象。 类和对象是对与应用有关的概念的抽象。,建立对象模型,2019/8/2,共27页 第44页,基于语言的信息分析,在发现对象过程中,可以使用一种十分有用的工具,即LIA(基于语言的信息分析)。 LIA的目的是标识出问题论域的所有概念及这些概念之间的关系。 短语频率分析(PFA) 矩阵分析(MA)。,建立对象模型,2019/8/2,共27页 第45页,(1)找出候选的类&对象,可感知的物理实体 人或组织的角色 应该记忆的事件 两个多个事
16、件的相互作用,通常具有交易或接触性质 需要说明的概念,建立对象模型,2019/8/2,共27页 第46页,(2)筛选出正确的类&对象,冗余 无关 笼统 属性 操作 实现,建立对象模型,2019/8/2,共27页 第47页,2、标识结构(确定关联),面向对象分析的下一步工作是标识结构。 一般化-特殊化结构(Gen-Spec结构) 整体-部分结构(Whole-Part结构),建立对象模型,2019/8/2,共27页 第48页,标识Gen-Spec结构的方法和策略:,对于每一个类和对象,将它看作是一个一般化的类,对它的所有特殊情况,考虑以下问题: 它是否在问题论域中? 它是否在系统的职责内? 继承性
17、是否存在? 它是否能够符合选择类和对象的标准?,建立对象模型,2019/8/2,共27页 第49页,标识Whole-Part结构的方法和策略,应当寻找什么 总体-部分(Assembly-Parts)关联,如飞机-发动机之间的关系。 包容-内含(Container-Content)关联,如飞机-飞行员之间的关系。 收集-成员(Collection-Members)关联,如机构-职员之间的关系。,建立对象模型,2019/8/2,共27页 第50页,将每一个类看作是一个Whole类,对它的所有可能Parts情况,考虑以下问题: 它是否在问题论域中? 它是否在系统的职责内? 它是否代表一个以上的状态值
18、? 若不是,是否将它变为Whole中的一个属性? 它是否提供问题论域中有用的抽象?,建立对象模型,2019/8/2,共27页 第51页,3、识别主题,将每一种结构(包括整体-部分结构、和一般化-特殊化结构)中最上层的类提升成为主题; 将各不属于任何结构的类提升主题; 检查在相同或类似的问题论域中以前做面向对象分析的结果,看是否有可直接复用的主题。,建立对象模型,2019/8/2,共27页 第52页,4、标识属性及实例连接,下一个层次称为属性层,对前面已识别的类和对象做进一步的说明。在这里,对象所保存的信息称为它的属性。 类的属性所描述的是状态信息,每个实例的属性值表达了该实例的状态值。,建立对
19、象模型,2019/8/2,共27页 第53页,标识属性的方法和策略,找出属性 将属性安放到适当的位置 找出实例连接 检查特殊情况 描述属性 考虑取值范围、极限值、缺省值、建立和存取权限、精确度、是否会受到其他属性值等。,建立对象模型,2019/8/2,共27页 第54页,属性层,建立对象模型,2019/8/2,共27页 第55页,5、识别继承关系,继承关系的建立实质上是知识抽取的过程,它应该反映出一定深度的领域知识 可用两种方法建立: 自底向上:抽象出现有类的共同性质泛化出的父类 自顶向下:将现有类细化成更具体的子类,建立对象模型,2019/8/2,共27页 第56页,6、反复修改,建立对象模
20、型,实例:饮料自动售货机系统 设置 一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动调配,并可随时重新设置售价,但售货机最多仅能放置50罐饮料,其按钮设计在各种饮料样本的下方,若经金额计算器累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。 销售 顾客将硬币投入售货机,经累加金额足额的饮料选择键灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。 取消交易 顾客可在按下选择键前任何一个时刻,拉动退币杆取消交易收回硬币。,找出饮料自动售货机系统中的对象 设置 一个饮料自动售货机可以放置五种不同或部分相同的饮料,可由厂商根据销售状况自动
21、调配,并可随时重新设置售价,但售货机最多仅能放置50罐饮料,其按钮设计在各种饮料样本的下方,若经金额计算器累计金额足够,则选择键灯会亮;若某一种饮料已销售完毕,则售完灯会亮。 销售 顾客将硬币投入售货机,经累加金额足额的饮料选择键灯亮,等顾客按键选择。顾客按键后饮料由取物楼掉出,并自动结算及找钱。 取消交易 顾客可在按下选择键前任何一个时刻,拉动退币杆取消交易收回硬币。,饮料自动售货机系统对象模型,售货机,饮料号码 价格,投币-接受 饮料掉出 金额显示 按纽 退币杆 售完显示,存量计算器,饮料号码 存量,递减 售完显示 重置,选择钮,选择钮状态,灯亮 灯熄 售完灯亮 按钮,顾客,姓名 硬币,投
22、币-置入 拿取饮料,退币杆,退币杆状态,拉动,金额计算器,金额,累加 找零 重置,购买,选取,被拉动,属于,属于,属于,属于,2019/8/2,共27页 第60页,7.4 建立动态模型,动态模型着重于描述系统的控制逻辑。 它包括两个图,一是事件追踪图,一是状态图。,2019/8/2,共27页 第61页,(1)事件,瞬时发生的行为 每个事件都是单独发生的 我们建立事件类,并给每个事件一个名字,以指明共同结构和行为。 事件从一个对象向另一个对象传送信息。 事件类的属性: 例:火车开动事件(车道、车次、起点、 终点、车厢数),2019/8/2,共27页 第62页,有些事件类可能传送的是简单的信号“要
23、发生某件事”,而有些事件类则可能传送的是数据值。由事件传送的数据值叫做属性。 列车出发(线路、班次、城市) 按下鼠标按钮(按钮、位置) 拿起电话受话器 数字拨号(数字),2019/8/2,共27页 第63页,脚本与事件追踪图,事件追踪图:侧重于说明发生于系统执行过程中的一个特定“场景”(脚本)。 脚本:也叫做场景,是系统某一次特定运行时期发生的事件序列。场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件。,2019/8/2,共27页 第64页,例:通话脚本(只包括影响电话线的事件),2019/8/2,共27页 第65页,2019/8
24、/2,共27页 第66页,课堂练习:自动售货机的正常情况脚本,画事件跟踪图: 顾客投硬币 金额器累加 显示金额给顾客 金额足够,对应的选择键灯亮 顾客选择按钮,选择键发消息给售货机 售货机给顾客饮料 金额计算器结算 显示剩余金额 顾客拉动退币杆 售货机找零 售货机扣减存量 显示存量为零 售完灯亮,存量为零,找零,扣减存量,售完灯亮,余额,饮料,结算,选择键 #,选择按纽,灯亮,金额总够,显示总额,总额,累加,投入硬币,金额计算器,存量计算器,顾客,售货机,选择键,举例:饮料自动售货机系统的事件追踪图,退币杆,拉退币杆,2019/8/2,共27页 第68页,(2)状态图,状态图是一个状态和事件的
25、网络,侧重于描述每一类对象的动态行为。 在状态图中,状态是对某一时刻中属性特征的概括。而状态迁移表示这一类对象在何时对系统内外发生的哪些事件做出何种响应。,2019/8/2,共27页 第69页,操作:是一个伴随状态迁移的瞬时发生的行为,与触发事件一起表示在有关的状态迁移之上。 活动:则是发生在某个状态中的行为,往往需要一定的时间来完成,因此与状态名一起出现在有关的状态之中。,状态图,状态1,Do:活动1,状态2,.,事件1条件1 / 动作1,结束 事件,初始 事件,空闲,可视菜单,左边按钮按下/显示弹出菜单,左边按钮弹起/擦除弹出菜单,光标移动/高亮菜单项,弹出菜单动作,例:,举例:饮料自动售
26、货机系统的状态图,投入硬币 (无效的),按下选择饮料键,Do:显示售货机在备用 所有灯都关闭,Do:显示金额总数,Do:显示金额已够 饮料选择灯亮,取出饮料 结算找零 扣减存量 完成交易,饮料“售完”灯亮,投入硬币金额 (1元、5元、10元),金额不足 再投币,存量为零,无效的硬币,取消,取消,回到备用状态,回到备用状态,投入硬币(有效的),金额已够,2019/8/2,共27页 第72页,动态模型由多个状态图组成。 对于每一个具有重要动态行为的类都有一个状态图,从而表明所有系统活动的模式。 各个状态图并发地执行,并可以独立地改变状态。 各种类的状态图可以通过共享事件组合到一个动态模型中。,20
27、19/8/2,共27页 第73页,(3)状态图与事件追踪图的关系,状态图叙述一个对象的个体行为,事件追踪图则给出多个对象所表现出来的集体行为。它们从不同侧面来说明同一系统的行为。 例如,一个事件追踪图指出某一对象在接受一个事件之后发出另一事件,同一行为在此对象的状态图中也应当有所表示。,2019/8/2,共27页 第74页,7.5 功能模型,功能模型由多个数据流图组成,它们指明从外部输入,通过操作和内部存储,直到外部输出,这整个的数据流情况。,2019/8/2,共27页 第75页,功能模型中所有的数据流图往往形成一个层次结构。 在这个层次结构中,一个数据流图中的过程可以由下一层的数据流图做进一
28、步的说明。 一般来讲,高层的过程相应于作用在聚合对象上的操作,而低层的过程则代表作用于一个简单对象上的操作。,2019/8/2,共27页 第76页,7.6、定义服务及消息连接,对象收到消息后所能执行的操作称为它可提供的服务。 对每个对象和结构的增加、修改、删除、选择等服务有时是隐含的,在图中不标出,但在存储类和对象有关信息的对象库中有定义。 其它服务则必须显式地在图中画出。,2019/8/2,共27页 第77页,服务层,2019/8/2,共27页 第78页,定义服务的方法和策略,找出每一个对象的所有状态,在各种状态需要做的工作。利用状态迁移图; 找出必要的操作。 建立消息连接。 描述服务:利用
29、状态转换图、脚本和事件追踪图,描述服务的功能。,2019/8/2,共27页 第79页,消息连接的标识,两个对象之间可能存在着由于通信需要而形成的关系,这称为消息连接。 消息连接表示从一个对象发送消息到另一个对象,由那个对象完成某些处理。它们在图中用箭头表示,方向从发消息的对象指向收消息的对象。,2019/8/2,共27页 第80页,找出消息连接的方法及策略,对于每一个对象,执行: 查询该对象需要哪些对象的服务,从该对象画一箭头到哪个对象; 查询哪个对象需要该对象的服务,从那个对象画一箭头到该对象; 循消息连接找到下一个对象,重复以上步骤。,2019/8/2,共27页 第81页,用例模型,Iva
30、r Jacohson提出了用例驱动的面向对象的软件方法,从组成系统的实际操作入手。首先分析系统是如何使用的,强调系统使用时与不同的类型用户交互时的情况,即从用例出发。,2019/8/2,共27页 第82页,什么是用例 用例是一个连贯的功能性单元,它由消息顺序表示的类元(系统、子系统或类)提供,这些消息与被系统执行的动作在系统与外部用户(表现为参与者)间交换。简单地说,它就是之通过利用系统中某些功能来使用系统的过程。 用例的目标 用来定义类的一个行为,但不显示类的内部结构。每个用例说明类提供给它用户的一种的服务,也即一种对外部可见的使用类的特定方式。描述用户和类之间的交互的观点来初始化的完整顺序
31、,以及由类执行的响应。,2019/8/2,共27页 第83页,UML的用例模型,统一建模语言(UML)是一种通用的可视化建模语言,用于软件描述、可视化处理、构造和建立软件系统制品的文档。可用于各种软件开发方法、软件生命周期的各个阶段,各种建模方法。 执行者(actor) 实际上是一个类,它定义了用户所能对软件进行的所有操作。 用例(Use Case),2019/8/2,共27页 第84页,执行者(actor) 其集合是该系统的用户模型。同时还可以将执行者按用户的行为进行合理划分。 执行者集合就是软件系统同所有用户交换的所有信息及操作的模型 在软件系统中要划定一个界限以区分执行者和用例 执行者代
32、表了用户所能起的某种作用,是描述一类的行为(可分为基本执行者和辅助执行者),2019/8/2,共27页 第85页,用例(Use Case) 可以借助状态转换图来描述用例。 由于有可能多个用例有着相同的子事务序列,因此只有当它的全部事务执行完毕后才能确定具体某一用例 用例是通过执行者确认的,每一个执行者初始化一个时间过程从而确定一个用例 将什么样的功能放在一个单独的用例中是一个不容易确定的问题,因为有些功能可能只是某一用例的一个变体 寻找用例一般分为两个步骤:首先根据执行者找出用例,然后详细的设计用例文档,清楚地描述出每个用例完成的功能及对应的执行者,2019/8/2,共27页 第86页,用例图
33、是用于对系统的静态用例视图进行建模,这就是说,一个单独的用例图不必包含一个系统用例视图中的所有事情,每个用例图只单独表示系统的一个方面。,2019/8/2,共27页 第87页,2019/8/2,共27页 第88页,协作图 对象图展示了对象与对象之间的静态关系,协作图是对象图的扩展,除了描述关联之外还显示这些对象之间的消息传递. 协作图的特征 协作图中的序号表示一个消息的时间顺序,可以嵌套,嵌套可以有任意深度. 协作图中用路径指出一个对象如何与另一个对象链接可以在链的末端加上一个路径构造型来表示.如local表示制定该对象对发送对象而言是局部的.通常只需要表示这几种链的路径:local(局部),parameter(参数),global(全局)和self(自身),但是association(关联)不必特殊说明,2019/8/2,共27页 第89页,2019/8/2,共27页 第90页,活动图 是状态图的变体,是一种特殊形式的状态图.活动图中的状态表示计算过程中所处的各种状态,而不是普通对象的状态.通常假定活动图在整个计算过程中没有外部事件引起的中断. 活动图对系统动态建模有两种方式: 对操作建模,可以将活动图看成流程图,对操作中的细节部分建模 对过程建模,也就是对系统的工作流建模,主要关注与系统进行协作的参与者所看到的活动.,2019/8/2,共27页 第91页,
链接地址:https://www.31doc.com/p-3223490.html