第1章 为问题域建模_第1页
第1章 为问题域建模_第2页
第1章 为问题域建模_第3页
第1章 为问题域建模_第4页
第1章 为问题域建模_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象分析与设计面向对象分析与设计陈少波编著陈少波编著年秋年秋不谋万世者,不足以谋一时;不谋万世者,不足以谋一时;不谋全局者,不足以谋一域。不谋全局者,不足以谋一域。1第第1 1章章 为问题域建概念模型为问题域建概念模型1.1 1.1 从需求出发从需求出发1.2 1.2 建立一个概念模型建立一个概念模型 1.2.1 1.2.1 类及类的表示类及类的表示 1.2.2 1.2.2 发现类发现类 1.2.2.1 1.2.2.1 找到备选类找到备选类 1.2.2.2 1.2.2.2 决定候选类决定候选类 1.2.3 1.2.3 确定类之间的关系确定类之间的关系 1.2.3.1 1.2.3.1 继承(

2、泛化)继承(泛化) 1.2.3.2 1.2.3.2 关联关联 1.2.3.3 1.2.3.3 聚合与组合聚合与组合 1.2.3.4 1.2.3.4 包包 1.2.3.5 1.2.3.5 确定类之间的关系确定类之间的关系 1.2.41.2.4 确定类的职责及协作者确定类的职责及协作者1.31.3 概念模型的详细程度及其作用概念模型的详细程度及其作用 1.3.11.3.1 概念模型的详细程度概念模型的详细程度 1.3.21.3.2 概念模型的作用概念模型的作用1.4 1.4 建立概念模型的指导原则建立概念模型的指导原则2第第2 2章章 为问题域建用例模型为问题域建用例模型2.12.1 什么是用例模

3、型什么是用例模型 2.1.1 2.1.1 参与者参与者 2.1.2 2.1.2 用例描述用例描述 2.1.3 2.1.3 用例图用例图 2.1.42.1.4 用例之间的关系用例之间的关系2.2 2.2 构建用例模型构建用例模型 2.2.1 2.2.1 确定系统的参与者确定系统的参与者 2.2.2 2.2.2 合并需求获得用例合并需求获得用例 2.2.3 2.2.3 细化用例描述细化用例描述2.3 2.3 什么是好用例什么是好用例 2.3.1 2.3.1 用例不是用例不是“功能功能”关于关于“四轮马车四轮马车”之一之一 2.3.2 2.3.2 用例可能是用例可能是“功能功能”关于关于“四轮马车四

4、轮马车”之二之二 2.3.3 2.3.3 什么时候才算完成任务什么时候才算完成任务2.4 2.4 本章小结本章小结3第第3 3章章 系统健壮性分析系统健壮性分析3.1 3.1 什么是健壮性分析什么是健壮性分析 3.1.1 3.1.1 健壮性分析的作用健壮性分析的作用 3.1.2 3.1.2 健壮性分析的对象健壮性分析的对象3.2 3.2 开始健壮性分析开始健壮性分析 3.2.1 3.2.1 通过事件流寻找边界对象通过事件流寻找边界对象 3.2.2 3.2.2 从概念模型及用例描述中寻找实体对象从概念模型及用例描述中寻找实体对象3.3 3.3 完善概念模型完善概念模型4第第4 4章章 构建交互模

5、型构建交互模型4.1 4.1 顺序图顺序图 4.1.1 4.1.1 定义顺序图定义顺序图 4.1.2 4.1.2 顺序图的组成顺序图的组成 4.1.3 4.1.3 创建对象和分支、从属流创建对象和分支、从属流 4.1.4 4.1.4 顺序图中的时间顺序图中的时间 4.1.5 4.1.5 顺序图中的迭代顺序图中的迭代 4.1.6 4.1.6 消息中的参数和序号消息中的参数和序号 4.1.7 4.1.7 顺序图片断顺序图片断 4.1.8 4.1.8 构建顺序图模型构建顺序图模型4.2 4.2 通信图通信图 4.2.1 4.2.1 通信图的构成通信图的构成 4.2.2 4.2.2 消息的序列号和控制

6、点消息的序列号和控制点 4.2.3 4.2.3 顺序图与通信图的转换及比较顺序图与通信图的转换及比较4.3 4.3 构建交互模型构建交互模型 4.3.1 4.3.1 引入实体对象引入实体对象 4.3.2 4.3.2 引入边界对象和参与者引入边界对象和参与者 4.3.3 4.3.3 添加对象之间的消息传递添加对象之间的消息传递 4.3.4 4.3.4 添加各个类的属性和方法添加各个类的属性和方法 4.3.5 4.3.5 引入基础类引入基础类 4.3.6 4.3.6 系统质量评审及设计优化系统质量评审及设计优化4.4 4.4 本章小结本章小结5第章关于过程的话题第章关于过程的话题5.1 5.1 为

7、什么需要过程为什么需要过程5.2 5.2 主流软件开发过程简介主流软件开发过程简介 5.2.1 5.2.1 统一软件开发过程统一软件开发过程RUPRUP 5.2.2 5.2.2 测试驱动开发测试驱动开发TDDTDD5.2.3 5.2.3 极限编程极限编程XPXP5.2.4 5.2.4 特征驱动开发特征驱动开发FDDFDD 5.3 5.3 理解开发过程理解开发过程 5.3.1 5.3.1 模型的演化过程模型的演化过程 5.3.2 5.3.2 第一次迭代第一次迭代5.3.3 5.3.3 第二次迭代第二次迭代5.3.4 5.3.4 随后的迭代随后的迭代5.3.5 5.3.5 最后的迭代最后的迭代5.

