版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1010章章 面向对象的设计方法面向对象的设计方法 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 2/183 本章内容本章内容 先导先导案例案例 概述概述 10.1 面向对象设计面向对象设计分析和程序设计的桥梁分析和程序设计的桥梁 10.2 设计类和设计类图设计类和设计类图 10.3 交互图交互图实现用例和定义方法实现用例和定义方法 10.4 用顺序图设计用顺序图设计 10.5 用协作图设计用协作图设计 10.6 更新设计类图更新设计类图 10.7 包图包图将主要部分结构化将主要部分结构化 10.8 三层设计的实现问题三层设
2、计的实现问题 要点要点回顾回顾 阅读章节阅读章节要求要求 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 3/183 先导案例先导案例 NEW CAPlTAL BANK 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 4/183 概述概述 开发开发OO设计模型设计模型,程序员要用其为系统编码。,程序员要用其为系统编码。 开发设计开发设计类图类图和和交互图交互图( (顺序图顺序图和和协作图协作图) )。 为为域层域层、可视层可视层和和数据访问层数据访问层开发设计类图。开
3、发设计类图。 将类关联到将类关联到包图包图中,并说明其中的中,并说明其中的联系联系和和依赖依赖。 优秀的优秀的设计准则设计准则,以及应用这些准则的,以及应用这些准则的方法方法。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 5/183 10.1 OO设计设计分析和程序设计的桥梁分析和程序设计的桥梁 OO设计是一个建立一系列设计是一个建立一系列OO设计模设计模 型型的过程,的过程,程序员程序员利用这些模型对系统利用这些模型对系统 进行进行编码编码和和测试测试。 在软件设计中,在软件设计中,细节设计规范细节设计规范主要是主要是 由软
4、件设计专家完成的,用户只是偶尔由软件设计专家完成的,用户只是偶尔 参与参与主要是为了对设计进行纠正。主要是为了对设计进行纠正。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 6/183 10.1 OO设计设计分析和程序设计的桥梁分析和程序设计的桥梁 10.1.1 OO程序设计概述程序设计概述 10.1.2 OO设计过程和模型设计过程和模型 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 7/183 10.1.1 OO程序设计概述程序设计概述 1. OO程序如何工作程
5、序如何工作 2. 谁在控制谁在控制 3. 模块的实例化模块的实例化 4. OO设计目标设计目标 5. 简化设计类例简化设计类例 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 8/183 1. OO程序如何工作程序如何工作 OO程序是由一系列协同完成某一任务的程序是由一系列协同完成某一任务的 程序对象组成。程序对象组成。 每个程序对象有程序每个程序对象有程序逻辑逻辑和一些必要的和一些必要的属属 性性,这些逻辑和属性,这些逻辑和属性封装封装在一个单元中。在一个单元中。 对象之间通过互相传递对象之间通过互相传递消息消息来协调工作,来协
6、调工作, 它们共同工作来完成主程序的功能。它们共同工作来完成主程序的功能。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 9/183 OO事件驱动程序流事件驱动程序流 程序包括输入窗口对程序包括输入窗口对 象,用来输入学生象,用来输入学生ID 及其他信息。及其他信息。 当学生输入当学生输入ID后,窗后,窗 口对象会发消息口对象会发消息(消息消息 2)给学生类,程序会给学生类,程序会 产生一个新的学生对产生一个新的学生对 象象(实例实例),同时也转到,同时也转到 DB中取得学生信息并中取得学生信息并 把这些信息组成一个把这些信息组
7、成一个 对象对象(消息消息3)。 执行后新的学生对象执行后新的学生对象 给窗口对象返回一个给窗口对象返回一个 消息并显示在屏幕上。消息并显示在屏幕上。 职员此时会输入个人职员此时会输入个人 信息的更改信息的更改(消息消息4)。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 10/183 2. 谁在控制谁在控制 没有模块能进行控制。没有模块能进行控制。 有一个启动程序,但一旦程序开始执行,有一个启动程序,但一旦程序开始执行, 就没有哪个模块或对象来控制了。就没有哪个模块或对象来控制了。( (与与 结构化程序不同,没有主控模块结构化
8、程序不同,没有主控模块) ) 结构化程序结构化程序主机主机-终端终端( (指令指令) ) OO程序程序计算机网络计算机网络( (中心任务中心任务) ) 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 11/183 3. 模块的实例化模块的实例化 OO系统由一系列计算对象组成。每个对象都封系统由一系列计算对象组成。每个对象都封 装了它自身的数据和程序逻辑。装了它自身的数据和程序逻辑。 分析员通过一个分析员通过一个类类来定义来定义程序逻辑的结构程序逻辑的结构和和数据数据 字段字段。类定义描述一个执行对象的。类定义描述一个执行对象的结构
9、或模板结构或模板。 只有当程序开始执行时,对象才能存在。该过程只有当程序开始执行时,对象才能存在。该过程 称为称为类模块的实例化类模块的实例化,或,或基于类定义所提供的模基于类定义所提供的模 板生成对象实例板生成对象实例。 实例化实例化:根据类定义所提供的模板创建对象。:根据类定义所提供的模板创建对象。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 12/183 4. OO设计目标设计目标 识别并确定所有对象,并生成每个识别并确定所有对象,并生成每个用例用例,比如,比如 用户界面用户界面对象、对象、问题域问题域对象及对象及DB访
10、问访问对象。对象。 用足够的细节说明每个类,使程序员能理解对用足够的细节说明每个类,使程序员能理解对 象是如何协同工作以生成用例,并可为每一个象是如何协同工作以生成用例,并可为每一个 类编写类编写OO的代码。的代码。 例例:学生注册系统,用程序语言实现部分类的:学生注册系统,用程序语言实现部分类的 定义。分别用定义。分别用JavaJava和和Visual Basic.NETVisual Basic.NET实现类实现类 的定义。的定义。 Java VBJava VB 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 14/183 5.
11、 简化设计类例简化设计类例 OO设计的主要部分是设计设计的主要部分是设计类图类图、交互图交互图, 还要设计有些类的还要设计有些类的状态图状态图。 如:一个如:一个设计类说明设计类说明帮助定义帮助定义属性属性和和方法方法。 通过代码可以帮助了解通过代码可以帮助了解设计设计和和编程实现编程实现之之 间的联系。间的联系。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 15/183 Student 类类 的的 简简 化化 设设 计计 类类 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对
12、象的设计方法 16/183 10.1.2 OO设计过程和模型设计过程和模型 1. 设计过程设计过程 2. 输入的输入的模型模型 3. 用例的实现用例的实现 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 17/183 1. 设计过程设计过程-步骤步骤 创建设计类图的基础版本,或初步模型创建设计类图的基础版本,或初步模型:包含:包含 属性名称等基本信息,以便用来设计交互图。属性名称等基本信息,以便用来设计交互图。 开发交互图开发交互图,即为每一个用例产生一个交互图:,即为每一个用例产生一个交互图: 其其决定哪些对象一起工作,及怎样协
13、同工作。决定哪些对象一起工作,及怎样协同工作。 ( (系统设计的核心系统设计的核心) )。 根据开发交互图时得到的信息,返回设计类图根据开发交互图时得到的信息,返回设计类图 并并开发方法名称开发方法名称( (可视化和特征信息是在设计类可视化和特征信息是在设计类 图的迭代中被修改的图的迭代中被修改的) )。 用包图将设计类图分割成相关的功能用包图将设计类图分割成相关的功能。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 18/183 带带 有有 各各 自自 输输 入入 模模 型型 的的 设设 计计 模模 型型 20212021年年
14、7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 19/183 2. 输入的模型输入的模型 交互图:交互图:用例图、用例描述、活动图、系用例图、用例描述、活动图、系 统顺序图、设计类图统顺序图、设计类图 设计类图设计类图:域模型类图、交互图:域模型类图、交互图 包图包图:设计类图:设计类图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 20/183 3. 用例的实现用例的实现 称称设计模型的最终开发结果设计模型的最终开发结果为用例的实现。为用例的实现。 术语术语实现实现指的是对每个用例的
15、详细系统过指的是对每个用例的详细系统过 程进行说明,而不是实现用例,换言之,程进行说明,而不是实现用例,换言之, 是制定了软件的蓝图。是制定了软件的蓝图。 OO的的设计也是用例驱动的设计也是用例驱动的( (设计是由一个设计是由一个 用例接着一个用例完成的用例接着一个用例完成的) )。 用例的实现用例的实现:对每个用例的详细系统过程:对每个用例的详细系统过程 的说明。的说明。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 21/183 10.2 设计类和设计类图设计类和设计类图 10.2.0 设计类图与设计类图与域模型类图域模型类
16、图 10.2.1 设计设计类类图符号图符号 10.2.2 设计类符号设计类符号 10.2.3 一些基本的设计准则一些基本的设计准则 10.2.4 开发初步设计类图开发初步设计类图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 22/183 10.2.0 设计类图与域模型类图设计类图与域模型类图 设计设计类图类图和详细和详细交互图交互图均使用对方作为设均使用对方作为设 计时的输入,二者的开发过程是平行的。计时的输入,二者的开发过程是平行的。 设计设计类图类图是是OO分析时开发的分析时开发的域模型类图域模型类图的的 扩展扩展(分析阶
17、段可忽略分析阶段可忽略属性或方法属性或方法)。 域模型类图域模型类图揭示问题域类和它们之间的联揭示问题域类和它们之间的联 系。系。 设计设计类图类图是是域设计模型类图域设计模型类图更详细的体现。更详细的体现。 通过集成来自交互图和其他模型的信息来通过集成来自交互图和其他模型的信息来 完成。完成。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 23/183 设计设计类图类图时,还要在以前的域模型的基时,还要在以前的域模型的基 础上础上增加增加很多类。很多类。 当这些类被定义后,通常会在不同的类当这些类被定义后,通常会在不同的类 图
18、中证明它们。图中证明它们。 系统中的类能被分解到各种不同的类图系统中的类能被分解到各种不同的类图 中,比如用户界面类。中,比如用户界面类。 也用子系统来开发各种类图。也用子系统来开发各种类图。 域模型类图域模型类图 设计类图设计类图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 25/183 额外类的例子额外类的例子 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 26/183 10.2.1 设计类图符号设计类图符号 1. 构造型构造型 2. 标准的构造型标准的构造
19、型 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 27/183 1. 构造型构造型 构造型是构造型是UML扩展机制,防止扩展机制,防止UML变得变得 复杂,允许用户进行必要的扩展和调整。复杂,允许用户进行必要的扩展和调整。 它必须在它必须在UML中已经定义的内容基础之中已经定义的内容基础之 上,为已有的元素增加新的语义而非语法。上,为已有的元素增加新的语义而非语法。 基于一个已存在的模型元素定义一种新的基于一个已存在的模型元素定义一种新的 模型元素。模型元素。 可应用于所有的模型元素可应用于所有的模型元素(类、节点、组类、节点、
20、组 件、关系、包、操作件、关系、包、操作) 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 28/183 例:参与者的三种表示形式例:参与者的三种表示形式 Actor Icon形式形式 Actor Label形式形式Decoration形式形式 Actor 参与者及其操作参与者及其操作 Actor Bill System execute Query( ) get Connection( ) 参与者可用构造型表示。参与者可用构造型表示。 如果参与者是一个类,也如果参与者是一个类,也 可给其添加属性和操作。可给其添加属性和操作。 20
21、212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 29/183 构造型用构造型用符号描述符号描述 域模型域模型展现用户工作环境下的情况及它们间的联展现用户工作环境下的情况及它们间的联 系,类不是特指软件类。创建设计类图,则要定系,类不是特指软件类。创建设计类图,则要定 义义软件类软件类。 UML允许设计者使用允许设计者使用构造型构造型为每一个类指明一为每一个类指明一 个专门的类型。个专门的类型。构造型构造型将模型元素以特定的类型将模型元素以特定的类型 分类。通过说明要强调的特征来扩展模型元素的分类。通过说明要强调的特征来扩展模型元素的
22、基本定义。基本定义。 开始设计一个开始设计一个用例图用例图时,首先要定义一个构造型。时,首先要定义一个构造型。 构造型构造型:按照模型元素的特征进行归类的一种方:按照模型元素的特征进行归类的一种方 式,用式,用符号描述。符号描述。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 30/183 扩展机制示例扩展机制示例 衍型衍型exceptionexception使得使得 OverflowOverflow成为一个模成为一个模 型元素型元素 EventQueueEventQueue中版本和中版本和 作者是作者是标记值标记值 addad
23、d上的约束上的约束orderedordered使得使得 EvenrQueueEvenrQueue中的事件按序排列中的事件按序排列 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 31/183 2. 标准的构造型标准的构造型 (0)设计模型中的标准构造型设计模型中的标准构造型 实体类实体类 边界类边界类 控制类控制类 数据访问类数据访问类 设设 计计 模模 型型 中中 的的 标标 准准 构构 造造 型型 构造型类构造型类 构造型的速记构造型的速记 符号,称图标符号,称图标 20212021年年7 7月月2020日星期二日星期二 第第
24、1010章章 面向对象的设计方法面向对象的设计方法 33/183 实体类实体类 实体类实体类:是问题域中的核心:是问题域中的核心类类。 从客观世界中的从客观世界中的实体对象实体对象归纳和抽象出来归纳和抽象出来(来自来自 域模型域模型)。用于长期保存在系统中的信息以及提。用于长期保存在系统中的信息以及提 供针对这些信息的相关处理行为。实体类的对供针对这些信息的相关处理行为。实体类的对 象是永久性的,即象是永久性的,即持久类持久类。 持久类持久类:程序结束后仍然存在的实体类。在系:程序结束后仍然存在的实体类。在系 统关闭后这些数据仍存在。统关闭后这些数据仍存在。 实现方法实现方法:将它们写入文件或
25、:将它们写入文件或DB。实体类在。实体类在 DB中有相应的表,其属性对应中有相应的表,其属性对应DB中的字段。中的字段。 实体实体 消费者消费者 消费者消费者 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 34/183 边界类边界类(设计阶段设计阶段) 从系统和外界进行交互的对象中归纳、抽象出来。从系统和外界进行交互的对象中归纳、抽象出来。 是系统内对象和系统外的参与者的联系媒介,外是系统内对象和系统外的参与者的联系媒介,外 界消息通过边界类的对象实例发送给系统。界消息通过边界类的对象实例发送给系统。(窗窗 体、对话框、报表体、
26、对话框、报表) 边界类边界类:存在于系统的自动化边界上的类。:存在于系统的自动化边界上的类。 边界边界 命令窗口命令窗口 命令窗口命令窗口 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 35/183 控制类控制类(设计阶段设计阶段) 控制类控制类:在边界类和实体类中间起协调作用的类,:在边界类和实体类中间起协调作用的类, 在域层和可视层之间起在域层和可视层之间起开关控制开关控制的的作用作用( (它包含它包含 了事件的了事件的应用逻辑应用逻辑或或业务规则业务规则) )。 它负责从边界类对象获取信息,然后发送到适当它负责从边界类对象
27、获取信息,然后发送到适当 的实体类对象,就像是的实体类对象,就像是域层域层和和可视层可视层之间的一个之间的一个 开关开关或或控制器控制器。 在一个用例中,一个在一个用例中,一个控制类控制类应该同一个且仅一个应该同一个且仅一个 参与者参与者相关联。相关联。 其协调其协调边界类边界类和和实体类实体类之间的消息及消息发送的之间的消息及消息发送的 顺序。顺序。 控制控制 用例管理用例管理 用例管理用例管理 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 36/183 数据访问类数据访问类(设计阶段设计阶段) 数据访问类数据访问类:从:从D
28、B获取信息。获取信息。 从从DB获取信息或向获取信息或向DB发送信息的类。发送信息的类。 不同于向实体类方法中插入不同于向实体类方法中插入DB访问逻访问逻 辑辑(包括包括SQL语句语句),在设计中通常包含,在设计中通常包含 一个访问一个访问DB的独立的类的层次。的独立的类的层次。 数据访问数据访问 命令数据库读取命令数据库读取 命令数据库读取命令数据库读取 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 37/183 10.2.2 设计类符号设计类符号 1. 定义设计类的内部符号定义设计类的内部符号 2. 属性的格式属性的格式 3
29、. 方法特征包括内容方法特征包括内容 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 38/183 1. 定义设计类的内部符号定义设计类的内部符号 名字:类名、构造型名字:类名、构造型 属性属性 方法方法 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 39/183 2. 属性的格式属性的格式 属性可见性属性可见性( (+ +: :可见,可见,- -: :不可见。可见性表不可见。可见性表 示其他对象是否能直接访问这些属性示其他对象是否能直接访问这些属性) ); 属性名
30、称;属性名称; 类型表达式类型表达式( (如如字符型、字符串型、整型、字符型、字符串型、整型、 数字型、货币型或日期型数字型、货币型或日期型) ); 初值;初值; 原型原型( (在在花括号花括号内内) ),比如,比如 关键字关键字 。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 40/183 3. 方法特征包括内容方法特征包括内容 方法可见性;方法可见性; 方法名;方法名; 类型表达式类型表达式( (方法返回参数的类型方法返回参数的类型) ); 方法参数列表方法参数列表( (输入参数输入参数) )。 方法特征方法特征:描述调用
31、该方法所需的所有:描述调用该方法所需的所有 信息的符号。信息的符号。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 41/183 参数表参数表 在在OO的程序设计中,分析员通过使用的程序设计中,分析员通过使用 完整标识完整标识来来识别识别每一个方法。每一个方法。 一些一些OO语言允许多个方法使用同一个语言允许多个方法使用同一个 名称,为了区分使用参数表。名称,为了区分使用参数表。 在在OO语言中,需要用语言中,需要用方法名方法名和和参数表参数表 去激活相应的方法。去激活相应的方法。 20212021年年7 7月月2020日星期二
32、日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 42/183 方法重载方法重载 要通过要通过客户客户ID或或客户名客户名来取得客户记录,可建来取得客户记录,可建 立两个方法,并为它们起同一个名字:立两个方法,并为它们起同一个名字: “getCustomer(CustomerlD)”、 “getCustomer(CustomerName)”。 方法重载方法重载:两个方法有同一名字两个方法有同一名字(getCustomer)。 要知道哪个方法被激活,则编译器要知道包含要知道哪个方法被激活,则编译器要知道包含 参数是什么参数是什么即输入的参数是数字即输入的参数是数字 (Custom
33、erID)还是字符串还是字符串(CustomerName)。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 43/183 学生 域模型类图的例子域模型类图的例子 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 44/183 域域 图图 和和 设设 计计 类类 图图 的的 学学 生生 类类 例例 子子 构造器构造器: :建建 立类的新对象立类的新对象 的方法。的方法。 使用创建语使用创建语 句来跟踪在交句来跟踪在交 互图中使用的互图中使用的 信息名称。信息名称。 +c
34、reateStudent(name,address,major):student +createStudent(studentID):student 构造器自己填构造器自己填 充学生其他信息。充学生其他信息。 访问访问DB获得字获得字 段值。段值。 +findAboveHours(int hours):studentArray 类级方法类级方法:与类而不:与类而不 是类的对象相关的方法。是类的对象相关的方法。 审查类所有例子,返审查类所有例子,返 回那些总小时数比输入回那些总小时数比输入 参数大的学生队列。参数大的学生队列。 20212021年年7 7月月2020日星期二日星期二 第第1010
35、章章 面向对象的设计方法面向对象的设计方法 45/183 类级方法类级方法 在在OO方法中,类是创建个体对象和实例的模板。方法中,类是创建个体对象和实例的模板。 对类的每个实例大多数方法都适用。对类的每个实例大多数方法都适用。 但是,分析员常常需要立即检查所有的实例。这种类型但是,分析员常常需要立即检查所有的实例。这种类型 的方法称为的方法称为类级方法类级方法,它们用下划线表示出来。,它们用下划线表示出来。 VB.NET: 该方法称为共享方法;该方法称为共享方法;Java: 是静态方法。是静态方法。 类级方法类级方法:由类:由类(不是由类的某一对象不是由类的某一对象)执行。执行。 因为因为类级
36、方法类级方法在类级别应用,它们不依赖于某一对象的在类级别应用,它们不依赖于某一对象的 存在,如果需要,就可以通过所有的对象访问数据。存在,如果需要,就可以通过所有的对象访问数据。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 46/183 10.2.3 一些基本的设计准则一些基本的设计准则 1. 封装和信息隐藏封装和信息隐藏 2. 导航可见性导航可见性 3. 耦合耦合 4. 任务的聚合和分解任务的聚合和分解 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 47/18
37、3 1. 封装和信息隐藏封装和信息隐藏 封装封装 对象重用对象重用 信息隐藏信息隐藏 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 48/183 封装封装 规定数据和程序逻辑包含在一个独立的单规定数据和程序逻辑包含在一个独立的单 元中。元中。 一种设计概念,说明一个对象包含一种设计概念,说明一个对象包含数据数据和和 程序逻辑程序逻辑的独立单元。的独立单元。 每个对象都是内部携带自己的数据,并提每个对象都是内部携带自己的数据,并提 供访问数据的方法,而且还提供一系列调供访问数据的方法,而且还提供一系列调 用对象方法的服务。用对象方
38、法的服务。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 49/183 对象重用对象重用 说明标准对象可以在系统中反复使用。说明标准对象可以在系统中反复使用。 对象的标准集提供在同一系统中及不同系对象的标准集提供在同一系统中及不同系 统中多次使用基本服务。统中多次使用基本服务。 重用的最普遍的例子重用的最普遍的例子:为计算机或网络应:为计算机或网络应 用设计用户界面。用设计用户界面。 设计者通常重用相同的类来开发窗口和诸设计者通常重用相同的类来开发窗口和诸 如按钮、菜单、图标等的窗口部件。如按钮、菜单、图标等的窗口部件。 202
39、12021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 50/183 信息隐藏信息隐藏 指和一个对象有关的数据对外部世界是指和一个对象有关的数据对外部世界是 不可见的,通过使用一组方法来访问和不可见的,通过使用一组方法来访问和 修改这些数据。修改这些数据。 和一个对象有关的数据对外部世界是不和一个对象有关的数据对外部世界是不 可见的。可见的。 对象的属性是私有的。对象的属性是私有的。 用一组方法来访问和修改数据。用一组方法来访问和修改数据。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设
40、计方法 51/183 2. 导航可见性导航可见性 一个对象可看到另一个对象并与之交互一个对象可看到另一个对象并与之交互( (导导 航、可见性航、可见性) )。 一个对象可导航一个对象可导航( (发送消息发送消息) )到另一个对象。到另一个对象。 一个对象通过发消息的方式和另一个对象一个对象通过发消息的方式和另一个对象 进行联系,那么第一个对象对于第二个对进行联系,那么第一个对象对于第二个对 象来说必须是可见的。象来说必须是可见的。 对象具有能看见另一对象并与其交互能力。对象具有能看见另一对象并与其交互能力。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设
41、计方法面向对象的设计方法 52/183 设计说明对象的导航可见性设计说明对象的导航可见性 设计的一个任务是要说明哪一个对象对哪一个对设计的一个任务是要说明哪一个对象对哪一个对 象有导航可见性。象有导航可见性。 导航可见性可是单向也可是双向的。导航可见性可是单向也可是双向的。 如如:一个:一个Customer对象可看见一个对象可看见一个Order对象,对象, 表示表示Customer对象可知道客户发出哪些订单。对象可知道客户发出哪些订单。 程序中,程序中,Customer类用类用一个变量一个变量或是或是变量数组变量数组 指向客户一个或多个指向客户一个或多个Order对象。对象。 若导航是双向的若
42、导航是双向的, 则则Order对象有指向对象有指向Customer 对象的变量。否则没有。对象的变量。否则没有。 设计类图中,导航可见性用类之间的箭头表示,设计类图中,导航可见性用类之间的箭头表示, 箭头指向可见的类。箭头指向可见的类。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 53/183 Customer和和Order间的导航可见性间的导航可见性 Customer类的类的myOrder变量的值指向某个变量的值指向某个Order实例。实例。 通常变量通常变量myOrder并不直接在设计类中出现。并不直接在设计类中出现。 导
43、航的箭头表示一个类对另一个类有可见的要求。导航的箭头表示一个类对另一个类有可见的要求。 在该例添加在该例添加myOrder变量来强调这个概念。变量来强调这个概念。 myOrder 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 54/183 3. 耦合耦合 对设计类图中的类与类之间连接关系紧对设计类图中的类与类之间连接关系紧 密程度的定性的度量密程度的定性的度量。 较容易理解耦合的方法是看设计类图中较容易理解耦合的方法是看设计类图中 导航箭头的个数。导航箭头的个数。 对系统来说,对系统来说,弱耦合弱耦合比比强耦合强耦合好。即较好。
44、即较 少的导航可见性箭头说明系统更易于理少的导航可见性箭头说明系统更易于理 解和维护。解和维护。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 55/183 互相通信的对象互相通信的对象 必须有导航可见必须有导航可见 性,所以它们是性,所以它们是 耦合的。耦合的。 强耦合增加系统强耦合增加系统 复杂性,系统维复杂性,系统维 护困难。护困难。 一个类的变化会一个类的变化会 波及整个系统。波及整个系统。 若使输入窗口对象也可访问若使输入窗口对象也可访问DB对象,则该用例的整体对象,则该用例的整体 耦合性将会增加。耦合性将会增加。 对
45、对10个或更多用例的系统,无规则的连接和导航可见个或更多用例的系统,无规则的连接和导航可见 性会导致很强的耦合,使系统很复杂。性会导致很强的耦合,使系统很复杂。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 56/183 4. 任务的聚合和分解任务的聚合和分解 聚合聚合 任务分解任务分解 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 57/183 聚合聚合 对一个类中功能一致性的定性度量。对一个类中功能一致性的定性度量。 低聚合的类的负效应低聚合的类的负效应:难于
46、维护、很难:难于维护、很难 重用、难于理解。重用、难于理解。 聚合类型聚合类型:极低、低、:极低、低、中等、高聚合中等、高聚合 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 58/183 极低聚合的类极低聚合的类 它在不同的功能领域都有服务的任务。它在不同的功能领域都有服务的任务。 如一个类既可以访问网络又可以访问如一个类既可以访问网络又可以访问 数据库。数据库。 这两种活动是完全不同的,而且是为这两种活动是完全不同的,而且是为 了达到不同的目的,因此把它们放在一了达到不同的目的,因此把它们放在一 个类里就会造成低聚合性。个类里
47、就会造成低聚合性。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 59/183 低聚合的例子低聚合的例子 这个类可能在相关领域有不同的任务,也可能完这个类可能在相关领域有不同的任务,也可能完 成成DB中所有表的数据访问功能。中所有表的数据访问功能。 连接连接DB和访问和访问DB中中所有表所有表(两种方法都访问两种方法都访问的功的功 能一样,但传入和导出的数据类型不一样。能一样,但传入和导出的数据类型不一样。DB) 与整个与整个DB连接的类不像只与用户表连接的类的连接的类不像只与用户表连接的类的 那样易于重用。那样易于重用。 更好
48、方法更好方法:用不同类访问用户信息、命令信息和:用不同类访问用户信息、命令信息和 库信息。库信息。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 60/183 中等聚合的例子中等聚合的例子 这个类有联系密切的相关任务这个类有联系密切的相关任务. 如:记录如:记录客户信息客户信息和和客户账号信息客户账号信息的类。可定的类。可定 义两个高聚合的类,一个记录客户信息义两个高聚合的类,一个记录客户信息(名字名字 和地址和地址);另一个类记录客户账号;另一个类记录客户账号(余额、支出、余额、支出、 信用卡信息和所有的财务活动信用卡信息和所
49、有的财务活动)。 如果如果客户信息客户信息和和账号信息账号信息是受限的,将它们组是受限的,将它们组 合到一个合到一个中等聚合中等聚合的类中。的类中。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 61/183 任务分解任务分解 将一个类划分成几个高聚合的类。将一个类划分成几个高聚合的类。 任务分解既是解决低聚合类的方法,又任务分解既是解决低聚合类的方法,又 是开发高聚合类的方法。是开发高聚合类的方法。 把不同的任务分配到不同的类中。把不同的任务分配到不同的类中。 20212021年年7 7月月2020日星期二日星期二 第第101
50、0章章 面向对象的设计方法面向对象的设计方法 62/183 10.2.4 开发初步设计类图开发初步设计类图 分析的重点仍然是确定分析的重点仍然是确定类类、它们的、它们的属性属性,以及,以及 类类之间的关系之间的关系。 通过扩展域模型类图的方法来构造初步设计类通过扩展域模型类图的方法来构造初步设计类 图。图。 步骤:步骤: 1. 用类型和初值信息详细描述属性用类型和初值信息详细描述属性 2. 添加导航可见性箭头添加导航可见性箭头 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 63/183 RMORMO 域域 模模 型型 类类 图图
51、 账户号账户号 主键主键 姓名姓名 账单地址账单地址 运输地址运输地址 白天电话白天电话 夜间电话夜间电话 用户用户 1 0.* 订购订购IDID 订购日期订购日期 优先码优先码 运输运输 另一个消息则由另一个消息则由:OrderHandler初始化,并初始化,并 检索检索:Gustomer对象对象,将其返回给将其返回给:OrderWindow 对象对象; 客户信息就可显示出来。客户信息就可显示出来。 StartOrder 消消 息息 的的 电电 话话 订订 购购 顺顺 序序 图图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法
52、139/183 添加数据层添加数据层 只需让只需让:Gustomer对象初始化自己。对象初始化自己。 Customer对象使用一个单一的数据访问类。对象使用一个单一的数据访问类。 新创建的新创建的:Order对象也可保存在对象也可保存在DB中。许多中。许多 DBMS自动为表格里的记录产生键值。自动为表格里的记录产生键值。 通过保存早期的订单,键值可被提取出来,数通过保存早期的订单,键值可被提取出来,数 据也可备份以防计算机故障。据也可备份以防计算机故障。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 140/183 2. 第二个
53、消息第二个消息 addItem(catalogID,prodID,size,quantity) 给订单添加条目的重复消息。给订单添加条目的重复消息。 添加可视层添加可视层 添加数据层添加数据层 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 141/183 添加可视层添加可视层 假设假设:OrderWindow对象有允许添加新项的对象有允许添加新项的按钮按钮。 单击它会弹出窗口单击它会弹出窗口:NewItemwin,它可用来给它可用来给 订单添加详细的条目。订购职员输入新订购条订单添加详细的条目。订购职员输入新订购条 目具体信息。
54、目具体信息。 此处此处:NewItemWin调用调用 “查询可用条目查询可用条目”用例,用例, 该用例初始化该用例初始化:Product和和:Inventorvnem对象,对象, 并核实该条目是可获取的。并核实该条目是可获取的。 为此给顺序图加一个注释来标注该行为。为此给顺序图加一个注释来标注该行为。 addItem 消消 息息 的的 电电 话话 订订 购购 顺顺 序序 图图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 143/183 添加数据层添加数据层 :Order创建所需的创建所需的:OrderItem。 :OrderI
55、tem向向:OrderItemDA数据访问对象数据访问对象 发送消息以将自己保存在发送消息以将自己保存在DB中。中。 :InventoryItem对象调用数据访问类更新现对象调用数据访问类更新现 有数量字段。有数量字段。 产品和库存对象的初始化工作是由产品和库存对象的初始化工作是由“查询查询 可用条目可用条目”用例完成的,则惟一所需的数用例完成的,则惟一所需的数 据访问是保存更新后的数据。据访问是保存更新后的数据。 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 144/183 3. 最后两个消息最后两个消息 completeOr
56、der()、makePayment()不需要不需要 定义任何新的窗口类。定义任何新的窗口类。 假设假设:NewOrderWin窗口的适当字段能够表窗口的适当字段能够表 示订单的完成,以及输入支付的数额示订单的完成,以及输入支付的数额 则需要通过则需要通过:OrderDA数据访问类来将订单数据访问类来将订单 保存在保存在DB中。中。 需要一个新的数据访问类来保需要一个新的数据访问类来保 存存:OrderTransaction对象。对象。 最最 后后 的的 消消 息息 的的 电电 话话 订订 购购 顺顺 序序 图图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象
57、的设计方法面向对象的设计方法 146/183 注意注意 到此没有添加任何设计元素以涵盖用例中的到此没有添加任何设计元素以涵盖用例中的错错 误处理误处理和和处理失败处理失败的情况。的情况。 例如例如,如果一个客户的记录找不到了该怎么办?,如果一个客户的记录找不到了该怎么办? 或者如果输入出错,系统应该做什么?或者如果输入出错,系统应该做什么? 可以扩展顺序图来覆盖这些问题。可以扩展顺序图来覆盖这些问题。 或者添加叙述性的描述来指出系统应该如何解或者添加叙述性的描述来指出系统应该如何解 决那些异常情况,并将细节性的工作留给程序决那些异常情况,并将细节性的工作留给程序 员去做。员去做。 202120
58、21年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 147/183 当创建顺序图的时候,经常需要同时处当创建顺序图的时候,经常需要同时处 理几个不同的任务。理几个不同的任务。 例如,例如,DB设计和用户界面的原型产生就设计和用户界面的原型产生就 是能与详细设计并行发生的事情。是能与详细设计并行发生的事情。 备忘录备忘录 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 148/183 10.5 用协作图设计用协作图设计 1. 协作图的符号协作图的符号 2. 协作图与顺序图协作图与顺序图
59、 3. 简化的协作图简化的协作图 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 149/183 1. 协作图的符号协作图的符号 发送初始消息的参与者发送初始消息的参与者 接收消息的并发送其他消息的对象接收消息的并发送其他消息的对象 链接链接 消息描述器消息描述器 20212021年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 150/183 链接链接 协作图中用于在对象之间或在参与者协作图中用于在对象之间或在参与者 与对象之间传递消息的符号。与对象之间传递消息的符号。 202120
60、21年年7 7月月2020日星期二日星期二 第第1010章章 面向对象的设计方法面向对象的设计方法 151/183 消息描述器消息描述器 消息描述器语法消息描述器语法: true/false条件条件序列号序列号:返回值返回值:=消息名消息名(参数列表参数列表) 冒号总是跟在序列号的后面。冒号总是跟在序列号的后面。 顺序图中的格式:顺序图中的格式: *真真/假条件假条件返回值返回值:=消息名消息名(参数列表参数列表) *true/false condition return-value:=message-name(parameter-list) 20212021年年7 7月月2020日星期二日星
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考语文写作押题作文4篇
- 2026年欧盟对中国产品碳排放默认值歧视性分析及影响测算
- 2026年磁力吸盘清洁与工件底面贴合防翘曲措施
- 南开中学初2026年初三统一抽考试题化学试题含解析
- 2026届四川省成都市龙泉九中重点名校初三第一次大考生物试题含解析
- 贵州省兴义市2025-2026学年初三下学期中考仿真考试生物试题含解析
- 2026年青海省西宁二十一中学中考生物试题模拟试卷命题比赛试卷含解析
- 2026届内蒙古鄂尔多斯市准格尔旗重点中学高中毕业班第二次质量检测试题生物试题文试题含解析
- 江苏省丰县2026届初三下学期期末统一质量检测试题化学试题含解析
- 山东省东营区实验学校2025-2026学年第二学期初三第一次模拟考试生物试题含解析
- 校招国企财务面试题目及答案
- 智塑健康科技(嘉兴)有限公司年产2万套3D打印骨科融合器项目环评报告
- 输电专业十八项反措内容宣贯
- 车辆公证协议书范文
- 计量经济学基础-计量经济学1学习资料
- 水电合同协议模板下载
- 通风工程施工方案通风
- 高速道路救援培训课件
- 部队网络安全意识教育
- 《STM32单片机概述》课件
- 2024年镇江市高等专科学校高职单招语文历年参考题库含答案解析
评论
0/150
提交评论