面向对象原理与技术(2)

2018-12-27 20:07

把参与者放到用例图中,并说明与用例之间的关联 为何用例图可对系统需求建模?

需求是一个系统所需的特征、性质或行为。

一个设计良好的系统应能可预料地、可靠地完成所有需求。 大多数需求可用用例图表示

? 识别参与者来建立系统的语境

? 考虑每个参与者需求系统提供的行为。 ? 把重要的行为命名为用例 ? 分解公共行为,异常行为

? 对用例、参与者以及关联关系建模 ? 增加注解以说明非功能性需求。

用例图如何支持正向工程和逆向工程? 用例图不能直接进行正向或逆向工程。 正向工程Forward Engineering 用例图作为设计和测试的指南。 良好的用例可说明前置条件和后置条件,可定义测试的初态和成功的标准。 逆向工程Reverse Engineering 只能手工进行。

3 基本结构建模:类和类图

3.1 类

如何对类命名?

命名(name) 简单名,路径:包名::子包::类名 语义:被建模系统的词汇表中提取出来的名词或名词短语。 语法:字符、数字及其它符号构成的字符串,首字符大写。 属性是什么?如何确定类的属性?

属性(attribute):对类中每个对象所包含的某一种数据或状态的抽象。 一个对象在特定时刻在每个属性上都有确定值。 语义:表示类的特征的名词或名词短语。 语法:可仅表示属性名,也可详细描述:类型、缺省值等。 属性名[:类型[ = 缺省值]] 首字符小写,而后面其它词的首字符大写。 操作是什么?如何确定类的操作?

操作(operation):该类所有对象所能做的事情的抽象。

调用操作可改变对象的数据或状态,或可访问对象内部的数据或状态。

语义:表示类的特征的动词或动词短语。 语法:操作名,首字符小写,而后面其它词的首字符大写 visibility name ( parameter-list ) : return-type-expression { property-string }

每个操作在类中唯一基调(signature)。每个参量的格式: kind name : type-expression = default-value

构造型<><><>可对操作分组。

类的职责是什么?如何表示?

职责(responsibility) 一个类的一项约定(contract)或一项义务(obligation)。

从更高抽象角度看,属性和操作是完成职责的特征。每个类至少有一项职责。 细化模型时类的各项职责要转化为完成职责的属性和操作。

相关技术:CRC(Class-Responsibilities-Collaborators)卡片和基于用例的分析 语法:注释,自由文本(短语、单句、短文),类底部框中,注解方式。

接口是什么?如何表示?

接口interface,一组操作的一个命名的集合,表示某些元素的行为特征。 接口描述行为规范,但不描述行为如何实现。由一组类提供接口的实现。 类可实现接口,即根据操作的基调,提供具体的实现方法method。

语法:圆圈;方框(可描述各操作的基调signature)。 如何对类进行建模?

如何组织属性和操作?

可省略;可用构造型(stereotype)分组。

如何对系统的词汇建模?

? 识别描述问题和解决方案的事物,用CRC或用例来发掘。

? 识别每个抽象的职责集合,确切定义每个类,且使职责在类之间均衡。 ? 确定为实现每个类的职责所需的属性和操作。

如何对系统中的职责分布建模? 均衡的职责分布,每个类应做好一件事。

? 识别为完成某些行为而紧密协同工作的一组类。 ? 对每个类识别其职责。

? 整体上审查各类职责,职责过多应分解,过少则应合并,重新分配职责。 ? 从类之间协作的角度,重新分配各自职责。

如何对非软件事物进行建模? 并非所有抽象都对应软件的实现。扮演特定角色的人和硬件也能抽象为类。

? 广泛抽象,描述其职责和特征。

? 可使用构造型(stereotype)来使其详细描述和可视化。 ? 对包含软件的硬件,可建模为节点(node)。

如何对初等/简单类型进行建模? 编程语言中的简单类型,如char, int, float, String,以及自定义枚举类型等

? 可用构造型来描述。

? 可用约束来描述值的范围(值域)

提示

对最终用户或软件实现者,每个类都应该映射到某个真实的或概念上的抽象。 如何建立一个结构良好的类?

? 对来自问题域和方案域的词汇所表示的事物进行明确抽象。 ? 嵌入一个较小的、但明确定义的职责集合,并能很好实现。 ? 把抽象的规格说明和具体的实现过程明确分开。 ? 简单、易理解、可适应性、可扩展性。

3.2 关系

类之间主要有哪些关系? 依赖、泛化和关联。

依赖是什么?如何对依赖关系建模?

依赖(dependence) 区分独立元素(被依赖元素)和依赖元素。 语法:虚线箭头从依赖元素到独立元素。可命名。 语义:通常指行为上的依赖,确定独立元素的某个操作的基调,use关系。 泛化是什么?如何对泛化关系建模?

泛化(generalization) 区分较一般的元素(超类)和较特殊的元素(子类)。 语法:实线空心箭头从子类到超类,不命名 语义:子类is-a-kind-of超类。

子类对象可替代超类对象;

子类继承超类特征且可增加新特征;

子类操作的基调与超类相同时,子类可改写(override)超类的实现。 根类/基类----叶子类 单继承---多继承

关联是什么?如何对关联建模?

关联(association) 对象间结构关系,导航方向。 二元Binary关联、n元(n-ary)关联 语法:实线连接加说明 命名:名称及方向,区分多个关联的性质(关联的角色)。 角色role:关联中的一方对于另一方的职责的识别和命名 多重性multiplicity:对象之间定量的结构关系。 聚集aggregation:表示部分和整体关系。Has-A 空心菱形 共享聚集和复合聚集