8、4 5.4 本章小结本章小结6第章活动图和状态图第章活动图和状态图.1 .1 活动图活动图6.1.1 6.1.1 定义活动图定义活动图6.1.2 6.1.2 基本活动图基本活动图6.1.3 6.1.3 嵌套活动图嵌套活动图 6.1.4 6.1.4 带泳道的活动图及对象流带泳道的活动图及对象流6.1.5 6.1.5 活动图构建示例活动图构建示例6.2 6.2 状态图状态图6.2.1 6.2.1 状态状态6.2.2 6.2.2 转移转移6.2.3 6.2.3 事件事件6.2.4 6.2.4 状态、转移和事件中的相关概念状态、转移和事件中的相关概念6.3 6.3 本章小结本章小结7第章构造实现方式第

9、章构造实现方式7.1 7.1 组件图组件图7.1.1 7.1.1 什么是组件什么是组件7.1.2 7.1.2 接口和组件间的关系接口和组件间的关系7.1.3 7.1.3 嵌套组件嵌套组件7.1.4 7.1.4 组件图的作用组件图的作用7.2 7.2 部署图部署图7.2.1 7.2.1 部署图通用准则部署图通用准则7.2.2 7.2.2 结点和组件结点和组件7.2.3 7.2.3 依赖和通信关联依赖和通信关联7.2.4 7.2.4 实现方式的建模过程实现方式的建模过程7.2.5 7.2.5 部署图应用部署图应用7.3 7.3 本章小结本章小结88.1 8.1 面向对象思路小结面向对象思路小结8.

10、1.1 8.1.1 从什么地方开始从什么地方开始8.1.2 8.1.2 分析与设计思路分析与设计思路8.2 8.2 编程简述编程简述8.2.1 8.2.1 什么是编程什么是编程8.2.2 8.2.2 编程的例子编程的例子8.3 8.3 测试简述测试简述8.3.1 8.3.1 测试面向对象的软件有何不同测试面向对象的软件有何不同8.3.2 8.3.2 对面向对象测试的误解对面向对象测试的误解8.3.3 8.3.3 测试方法概述测试方法概述8.3.4 8.3.4 单元测试(类测试)单元测试(类测试)8.3.5 8.3.5 集成测试(交互测试)集成测试(交互测试)8.3.6 8.3.6 系统测试系统

11、测试8.4 8.4 数据库设计简介数据库设计简介8.4.1 8.4.1 结构映射到表结构映射到表8.4.2 8.4.2 把功能映射到把功能映射到SQLSQL命令命令第章总结及其他第章总结及其他9第第1 1章章 为问题域建概念模型为问题域建概念模型1.1 1.1 从需求出发从需求出发1.2 1.2 建立一个概念模型建立一个概念模型 1.2.1 1.2.1 类及类的表示类及类的表示 1.2.2 1.2.2 发现类发现类 1.2.2.1 1.2.2.1 找到备选类找到备选类 1.2.2.2 1.2.2.2 决定候选类决定候选类 1.2.3 1.2.3 确定类之间的关系确定类之间的关系 1.2.3.1

12、 1.2.3.1 继承(泛化)继承(泛化) 1.2.3.2 1.2.3.2 关联关联 1.2.3.3 1.2.3.3 聚合与组合聚合与组合 1.2.3.4 1.2.3.4 包包 1.2.3.5 1.2.3.5 确定类之间的关系确定类之间的关系 1.2.41.2.4 确定类的职责及协作者确定类的职责及协作者1.31.3 概念模型的详细程度及其作用概念模型的详细程度及其作用 1.3.11.3.1 概念模型的详细程度概念模型的详细程度 1.3.21.3.2 概念模型的作用概念模型的作用1.4 1.4 建立概念模型的指导原则建立概念模型的指导原则10与结构化方法不同,面向对象方法中分析与设计之间的界限

13、是模糊的,与结构化方法不同,面向对象方法中分析与设计之间的界限是模糊的,分析和设计工作共存于一个连续体上,并且不同的实践者对于分析和设计工作共存于一个连续体上,并且不同的实践者对于“分析分析”和和“设计设计”在这个连续体上的活动有不同的分类界限。因此,生硬地定在这个连续体上的活动有不同的分类界限。因此,生硬地定义分析和设计过程各包含哪些步骤没有什么好处。义分析和设计过程各包含哪些步骤没有什么好处。更多地面向分析更多地面向设计做什么?需求应用领域调查如何做?逻辑解决方案图图1-1 分析和设计活动共存于一个连续体上分析和设计活动共存于一个连续体上既然不同的人和不同的方法对这些术语有不同的解释,对这

14、些术语的既然不同的人和不同的方法对这些术语有不同的解释,对这些术语的定义所做的争论也就没有什么积极意义。真正重要的是解决如何更好、定义所做的争论也就没有什么积极意义。真正重要的是解决如何更好、更快、更经济地创建和维护软件这样一个问题。因此,在本课程中,更快、更经济地创建和维护软件这样一个问题。因此,在本课程中,我们不打算对我们不打算对“分析分析”和和“设计设计”作出明确的区分。作出明确的区分。第第1 1章章 为问题域建概念模型为问题域建概念模型这说明了什么这说明了什么11由于现实世界中各领域对软件系统的需求日益增长,变化也越来越快,由于现实世界中各领域对软件系统的需求日益增长,变化也越来越快,

