1 / 53

第 五 章

第 五 章. 面向对象的设计方法. 5.1 面向对象的基本概念. 面向对象的思想最初出现于挪威奥斯陆大学和挪威计算机中心共同研制的 Simula 67 语言中,随着的 Smalltalk---76 和80语言推出,面向对象的的程序设计方法得到了比较完善的实现。 此后,面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统,交互式界面,分布式系统,网络管理结构和人工智能等领域。 面向对象的技术已成为软件开发的一种新方法,新技术。. 5.1.1 什么是面向对象的开发方法

rylee-rice
Download Presentation

第 五 章

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. 第 五章 面向对象的设计方法

  2. 5.1 面向对象的基本概念 • 面向对象的思想最初出现于挪威奥斯陆大学和挪威计算机中心共同研制的Simula 67语言中,随着的Smalltalk---76和80语言推出,面向对象的的程序设计方法得到了比较完善的实现。 • 此后,面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统,交互式界面,分布式系统,网络管理结构和人工智能等领域。 • 面向对象的技术已成为软件开发的一种新方法,新技术。

  3. 5.1.1 什么是面向对象的开发方法 OOSD (Object-Oriented Software Development)法是一种 把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。 问题空间—软件系统所涉及到的应用领域和业务范 围(现实世界)。 解空间 — 用于解决某些问题的软件系统。 一、软件开发过程 映射 问题空间 (现实世界) 解空间 (软件系统)

  4. 二、传统软件开发方法存在的问题 1.传统软件开发方法无法实现从问题空间到解空间的直接映射。 问题空间 (现实世界) 解空间 (软件系统) 复杂映射 2.传统软件开发方法无法实现高效的软件复用。 原因是:传统软件开发方法数据与代码(操作)分离。 3.传统软件开发方法难以实现从分析到设计的直接过渡。 复杂转换 设计文档 (SC) 分析文档 (DFD)

  5. 解空间 (软件系统) 问题空间 (现实世界) 自然、连续 对象2 实体1 实体2 实体n 对象1 对象n 三、面向对象技术的特点 1.对软件开发过程所有阶段进行综合考虑。 使问题空间与解空间具有一致性,降低复杂性。 2.软件生存期各阶段所使用的方法、技术具有高 度的连续性,用符合人类认识世界的思维方式 来分析、解决问题。

  6. 3. 将OOA、OOD、OOP有机地集成在一起。有利于系统的稳定性. OOA(Object-Oriented Analysis) OOD(Object-Oriented Design) OOP(Object-Oriented Program) 以对象为中心各种构造系统,而不是以功能为中心,能很好地适应需求变化. 4. 具有良好的可重用性 由于对象所具有的封装性和信息隐蔽,具有很强的独立性。

  7. 5.1.2 面向对象的基本概念 • 对象(Object) 类(Class) 继承(Inheritance) 消息(Information) 多态性(Polymorphism) 永久对象(Persistent object) • 理解面向对象的基本概念对于学习和掌握面向对象的开发方法是十分重要的。

  8. 1.对象(Object) • 对象(Object)是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象。 • 对象可以是事、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。 • 属性 (attribute) —对象本身的性质。 •   操作(operation) —给对象定义一组运算。 •   对象将它自身的属性及运算“包装起来”,称为“封装”(encapsulation). • 对象的最基本的特征是封装性和继承性。

  9. 2.类(Class) 类又称对象类(Object Class),是一组具有相同属性和相同操作的对象的集合。 在一个类中,每个对象都是类的实例(instance) ,它们都可以使用类中提供的函数。 类具有属性,用数据结构来描述类的属性, 类具有操作,它是对象的行为的抽象,操作实现的过程称为方法(method) ,方法有方法名,方法体和参数。 由于对象是类的实例,在进行分析和设计时,通常把注意力集中在类上,而不是具体的对象上。

  10. 几何对象 颜色 位置 移动(delta:矢量) 选择(P:指针型):布尔型 旋转(角度) 人 姓 名:字符串 年 龄: 整 型 改换工作 改换地址 文件 文件名 文件大小 最近更新日期 打印 类名 属性 运算 (人) 张红兵 28 绘图员 人民路8号 (人) 李军 24 程序员 无 图5.2 对象的描述 对象和类的描述 类和对象一般采用“名字”、“属性”和“运算”来描述。 类 图5.1 对象类的描述 对象

  11. 基类 子类B 子类A 图 5.4 继承性描述 • 3.继承(Inheritance) • 继承是使用现存的定义作为基础,建立新定义的技术。是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。 • 继承性分: • 单重继承:一个子类只有一个父类。即子类只继承一个父类的数据结构和方法。 • 多重继承:一个子类可有多个父类。继承多个父类的数据结构和方法。 继 承 现存类定义 父类(基类) 新类定义 子类(派生类) 图 5.3 继承性

  12. 4.消息(Message) 消息就是向对象发出的服务请求(互相联系、协同工作等)。对象之间的联系可表示为对象间的消息传递,即对象间的通讯机制。 一个消息应该包含以下信息:消息名、接收消息对象的标识、服务标识 、消息和方法、输入信息、回答信息。 在对象的操作中当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的消息。

  13. 5.多态性和动态绑定 • 多态性(Polymorphism)是指相同的操作或函数、过程作用于不同的对象上并获得不同的结果。 • 即相同的操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的操作去执行,产生不同的结果。 • 例如: “绘图”操作,作用在“椭圆” 和“矩形” 上,画出不同的图形。 动态绑定(dynamic binding)是在运行时根据对象接收的消息动态地确定要连接的服务代码。 使用虚函数可实现动态联编,不同联编可以选择不同的实现,这便是多态性。   继承是动态联编的基础,虚函数是动态联编的关键。

  14. 多态性的实现举例 实现多态性的基本步骤(以VC为例): (1)在基类中,定义成员函数为虚函数(virtual); (2)定义基类的公有(public)派生类; (3)在基类的公有派生类中“重载”该虚函数; (4)定义指向基类的指针变量,它指向基类的公有派生类的对象。 注意:重载虚函数不是一般的重载函数,它要求函数名、返回类型、参数个数、参数类型和顺序完全相同。

  15. 6.永久对象(Persistent object) 所谓永久对象是指生存期可以超越程序的执行时间而长期存在的对象。 目前,大多数OOPL不支持永久对象,如果一个对象要长期保存,必须依靠于文件系统或数据库管理系统实现,程序员需要作对象与文件系统或数据库之间数据格式的转换,以及保存和恢复所需的操作等烦琐的工作。 为了实现永久对象,使上述烦琐工作由系统自动完成,需要较强的技术支持;需要一个基于永久对象管理系统OMS(object management system),能够描述和处理永久对象的编程语言。

  16. 5.3 面向对象的分析 面向对象分析OOA(Object-Oriented Analysis)的目标是完成对所求解问题的分析,确定系统“作什么”,并建立系统的模型。 基本概念: 问题域(problem domain) — 被开发系统的应用领域。 系统责任(system responsibilities) — 所开发的系统应具备的职能。

  17. 5.3.1 面向对象分析的特点 ? 一、需求中存在的问题 1. 确定问题域和系统责任困难 2. 充分交流的问题解决得不好 3. 很难适应需求的不断变化 4. 难以满足复用要求 二、OOA的特点 1.有利于对问题及系统责任的理解; 2.有利于人员之间的交流; 3.对需求变化有较强的适应性; 4.支持软件复用。

  18. 5.3.2 OOA的基本任务 运用面向对象的方法,对问题域和系统责任进行分析和理解,建立分析模型。 1.分析问题域,确定类和对象; 2. 定义类或对象属性和操作,确定其结构; 3. 建立系统中类或对象之间的静态联系和动态联系。

  19. 5.3.3 OOA的分析过程 获取用户基本需求 标识类和对象 定义类的结构和层次 表示类(对象)间的关系 为对象行为建模 图5.7 OOA分析过程

  20. 5.3.4 OOA模型 交 互 图 主 题 图 基本模型 (类图) 对象层 特征层 关系层 详 细 说 明 图5.8 OOA模型与详细说明 基本模型是一个类图(class diagram),是以直观的方式表达系统最重要的信息。OOA基本模型的三个层次分别描述了:系统中应设哪几类对象,每类对象的内部构成,对象与外部的关系。

  21. 5.3.4 OOA模型 交 互 图 主 题 图 基本模型 (类图) 对象层 特征层 关系层 详 细 说 明 主题(subject)又称为子系统(subsystem)是将一些联系密切的类组织在一起的类的集合。按照粒度控制原则,将系统组成几个主题,便于理解。

  22. 5.3.4 OOA模型 交 互 图 主 题 图 基本模型 (类图) 对象层 特征层 关系层 详 细 说 明 交互图(interaction diagram) 是Use case与系统成分之间的对照图。 主题图和交互图又称为补充模型。

  23. 5.3.4 OOA模型 交 互 图 主 题 图 基本模型 (类图) 对象层 特征层 关系层 详 细 说 明 详细说明按照分析方法所要求的格式,对分析模型进行说明和解释。主要以文字为主。

  24. 5.4 面向对象的设计 面向对象的设计OOD(Object-Oriented Design)是面向对象方法在软件设计阶段应用与扩展的结果。 是将OOA所创建的分析模型转换为设计模型,解决如何作的问题。OOD与OOA没有明显的分界,采用相同的符号。

  25. 保险单 客户 数据库界面 (abstract) Oracle 界面 Sybasec界面 保险单 填写界面 系统内部 5.4.1 OOD基本任务 1. 系统设计 将分析模型划分为若干子系统,子系统应该具有良好的接口,子系统内的类相互协作。标识问题本身的并发性,为子系统分配处理器。

  26. 子系统的分解是关键,可以有分层和分块: 分层:将软件系统组织为层次结构,每层是一个子系统。分层结构又分为封闭式和开放式。 分块:垂直分块是将系统分解为若干个相对独立的、弱耦合的子系统。每个子系统相当于一个块,每块实现一类服务。   常常使用分层和分块的混合结构,如图所示:

  27. 5.4.1 OOD基本任务 2.对象设计 在面向对象的系统中,模块、数据结构及接口等都集中体现在对象和对象层次结构中。 对象设计是为每个类的属性和操作进行详细设计,包括属性和操作,它们的数据结构和实现算法。 3.消息设计 设计连接类与它的协作者之间的消息规约(specification of the messages)。 4.优化及复审 主要考虑提高效率和建立良好的继承结构。

  28. 5.4.2 OOD模型 面向对象设计准则: 1)模块化 2)抽象 3)信息隐藏 4)弱耦合 5)强内聚 6)可重用 介绍几种典型的面向对象的开发方法: Coda方法, Booch方法和 OMT方法

  29. 5.5 几种典型的面向对象的方法 随着面向对象开发方法的发展,逐渐形成了几种主要的流派: Coda方法 Booch方法 OMT方法 OOSE方法

  30. 5.5 几种典型的面向对象的方法 一、Coda/Yourdon方法 — 由OOA,OOD构成 建立问题域的分析模型。该模型由5个层次组成:即主题层、对象层、结构层、属性层和服务层。 要建立4个组元的设计模型:问题域组元、人机交互组元、任务管理组元和数据管理组元。 该方法的特点是:简单、易学,对于对象、结构、服务的认定较系统、完整、可操作性强。

  31. 1. Coda方法的OOA 类的边界 实例的边界 类与对象层 实例连接 属性层 属性 消息连接 服务层 服务 结构层 主题层 主题 泛化与特化结构 整体与部分结构 图5.10 分析过程的五个层次 在Coda方法中,构造和评审OOA概念模型的顺序由五个层次组成:类与对象、属性、服务、结构和主题 这五个层次表示分析的不同侧面。

  32. 2. Coda方法的OOD 主题层 对象层 结构层 属性层 服务层 Coad方法的OOD模型是在OOA模型5个层次基础上,建立系统的4类组元, HIC 人机界面 组元 PDC 问题域 组元 TMC 任务管理 组元 DMC 数据管理 组元 图5.12 CodaOOD模型 1)设计问题域组元(problem domain component) 2)设计人机界面组元(human interaction component) 3)设计任务管理组元(task managementcomponent) 4)设计数据管理组元(data managementcomponent) `

  33. 二、 Booch方法 Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型和物理模型,描述了系统的构成和结构,动态模型分为状态图和时序图。 该方法对每一步都作了详细的描述,描述手段丰富、灵活。不仅建立了开发方法,还提出了设计人员的技术要求,不同开发阶段的资源人力配制。

  34. 1.Booch方法的基本模型 类名 父类 管理计划 控制环境 1 类名 子类 1 N 1 暖气 灯光 冷气 (a) 关联 (b) 继承 请求服务类 整体类 温度 执行机构 成员类 提供服务类 图5.14 温室管理系统的类图 (c) 包含 (d) 使用 图5.13 类图表示 ⑴类图

  35. ⑵对象图 编号:消息名 对象1 对象2 1:收获时间(C) 6:成本( ) :计划分析 计划度量 4:产量( ) 2:状态( ) 3:成熟时间() C:谷物 :计划管理 5:作物::产量 对象图由对象和消息组成 图5.15 对象图的表示 图5.16 温室管理系统的对象图

  36. 事件名/操作 状态1 状态2 定义气候 空闲 白天 温度上升/调温( ) 日出 日落 终止气候 夜晚 温度下降/调温( ) 用户 对象1 对象2 用户服务请求 内部服务请求 服务返回 服务返回 图5.19 温室管理系统的时序图 ⑶ 状态图 图5.17 状态图的表示 图5.18 环境控制器类的状态图 ⑷时序图

  37. 气候 计划 作物 定义 暖气 气候 定义 冷气 温室A 温室工作站 温室B 温室C ⑸模块图 图5.20 温室管理系统的模块图 ⑹进程图 图5.21 温室管理系统的进程图

  38. 三、面向对象的建模技术(OMT) 面向对象的方法学又称为对象模型技术,OMT( Object Model Technology)是一种软件工程方法学,支持整个软件生存周期,它覆盖了问题构成、分析、设计和实现等阶段。 OMT方法使用了建模的思想,讨论如何建立一个实际的应用模型。从3个不同而又相关的角度建立了三类模型:对象模型、动态模型和函数模型,OMT为每一个模型提供了图形表示。

  39. 1. 对象模型技术的基本概念 OMT 方法讨论的核心就是建立三类模型: 对象模型描述了由对象和相应实体构成的系统静态结构,描述了系统中对象的标识,属性、操作及对象的相互关系。 动态模型根据事件和状态描述了系统的控制结构,系统中与时间和操作顺序有关的内容。 函数模型着重描述系统中与值的转换有关的问题,如函数、映射、约束和函数作用等。   三类模型描述的角度不同,却又相互联系。

  40. 类名 属性 操作 类 名 属性名(1),数据类型1=缺省值1 属性名(2),数据类型2=缺省值2 ……… 操作名1(变量名1) :结果类型1 操作名2(变量名2) :结果类型2 ……… (类名) 对象名 属性 操作 2. 建立对象模型 对象模型描述了系统的静态结构。 构成对象模型的基本元素有:对象(类)、它们之间的关系。 类名 对象名

  41. 雇用 雇用 (人员) 张涛 (公司) 通大 人员 公司 链的例子 二元关联的例 ◆ (项目) CAD系统 (语言) C 语言 项目 ◆ 语言 人 (人) 林珩 相交 直线 名称 点 名称 人 公司 三元关联的例 ● ● 链的例子 2+ 关联 个人 名字 公司 名字 雇主 雇员 工作 职务 工资 类之间、对象之间的关系 ⑴关联与链 ①二元关联、三元关联 ②受限关联 ③用重数、链属性和角色进一步描述。

  42. ⑵继承性(Inheritance) 段落 句子 ● ◆ 运输工具 微机系统 ◆ 水上运输工具 陆上运输工具 ● 监视器 主机箱 鼠标 键盘 ◆ 水陆两用车 船 汽车 底架 CPU RAM 风扇 继承性通常又称为概括,表示基类与子类的关系。 ⑶聚集 表整体与部分的关系。

  43. 出纳站 自动出纳机 分理处 计算机 帐户 分行计算机 自动出纳机 分理处 计算机 帐户 用户 自动出纳机 出纳站 图1 银行网络系统的示意图 银行网络系统ATM(Auto Trade Machine) 银行网络系统包括人工出纳和分行共享的自动出纳机。

  44. 录入 事务 种类、日期、时间、数量 组成 录入站 出纳站  出纳员事务 远程事务  被录入 涉及 开始 现金卡 银行名、卡片码 安全号 自动出纳机 分发现金 标识  出纳员 更新 卡片权限    名字    密码、限制 数量、类型 拥有 雇用 拥有 访问 有 发行 站 代 码 雇 员 号 站代码  顾客 名字 地址 分行 分理处  帐户 余额、类型 贷款限定 有 银行码 卡片码 名字 维持 帐户号 对象模型

  45. 3.建立动态模型 一、事件和状态 状态— 对象所具有的属性值,具有时间性和持续性。 事件— 对于对象的触发行为,指从一个对象到另一个对象的信息的单向传递。 脚本—在系统的某一执行期间内的一系列事件。 在系统中具有属性值、链路的对象,可能相互激发,引起状态的一系列变化。 • 动态模型着重于系统的逻辑结构;描述某时刻对象及其联系的改变。包括状态图和事件追综图。 有的事件传递的是简单信号,有的事件则传递的是数据值。由事件传送的数据值称为“属性”。

  46. ⑴状态图 状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为,状态的迁移。 状态图 状态A /操作 状态A 活动 状态B ● ◎ 起始状态 终结状态 事件B[条件] 图例 状态 状态迁移 状态 动态模型由多个状态图组成,每个有重要行为的类都有一个状态图。各状态图可并发地执行及独立改变状态。

  47. 打电话状态图 放下话筒 放下话筒 提起话筒 超时 超时 一位号码 记录的信息 无效号码 有效号码 号码忙 通路 中断线忙 信息送完 对方应答 拨号 超出时间 拨号音 快速忙音 忙音 断连 连接 铃响 连接 空闲 对方电话挂断 图5.39 打电话状态图

  48. ⑶事件追踪图 脚本—系统某一次特定运行时期内发生的事件序列。例如:打电话的场景: • 事件追踪图侧重描述系统执行过程中的一个特定的“场景(Scenarios)”。场景有时也叫“脚本”,是完成系统某个功能的一个事件序列。即是描述多个对象的集体行为。 1、拿起电话受话器 12、打电话者听见振铃声 2、电话忙音开始 13、对方接电话 3、拨电话号码数5 12、接话方停止振铃 4、电话忙音结束 14、打电话方停止振铃声 5、拨电话号码数5 15、通电话 6、拨电话号码数5 16、对方挂电话 7、拨电话号码数1 17、电话切断 8、拨电话号码数2 18、打电话者挂电话 …………….. 11、对方电话开始振铃

  49. 打电话的事件追综图 打电话者 电话线 接电话者 打电话者 拿起接收器 拨号音开始 拨号(5) 忙音结束 拨号(5) 拨号(5) 拨号(1) 拨号(2) 拨号(3) 拨号(4) 拨号(8) 铃声 铃声停止 电话连通 电话断开 打电话者挂机 打电话的事件追踪图 铃声 受话方回答 铃声停止 电话连通 受话方挂机 电话断开

  50. ⑷ 建立功能模型 • 功能模型着重于系统内部数据的传递与处理。定义“做什么?”的问题,表明值之间的依赖关系及其相关的功能。 • 描述手段为分层数据流图,DFD图有助于表示功能的依赖关系,其中的处理对应于状态图的活动和动作,数据流对应于对象图中的对象或属性。建立功能模型的步骤为:

More Related