1 / 118

4.1 什么是 OOA 为何需要 OOA?

4.1 什么是 OOA 为何需要 OOA?. 第 4 章 面向对象的分析与建模. 内容. 4.2 面向对象分析方法简介. 4.3 面向对象的分析原则和过程. 4.4 建立对象模型 — 类图 4.5 建立动态模型. 掌握. 建立两种模型的过程. 简易的开发过程. 用例图和文字描述. 类图. 序列图. 源代码. 图 4-1 简易的开发过程. 4.1 什么是 OOA (Object-Oriented Analysis)? 为何需要 OOA ?. 分析是对问题的调查 , 了解系统工作的业务过程。.

abbott
Download Presentation

4.1 什么是 OOA 为何需要 OOA?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4.1 什么是OOA 为何需要OOA? 第4章 面向对象的分析与建模 内容 4.2 面向对象分析方法简介 4.3 面向对象的分析原则和过程 4.4 建立对象模型—类图 4.5 建立动态模型 掌握 建立两种模型的过程

  2. 简易的开发过程 用例图和文字描述 类图 序列图 源代码 图 4-1 简易的开发过程

  3. 4.1 什么是OOA (Object-Oriented Analysis)? 为何需要OOA? • 分析是对问题的调查,了解系统工作的业务过程。 面向对象的分析是: 按照对象(事物、概念、实体)的观点考虑问题域。 概念应 用的一 组实例 Sale 1 Sale date time 一个Sale代表了一次购物交易的事件,它有日期和时间 Sale 3 Sale 2 Sale 4 概念的内涵 概念记号 3 概念的外延 • OOA,识别出问题域的不同概念,并用概念模型 表示是分析阶段的主要任务。

  4. 概念模型(conceptual model): 是问题域中概念的描述,强调领域中的概念, 而不是软件实体。概念模型可以展示: 一组概念 概念间的关联 概念的属性 在UML中,一个概念模型是用一静态结构图 (static structure diagram)来描述的。 Sale date time Sale date Time Print() SalesDatabase 属性为 成员变量 软件制品 操作为 成员函数 真实世界中的概念 (实体,实体信息) 软件类

  5. 分析方法发展的必 然: 功能分解法 数据流法 信息模拟法 面向对象方法 需要OOA的原因: • 分析中的困难 • OOA的优点 5

  6. 状态迁移图,时序图 系统组成结构 类图、对象图 模块图、进程图 图 4-2 Booch方法 4.2 面向对象分析方法简介 1)OMT(Object modelling Technique)Rumbaugh 91 对象模型 建 立 动态模型 功能模型 2) Booch方法 (method of object analysis and design,1994))

  7. 类和对象层 属性层 结构层 主题层 服务层 3) Coad & yourdon 方法 (OOA/OOD,1991) 图 4-3 Coad&yourdon 模型

  8. 提供一套符号如 、 等描述系统 4 ) Wirfs – Brock 方法 称RDD(Responsibility Driven Design)责任驱动法 建立CRC(Class Responsibility Collaborator)卡, 描述类及相关的协助类,共同承担的责任。 5) Bailin方法 也称OOS方法,1989 主要是建立实体关系图ERD,实体数据流图EDFD。 6) OOSE方法[Jacobson ,1992] (Object oriented software engineering)

  9. 4.3 面向对象的分析原则和过程 抽象、封装、继承、多态、结构化分析原则 • 把过程抽象 (procedural abstraction) 与数据抽象 (data abstraction)结合在一起. 超类(super class)是一组子类的抽象. 方法(method):是隐藏实现过程抽象. 操作(operation):是一组方法的抽象. 属性(attribute)和关联(association): 是实现它们基本实例变量的抽象. • 对象(object):对客观事物的抽象. 类(class):是一种数据抽象,即是对一组对象的抽象. 包含作用于对象上的过程或方法抽象.

  10. 迭代 过程 面向对象的分析过程 什么是业务过程? 用户、客 户 需求 分析 开发者 问题描述(用例) 管理者 领域知识 OOA 分析 专家知识 角色是什么? 现实世界经验 建立对象(概念)模型:初始类图 动态模型(职责分配) 类图 建立 模型 图 4-4 OO分析过程

  11. 4.4 建立对象模型—类图 步骤 • 确定类和对象 • 确定属性 • 确定关联 • 确定结构

  12. 概念层 (Conceptual) 类图描述应用 领域中的 概念, 一般地,这些 概念和类有自 然的联系,但 两者并没有直 接的映射关系. 实现层 (Implementation) 类图才真正考虑类的 实现问题,揭示实现 细节。 说明层 (Specification) 类图描述软件的接 口部分,而不是软 件的实现部分 4.4.1 类图(class diagram) 1)类的抽象层次 图 4-5 类的抽象层次(是由 Steve Cook和John Daniels引入的)

  13. Dialer拨号器 类名 public class Dialer { private Vector digits; int nDigits; public void digit(int:n); protected boolean recordDigit(int n); } - digits:Vector - nDigits:int 属性/ 成员 变量 + digit(n:int) # recordDigit( n:int):boolean 操作/ 方法 • 图 4-6 类的实现层

  14. 2) 类图(class diagram)及组成 类(Class)、对象(Object)和它们之间的 关系是面向对象技术中最基本的元素 • 类图技术是OO方法的核心 • 类图是静态视图,表示类的静态结构模型 • 描述类和类之间的关系的图就构成了类图 • 类图是定义其他图的基础

  15. 类4 实现接口 • 类 Class2 Class4 • 接口 • 类图包含下述内容: Class1 • 协作 Interface • 依赖、泛化、 Class3 • 实现和关联关系 协作Collaboration 依赖于类1 • 类图可以包含注解和约束; • 类图还可以有包或子系统, 二者都用于把模型元素聚 集成更大的组快。 • 图 4-7 类图包括内容

  16. 类图上的关系 类之间的静态关系主要有: • 依赖:它表示类之间的使用关系 (包括精化、跟踪和绑定关系) • 泛化:它把一般类连接到它的特殊类; • 关联:它表示对象之间的结构关系。

  17. 类名 属性 方法 4.4.2 确定类和对象 事物 1) 什么可以作为对象 组织单位 设备 充当角色 地点/位置 其他系统 突发事件 实实在在的事 物 图 4-8 作为对象的 事物图

  18. 对象、属性、 关系、结构 实体关系图 语义数据模型 OOA 面向对象的程序设计语言 类结构、继承、 封装、消息通信 图 4-9 实体到对象方法 2) 确定类和对象的方法 (1) 实体 ——对象法 ERD(Erentity Relationship Diagrams) ORD(Object Relationship Diagrams) 转换规则: 实体可能成为对象 简单的实体成为一个对象 复杂的实体分解为几个对象

  19. 姓名 地址 工资 电话号 名称 地址 身 份 证 号 为之 工作 主 要 产 品 员工 公 司 组成 ISA ISA 职务 管理 经 理 部门 部门名 工 人 参 加 主 持 生产 项目 产品 项目名 预算 优先级 产品名 成本 质量 图 4-10 实体关系图

  20. 公司 1 1..* 为之工作 员工 姓 名 地 址 电话号 主要产品 姓名 地址 身份证号 工资 职 务 雇用 解雇 部门名 1 1..* 1..* 1..* 1..* 产品 项目 产品名 成本 质量 名称 预算 优先级 工人 经理 部门 图 4-11 对象关系图

  21. (2) 根据(事物)概念目录列表找出概念 ——名词或名词短语作为对象

  22. 产品目录 服务员 销售规格说明 支付 图 4-12销售点终端问题域中的初始概念模型 销售点终端系统的概念模型 销售点终端 商品项 商店 销售项 顾客 销售项条目 出纳员 管理员

  23. (3) 使用类 —职责—协作卡(CRC卡进行建模) Class ResponisbilityCollaborator Card 从用例出发找出类 类名:是一个名词或一个短语 类的职责:是类知道并要完成(“做”)的事情 知道型(knowing)职责 知道自己私有的封装了的数据 知道自己相关联的对象信息 知道自己派生或计算出来的事物 23

  24. 做(doing)职责 自己完成某件任务 发起其他对象执行动作 控制和协调其他对象内活动 定义协作者 当类没有足够的信息来履行职责时就需要协作, 协作必须发生在一个类需要信息的时候。 确定协作时考虑的问题 • 对于任何协作,总是至少有一个发起者。 • 有时协作者完成工作的主要部分。 • 协作应是直接的。 • 可能会产生新的职责来实现协作。

  25. 注册讨论班(UI) **参阅原型** 请求确定学生信息 启用讨论班搜索信息 显示讨论班列表 显示讨论班费用 显示教授信息 学生 讨论班 教授 学生(Actor) 学生 提供自己的信息 请求注册讨论班 请求成绩单 注册讨论班 成绩单 教授 姓名 地址 电话 邮件 平均分 验证确定信息 提供参加讨论班类表 注 册 记 录 讨 论 班 姓名 地址 电话 邮件 薪水 提供信息 指导的讨论班 安全登陆(UI) **参阅原型** 请求学生确认信息 学生 注册讨论班的 CRC卡

  26. 讨 论 班 名称 讨论班编号 费用 等待列表 注册学生 导师 添加学生 撤销学生 学生 教授 成 绩 单 (UI) **参阅原型** 获得学生信息 获得学生参加讨论班的信息 确定平均分 输出成绩 学生 讨论班 教授 注册记录 注 册 记 录 获得的分数 平均截至日期 最终成绩 学生 讨论班 注册讨论班的 CRC卡

  27. (4)去掉无用的类和对象 * 去掉冗余的类和对象 * 不考虑与本问题无关的类和对象 * 不考虑和实现有关的类和对象 * 去掉模糊概括的类 * 不要把概念当作属性 火车订票系统中的目的地是车次的属性还是概念? * 区分领域中的系统分析员观察世界所得到的真实概念 (是对问题内事物的描述)和软件设计人员描述软件实体 所使用的概念,是从不同视觉出发而得到的。 Sale date time Sale date Time Print() 软件类, 不是概念 的一部分 SaleDatabase 软件制品,不是概念的一部分 真实世界中的概念(记号)

  28. * 怎么选择相近的概念? Register 登记薄 POST 1 1 Register这个概念可以代替POST? * * Sale Sale 图 4-13 具有不同名称的类似概念 POST是一个领域常见的术语,从熟悉和传达信息角度, 是个有用的记号。 Register更为抽象一些,如果从软件的实现和模型的抽象相分离为目标来建立模型, Register也是有用的,这个术语也有了普遍意义了。 28

  29. 用例 外部系统 用户 用户界面 外部系统接口 3) UML可描述三个主要的类 (1)边界类(boundary) • 边界类用于描述外部参与者与系统之间的交互. • 一个参与者与一个用例之间的交互对应一个边界类. • 边界类包括: 用户界面:描述用户与系统之间的交互,而不是 显示形式,如按钮、菜单等. 系统接口、设备接口:描述所定义的通信或交换 协议,而不是说明协议如何实现的.

  30. 例: MiniLibray 边界类 BrowseForm 注册用户进行查询浏览的操作界面 LoginForm 注册用户进行登录的操作界面 MakeReservationForm 普通读者预订图书的操作界面 注意: • 边界类关注参与者与用例之间交互的信息或响应的 事件,不描述窗口组件等界面的组成元素. • 若两个用例同时与一个参与者交互,可能会共用一个 边界类. • 分析阶段,应使用用户的术语描述界面.

  31. 用例 外部系统 用户 控制逻辑 (2) 控制类(Control) 控制类:用于描述一个用例所具有的事件流控 制行为,它本身不处理具体的任务,而 是调度其它类完成具体的任务. 控制类,隔离和协调了边界类和实体类.

  32. 例: MiniLibray 控制类 MakeReservationControl 负责执行普通读者的预订图书 BrowseCountrol 负责执行注册用户的查询浏览 RemoveReservationControl负责执行普通读者的取消预订 注意 • 当用例比较复杂时(如有分支的事件流),一个用例可 以有多个控制类; • 当用例事件流逻辑结构十分简单,则没有必要使用控 制类,可用边界类实现用例的行为,如“登录”。 • 一般一个用例对应一个控制类,若不同用例包含的任 务之间存在紧密联系,则这些用例可共用一个控制类.

  33. MiniLibray 实体类: BorrowerActor 借阅者 BorrowerInfo 普通借阅者的基本信息 Loan 普通借阅者的借书记录 (3) 实体类 用例中的参与对象,对应现实世界中的事物. 实体类用于描述必须存储的信息及其相关行为. Librarian 图书管理员 注意 • 实体类的识别质量取决于文档的风格和质量 • 自然语言描述不精确,注意文档用辞规范 • 自然语言描述中,名词对应类、属性或同义词等, 要进一步筛选.

  34. 4.4.3 确定类和对象的属性(attribute) 属性:是某个对象的逻辑数据值 Sale data startTime: Time 1) 属性类型 (1)简单的数据类型: 数字Number、字符串String 、布尔值Boolean、 日期Date 、时间Time 、文本Text等 (2) 其他常见的类型: 地址Address、颜色Color、几何元素Geometrics、 电话号码PhoneNumber、通用商品代码UPC、 社会安全代码Social Security Number、 邮政编码Postal Code 、枚举类型等

  35. Sale (3) 描述型(descriptire) date /total (派生的属性) time (4) 定义型(definiton) (5) 恒定派生型(always derivable) (6) 偶然派生型(occasionlly derivable) (7) 单值属性 (8) 互斥值属性 (9) 多值属性 (10)非简单的数据类型:电话号、人名、安全号、 促销价格(开始、截止日期)、 支付金额有货币单位

  36. 2) 属性的特点 可见性 (visibility) 利用可见性控制外部事物对类 中属性的操作方式 +公有的 (public) 能被系统中任何操作查看,修改 #保护的 (protected) 属性仅供自身的类及子类操作 -私有的 (private) 该属性仅在自身类内被使用

  37. 项目 人员 程序语言 程序语言 人员 项目 3) 注意 (1) 误把对象当作属性 Store address:Address Store 1 * Address (2) 不要把链上的属性当作属性 (3) 不要把限定词当作属性

  38. Cashier 人员 POST Cashier number name name currentPOST 注意 (4) 一个类的属性,应当对该类的每一个实例都适用 (5) 可用一个属性代替同意下的分散属性 性别 籍贯 (6) 若有一个对象,仅有一个属性,可将该属性移到 有实例关系关联的对象上 (7) 底层对象共有的属性,应放在上层对象中定义, 而底层只定义特有的属性 (8) 使用关联而不使用属性来表达概念之间的联系 Uses 差 好 1 1 1 不是简单属 图 4- 14 用关联表达概念之间的联系 38

  39. 销售点模型的属性 Cashier Customer Manager POST Item Sales Lineitem Store Product Catalog address: Address name:Text quantity:Integer Sale Product Specification Payment datd:Data time:Time amount:Quantity description:Textprice:Quantity Upc:UPC 图 4-15销售点终端有属性的概念模型

  40. 15 Phone Button itsButtons 4.4.4 对象或类的关联(object or class Association) • 关联是不同对象或类之间有意义的结构化关系。 • 在类图中,关联是一种简单的数据关系。 (用一条把类连接在一起的实线或带箭头的单向实线表示) • 在程序中,关联常常表示拥有对其他对象的引用 的实例变量。 public class Phone { private Button itsButtons[15] } 关联上标注的名称与用来保存 引用变量的名称是一致的。 在Java中,通常用 Vector、List或其 他某种容器类型来 实现多元关联。

  41. 0..1 1 0..* 1..* n 0..n 1..n 多重性 (Multiplicity) 多重性:一个类型A的实例在一个特定时间里能够和多少个类型B的实例发生关联 1) 关联描述的属性 导读箭头,表示方向, (经常被省略) 关联的基数 Works for 1 1..* company person employer employer • 关联的元素 关联的角色(role):一个对象上下文含义 拥有 1..* 0..* 人 小汽车 被拥有 图 4-16 关联属性

  42. 双向有导航的关联 A B (1) 连接线的几种情况: 不具有导航的关联 C × × D 单向关联,仅由G导航到H G × H 分析 双向(无导航的)关联 E F 设计 单向导航的关联, (I端没决定可否导航) I J 图 4-17 连接线的几种情况

  43. 指出可被允许生成的实例(instance)数量。 Records- sale-of 每一行记录一个 单独商品的售销项 Item (2) 多重性(multiplicity): SalesLineItem 0..1 1 Records-sale-of 每一行记录一组 相同商品的售销项 Item SalesLineItem 0..1 1..* Records-sale-of Item SalesLineItem quantity 0..1 1..* 图 4-18 在一个售销项 记录中记录商品项的数量 根据多重性的取值 派生而来的属性

  44. 有两种方式对一个现实世界中的角色—尤其是一 个人的角色建模. (3) 角色 1 Employs 1 * Manager Store Manager 1 Employs * Cashier * 图 4-19 作为概念的角色 # 作为概念的角色在增加独特的属性、关联方面提供 了方便性和灵活性。角色作为分离的类来实现更容 易(语言限制,不方便动态地将一个类的实例变异为 另一个类的实例,或随着一个人的角色改变而动态地 增加属性和行为)。

  45. Employs-to- manage manager 1 * Employs-to-handle-sales # 关联中的角色 Store Person cashier * 1 * 1 manager worker Manages 图 4-20 关联中的角色 关联中的角色以一种较精确的方法表达了一个人 相同实例在不同关联中表现为多重(以及动态改变)角 色的概念。一个人,同时或按次序地可能表现为教师、 技师、父亲等角色。

  46. 2) 关联的几种情况 (1) 递归关联(Recursive Association) 关联的两端使用同一个类 经理 0..1 管理 职员 公司 1 * 类在关联 中以不同 角色出现 名称 地址 名 称 地址 职 位 工 资 雇主 职员 *工人 public class BinaryTreeNode{ private BinaryTreeNode leftNode; private BinaryTreeNode rightNode; } Binary TreeNode 二元树节点 图 4-21 类的自身关联

  47. 每一个订单都有 对应的产品列表 * * order product Line item 0..* {按时间排序} 图 4-23 关联次序 • 关联的几种情况 (2) 关联的导航性 (navigability) 表示对一个类有用的状态信息 * * order product Line item 不可导航,产品未存储订单信息,要搜索产品,才能找到订单。 图 4-22 导航性 (3) 关联次序 (对多关联的多端对象进行排序) 1..* 保险合同 客户

  48. 关联的几种情况 (4) 关联的限定符 对限定关联(qualified association)的考虑: 主要是减少限定符远端处的多重性,从多个减少 到1个。分析类图中的限定符只是区分两种不同 类型的事物。 Contains Product Catalog 1 Product Specification 1..* 1 Product Catalog 1 Product Specification UPC 产品代码 图 4-24 增加类的限定符 限定符并没有增加有用的信息,明智的使用,增加对问题的理解。

  49. 关联的几种情况 (5) 有约束的关联 1 0..* 保险公司 保险合同 0..* 0..* {OR} 1..* 1..* 图 4-25 有约束的关联 人 公司 保险合同 图 4-26 用继承表示 有约束的关联 人 公司

  50. (7) 含有子集的关联 公司的职员 1 * 公司 职员 { 子集 } 公司的 股东 1 * 图 4-28 有子集的关联 • 关联的几种情况 (6) 依赖关系(dependency relationship) 《UI》 EnrollInseminar seminar 图 4-27 有依赖关系的关联

More Related