15、软件开发技术的发展方向已从软件开发技术的发展方向已从“提升被开发系统的执行效率提升被开发系统的执行效率”转变成转变成为为“提高开发效率提高开发效率”。面向对象技术降低了解决方案域(计算机)与。面向对象技术降低了解决方案域(计算机)与问题域之间的差别,提供了良好的复用机制,能够更加有效地提高软问题域之间的差别,提供了良好的复用机制,能够更加有效地提高软件开发效率,完全适应了软件开发技术的发展方向。件开发效率,完全适应了软件开发技术的发展方向。在本课程中,我们将通过一个简单的个人图书管理系统(根据需要,在本课程中,我们将通过一个简单的个人图书管理系统(根据需要,有时会插入一些实际的图书馆中图书管理

16、系统以及其他应用系统的例有时会插入一些实际的图书馆中图书管理系统以及其他应用系统的例子),让大家体验一下正确的面向对象分析和设计过程,从而帮助大子),让大家体验一下正确的面向对象分析和设计过程,从而帮助大家更好地驾驶面向对象技术,增强自已的家更好地驾驶面向对象技术,增强自已的“内功内功”。为了使大家把精力集中于面向对象的应用,本课程不涉及项目计划、管为了使大家把精力集中于面向对象的应用,本课程不涉及项目计划、管理等内容。另外,关于软件需求、分析、设计等术语,我们在理等内容。另外,关于软件需求、分析、设计等术语,我们在软件工软件工程程中已经详细介绍了,在此也不再论述,只是请你记住:中已经详细介绍

17、了,在此也不再论述,只是请你记住:“需求调研需求调研是了解问题,分析是定义问题,而设计则是解决问题。是了解问题,分析是定义问题,而设计则是解决问题。”第第1 1章章 为问题域建概念模型为问题域建概念模型121.1 从需求出发从需求出发尽管我们不打算详细论述软件需求的概念,但尽管我们不打算详细论述软件需求的概念,但一切软件开发都毫无例一切软件开发都毫无例外地必须从需求出发外地必须从需求出发。用软件工程的术语来讲,。用软件工程的术语来讲,“弄清楚要做什么弄清楚要做什么”就是我们通常所说的就是我们通常所说的“需求分析需求分析”。软件项目未来的所有工作都是依。软件项目未来的所有工作都是依据需求分析的结

18、果来开展的,如果需求分析的结果是错误的或不完整据需求分析的结果来开展的,如果需求分析的结果是错误的或不完整的,那么,接下来的设计和编码工作就是建立在错误或不完整的基础的,那么,接下来的设计和编码工作就是建立在错误或不完整的基础上,其结果也就可想而知了。因此,需求分析是软件开发过程中最重上,其结果也就可想而知了。因此,需求分析是软件开发过程中最重要的一个环节。要的一个环节。第第1 1章章 为问题域建概念模型为问题域建概念模型软件项目的需求分析一般要经历以下几个步骤:软件项目的需求分析一般要经历以下几个步骤:(1 1)确定项目的目标和范围;)确定项目的目标和范围;(2 2)根据项目的目标和范围来分

19、析、确认与项目相关的参与者;)根据项目的目标和范围来分析、确认与项目相关的参与者;(3 3)抽取出所有的非功能需求;)抽取出所有的非功能需求;(4 4)分析所有的功能性需求,一般采用用例建模的方法;)分析所有的功能性需求,一般采用用例建模的方法;(5 5)编写项目的)编写项目的需求规格说明书)。需求规格说明书)。13第第1 1章章 为问题域建概念模型为问题域建概念模型本人是一个爱书之人,家里各类书籍已过千册,而平时又本人是一个爱书之人,家里各类书籍已过千册,而平时又经常有朋友来借,因此需要一个个人图书管理系统。该系经常有朋友来借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计

20、算机类、非计算机类分统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但不能够删除记录。该系统则生成书号,可以修改信息,但不能够删除记录。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望对书籍的购买金额、册数按特殊时表打印。另外,还希望对书籍的购买金额、册数按特殊时段进行统计。段进行统计。一般情

21、况下,用户仅仅能够或者只会对其所需要的软件提出一些要求,一般情况下,用户仅仅能够或者只会对其所需要的软件提出一些要求,而且这些要求通常都是比较模糊的。即使是我们自已,在开始的时候而且这些要求通常都是比较模糊的。即使是我们自已,在开始的时候也很难提出一个非常完整的需求。以下是一个初步的需求描述:也很难提出一个非常完整的需求。以下是一个初步的需求描述:14第第1 1章章 为问题域建概念模型为问题域建概念模型建立概念模型的目的是帮助开发团队理解问题域的各种概念、各种名词、建立概念模型的目的是帮助开发团队理解问题域的各种概念、各种名词、以及它们之间的各种关系。而建立用例模型的目的是帮助开发团队理解以及

22、它们之间的各种关系。而建立用例模型的目的是帮助开发团队理解用户对系统的各种功能需求。这两方面的工作,是分析工作的主要内容,用户对系统的各种功能需求。这两方面的工作,是分析工作的主要内容,其结果就是得到明确的问题定义。也就是知道系统该做什么、不该做什其结果就是得到明确的问题定义。也就是知道系统该做什么、不该做什么,以及要达到的目标。么,以及要达到的目标。以上的需求描述当然不够清晰、不够严谨,但从这样的描述中,我们可以上的需求描述当然不够清晰、不够严谨,但从这样的描述中,我们可以对待开发软件系统有一个初步的认识。这段描述是我们进一步工作的以对待开发软件系统有一个初步的认识。这段描述是我们进一步工作

