《UML和模式应用》读书笔记 1

《UML和模式应用》读书笔记 1

 

第1章 面向对象分析和设计

 

面向对象分析和设计是面向对象活动的子集。在面向对象开发中,最重要的是合理地为软件对象分配职责。这对软件的健壮性、可维护性、可重用性具有重要的影响。

 

分析和设计有非常紧密的关系,但同时二者的区别也非常明显。分析(analysis)强调的是对问题和需求的调查研究,不包括解决方案。设计(design)强调的是满足需求的概念上的解决方案。实现(程序源代码)表达了真实和完整的设计。面向对象分析(object-oriented analysis)强调的是在问题领域内发现和描述对象(或概念)。面向对象设计(object-oriented design)强调的是定义软件对象以及它们的协作方式。

 

一个完整的面向对象分析和设计过程,通常包含以下4个步骤:定义用例、定义领域模型、分配对象职责并定义交互图、定义设计类图。第1个步骤属于分析过程,后面3个步骤属于设计过程。下面用一个简单的骰子游戏来展示面向对象分析设计的完整过程。

 

首先是定义用例。用例(use case)记录了用户如何使用软件的情节或场景。用例是需求分析中一种非常有效的工具。在骰子游戏中,用例可以用下面的话来描述:

 

骰子游戏:游戏者请求掷骰子。系统展示结果:如果骰子的总点数是7,则游戏者赢;否则游戏者输。

 

接下来要定义领域模型。面向对象分析的特点是从对象的角度来建立领域描述。面向对象分析需要识别(区分)重要的概念、属性和关联,并将这些表示为领域模型(domain model)。领域模型关注的是真实世界中的概念,而不考虑软件对象。在骰子游戏中,可以看到有3个概念:“玩家(Player)”、“骰子(Die)”和“游戏(DiceGame)”。玩家具有属性“名字(name)”和行为“掷(rolls)”。骰子具有属性“点数(faceValue)”。三者之间的关系是:一局游戏包含一个玩家和两个骰子,玩家掷两个骰子。这些关系可以用下图来表示:

领域模型用于描述问题领域结构(概念及概念之间的关联)。领域模型是静态的,不关注系统行为或子系统的行为。在骰子游戏中,玩家的行为“掷”出现在领域模型里,这是因为玩家和骰子是通过行为“掷”关联起来的。作为一种关联,“掷”是领域结构的一部分。但是领域模型不关注“掷”这个行为本身,也不关注这个行为产生的结果和影响。

 

接下来需要分配对象职责并定义交互图。这里有一点要特别注意:软件设计可以从真实世界中获取灵感,但软件不一定是真实世界的直接建模或模拟。在骰子游戏中可以建立两个软件对象:骰子游戏(DiceGame)和骰子(Die)。游戏负责“掷”骰子,骰子负责展示点数。

 

在为软件对象分配职责之后,可以绘制交互图。这里主要使用的是时序图(sequence diagram)。时序图展示了软件对象之间的消息流。骰子游戏的时序图如下:

最后是定义设计类图(class diagram)。类图用于描述软件对象。下面是骰子游戏的类图:

 

在完成定义设计类图工作后,分析和设计工作就完成了(或者说完成了一次分析设计迭代)。从上面的介绍可以看出,面向对象分析设计工作,各阶段的工作产出物分别是用例、领域模型、时序图和类图。

 

这里要对“类(class)”这个术语做一些说明。在定义交互图和类图时,需要使用软件类(software class)来表示一个软件对象。软件类关注对应软件对象的规范。按照这个规范编写的代码,称为实现类(implementation class)。实现类是Java或其他面向对象编程语言中的类。有时,领域概念(domain concept)也被称为概念类(conceptual class)。概念类表示真实世界中的事务或概念。软件类、实现类、概念类都可以简称为类。术语“类”的具体含义,要根据上下文确定。

 

转载于:https://my.oschina.net/u/131191/blog/1581771

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页