目录
1、静态结构和关联关系
PIM-2的状态图和PIM-4的序列图,对PIM-3的类图,有不可或缺的贡献。从PIM-2的状态图中,系统分析员可以分析出定义于类内部的属性及操作。而由PIM-4的序列图,系统分析员可以产生更多的操作,以及说明操作的方法。
系统分析员可以将这些重要且稳定的业务概念,作为系统内部核心的静态结构
类(Class)与期间的"关联关系(Association)是类图的基本组成元素。在类内部,记载着对象可以保有的属性以及可以执行的操作。在关联关系的两端,标示出两端对象可以链接的多重性
关联关系是类之间最常见的关系,系统分析员可以通过检查下列两项条件,判断是否采用关联关系:
1)在企业领域的专业概念里,两种对象之间有一种固定不变且需要保存的静态关系。
2)在信息化时,系统会用到这些静态关系,而且必须将他们存到数据库
- 每一个基金账户底下,可以有零到多笔的申购交易,所以在申购交易端标示(*),代表一个基金账户对象可以链接零到多个申购交易对象
- 每个申购交易,只能登录在某一个基金账户底下,所以在基金账户端标示"1",代表一个申购交易对象只能链接一个基金账户对象
2、泛化关系
类之间还可能出现另一种"泛化关系(Generalization)"。系统分析员通过类定义属性和操作,所以日后针对同类的一群对象,就可以使用相同的方式对待它们。不过有时候,这些对象并不是全然相同,可能大部分的属性和操作相同,但是少部分的属性和操作却不同。这种情况下,类之间的泛化关系就派上用场。
例如,在基金模拟项目,申购交易可以细分为两种:单笔申购和定期定额申购。虽然,这两种交易对象有许多相同的特质,可是又不全然相同,各自都还有少部分独特之处。所以系统分析员可以定义3个申购类。相较起来,申购交易属于一般类,单笔申购与定期定额申购属于特殊类,如下图:
可以通过检查下列两项,判断是否采用泛化关系:
- 在企业领域的专业概念里,特殊对象必须"是一种"(a kind of)一般对象。
- 多种特殊对象里,有部分通用的属性和操作,也有部分独有的属性和操作。特殊类可以继承一般类里的通用属性和操作。
3、聚合关系和组合关系
我们来看看另外两项"聚合关系"(Aggregation)与"组合关系"(Composition):
- 聚合关系是一种特殊的关联关系,所以它继承了关联关系的特质,而且还独有"整体-部分"(Whole-Part)的特质。简言之,聚合关系两端的对象,需要具有Whole-Part的关系
- 组合关系是一种特殊的聚合关系,所以它继承了关联关系,以及聚合关系的"整体-部分"的特质,还独有全然拥有Part对象的特质
系统分析员可以通过检查下列四项条件,判断采用关联关系,聚合关系还是组合关系:
- 在企业领域的专业概念里,两种对象之间有一种固定不变且需要保存的静态关系。(关联关系的条件)
- 在信息化时,系统会用到这些静态关系,而且必须将它们存到数据库。(关联关系的条件)
- 在企业领域的专业概念里,两种对象之间有Whole-Part的静态关系。(聚合关系的条件)
- Part对象只能链接一个Whole对象,且Whole对象被销毁时,Part对象必须一块被销毁。
先看聚合关系的例子。在基金模拟项目中,有"基金开台"的功能。每一个基金开台可以设置多档自选基金,如此一来,投资人就可以同时观看并比较多档基金的报酬率。
关于基金开台与自选基金之间的聚合关系,系统分析员做如下的思考:
- 基金开台与自选基金之间的关系,固定不变,且在该基金看台被整个删除,或者某自选基金从该基金看台除名之前,两者之间的关系需要被永久保存下来。(符合上述条件1)
- 基金看台聚集了多档自选基金。自选基金是基金开台很重要的一项元素,而且可以说,如果没有自选基金,基金开台几乎也就失去了存在价值。所以两者之间有着Whole-Part的特质,基金开台是Whole,自选基金是Part。(符合上述条件3)
- 每个基金看台底下,可以有零到多档的自选基金。所以,在自选基金端标示(*),代表一个基金看台对象可以连接零到多个自选基金对象。
- 每一档自选基金,可以设定多个基金看台底下。所以,在基金看台端标示(*),代表一个自选基金对象可以连接零到多个基金看台对象。
接着,看看组合关系的例子。在基金模拟项目中,定期定额申购是很重要的概念。投资人约定了定期定额申购之后,银行每月就会按照约定自动成立一笔小的申购交易,而且每期申购的基金单位都会被累加在一起。特别是,自动成立的定期小交易没有自己的凭证号码,而是共有原先定期定额申购约定时的凭证号码。
针对定期定额申购与单期交易之间的组合关系,系统分析员做了如下的思考:
- 定期定额申购与单期交易之间的关系,固定不变且需要被永久保存下来。(符合上述条件1)
- 由于定期定额申购与单期交易之间的关系需要被保存下来,所以会被存到数据库里。(符合条件2)
- 客户约定了定期定额申购之后,每月就会按照约定自动生成一笔小额的申购交易,所有的单期交易都归属于同一个定期定额申购交易底下,两者之间有着Whole-Part的特质,定期定额申购时Whole,单期交易是Part。(符合上述条件3)
- 每一个单期交易对象只能连接一个定期定额申购对象,且定期定额申购对象被销毁时,单期交易对象必须一块被销毁。(符合条件4)
- 每一个定期定额申购底下,可以有零到多个的单期交易。所以,在单期交易端标示(*),代表一个定期定额申购对象可以连接零到多个单期交易对象。
- 每一个单期交易,只能隶属于一个定期定额申购底下。所以,在定期定额申购端标示(1),代表一个单期交易对象只能连接一个定期定额申购对象。
4、善用交易模式
在多数的企业领域中,"交易(Transaction)通常是一项很重要的业务概念,而且一旦交易发生,也经常需要保存相关的交易数据。《Object Models:Strategies,Pattern and Application》一书中提出一个以交易为主的静态结构,称之为"交易模式"(Transaction Patterns)。如下图:
系统分析员善用交易模式,将有助于建构以交易为主的类图。以基金模拟项目为例,套用交易模式,如下图:
交易模式通常不会适用所有的情况,所以套用之后,可能会需要调整,系统分析员做如下调整:
- 同一个定期定额申购底下,所有单期交易都是申购相同的基金,所以将原先的"基金-单期交易"改为"基金-定期定额申购"。
- 建立申购交易与单笔申购,定期定额申购之间的泛化关系。
- 投资人,银行分行和基金账户与定期定额申购之间的关联关系,全部改为连接申购交易。
5、PIM-2=》PIM-3如何找操作
从PIM-2状态图--->PIM-3类图的操作机属性,系统分析员可以通过以下建议,找到操作及属性:
- 状态内部的所有动作,以及所有转化在线的动作,都可以考虑为他们定义操作,如下图:
- 所有状态动作及转化动作会使用个到的数据,都可以考虑为他们定义属性。
- 与该类有泛化关系与组合关系的其他类,可以同时考虑他们的操作及属性。
- 有些属性或操作可能是其他对象的,请将它们归还给所属的类
6、PIM-2=》PIM-3如何找属性
针对每一个操作,系统分析员找到下述可能用到的属性
- 设定交易数据() 申购日期、信托金额、扣款账号、凭证号码、扣款日期、投资金额。
- 计算交易金额() 投资金额、手续费、基金管理费、银行折扣。
- 产生交易编号() 凭证号码。
- 设定状态() 扣款情况(正常扣款、暂停扣款、终止扣款)。
- 扣款() 交易金额(投资金额+手续费)。
- 累计失败次数() 失败次数。
- 关闭定期定额交易() 终止日期、扣款情况(终止扣款)。
最后,系统分析员进行调整,调整细节如下:
。计算可申购单位数() 单期交易->申购交易。
。银行折扣 申购交易->银行分行
。基金管理费 申购交易->基金
。库存单位数 申购交易。
系统分析员优先找操作,进行PIM-3时,可以通过下列步骤,建立类图:
1)套用交易模式,并且经过调整之后,系统分析员可以获得初步的静态结构
2)分析PIM-2的状态图之后,可以为类增加属性及操作
3)分析PIM-1搜集来的窗口,系统分析员可以为类增加更多的属性
4)经过PIM-4的序列图,系统分析员可以为类增加更多的操作,并且描述操作的方法。