23、的出发点,通过一系列的分析活动,也通过与用户的进一步沟通,使我们出发点,通过一系列的分析活动,也通过与用户的进一步沟通,使我们对用户的需求慢慢清晰起来,对需要解决的问题逐渐明确起来。具体来对用户的需求慢慢清晰起来,对需要解决的问题逐渐明确起来。具体来说,在分析阶段通常包含两个方面的工作:说,在分析阶段通常包含两个方面的工作:建立一个以类图表示的反映建立一个以类图表示的反映问题域静态关系的概念模型;建立一个以用例模型表示的反映系统行为问题域静态关系的概念模型;建立一个以用例模型表示的反映系统行为的动态模型。的动态模型。151.2 建立一个概念模型建立一个概念模型所谓所谓“问题域问题域”是指一个包

24、含现实世界事物与概念的领域,这些事物和是指一个包含现实世界事物与概念的领域,这些事物和概念与所要开发的应用系统有关。概念与所要开发的应用系统有关。在对问题域的分析和调查过程中,所谓在对问题域的分析和调查过程中,所谓面向对象面向对象这个概念的精髓是将问这个概念的精髓是将问题分解成多个单独的概念或者对象题分解成多个单独的概念或者对象即分解成我们能够觉察、能够理解、即分解成我们能够觉察、能够理解、容易表达的事物。容易表达的事物。概念模型概念模型(conceptual model)是问题域中概念的描)是问题域中概念的描述,通常用一组静态结构图来表达。概念模型可以展示出:一组概念;述,通常用一组静态结构

25、图来表达。概念模型可以展示出:一组概念;概念之间的关联;概念的属性。概念之间的关联;概念的属性。表达概念模型的是类图。表达概念模型的是类图。类图是描述类、接口以及它们之间关系的图,类图是描述类、接口以及它们之间关系的图,它显示了系统中各个类的静态结构,是一种静态模型它显示了系统中各个类的静态结构,是一种静态模型。类图根据系统中。类图根据系统中的类以及各个类的关系描述系统的静态视图。的类以及各个类的关系描述系统的静态视图。类图是面向对象系统建模中最常用和最基本的图之一,其他许多图,如类图是面向对象系统建模中最常用和最基本的图之一,其他许多图,如状态图、顺序图、通信图、配置图等都是在类图的基础上进

26、一步描述了状态图、顺序图、通信图、配置图等都是在类图的基础上进一步描述了系统其他方面的特性。系统其他方面的特性。第第1 1章章 为问题域建概念模型为问题域建概念模型161.2.1 类及类的表示类及类的表示类是构成类图的基础,也是面向对象系统组织结构的核心。要使用类类是构成类图的基础,也是面向对象系统组织结构的核心。要使用类图,需要了解类和对象之间的区别。图,需要了解类和对象之间的区别。类是对资源的定义,它所包含的类是对资源的定义,它所包含的信息主要用来描述某种类型实体的特征以及对该类型实体的使用方法。信息主要用来描述某种类型实体的特征以及对该类型实体的使用方法。对象是具体的实体,它遵守类制定的

27、规则。对象是具体的实体,它遵守类制定的规则。从软件的角度看,程序通从软件的角度看,程序通常包含的是类的集合以及类所定义的行为,而实际创建信息和管理信常包含的是类的集合以及类所定义的行为,而实际创建信息和管理信息的是遵守类的规则的对象。息的是遵守类的规则的对象。类定义了一组具有状态和行为的对象,这些对象具有相同的属性、操类定义了一组具有状态和行为的对象,这些对象具有相同的属性、操作、关系和语义。其中,属性和关联用来描述状态。属性通常用没有作、关系和语义。其中,属性和关联用来描述状态。属性通常用没有身份的数据值表示,如数字和字符串。关联则用有身份的对象之间的身份的数据值表示,如数字和字符串。关联则

28、用有身份的对象之间的关系来表示。行为由操作来描述,方法是操作的实现。关系来表示。行为由操作来描述,方法是操作的实现。为了支持对身份、属性和操作的定义,为了支持对身份、属性和操作的定义,UML规范采用一个具有规范采用一个具有3个预定个预定义分栏的图标表示类,分栏中包含的信息有:名称、属性和操作,它们义分栏的图标表示类,分栏中包含的信息有:名称、属性和操作,它们对应着类的基本元素,如图对应着类的基本元素,如图1.2所示。所示。第第1 1章章 为问题域建概念模型为问题域建概念模型17图图1.2 类的类的3种预定义的分栏种预定义的分栏1) 1) 名称名称类名采用黑体字书写在名称分栏的中部。给类命名时最

29、好能够反映类所类名采用黑体字书写在名称分栏的中部。给类命名时最好能够反映类所代表的问题域中的概念,并且要清楚准确,不能含糊不清;类名通常表代表的问题域中的概念,并且要清楚准确,不能含糊不清;类名通常表示为一个名词。示为一个名词。2)2)属性属性类的属性,也称为特性,描述了类在软件系统中代表的事物(即对象)类的属性,也称为特性,描述了类在软件系统中代表的事物(即对象)所具备的特性,这些特性是该类中所有对象所共有的。对象可能有很多所具备的特性,这些特性是该类中所有对象所共有的。对象可能有很多属性,在系统建模时,只抽取那些对系统有用的特征作为类的属性,通属性,在系统建模时,只抽取那些对系统有用的特征

30、作为类的属性,通过这些属性可以识别该类的对象。例如,可以将学号、姓名、性别、出过这些属性可以识别该类的对象。例如,可以将学号、姓名、性别、出生年月、专业、班级等作为类生年月、专业、班级等作为类StudentStudent的属性。的属性。第第1 1章章 为问题域建概念模型为问题域建概念模型名称名称属性属性操作操作183) 3) 操作操作属性仅仅描述了要处理的数据,而操作则描述了处理数据的具体方法。属性仅仅描述了要处理的数据,而操作则描述了处理数据的具体方法。类的操作是对其所属对象的行为的抽象,相对于一个服务的实现,且该类的操作是对其所属对象的行为的抽象,相对于一个服务的实现,且该服务可以由类的任

