UML面向对象建模与设计(第二版)笔记——第三部分:实现
1.实现
实现阶段是对前面设计的结果用具体的语言表示的结果。在写代码的时候我们会增加一些细节。首先我们应该解决超出语言层面的那些实际问题。那些内容别成为实现建模。包括了以下几个步骤:
1.1.微调类
微调类可以帮助简化开发工作,改进性能。实现的目标是让分析和设计出来的模型变成现实。所有,如非有急迫的理由,则不要改变设计模型。可以改变的主要原因有:
1.拆分类
2.合并类
3.拆分/合并属性
4.提升属性/降低类
1.2.微调泛化
1.3.实现关联
关联给类模型提供了对象间的访问路径。我们必需描述实现策略,要么是选择一套的全局策略,一致实现所有的关联,幺妹就为每种关联选择一套专用拘束,同时考虑到程序使用它的方式。
分析关联遍历。在原型工作汇总,我们会使用双向关联,这样可以增加新的行为,快速修改应用程序。在生产工作中,我们会优化一些关联。不管怎样,我们都应该隐藏实现的内容,使用访问方法遍历和更新关联。这样会是决策变动变得更加容易。
单向关联:如果关联智能在一个方向上遍历,就把他实现成指针,也就是包括对象应用的一条属性。如果多重性是“1”,那么就是简单的指针,如果多重性是“多”,那么就是一组指针。
双向关联:双向关联又3种实现方式。
1.单想实现关联,用指针实现一个方向,在需要反向遍历时,执行一次搜索。这个方法只有在两个方向上的遍历记率相差很大,且最小化存储和更新成本的时候才是有效的。
2.双向实现关联。把两个方向都实现成指针,这个方法允许快速访问,但只要一个方向更新,另一个方向也必须更新以维持一致性。
3.用关联对象来实现。独立于任何一个类,用不同的关联对象来实现。关联对象是一组关联对象对(限定三元组),存储在单个大小可变的对象中。为了效率,我们可以用两个词典对象来实现关联对象,一个用做正向,一个用做反向。如果使用散列表,访问时间就是常熟级别的。
高级关联:实现高级关联的技术有:
1.关联类。通常做法是把关联提升为类。
2.有序关联
3.序列
4.包
5.限定关联
6.n元关联
7.聚合
8.组合
2.测试
测试是一种质保机制,用来捕获残留的错误,而且,测试也提供了一套独立的软件质量度量方法。
在开发的每个阶段都需要测试,而不是只在实现阶段才测试。在分析阶段,通过提出问题,检查模型给出的答案来测试是否符合用户的期望。在设计阶段,要测试架构,模拟器性能。在实现阶段,测试真实代码,模型充当遍历路径的向导。
开发者首先应该先进行单元测试,测试自己的代码,类,方法。接着进行集成测试,及如何把类和方法配合起来。采用渐进的方法来完成集成测试,逐步增加领域的行为代码模块,借此把代码集成在一起。最后是系统测试检查整个应用程序。
3.数据库设计
关系数据库管理数据表和关联结构,可以实现UML模型。
数据库管理系统(DBMS)可以代替大部分应用程序代码,实现复用。DBMS的优势:
1.数据保护,可以防止偶然性情况的数据丢失。
2.效率。DBMS有可以管理大量数据的高效算法。
3.在用户之间共享。
4.在应用程序之间的共享。
5.数据质量。需要满足规则,DBMS能够在应用程序提供的设施之上控制数据质量。
6.数据分布。可以跨越不同的站点,组织和硬件平台切分数据。
7.安全性。可以限制到授权用户的读写。
在从UML类图转化为关系型数据库时:
3.1.类
我们应该把每个类映射成一张表。属性映射为列,也可以增加表列,表示对象的标识符和关联。注意,操作不会影响到标的结构。
3.2.关联。
1>.多对多的关联
用一张表来实现,让关联的主键成为类主键的组合。
2>.一对多的关联
对于“多”方的类,每一个都会变成隐藏于表中的外键。如果在关联“一”段有名字,我们会把他作为外键名。
3>.一对一的关联
可以用任何一张表中隐藏一个外键来处理
4>.关联类
做成一张表,类似于多对多。
5>.限定关联
限定关联遵循于没有限定符的下层关联相同的规则。可以用一对多的关联来处理。
3.3.泛化
最简单的方法是把父类和子类每个都映射成一张表。
3.4.标识
对象标识(常用方法):在每个类表中增加一条人工数字属性(对象ID),作为主键。每张关联表的主键都有相关类的标识符组成。对象标识具有属性单一,长度小而一致的特点。
基于值的标识:是使用真实世界的一些组合来表示每个对象。每张关联表的主键都有相关类的主键组成。
推荐使用对象标识符。