a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 161|回复: 3

[系统分析师] 2011年软考系统分析师整理资料:面向对象(6)

[复制链接]
发表于 2012-8-2 08:48:37 | 显示全部楼层 |阅读模式
 六、面向对象的分析  面向对象分析的目的是对客观世界的系统进行建模。本节以上面介绍的模型概念为基础,结合“银行网络系统”的具体实例来构造客观世界问题的准确、严密的分析模型。8 W( q( W7 _. M3 D9 ?/ F& r
  分析模型有三种用途:用来明确问题需求;为用户和开发人员提供明确需求;为用户和开发人员提供一个协商的基础,作为后继的设计和实现的框架。
* z3 w8 _8 [: Y' A& N# [# W8 S# Q! q  (一) 面向对象的分析3 b' c* ^' K$ _: H$ i
  系统分析的第一步是:陈述需求。分析者必须同用户一块工作来提炼需求,因为这样才表示了用户的真实意图,其中涉及对需求的分析及查找丢失的信息。下面以“银行网络系统”为例,用面向对象方法进行开发。
. N9 l- T5 I. @  银行网络系统问题陈述: 设计支持银行网络的软件,银行网络包括人工出纳站和分行共享的自动出纳机。每个分理处用分理处计算机来保存各自的帐户,处理各自的事务;各自分理处的出纳站与分理处计算机通信,出纳站录入帐户和事务数据;自动出纳机与分行计算机通信,分行计算机与拨款分理处结帐,自动出纳机与用户接口接受现金卡,与分行计算机通信完成事务,发放现金,打印收据;系统需要记录保管和安全措施;系统必须正确处理同一帐户的并发访问;每个分处理为自己的计算机准备软件,银行网络费用根据顾客和现金卡的数目分摊给各分理处。/ v% P) p& w. a( t/ Z
  (二)建立对象模型
. q7 r8 s" P! f- H% t/ x  首先标识和关联,因为它们影响了整体结构和解决问题的方法,其次是增加属性,进一步描述类和关联的基本网络,使用继承合并和组织类,最后操作增加到类中去作为构造动态模型和功能模型的副产品。
  L3 s; h9 T+ r/ h  1.确定类9 \! l  E/ O3 S( U
  构造对象模型的第一步是标出来自问题域的相关的对象类,对象包括物理实体和概念。所有类在应用中都必须有意义,在问题陈述中,并非所有类都是明显给出的。有些是隐含在问题域或一般知识中的。
& X7 _) ^! g! D7 J2 t/ @  查找问题陈述中的所有名词,产生如下的暂定类。5 J  I& b! ]$ h7 e! \( P3 c# `3 d
  软件 银行网络 出纳员 自动出纳机 分行
) N" Q% h) i) D. X4 A* |9 }& _  分处理 分处理计算机 帐户 事务 出纳站
5 P& p7 o8 L( a  事务数据 分行计算机 现金卡 用户 现金
/ J7 Q4 J( _  s9 R: Q) n! X( h: _6 {  收据 系统 顾客 费用 帐户数据2 g( `& Q, Q) O7 T+ R' \& c
  访问 安全措施 记录保管
2 n; |  f1 m' c7 R  根据下列标准,去掉不必要的类和不正确的类。
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:48:38 | 显示全部楼层

2011年软考系统分析师整理资料:面向对象(6)

(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所示。其中含有关联。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 08:48:39 | 显示全部楼层

2011年软考系统分析师整理资料:面向对象(6)

4.确定属性  属性是个体对象的性质,属性通常用修饰性的名词词组来表示.形容词常常表示具体的可枚举的属性值,属性不可能在问题陈述中完全表述出来,必须借助于应用域的知识及对客观世界的知识才可以找到它们。只考虑与具体应用直接相关的属性,不要考虑那些超出问题范围的属性。首先找出重要属性,避免那些只用于实现的属性,要为各个属性取有意义的名字。按下列标准删除不必要的和不正确的属性:( X  U* L9 g  `# x
  (1) 对象:若实体的独立存在比它的值重要,那么这个实体不是属性而是对象。如在邮政目录中,"城市"是一个属性,然而在人口普查中,"城市"则被看作是对象。在具体应用中,具有自身性质的实体一定是对象。
; ~5 q" D% p3 V& r  Y$ N6 W) p  (2) 定词:若属性值取决于某种具体上下文,则可考虑把该属性重新表述为一个限定词。
+ P) j) i9 x4 Q9 x  (3) 名称:名称常常作为限定词而不是对象的属性,当名称不依赖于上下文关系时,名称即为一个对象属性,尤其是它不惟一时。5 a# U/ i* T+ X/ n- l2 `2 }
  (4) 标识符:在考虑对象模糊性时,引入对象标识符表示,在对象模型中不列出这些对象标识符,它是隐含在对象模型中,只列出存在于应用域的属性。! B7 c6 @# U. c; H
  (5) 内部值:若属性描述了对外不透明的对象的内部状态,则应从对象模型中删除该属性。
- P7 R( m# k) v4 e" H" h  (6) 细化:忽略那些不可能对大多数操作有影响的属性。- {: u2 W& q" `, ?: O
  5.使用继承来细化类
3 L/ X* k7 q' d$ t' W  使用继承来共享公共机构,以次来组织类,可以用两种方式来进行。# _$ R7 t+ O4 K4 q
  (1) 自底向上通过把现有类的共同性质一般化为父类,寻找具有相似的属性,关系或操作的类来发现继承。例如"远程事务"和"出纳事务"是类似的,可以一般化为"事务"。有些一般化结构常常是基于客观世界边界的现有分类,只要可能,尽量使用现有概念。对称性常有助于发现某些丢失的类。( {( v% M  T5 v4 z8 }+ g3 G
  (2) 自顶向下将现有的类细化为更具体的子类。具体化常常可以从应用域中明显看出来。应用域中各枚举字情况是最常见的具体化的来源。例如:菜单,可以有固定菜单,顶部菜单,弹出菜单,下拉菜单等,这就可以把菜单类具体细化为各种具体菜单的子类。当同一关联名出现多次且意义也相同时,应尽量具体化为相关联的类,例如"事务"从"出纳站"和"自动出纳机"进入,则"录入站"就是"出纳站"和"自动出纳站"的一般化。在类层次中,可以为具体的类分配属性和关联。各属性和都应分配给最一般的适合的类,有时也加上一些修正。' {( \- b. J* H9 \6 ?, N
  应用域中各枚举情况是最常见的具体化的来源。: u7 {% g# H# m( K. i
  6.完善对象模型$ k# B6 M7 A9 i2 e( d' k! ^) H
  对象建模不可能一次就能保证模型是完全正确的,软件开发的整个过程就是一个不断完善的过程。模型的不同组成部分多半是在不同的阶段完成的,如果发现模型的缺陷,就必须返回到前期阶段去修改,有些细化工作是在动态模型和功能模型完成之后才开始进行的。5 Q- [2 R1 D$ ~! g0 F) p7 q
  (1) 几种可能丢失对象的情况及解决办法:
0 }+ S0 v/ ]( ?5 k  ·同一类中存在毫无关系的属性和操作,则分解这个类,使各部分相互关联;
! Y; N& m* b6 \1 z  ·一般化体系不清楚,则可能分离扮演两种角色的类0 c: f& N0 z( e: Z, K" q
  ·存在无目标类的操作,则找出并加上失去目标的类;7 C0 q7 @2 a. N) K
  ·存在名称及目的相同的冗余关联,则通过一般化创建丢失的父类,把关联组织在一起。
7 h0 X! C( X% m  (2) 查找多余的类。
6 C* J; I- C3 k' p- O' F  类中缺少属性,操作和关联,则可删除这个类。
5 z5 j  J, ^+ G0 L( }; Q  (3)查找丢失的关联。9 d3 ?0 Y3 l& o* U' Z1 i5 u
  丢失了操作的访问路径,则加入新的关联以回答查询。) q: w- G6 x0 u" A( A) ~2 t' J* r
  (4) 网络系统的具体情况作如下的修改:
* h3 Q! i2 [5 L! C4 w* Y  ①现金卡有多个独立的特性。把它分解为两个对象:卡片权限和现金卡。
$ J- j4 e! W6 }" c( @, @7 m  a.卡片权限:它是银行用来鉴别用户访问权限的卡片,表示一个或多个用户帐户的访问权限;各个卡片权限对象中可能具有好几个现金卡,每张都带有安全码,卡片码,它们附在现金卡上,表现银行的卡片权限。  n& ~# m' ~! B) ?# ]: v
  b.现金卡:它是自动出纳机得到表示码的数据卡片,它也是银行代码和现金卡代码的数据载体。/ I7 C$ Y, Z1 Q; O! |
  ②"事务"不能体现对帐户之间的传输描述的一般性,因它只涉及一个帐户,一般来说,在每个帐户中,一个"事务"包括一个或多个"更新",一个"更新"是对帐户的一个动作,它们是取款,存款,查询之一。一个"更新"中所有"更新"应该是一个原子操作。9 C/ B! U7 I- ~: X
  ③"分理处"和"分离处理机"之间,"分行"和"分行处理机"之间的区别似乎并不影响分析,计算机的通信处理实际上是实现的概念,将"分理处计算机"并入到"分理处",将"分行计算机"并入到"分行"。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 08:48:40 | 显示全部楼层

2011年软考系统分析师整理资料:面向对象(6)

(三)建立动态模型  1.准备脚本
0 ], x" X" u' |6 W- w5 P$ ]7 v' q0 S6 K  动态分析从寻找事件开始,然后确定各对象的可能事件顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。
! H! o3 v! T6 V7 D/ j5 g  L" ~  2.确定事件5 u5 W+ n' c  D$ D2 e6 L2 E
  确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作,可以发现正常事件,但不能遗漏条件和异常事件。& Z* Y1 R- B+ [! B3 k4 k
  3.准备事件跟踪表
2 ]$ H. D# G" t5 C1 b1 h! O0 ^  把脚本表示成一个事件跟踪表,即不同对象之间的事件排序表,对象为表中的列,给每个对象分配一个独立的列。
. L: n, N$ [4 V5 h# ?" Q  4.构造状态图
8 m+ d; s/ a0 B2 R0 z3 ~( y  对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。
5 G0 I( s- z. s4 h' @% @7 n# J8 X  (四)建立功能建模# o7 T& V$ U' o
  功能模型用来说明值是如何计算的,表明值之间的依赖关系及相关的功能,数据流图有助于表示功能依赖关系,其中的处理应于状态图的活动和动作,其中的数据流对应于对象图中的对象或属性。5 y. G) m' h/ x: V0 j8 M
  1.确定输入值、输出值) A0 A) W' g. @6 f
  先列出输入、输出值,输入、输出值是系统与外界之间的事件的参数。- l" A8 i; L: l# y6 P: `
  2.建立数据流图
5 R# P: ^; m' U( ~  数据流图说明输出值是怎样从输入值得来的,数据流图通常按层次组织。
) h' O" v* |3 A1 C8 @# M  (五)确定操作
+ q7 ?1 i& H! I8 x6 a  在建立对象模型时,确定了类、关联、结构和属性,还没有确定操作。只有建立了动态模型和功能模型之后,才可能最后确定类的操作。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 08:38 , Processed in 0.623006 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表