31、何对象请求以影响其行为。属性是描述对象特征的值,服务可以由类的任何对象请求以影响其行为。属性是描述对象特征的值,操作用于操纵属性或执行其他动作。操作可以看作是类的接口,通过该操作用于操纵属性或执行其他动作。操作可以看作是类的接口,通过该接口可以实现内、外信息的交互,操作的具体实现称为接口可以实现内、外信息的交互,操作的具体实现称为方法方法。某类的操。某类的操作只能作用于该类的对象。作只能作用于该类的对象。第第1 1章章 为问题域建概念模型为问题域建概念模型对象通过相互发送消息来协作。一个消息调用一个类操作。这个操作通对象通过相互发送消息来协作。一个消息调用一个类操作。这个操作通过存取它自己对象

32、中的属性值为调用对象的请求提供服务。一个可能的过存取它自己对象中的属性值为调用对象的请求提供服务。一个可能的情景是,这个操作必须对外面的对象是可见的(消息必须看得见操作),情景是,这个操作必须对外面的对象是可见的(消息必须看得见操作),这样的操作被称为具有这样的操作被称为具有公共可见性公共可见性。在面向对象系统中,大多数的操作都是公有的,而大多数属性都是私有在面向对象系统中,大多数的操作都是公有的,而大多数属性都是私有的,属性值对其他的类是隐藏的。一个类的对象只能请求另一个类在公的,属性值对其他的类是隐藏的。一个类的对象只能请求另一个类在公共界面上发布的服务(操作),它们不允许直接操作其他对象

33、的属性。共界面上发布的服务(操作),它们不允许直接操作其他对象的属性。我们说,操作封装了属性。然而必须注意,我们说,操作封装了属性。然而必须注意,封装只作用到类封装只作用到类。一个对象。一个对象不能对相同类的对象隐藏(封装)任何东西。通常的可见性符号为:不能对相同类的对象隐藏(封装)任何东西。通常的可见性符号为:+ +:指公共可见性;:指公共可见性;- -:指私有可见性;:指私有可见性;# #:指受保护的可见性。分别对应:指受保护的可见性。分别对应于于C+C+中的中的publicpublic、privateprivate和和protectedprotected。19第第1 1章章 为问题域建概

34、念模型为问题域建概念模型1.2.2 1.2.2 发现类发现类如前所述,类代表一组相似对象的集合,而对象可以是任何适用于系统如前所述,类代表一组相似对象的集合,而对象可以是任何适用于系统的人、地点、物品、事件、概念、屏幕演示或报表。例如,虽然的人、地点、物品、事件、概念、屏幕演示或报表。例如,虽然“zhang chengzhang cheng”、“jiang junjiang jun”、“li haixiali haixia”都是学生,我们要建立都是学生,我们要建立的是叫做的是叫做“StudentStudent”类的模型,而不是对每一个单个的学生建模。发现类的模型,而不是对每一个单个的学生建模。

35、发现类,从本质上来讲是一项分析工作,因为它为应用程序确定构件。发现类,从本质上来讲是一项分析工作,因为它为应用程序确定构件。发现类的方法有很多种,下面作一些简单介绍,最后再说明我们所采用的方类的方法有很多种,下面作一些简单介绍,最后再说明我们所采用的方法。法。操作可见性与属性可见性没什么不同。操作可见性定义该操作在不同于操作可见性与属性可见性没什么不同。操作可见性定义该操作在不同于该类的其他类的对象中是否可见。如果是可见的,则该操作的可见性为该类的其他类的对象中是否可见。如果是可见的,则该操作的可见性为公有的,否则是私有的。公有的,否则是私有的。操作可见性需要与操作范围区别开来。操作可以在一个

36、实例对象中被调操作可见性需要与操作范围区别开来。操作可以在一个实例对象中被调用,或者还可以在一个类对象中被调用。对前一种情况,操作被说成是用,或者还可以在一个类对象中被调用。对前一种情况,操作被说成是具有具有实例范围实例范围,而后一种情况则具有,而后一种情况则具有类范围类范围。例如,寻找雇员的年龄的。例如,寻找雇员的年龄的操作具有实例范围,但计算雇员的平均年龄的操作就具有类范围。操作具有实例范围,但计算雇员的平均年龄的操作就具有类范围。201)1)参与者是潜在的类参与者是潜在的类。参与者表示与系统进行交互的任何人或物,其详。参与者表示与系统进行交互的任何人或物,其详细概念我们将在后面的用例建模

37、中论述。参与者有两种情况,一种是在细概念我们将在后面的用例建模中论述。参与者有两种情况,一种是在现实世界中的参与者,另一种是存储在你的系统中的参与者。例如,在现实世界中的参与者,另一种是存储在你的系统中的参与者。例如,在现实世界中有作为大学学生的人,同时,在你的系统中存在业务对象,现实世界中有作为大学学生的人,同时,在你的系统中存在业务对象,代表那些现实世界中的人。代表那些现实世界中的人。 2)2)确定客户确定客户。大学中有学生,银行有顾客,网络操作系统有用户,航班。大学中有学生,银行有顾客,网络操作系统有用户,航班有乘客。学生、顾客、用户和乘客都是客户的例子。有乘客。学生、顾客、用户和乘客都