复合composite:实心菱形

注意:依赖和关联是自反的,而泛化则反自反。

如何对关系进行建模?

如何对简单依赖进行建模? 类A中的某操作的基调包含另一个类B作为参量类型。 如何对继承建模?

1. 在一组类中两个和两个以上类的共同职责、属性和操作 2. 抽象为一个更一般的类,或建立新类 3. 确定泛化关系

注意:区别抽象类(斜体表示)和具体类。 什么是抽象类?什么是具体类? 不能直接实例化的类为抽象类;可直接实例化的类是具体类。 一个抽象类往往是若干具体类的抽象,以管理这些具体类的共同特征。 如何对结构关系建模? 注意:依赖和泛化都是单方向的,而关联大多是多方向的。

? 数据驱动:若一对类之间有导航,则建立关联。 ? 行为驱动:若需与其它类交互,不作为操作参量且在交互前存在,则建立关联。 ? 说明关联的名字、多重性和角色。

? 若关联的一端有明显的整体结构或组织,而另一端是部分,则聚合。

提示:

? ? ? ? ? ?

仅当被建模关系不是结构关系时,才考虑依赖关系。 仅当is-a-kind-of,才使用泛化关系。

避免可能的多继承,一般可用聚合代替多继承。 避免泛化的循环。

保持泛化关系的平衡。深度和宽度。 描述对象间的结构关系应以关联为主。

3.3 公共机制

公共扩展机制General Extension Mechanism是什么? 注解、构造型、标记值、约束。 注解是什么?如何表示?

注解note: 包含文字信息的一种图形符号。

一种修饰,以说明更多语义(约束、注释、方法体、标记值等)。

除note外还有其它修饰。如描述类的职责所用的附加栏。表示方法。

构造型stereotype是什么?

从效果看,一个构造型是在建模时引入的元模型元素的一种新类。 表示一个已有元模型元素的一个子类,与其具有相同形式(属性和关系),但有不同用意。 可附加约束或标记值tagged value。 UML的一种内置的扩展机制。 表示方法:<> 加图标 标记值tagged value是什么?

语义:可看作为元数据,做用于类本身,而不是类的每个实例。 详述与代码生成或配置管理相关的特性。如编程语言、作者、版本、日期等。 语法:{标记tag=值value;……} 约束constraint是什么? 某种语义条件或限制。

语法:{文本 / OCL, Object Constraint Language}

如何使用公共机制进行建模? 如何对注释建模?

? 建立注释,连接到元素。

? 使用工具时,可能选择隐藏注释

? 长文本或更复杂的内容,可连接到外部文档。 ? 模型演化,注释也变化

如何对新构造单元建模? 先确认基本UML元素和已提供标准构造型能否表达一种新事物。 选择一个基本UML事物,与你的事物特征最相近,命名建立一个构造型。 构造型可能具有一定的泛化层次。 对构造型定义标记值和约束,以规范其特征和语义。 定义一个新图标,以清晰形象地表示。 如何对新特征建模? 构造单位的基本特征若不能表达,需要用标记值扩展基本构造单位的特征。

先确认基本UML构造单位和标准标记值是否要求。 对基本UML构造单位或构造型增加新特征。 为一种元素定义的标记值,将扩展到它的子孙。 如何对新语义建模? 先确认基本UML语义无法表达或需修改UML规则,且标准约束也无法表达。 以约束形式把新的语义写成文本,用依赖把约束连接到相应元素上。 更精确更形式化的描述,用OCL。 提示 注解 仅用注解表示UML不能表达的情形,如需求、观察资料、评论和解释。 把注解作为一种电子粘贴便笺,以便跟踪工作进展 扩展 项目中构造型、标记值和约束的标准化,应避免过多过滥的扩展。 为构造型、标记值选择简短有意义的名称。

3.4 类图

类图是什么?

表示一组类、接口、协作、依赖、泛化和关联关系,注解和约束。 类图中可有包或子系统,用于将模型元素进行分组。 类图中可表示实例。 用法:

? 对系统的词汇建模

? 对简单协作建模。类不是单独存在,要与其它类协作以完成更强功能。 ? 对数据库模式建模

如何对简单协作建模?

每个类图应注重表达一种协作关系

? 识别被建模的机制。一种机制描述了部分系统的功能和行为,需要群体内交互。 ? 对每种机制,识别参与协作的类、接口及其它协作,识别其间关系。 ? 用剧情scenario排演这些协作,以发现遗漏和错误。

? 建立元素间关系,聚集起来,职责平衡,逐渐转换为具体属性和操作。 如何对数据库模式建模?

永久对象,关系数据库/混合式数据库,类图是ER图超集。

行为:可实现为存储过程或触发器 ? 识别永久对象

? 建立类图,标注为{persistent},UML标准标记值 ? 展开结构细节,属性,关联和多重性,限制泛化 ? 简化设计,建立中间抽象逻辑。

? 展开行为细节,维护内部数据存储完整性,业务规则更上一层。 ? 可使用工具,转为物理设计。

正向工程和逆向工程

模型与软件之间相匹配,且保持同步的代价应最小,甚至取消。 UML->OOPL(Java/C++/ObjectPascal/Smalltalk…) 正向工程Forward Engineering 模型到代码的过程,UML到编程语言的过程。信息损失,如协作、交互


面向对象原理与技术(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:贵州大学新任处级领导干部

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: