(1) 冗余类:若两个类表述了同一个信息 ,保留最富有描述能力的类。如"用户"和"顾客"就是重复的描述,因为"顾客"最富有描述性,因此保留它。 (2) 不相干的类:除掉与问题没有关系或根本无关的类。例如,摊派费用超出了银行网络的范围。
# j$ `9 e* E+ m* u. \7 ` (3) 模糊类:类必须是确定的,有些暂定类边界定义模糊或范围太广,如"记录保管"就模糊类,它是"事务"中的一部分。0 L6 z5 X( I# `- Y1 J" V
(4) 属性:某些名词描述的是其他对象的属性,则从暂定类中删除。如果某一性质的独立性很重要,就应该把他归属到类,而不把它作为属性。
- B: h9 G5 L) E0 u2 E7 G9 I (5) 操作:如果问题陈述中的名词有动作含义,则描述的操作就不是类。但是具有自身性质而且需要独立存在的操作应该描述成类。如我们只构造电话模型,"拨号"就是动态模型的一部分而不是类,但在电话拨号系统中,"拨号"是一个重要的类,它日期、时间、受话地点等属性。9 {4 z. Q( z! z
在银行网络系统中,模糊类是"系统"、"安全措施"、"记录保管"、"银行网络"等。属于属性的有:"帐户数据"、"收据"、"现金"、"事务数据"。属于实现的如:"访问"、"软件"等。这些均应除去。
% b, w/ N, @! U 2.准备数据字典
% y# i W/ `7 F. L+ @5 w }. ^/ R _ 为所有建模实体准备一个数据字典。准确描述各个类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制。5 z! g! m6 w5 T. T1 i5 e
3.确定关联
' y" n: B" s; z+ P 两个或多个类之间的相互依赖就是关联。一种依赖表示一种关联,可用各种方式来实现关联,但在分析模型中应删除实现的考虑,以便设计时更为灵活。关联常用描述性动词或动词词组来表示,其中有物理位置的表示、传导的动作、通信、所有者关系、条件的满足等。从问题陈述中抽取所有可能的关联表述,把它们记下来,但不要过早去细化这些表述。, p, p" R$ v7 G: @1 Y
下面是银行网络系统中所有可能的关联,大多数是直接抽取问题中的动词词组而得到的。在陈述中,有些动词词组表述的关联是不明显的。最后,还有一些关联与客观世界或人的假设有关,必须同用户一起核实这种关联,因为这种关联在问题陈述中找不到。' G$ G- M' v' z+ V; w; p
银行网络问题陈述中的关联:1 g* Q! ~, X5 G6 s9 o3 y. |
·银行网络包括出纳站和自动出纳机;% [ O o0 i3 U+ X8 P M* [' P
·分行共享自动出纳机;9 I( `1 p# z7 a8 {: i( u/ y
·分理处提供分理处计算机;
: W a' I* ?1 _7 x7 E3 p) D ·分理处计算机保存帐户;
7 ~1 f5 d* f" b- _ ·分理处计算机处理帐户支付事务;
: d6 R8 n% B; n2 i- y" f& [3 v8 g% K ·分理处拥有出纳站;6 d) d3 ?% v9 z& a9 u
·出纳站与分理处计算机通信;, t6 Z. i: l. W6 {8 i0 I! _3 a( x
·出纳员为帐户录入事务;
6 f$ f3 x' Q% t! K ·自动出纳机接受现金卡;7 L- `* A# A% z5 J- D) h
·自动出纳机与用户接口;
+ ^! |; Q% s( Q1 R2 x9 K ·自动出纳机发放现金;
) L& Z5 i2 n& N, G$ c/ l G ·自动出纳机打印收据;
- u2 y/ z( m$ Y! m# ~, n ·系统处理并发访问;
9 y5 n. J) p3 w( r. Q ·分理处提供软件;
* ^2 V1 D f0 d) Y. Y ·费用分摊给分理处。
" a9 b4 q- S7 ] 隐含的动词词组: f' x( h. W3 K* {! N
·分行由分理处组成;
8 {# v! J: U& r9 x% J ·分理处拥有帐户;
* d: R6 }: I! S ·分行拥有分行计算机;
; L" `$ d2 V7 x; \ ·系统提供记录保管;
$ E/ s5 c" M: k7 p ·系统提供安全;
9 k, E1 y. x( S, d( m: S3 O ·顾客有现金卡。8 l' Q: M, b' H, H9 y& ^1 F3 Y5 W
基于问题域知识的关联:
5 p& ~. o5 c' D7 g" L* b3 q ·分理处雇佣出纳员;
3 p5 D5 S! V1 m/ \% b ·现金卡访问帐户。
, f' O y9 @6 m! g) x6 p# N 使用下列标准去掉不必要和不正确的关联:
, `# a+ x- a3 E5 e (1) 若某个类已被删除,那么与它有关的关联也必须删除或者用其它类来重新表述。在例中,我们删除了"银行网络",相关的关联也要删除。' @( K/ }. n" Y3 M* A
(2) 不相干的关联或实现阶段的关联:删除所有问题域之外的关联或涉及实现结构中的关联。如"系统处理并发访问"就是一种实现的概念。& C& ?% P0 M* ^; y/ `) r
(3) 动作:关联应该描述应用域的结构性质而不是瞬时事件,因此应删除"自动出纳机接受现金卡","自动出纳机与用户接口"等。- Y6 G7 d5 H: s0 t" T0 ^
(4) 派生关联:省略那些可以用其他关联来定义的关联。因为这种关联是冗余的。银行网络系统的初步对象图如图10-20所示。其中含有关联。 |