38、是客户的例子。 3)3) 跟踪资金流跟踪资金流。问问你自已,资金是从哪里来的(通常是从客户那里。问问你自已,资金是从哪里来的(通常是从客户那里来的),它是怎么挣到的(通过卖产品或服务),还有它被花在哪里来的),它是怎么挣到的(通过卖产品或服务),还有它被花在哪里了。通过对资金进行跟踪,你能够为系统确定很多核心类(客户、出了。通过对资金进行跟踪,你能够为系统确定很多核心类(客户、出售的产品或服务,以及组成那些用于出售的产品售的产品或服务,以及组成那些用于出售的产品/服务的要素)。服务的要素)。4)4) 概念是潜在的类概念是潜在的类。你所面对的应用领域的业务人员经常会使用他们习。你所面对的应用领域

39、的业务人员经常会使用他们习以为常的术语。术语经常是领域模型的候选类。例如,在一所大学中经以为常的术语。术语经常是领域模型的候选类。例如,在一所大学中经常会使用的业务术语有:专业、课程、教室、教学楼和课本,这些概念常会使用的业务术语有:专业、课程、教室、教学楼和课本,这些概念中的每一个都是你的系统中潜在的类。中的每一个都是你的系统中潜在的类。第第1 1章章 为问题域建概念模型为问题域建概念模型215) 5) 事件是潜在的类事件是潜在的类。关键事件发生在大部分问题领域中。例如,在大。关键事件发生在大部分问题领域中。例如,在大学中,重要的事件包括毕业和开学。每一个事件都是系统中潜在的类,学中,重要的

40、事件包括毕业和开学。每一个事件都是系统中潜在的类,因为它们会有其职责(例如因为它们会有其职责(例如“毕业毕业”要维护一个毕业学生列表,要知道要维护一个毕业学生列表,要知道其日期和地点等等)。其日期和地点等等)。6) 6) 主要用户界面元素是潜在的类主要用户界面元素是潜在的类。现实世界中的参与者通过这些类与。现实世界中的参与者通过这些类与你的系统一起工作。从学术上讲,这样做不够纯粹。然而,这很实用,你的系统一起工作。从学术上讲,这样做不够纯粹。然而,这很实用,因为现实世界参与者会与这些类进行协作。因为现实世界参与者会与这些类进行协作。7) 7) 立即找出三到五个主类立即找出三到五个主类。这些类是

41、系统的核心,而且如果你不能描述。这些类是系统的核心,而且如果你不能描述这些类的话,就不可能理解业务。例如,这些类的话,就不可能理解业务。例如,“乘客乘客”、“飞机飞机”、“机组机组人员人员”和和“机场机场”对于航班订票系统应该是主类。对于航班订票系统应该是主类。“学生学生”、“教授教授”、“课程课程”和和“教室教室”对于大学信息系统应该是主类。对于大学信息系统应该是主类。我们考察以上这些发现类的方法,其共同特点是我们考察以上这些发现类的方法,其共同特点是潜在的类潜在的类基本上都与基本上都与名名词词有关。确实,在实际工作中,发现类应用最广泛的就是有关。确实,在实际工作中,发现类应用最广泛的就是“

42、名词动词名词动词法法”。所谓。所谓名词动词法名词动词法,其主要规则是从名词与名词短语中提取对象与,其主要规则是从名词与名词短语中提取对象与属性;从动词与动词短语中提取操作与关联;而所有格短语通常表明名属性;从动词与动词短语中提取操作与关联;而所有格短语通常表明名词应该是属性而不是对象。下面,我们就采用该方法开始问题域建模的词应该是属性而不是对象。下面,我们就采用该方法开始问题域建模的第一步。第一步。第第1 1章章 为问题域建概念模型为问题域建概念模型潜在的类有什么共同的特点潜在的类有什么共同的特点221.2.2.1 1.2.2.1 找到备选类找到备选类首先,我们可以逐字逐句地阅读上面那段需求描

43、述,并将其中的所有首先,我们可以逐字逐句地阅读上面那段需求描述,并将其中的所有名词及名词短语列出来,我们可以得到如下的备选类列表:名词及名词短语列出来,我们可以得到如下的备选类列表:本人本人 人人 家里家里 书籍书籍 朋友朋友 个人图书管理系统个人图书管理系统 基本信息(书籍的)基本信息(书籍的) 计算机类计算机类 非计算机类非计算机类 书名书名 作者作者 类类别别 出版社出版社 关键字关键字 功能功能 新书籍新书籍 系统系统 规则规则 书号书号 信信息息 记录记录 外借情况外借情况 外借情况列表外借情况列表 购买金额购买金额 册数册数 特定时特定时段段 图图1.3 列出所有的名词及名词短语列

44、出所有的名词及名词短语1.2.2.2 1.2.2.2 决定候选类决定候选类很显然,并不是每一个备选类都是合适的候选类,有些名词对于要开发很显然,并不是每一个备选类都是合适的候选类,有些名词对于要开发的系统来说无关紧要,甚至是系统之外的;而有些名词描述的概念太小,的系统来说无关紧要,甚至是系统之外的;而有些名词描述的概念太小,可能是某个候选类的属性。因此,我们需要对备选类进行一番筛选,将可能是某个候选类的属性。因此,我们需要对备选类进行一番筛选,将不合适的备选类删去。不合适的备选类删去。第第1 1章章 为问题域建概念模型为问题域建概念模型23“本人本人”、“人人”、“家里家里”很明显是系统外的概

45、念,没有必要建模。很明显是系统外的概念,没有必要建模。而而“个人图书管理系统个人图书管理系统”、“系统系统”指的就是将要开发的系统,即系指的就是将要开发的系统,即系统本身,也没有必要对其建模。统本身,也没有必要对其建模。“书籍书籍”是一个很重要的类,而是一个很重要的类,而“书名书名”、“作者作者”、“类别类别”、“出版社出版社”、“书号书号”是用来描述书籍的基本信息,因此应该作为是用来描述书籍的基本信息,因此应该作为“书籍书籍”类的属性处理,类的属性处理,“规则规则”则是指书号的生成规则,而书号是则是指书号的生成规则,而书号是书籍的一个属性,因此,书籍的一个属性,因此,“规则规则”可以作为编写

46、可以作为编写“书籍书籍”类构造函数类构造函数的指南。的指南。“基本信息基本信息”是书名、作者、类别等描述书籍的基本信息统称,是书名、作者、类别等描述书籍的基本信息统称,“关关键字键字”则是代表书名、作者、出版社则是代表书名、作者、出版社其中之一,因此无需对其建模。其中之一,因此无需对其建模。“功能功能”、“新书籍新书籍”、“信息信息”、“记录记录”都是在描述需求时使用都是在描述需求时使用到的一些相关术语,并不是问题域的本质,因此不在考虑的范围。到的一些相关术语,并不是问题域的本质,因此不在考虑的范围。“计算机类计算机类”、“非计算机类非计算机类”是该系统中图书的两大分类,应该对是该系统中图书的

47、两大分类,应该对其建模,并改名为其建模,并改名为“计算机类书籍计算机类书籍”和和“非计算机类书籍非计算机类书籍”,以减少,以减少歧义。歧义。第第1 1章章 为问题域建概念模型为问题域建概念模型24“外借情况外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成个外借情况将组成“外借情况列表外借情况列表”,而外借情况中一个很重要的角色,而外借情况中一个很重要的角色是是“朋友朋友” 借阅主体。虽然本系统中并不需要建立借阅主体。虽然本系统中并不需要建立“朋友朋友”的资料的资料库,但考虑到可能需要列出某个朋友的借阅情况,因此还是将其列

48、为候库,但考虑到可能需要列出某个朋友的借阅情况,因此还是将其列为候选类。为了更好地表述,将选类。为了更好地表述,将“外借情况外借情况”改名为改名为“借阅记录借阅记录”,而将,而将“外借情况列表外借情况列表”改名为改名为“借阅情况列表借阅情况列表”。“购买金额购买金额”、“册数册数”都是统计的结果,即都是一个数字,故不必都是统计的结果,即都是一个数字,故不必建模,而建模,而“特定时段特定时段”是统计的范围,也不必建模;但要进行统计,是统计的范围,也不必建模;但要进行统计,必须有一个执行统计的主体,这让我们发现了一个在需求描述中隐藏必须有一个执行统计的主体,这让我们发现了一个在需求描述中隐藏的关键

49、类,即书籍列表。的关键类,即书籍列表。通过以上的分析,我们得到了一个候选类列表:通过以上的分析,我们得到了一个候选类列表:书籍书籍 计算机类书籍计算机类书籍 非计算机类书籍非计算机类书籍借阅记录借阅记录 借阅记录列表借阅记录列表 书籍列表书籍列表图图1.4 候选类列表候选类列表第第1 1章章 为问题域建概念模型为问题域建概念模型25至此,我们已经完成了概念建模的第一步工作。在实际工作中,这一至此,我们已经完成了概念建模的第一步工作。在实际工作中,这一步不要花费太多的时间,即按前面提及的第步不要花费太多的时间,即按前面提及的第7种发现类的方法,快速地种发现类的方法,快速地找出系统中的几个主类,以

50、便于我们对问题域有一个概要的了解。找出系统中的几个主类,以便于我们对问题域有一个概要的了解。1.2.3.1 1.2.3.1 继承(泛化)继承(泛化)不同类之间经常会存在相似性,两个以上的类也会经常共享相同的属不同类之间经常会存在相似性,两个以上的类也会经常共享相同的属性和性和/或相同的方法。因为我们并不想重复编写代码,那我们就要利用或相同的方法。因为我们并不想重复编写代码,那我们就要利用这种相似机制。继承就是这种机制。这种相似机制。继承就是这种机制。1.2.3 1.2.3 确定类之间的关系确定类之间的关系在对以上候选类建立关系之前,我们先简单地介绍与此相关的一些概念。在对以上候选类建立关系之前

51、,我们先简单地介绍与此相关的一些概念。第第1 1章章 为问题域建概念模型为问题域建概念模型继承是指子类可以拥有父类的全部属性和操作。继承是面向对象方法继承是指子类可以拥有父类的全部属性和操作。继承是面向对象方法的一个重要概念,是面向对象技术提高软件开发效率的一个重要原因。的一个重要概念,是面向对象技术提高软件开发效率的一个重要原因。在构建系统模型时,可以根据所涉及到的事物的共性抽象出一些基本在构建系统模型时,可以根据所涉及到的事物的共性抽象出一些基本类,并在此基础上根据事物的个性抽象出新的类(即子类)。子类既类,并在此基础上根据事物的个性抽象出新的类(即子类)。子类既具有父类的全部属性和操作,

52、又具有自己独特的属性和操作。父类与具有父类的全部属性和操作,又具有自己独特的属性和操作。父类与子类的关系为一般与特殊的关系。子类的关系为一般与特殊的关系。26第第1 1章章 为问题域建概念模型为问题域建概念模型继承继承(inheritanceinheritance)表示两个类之间是)表示两个类之间是“is ais a”、“is likeis like”或或“is is kind ofkind of(是(是的一种)的一种)”的关系。的关系。子类子类(subclasssubclass):如果类):如果类B B继承自类继承自类A A,我们说,我们说B B是是A A的子类。的子类。父类父类(super

53、classsuperclass):如果类):如果类B B继承自类继承自类A A,我们说,我们说A A是是B B的父类。的父类。继承机制具有特殊的意义。由于子类可以自动拥有父类的全部操作和继承机制具有特殊的意义。由于子类可以自动拥有父类的全部操作和属性,当我们在定义子类时,就不必重复定义那些在父类中已经定义属性,当我们在定义子类时,就不必重复定义那些在父类中已经定义过的属性和操作,只需要声明该类是某个父类的子类,从而可以将精过的属性和操作,只需要声明该类是某个父类的子类,从而可以将精力集中在定义子类所特有的属性和操作上。这非常有利于提高软件的力集中在定义子类所特有的属性和操作上。这非常有利于提高

54、软件的可复用性。可复用性。继承具有传递性。如果类继承具有传递性。如果类B B继承自类继承自类A A,而类,而类C C又继承了类又继承了类B B,则类,则类C C可以可以继承类继承类A A和类和类B B的全部属性和操作。即类的全部属性和操作。即类C C的对象除了具有该类新增的所的对象除了具有该类新增的所有特性之外,还具有全部父类的所有特性。有特性之外,还具有全部父类的所有特性。如果限定每个子类只能继承单独一个父类的属性和操作,则称这种继如果限定每个子类只能继承单独一个父类的属性和操作,则称这种继承为单继承;如果一个子类可以同时继承多个父类的属性和操作,这承为单继承;如果一个子类可以同时继承多个父

55、类的属性和操作,这种继承称为多重继承。种继承称为多重继承。27类类A(父类)(父类)类类B(子类)(子类)图图1.5 UML1.5 UML中继承的建模符号中继承的建模符号继承通过利用类间的相似性来复用已有的工作继承通过利用类间的相似性来复用已有的工作例如,学生都有姓名、住址、电话号码和私车。同时,教授也同样拥例如,学生都有姓名、住址、电话号码和私车。同时,教授也同样拥有这些东西。毫无疑问,我们可以开发有关学生和教授的类,让它们有这些东西。毫无疑问,我们可以开发有关学生和教授的类,让它们一起运行。实际上,仅需要先开发一起运行。实际上,仅需要先开发“StudentStudent”类,一旦它可以运行

56、了,类,一旦它可以运行了,制作一份拷贝,就叫制作一份拷贝,就叫“ProfessorProfessor”,并进行一些适当的修改。这样做,并进行一些适当的修改。这样做很容易,但并不完美。如果很容易,但并不完美。如果“StudentStudent”源码出现错误将会怎样?我们源码出现错误将会怎样?我们需要在两个地方改正错误。如果处理姓名的方法发生了变化(你把长需要在两个地方改正错误。如果处理姓名的方法发生了变化(你把长度从度从3030变成了变成了4040)又会怎样?同样要在两个地方作出改动。这真是让)又会怎样?同样要在两个地方作出改动。这真是让人觉得毫无兴趣的工作。如果仅有一份代码拷贝用于开发和维护,

57、这人觉得毫无兴趣的工作。如果仅有一份代码拷贝用于开发和维护,这样难道不更好吗?样难道不更好吗?第第1 1章章 为问题域建概念模型为问题域建概念模型28这就是继承。使用继承,就可以定义一个类来封装学生和教授间的相这就是继承。使用继承,就可以定义一个类来封装学生和教授间的相似性。新的类将有属性似性。新的类将有属性“namename”、“addressaddress”、“phoneNumberphoneNumber”以及方以及方法法“driveVehicledriveVehicle”。因为需要命名类,所以就要问问自己,数据和功。因为需要命名类,所以就要问问自己,数据和功能是什么?对于这个类,合适的类

58、名应该是能是什么?对于这个类,合适的类名应该是“PersonPerson”。一旦定义了一旦定义了“PersonPerson”类,就可以从它继承出类,就可以从它继承出“StudentStudent”和和“ProfessorProfessor”。可以说,。可以说,“PersonPerson”是是“StudentStudent”和和“ProfessorProfessor”的父的父类。任何父类知道和完成的事情,子类也知道。实际上,仅需要写两类。任何父类知道和完成的事情,子类也知道。实际上,仅需要写两行代码:一行表示行代码:一行表示“StudentStudent”是是“PersonPerson”的子类,

59、另一行表示的子类,另一行表示“ProfessorProfessor”是是“PersonPerson”的子类。因为的子类。因为“PersonPerson”有姓名、住址和电有姓名、住址和电话号码,话号码,“StudentStudent”和和“ProfessorProfessor”也有这些属性。因为也有这些属性。因为“PersonPerson”是是会开车的,这样会开车的,这样“StudentStudent”和和“ProfessorProfessor”也应该可以开车。也应该可以开车。PersonStudentProfessor图图1.6 1.6 对对“StudentStudent”和和“Profess

60、orProfessor”类从类从“PersonPerson”继承这个概念进行继承这个概念进行建模建模第第1 1章章 为问题域建概念模型为问题域建概念模型29继承技巧和技术继承技巧和技术下面的技巧和技术有助于有效地应用继承:下面的技巧和技术有助于有效地应用继承:1.1.寻找相似之处寻找相似之处。无论何时只要有两个以上的类有相似之处。无论何时只要有两个以上的类有相似之处相似的相似的属性或者是相似的方法,都会存在使用继承的可能性。属性或者是相似的方法,都会存在使用继承的可能性。2.2.寻找已有的类寻找已有的类。当确定一个新的类时,可能已经有了一个与其相似。当确定一个新的类时,可能已经有了一个与其相似

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论