《软件工程软件工程软件工程 (10).ppt》由会员分享,可在线阅读,更多相关《软件工程软件工程软件工程 (10).ppt(100页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/302023/3/301 1第第第第10101010章章章章 面向对象分析面向对象分析面向对象分析面向对象分析 10.1 10.1 面向对象分析的基本过程面向对象分析的基本过程10.2 10.2 建立对象模型建立对象模型10.3 10.3 建立动态模型建立动态模型10.4 10.4 建立功能模型建立功能模型10.5 10.5 定义服务定义服务2023/3/302023/3/302 2l l 不论采用哪种方法开发软件,分析的过程都是提取系统不论采用哪种方法开发软件,分析的过程都是提取系统需求的过程。需求的过程。l l 分析工作主要包括分析工作主要包括3 3项内容,这就是理解、表达和
2、验证。项内容,这就是理解、表达和验证。uu系统分析员通过与用户及领域专家的充分交流,力系统分析员通过与用户及领域专家的充分交流,力求完全理解用户需求和该应用领域中的关键性的背景求完全理解用户需求和该应用领域中的关键性的背景知识,并用某种无二义性的方式把这种理解表达成文知识,并用某种无二义性的方式把这种理解表达成文档资料。档资料。uu分析过程得出的最重要的文档资料是软件需求规格分析过程得出的最重要的文档资料是软件需求规格说明说明(在面向对象分析中,主要由对象模型、动态模型在面向对象分析中,主要由对象模型、动态模型和功能模型组成和功能模型组成)。10 面向对象分析2023/3/302023/3/3
3、03 310.1.1 10.1.1 10.1.1 10.1.1 概述概述概述概述10.1 面向对象分析的基本过程l 面向对象分析面向对象分析:就是抽取和整理用户需求并建立问题域精确:就是抽取和整理用户需求并建立问题域精确模型的过程。模型的过程。l 通常,面向对象分析过程从分析陈述用户需求的文件开始。通常,面向对象分析过程从分析陈述用户需求的文件开始。u首先,系统分析员要对需求文档进行分析。u然后,是需求建模。u最后,是需求评审。通过用户、领域专家、系统分析员和系统设计人员的评审,并进行反复修改后,确定需求规格说明。2023/3/302023/3/304 4l 需求文档也叫需求陈述或问题陈述需求
4、陈述或问题陈述。陈述需求是开发任何一个系统的首要任务。主要陈述用户的需求,即该系统应该“做什么”,而不是“怎么做”(系统如何实现)。应该陈述系统任务是什么,而不是解决问题的方法。l 需求陈述必须要将解决问题的目标清楚地表达出来,如果目标模糊,将会影响系统分析、设计和实现等后续开发阶段的工作。分析人员和用户一起研究和讨论才能准确表达用户的要求,并找出遗漏的信息。10.1.2 10.1.2 10.1.2 10.1.2 需求陈述需求陈述需求陈述需求陈述10.1 面向对象分析的基本过程2023/3/302023/3/305 5图图10.1 ATM10.1 ATM系统系统10.1.2 需求陈述2023/
5、3/302023/3/306 6ATM系统的需求陈述:(1)问题综述 某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及营业终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和营业终端。营业终端设在分行下属的各个储蓄所内。该系统的软件开发成本由各个分行共同承担。10.1.2 需求陈述2023/3/302023/3/307 7 (2)实施陈述 银行营业员使用营业终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户,储户也可以从自己的账户中取款。通常,一个储户可能拥有
6、多个账户。营业员负责把储户提交的存款或取款事务输进营业终端,接收储户交来的现金或支票,或者付给储户现金。营业终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。10.1.2 需求陈述2023/3/302023/3/308 8 拥有银行账户的储户有权申请领取现金兑换卡。使用兑换卡可以通过ATM访问自己的账户。目前,仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。所谓现金兑换卡,就是一张特制的磁卡,上面有分行代码和卡号。分行代码惟一标识总行下属的一个分行,卡号确定了这张卡
7、可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。10.1.2 需求陈述2023/3/302023/3/309 9 当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来,ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的
8、分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口输出现金,并且打印出账单交给用户。10.1.2 需求陈述2023/3/302023/3/301010 (1)面向对象分析的三个模型u 面向对象建模是面向对象分析的关键。u 面向对象的模型包括:对象模型、动态模型和功能模型。对对象模型象模型描述了系统的静态结构;动态模型动态模型描述了系统的互交次序;功能模型功能模型描述了系统的数据变换。不同的问题,三个子模型的侧重程度不同,但是,对象
9、模型是最基础的、最核心的、对象模型是最基础的、最核心的、最重要的最重要的。u 无论解决什么问题,首先要在问题域中提取和定义出对象模型。当问题涉及用户界面与过程控制问题涉及用户界面与过程控制时,动态模型是重点动态模型是重点。如果问题涉及大量数据变换问题涉及大量数据变换,则功能模型非常重要功能模型非常重要。对象模型中的操作(服务)可以出现在动态模型和功能模型内。10.1 面向对象分析的基本过程10.1.3 310.1.3 310.1.3 310.1.3 3个子模型与个子模型与个子模型与个子模型与5 5 5 5个层次个层次个层次个层次2023/3/302023/3/301111 (2)面向对象分析的
10、五个层次 面向对象分析由五个主要活动组成:主题层、类与对象层、结构层、属性层和服务层,见图9.2。图图10.2 对象模型的五个层次对象模型的五个层次10.1.3 3个子模型和5个层次2023/3/302023/3/301212 主题(Subject)层:主题给出分析模型的总体概貌,是控制读者在同一时间所能考虑的模型规模的机制。类与对象(Class&Object)层:对象是数据及其处理的抽象。它反映了保存有关信息和与现实世界交互的能力。10.1.3 3个子模型和5个层次2023/3/302023/3/301313 结构(Structure)层:结构表示问题域的复杂性。类-成员结构反映了一般-特殊
11、关系,整体-部分结构反映了整体-部分的关系。属性(Attribute)层:属性是数据元素,用来描述对象或分类结构的实例,可在图中给出并在对象的储存中指定,即给出对象定义的同时,指定属性。服务(Serves)层:服务是接收到消息后必须执行的一些处理,可在图上标明它并在对象的储存中指定,即给出对象定义的同时,定义服务。五个层次就像合并在一起的五个透明的图层一样,每一层从不同角度将对象模型更细化、更具体化。10.1.3 3个子模型和5个层次2023/3/302023/3/301414 (3)五个层次对应的五个活动 面向对象的模型的五个层次对应着分析建模的五个主要活动。这五个活动的工作可以不按顺序进行
12、五个活动的工作可以不按顺序进行,也没必要完成一项活动后才开始另一项活动工作。也就是说,五个主要活动可以同时(并行)处理;可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理;当系统分析员在确定类与对象的同时,想到该类的服务,则可以先确定服务后,再返回去继续寻找类与对象;没有必要遵循自顶向下,逐步求精的原则。10.1.3 3个子模型和5个层次2023/3/302023/3/301515 (4)面向对象分析流程 一般情况下,面向对象分析过程可按照下列流程进行:确确定类与对象、识别结构、识别主题、定义属性、建立动态模型、定类与对象、识别结构、识别主题、定义属性、建立动态模型、建立功能模
13、型、定义服务建立功能模型、定义服务(方法方法)。但是,对于大型的、复杂的对于大型的、复杂的问题,不可能严格按照上面流程进行问题,不可能严格按照上面流程进行,需要反复多次进行寻找、确定、识别、建立和定义来构造模型,即先构造出模型的雏形或部分,再逐步扩充、修改、求精直至满意为止,最后,构造出符合问题域需求的正确的、准确的、完整的目标系统的模型,并编写出需求规格说明。10.1.3 3个子模型和5个层次2023/3/302023/3/30161610.2 10.2 建立对象模型建立对象模型l 对象模型描述了系统的数据结构,它是三个模型的最关键的一个模型。面向对象方法是以对象为基础来构造系统,而不是以功
14、能为基础来构造系统。对象模型为建立动态模型和功能模型提供了实质性的框架。l对象模型描述了问题域中的类和对象以及它们之间的关系,表示了目标系统的静态数据结构。一般来说,当用户的需求变化时,静态数据结构相对来说比较稳定。静态数据结构较少地依赖应用细节,因此,比较容易确定。10.2 建立对象模型2023/3/302023/3/301717l系统分析员的主要任务是在问题域中,通过分析找出客观存在的类-对象。首先,识别所有潜在的(候选的)类-对象;l然后,从潜在的类-对象中筛选掉不正确的或不合适的,通过筛选,剔除冗余的类-对象之后,精选出可作为目标系统的正式类-对象。10.2.1 10.2.1 确定类和
15、对象确定类和对象10.2.1 确定类和对象2023/3/302023/3/301818 1.1.识别潜在的类识别潜在的类-对象对象 1)对象类型 对象是人们要研究的任何事物及对问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念(规则、计划和事件)。具体地说,对象可分为如下几种类型:(1)物理实体:指有形的实物,例如,飞机、汽车、计算机、书或机房等。(2)人或组织的角色:例如,医生、教师、学生、工人、部门或公司等。(3)事件:指在特定时间所发生的事,例如,飞行、演出、开会、访问或事故等。(4)性能说明:指厂商对产品性能的说明,如产品名字、型号、规格和各种性能指标等。10.2.1
16、确定类和对象2023/3/302023/3/301919 2)初步分析 对象具有很强的表达能力和描述功能。在面向对象分析时,可以参照上述几类常见事物,找出在当前问题域中潜在的类-对象。另外,还可以以自然语言书写的需求文档(陈述)为依据,这种分析方法比较简单,是一种非正式分析。文档中的名词可作为潜在(候选)的类-对象,形容词可作为线索来确定属性,动词可作为潜在的服务(操作)。找出候选者之后,还必须经过严格地筛选,清除掉那些不正确的或不必要的事物,保留正确的或必要的事物。这个结果可作为更详细、更精确的正式的面向对象分析的雏形,当然,也是正式的面向对象分析的一个良好的开端。10.2.1 确定类和对象
17、2023/3/302023/3/302020 3)实例分析 下面以ATM系统为例,说明非正式分析过程。仔细阅读上面给出的需求陈述,从陈述中找出下列名词作为类-对象的初步的候选者。银行、自动取款机(ATM)、系统、中央计算机、分行计算机、营业终端、网络、总行、分行、软件、成本、市、街道、营业厅、储蓄所。营业员、储户、现金、支票、账户、事务、现金兑换卡、余额、磁卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单以及访问等。10.2.1 确定类和对象2023/3/302023/3/302121 通常,在需求陈述中不会一个不漏地写出问题域中所有有关的类-对象,因此,分析员应该根据领域知识或
18、常识进一步把隐含的类-对象提取出来。例如,在ATM系统的需求陈述中虽然没写“通信链路”和“事务日志”,但是,根据领域知识和常识可以知道,在ATM系统中应该包含这两个实体。10.2.1 确定类和对象2023/3/302023/3/302222 2.2.筛选出正确的类筛选出正确的类-对象对象 在现实世界中,存在着许多对象,但仅可讨论而已,不能全部纳入系统中去。通过非正式分析找出的候选对象,仅仅是提供给分析员的初步的候选者,接下来,还应该对每个候选对象进行严格考察、筛选,从中去掉不正确的或不必要的,仅保留正确的或必要的对象。这些对象才确实是应该记录其信息或需要其提供服务的对象。假定已经找到了一个候选
19、对象,这时又发现了另一个可能成为对象的实体,那么,是否应该将它作为对象放到模型中去呢?这时应该根据下列准则筛选对象,剔除不正确或不必要的类-对象。10.2.1 确定类和对象2023/3/302023/3/302323 1)剔除冗余准则 若两个类表达了同样的信息,则应该保留在此问题域中最富于描述力的那个名称,去掉冗余的类。上面初步分析得出了ATM系统的34个候选的类,其中,储户与用户,现金兑换卡与磁卡及副本分别描述了相同的信息,因此,应该将“用户”、“磁卡”、“副本”等冗余的类去掉,仅保留“储户”和“现金兑换卡”这两个类。10.2.1 确定类和对象2023/3/302023/3/302424 2
20、)无关准则 删除那些与问题没有多少关系或根本无关的类,仅把与问题密切相关的类-对象放进目标系统中。有些类在其他问题中可能很重要,但与当前要解决的问题无关,同样也应该把它们删掉。如,在ATM系统中,应该去掉“成本”、“市”、“街道”、“营业厅”和“储蓄所”等候选类。因为,该系统并不处理软件开发成本的问题,而且ATM和营业员终端放置的地点与本软件的关系也不大。10.2.1 确定类和对象2023/3/302023/3/302525 3)模糊准则 在初步分析时,列出来的作为候选的类-对象中,可能有一些模糊的、泛指的名词,其中,有的是系统无须记忆的信息;有的是在需求陈述中,它们所暗示的事务,有更明确更具
21、体的名词来表示。因此,通常应去掉这些笼统的或模糊的类。在ATM系统中,“银行”实际指总行或分行,“访问”在这里实际指事务,“信息”的具体内容在需求陈述中随后就指明了。此外,还有一些笼统含糊的名词。因此,在本例中,应该去掉“银行”、“网络”、“系统”、“软件”、“信息”和“访问”等候选类。10.2.1 确定类和对象2023/3/302023/3/302626 4)属性准则 对象是用属性来描述的,若有些名词只是其他对象的属性的描述,则应该把这些名词从候选类-对象中去掉。当然,如果某个性质具有很强的独立性,则应把它作为类而不是作为属性。在ATM系统中,“现金”、“支票”、“取款额”、“账单”、“余额
22、”、“分行代码”、“卡号”、“密码”和“类型”等,实际上都应该作为属性而不是作为类。在分析人员考虑不周的地方,该准则能帮助他筛选潜在的对象。10.2.1 确定类和对象2023/3/302023/3/302727 5)操作准则 在需求陈述中,有时可能使用一些既可作为名词又可作为动词的词,此时,应根据它们在本问题中的含义来决定它们是作为类还是作为类中定义的操作。例如,通常把电话“拨号”当作动词,当构造电话模型时,确实应该把它作为一个操作,而不是一个类。但是,在开发电话的自动记账系统时,把“拨号”作为重要的一个类,因为,它有自己的日期、时间、受话地点等属性。总之,当一个操作具有属性需独立存在时,应该
23、作为类-对象而不是作为类的操作。10.2.1 确定类和对象2023/3/302023/3/302828 6)实现准则 在分析阶段,应该去掉仅和实现有关的候选的类-对象。这是因为,在设计和实现阶段,这些类-对象可能是重要的,但是,目标系统实现不应该在分析阶段考虑,不然会分散我们的注意力。例如,在ATM系统中,“事务日志”无非是对一系列事务的记录,它的确切表示方式是面向对象设计的议题;“通信链路”在逻辑上是一种联系,在系统实现时它是关联链的物理实现。因此,应该暂时去掉“事务日志”和“通信链路”这两个类,在设计或实现时再考虑它们。综上所述,在ATM系统的例子中,经过初步筛选,剩下了下列类-对象:AT
24、M、中央计算机、分行计算机、营业终端、总行、分行、营业员、储户、账户、事务和现金兑换卡等。10.2.1 确定类和对象2023/3/302023/3/302929l 分析、确定关联,能促使分析员考虑问题域的边缘情况,有助于发现那些潜在的类-对象。l 聚集关系(整体-部分关系)是关联的一个特例,在分析、确定关联的过程中,不必明确地去区分关联和聚集。10.2.2 10.2.2 确定关联确定关联10.2.2 确定关联2023/3/302023/3/303030 1.1.初步确定关联初步确定关联 通常,关联关系在需求陈述中,使用描述性动词或动词词组来表示。因此,通过分析需求陈述,首先,直接提取需求陈述中
25、的动词词组来初步确定多数的关联,然后,还能挖掘一些在陈述中隐含的关联。最后,根据问题域实体间的相互依赖、相互作用关系,分析员还应该与用户及领域专家讨论,作再进一步的补充。以ATM系统为例,用直接提取动词短语得出关联、需求陈述中隐含关联和根据问题域知识得出关联等方法,经过分析,初步确定出如表10.1所示的关联。在表10.1中,标“”符号的关联表示是删掉的关联,标“”符号的关联表示是分解后又删掉的关联。2023/3/302023/3/303131表表10.1 10.1 确定确定ATMATM系统的关联系统的关联确定方法关联直接提取动词短语得出关联(1)ATM、中央计算机、分行计算机及营业员终端组成网
26、络()(2)总行拥有多台ATM()(3)ATM设在主要街道上()(4)分行提供分行计算机和营业终端()(5)营业终端设在分行营业厅及储蓄所内()(6)分行分摊软件开发成本()(7)储户拥有账户(8)分行计算机处理针对账户的事务()(9)分行计算机维护账户()(10)营业终端与分行计算机通信(11)营业员输入针对账户的事务()(12)ATM与中央计算机交换关于事务的信息()(13)中央计算机确定事务与分行的对应关系()(14)ATM读现金兑换卡()(15)ATM与用户交互()(16)ATM输出现金()(17)ATM打印账单()(18)系统处理并发的访问()10.2.2 确定关联2023/3/30
27、2023/3/303232续表确定方法关联需求陈述中隐含关联(19)总行由各个分行组成(20)分行保管账户(21)总行拥有中央计算机(22)系统维护事务日志()(23)系统提供必要的安全性()(24)储户拥有现金兑换卡根据问题域知识得出关联(25)现金兑换卡访问账户(26)分行聘用营业员10.2.2 确定关联2023/3/302023/3/303333续表进一步完善关联(27)中央计算机与分行通信(中央计算机确定事务与分行的对应关系改名)(28)营业员输入事务(营业员输入针对账户的事务的分解)(29)事务修改账户(同上)(30)分行计算机处理事务(分行计算机处理针对账户的事务的分解)(31)事
28、务处理账户(同上)(32)ATM与中央计算机通信(ATM与中央计算机交换关于事务的信息)(33)在ATM上输入事务(同上)(34)总行拥有中央计算机(总行拥有多台ATM的分解)(35)分行保管账户(分行计算机维护账户)(36)事务修改账户(同上)(37)分行拥有分行计算机(分行提供分行计算机和营业终端的分解)(38)分行拥有营业终端(同上)(39)营业员输入营业事务(增补)(40)营业事务输进营业终端(增补)(41)在ATM上输入远程事务(增补)(42)远程事务由现金兑换卡授权(增补)10.2.2 确定关联2023/3/302023/3/303434 2.2.筛选筛选 1)删除已去掉的类之间的
29、关联 在分析、确定类-对象的过程中,如果已经删掉了某个候选类,则与这个类有关的关联也应该删掉,或用其他类重新表达这个关联。例如,在ATM系统中,由于已经删掉了“系统”、“网络”、“市”、“街道”、“成本”、“软件”、“事务日志”、“现金”、“营业厅”、“储蓄所”和“账单”等候选类,因此,与这些类有关的八个(表10.1中的(1),(3),(5),(6),(16),(17),(22),(23)关联也应该删掉。2023/3/302023/3/303535 2)删除与问题无关的关联或实现阶段的关联 在侯选类中,应该把与本问题域无关的关联或与实现密切相关的关联删去。例如,在ATM系统中,“系统处理并发的
30、访问”只提醒我们在实现阶段需要使用实现并发访问的算法,以处理并发事务,并没有标明对象之间的新关联(表10.1中序号为(18)的关联),因此,应删去它。2023/3/302023/3/303636 3)删除瞬时动作 关联应该描述问题域的静态结构,而不应该是一个瞬时事件,因此应删除瞬时事件的关联。例如,在ATM系统中,“ATM读现金兑换卡”描述了ATM与用户交互周期中的一个动作,它并不是ATM与现金兑换卡之间的固有关系,因此应该删去。类似地,还应该删去“ATM与用户交互”这个候选的关联。(表10.1中序号为(14)和(15)的关联)2023/3/302023/3/303737 如果用动作表述的需求
31、隐含了问题域的某种基本结构,则应该用适当的动词词组重新表示这个关联。例如,在ATM系统的需求陈述中,“中央计算机确定事务与分行的对应关系”隐含了结构上“中央计算机与分行通信”的关系(表10.1中序号为(13)的关联),因此,应该删去。2023/3/302023/3/303838 4)多元关联分解 多元关联是三个或三个以上对象之间的关联,多数可以分解为二元关联或用词组描述成限定的关联。例如,在ATM系统中,“营业员输入针对账户的事务”可以分解成“营业员输入事务”和“事务修改账户”两个二元关联,而“分行计算机处理针对账户的事务”也可以做类似的分解(表10.1中序号为(11)和(8)的关联)。“AT
32、M与中央计算机交换关于事务的信息”这个候选的关联,实际上隐含了“ATM与中央计算机通信”和“在ATM上输入事务”这两个二元关联(表10.1中序号为(12)的关联)。2023/3/302023/3/303939 5)派生关联 有的关联可以用已有的、必要的关联来定义时,应该去掉这些冗余的关联。例如,在ATM系统中,“总行拥有多台ATM”派生了“总行拥有中央计算机”和ATM与中央计算机通信”这两个关联,而“分行计算机维护账户”的实际含义是,“分行保管账户”和“事务修改账户”(表10.1中序号为(2)和(9)的关联)。2023/3/302023/3/304040 3.3.完善关联完善关联 经过筛选后余
33、下的关联不够精确、完善时,应该进一步分解和增补,以调整关联。改进方法如下:1)重命名 关联的命名相当重要,准确的名字有利于读者理解。因此,如有不合适的、含义不清的名字,应该重新选择含义更明确的名字来作为关联名。例如,将“分行提供分行计算机和营业员终端”改为“分行拥有分行计算机”和“分行拥有营业员终端”就更明确些(在表10.1中序号为(4)的关联)。2023/3/302023/3/304141 2)分解 为了能够适用于不同的关联,必要时应该分解以前确定的类-对象。例如,在ATM系统中,应该把“事务”分解成“远程事务”和“营业事务”。2023/3/302023/3/304242 3)增补 发现了遗
34、漏的关联或分解类-对象之后需要新关联时,应该及时增补。例如,在ATM系统中,把“事务”分解成上述两类之后,需要补充“营业员输入营业事务”、“营业员事务输进营业终端”、“在ATM上输入远程事务”和“远程事务由现金兑换卡授权”等关联(表10.1序号为(39)、(40)、(41)和(42)的关联)。2023/3/302023/3/304343 4)标明阶数 当确定各个关联的类型之后,可以初步地确定关联的阶数。随着系统分析反复改进,阶数也会经常改动。图10.3是经上述分析过程之后得出的ATM系统的原始对象图。2023/3/302023/3/304444图10.3 ATM系统初始对象模型图2023/3/
35、302023/3/3045451.1.为何确定主题为何确定主题 主题是一种指导开发者或用户研究大型复杂模型的机制。主题是一种手段,有助于分解大型项目以便分组承担任务。此外,主题还可以给出面向对象分析和设计的模型总体概貌。主题所依据的原理是整体-部分关系的扩充。一个系统模型可以包含多个主题,也就是说,主题是整个问题域和系统任务的一部分,是用来与整个问题域和系统任务(总体)进行通信的部分。10.2.3 划分主题10.2.3 10.2.3 划分主题划分主题2023/3/302023/3/304646 2.2.如何确定主题如何确定主题 是否划分主题要看目标系统的大小,若开发很小的系统,则没必要划分主题
36、;若开发大型、复杂的系统,则为了降低复杂程度,应将系统再进一步划分成几个不同的主题,使得开发者便于分组承担任务,小组成员能集中精力考虑承担范畴内的内容。对于含有较多对象的系统,应采用选择、精炼和构造的方法来确定主题。首先,由高级分析员粗略地识别对象和关联,然后初步选择主题。经进一步分析,在更深入了解系统结构的基础上,修改和精炼主题。最后,按问题领域构造出一个主题(主题编号和主题名)。2023/3/302023/3/304747 按问题领域确定主题,应该将相互间依赖和交互较多的对象确定为同一个主题。我们确定“总行”、“分行”和“ATM”等为ATM系统中的三个主题,用、和分别表示这三个主题的编号,
37、如图10.4所示。该例不是很复杂,可以不引入主题层,在这里主要是为了说明如何确定主题。为了使图简单、清晰,在下面的章节中讨论这个例子时将忽略主题层。2023/3/302023/3/304848l 属性是对象的性质,藉助于属性我们能对类与对象和结构属性是对象的性质,藉助于属性我们能对类与对象和结构有更深入更具体的认识。有更深入更具体的认识。l 在分析阶段不要用属性来表示对象间的关系,使用关联能在分析阶段不要用属性来表示对象间的关系,使用关联能够表示两个对象间的任何关系,而且把关系表示得更清晰、够表示两个对象间的任何关系,而且把关系表示得更清晰、更醒目。更醒目。l 一般说来,确定属性的过程包括分析
38、和选择两个步骤。一般说来,确定属性的过程包括分析和选择两个步骤。10.2.4 10.2.4 确定属性确定属性10.2.4 确定属性2023/3/302023/3/304949 选择属性的过程包括分析分析和选择选择两步。一般来说,分析强调对象的外观或功能,选择则强调目标系统的需求。属性是对象的性质,通常用名词词组和形容词来表示。首先,在需求陈述中找出属性或通过分析找出属性。这些属性必须是问题域中对象的基本性质,而且在目标系统中是必要的。也就是说,只考虑与目标系统相关的属性只考虑与目标系统相关的属性,不考虑超出目标系统范围的属性。然后,删除不正确的和不必要的属删除不正确的和不必要的属性性,选择正确
39、的和必要的属性。最后,恰当的给属性命名恰当的给属性命名。10.2.4 确定属性2023/3/302023/3/305050 删除属性的标准如下:1)区别对象和属性 对象是在应用领域内具有自身性质的实体。若某个实体的独立存在相当重要,而相比之下它的值不那么重要,则应把它作为一个对象而不是对象的属性。同一个实体在不同的应用领域中是作对象还是作属性,需要根据应用需求具体分析而定。例如,在邮政目录中,“城市”是一个属性,而在人口普查中,“城市”却看作为对象。10.2.4 确定属性2023/3/302023/3/305151 2)区别链属性和属性 在分析过程中,不应该把链属性作为对象的属性。若某个性质依
40、赖于某个关联链的存在,则该性质是链属性而不是属性。链属性在多对多关联中很明显,在整个开发过程中,不要把它作为两个关联对象中任意一个的属性。10.2.4 确定属性2023/3/302023/3/305252 3)区别限定词和属性 当属性固定下来后,能减少关联的阶数时,则可将该属性重新定义成为一个限定词。如ATM系统中,分行代码、聘员号、账号和站号等都是限定词,而不要把它误认为属性。再如,在图10.3中,“分行代码”不但可作为关联“分行组成总行”上的限定词,也可作为关联“中央计算机”与“分行计算机”的限定词,这样,就将该关联的一对多的通信关系减少为一对一的通信关系。10.2.4 确定属性2023/
41、3/302023/3/305353 4)区别内部值和属性 若某个性质是对象的非公开的内部状态时,则应该将这个属性从对象模型中删掉。5)避免细化 一个对象的属性不能过于细化,在分析过程中,应去掉那些对大多数操作没有影响的属性。10.2.4 确定属性2023/3/302023/3/305454 6)存在不一致的属性 类应该是简单而且一致的。如果得出一些看起来与其他属性毫不相关的属性,则应该考虑把该类分解成两个不同的类。经过以上精选后,确定的ATM系统中的各个类的属性可参见图10.4所示。在10.4图中,又增补了一些限定词。10.2.4 确定属性2023/3/302023/3/305555图10.4
42、 带有属性与主题的ATM对象模型10.2.4 确定属性2023/3/302023/3/305656 (1)“卡号”:前面的分析过程中,遗漏了“分行发放现金兑换卡”这一关联,现在发现了,因而就把“卡号”这个限定词补上。(2)“分行代码”是关联“分行组成总行”上的限定词。(3)“账号”是关联“分行保管账号”上的限定词。(4)“聘员号”是关联“分行聘用营业员”上的限定词。(5)“站号”是关联“分行拥有营业终端”、“营业终端与分行计算机通信”和“中央计算机与ATM通信”等上的限定词。10.2.4 确定属性2023/3/302023/3/3057571.1.为何识别继承关系为何识别继承关系 确定了类的属
43、性后,就可以利用继承来共享公共的性质,以结构的形式重新组织类。结构是问题域复杂关系的表示,它与系统的任务直接相关。一般 特殊结构具有继承性,一般类和对象的属性和方法一旦被识别,即可在特殊类和对象中使用。10.2.5 10.2.5 识别继承关系识别继承关系10.2.5 识别继承关系2023/3/302023/3/305858 2.2.如何识别继承关系如何识别继承关系 通常,可用以下两种方法来建立继承(分类)关系。1)自底向上识别 自底向上识别是抽象出现有类的共同性质来一般化成父类,找出具有相似的属性、操作和关联的类来发现继承。例如,在ATM系统中,“远程事务”和“营业事务”可以一般化为“事务”(
44、父类)。也可以将“ATM”和“营业终端”一般化为“输入站”(父类)。在识别中,应尽可能应用现实世界中的常用分类结构,如不能直接使用现有的类,可以将属性或类稍加细化再表示出来。10.2.5 识别继承关系2023/3/302023/3/305959 2)自顶向下识别 自顶向下识别是把现有的类细化为更具体的子类,通常,具体化的子类可以在应用领域中直接找出来。如具体化类与现有实际情况矛盾时,说明该类定义不当,需要重新考虑。例如,在ATM系统中,“远程事务”和“营业事务”是“事务”(父类)的具体化类(子类)。同样,“ATM”和“营业终端”是“输入站”(父类)的具体化类(子类)。在类层次结构中,特殊类共有
45、的属性应放在父类中。特殊类中应定义自己独有的属性,当然它可以继承父类的属性。加入继承的ATM对象模型如图10.5所示。10.2.5 识别继承关系2023/3/302023/3/306060图10.5 带有属性和继承的ATM对象模型10.2.5 识别继承关系2023/3/302023/3/306161 通过以上各步,对象模型就建立起来了,但这样不能确保模型是完全正确的,还应反复修改,不断完善与优化。在建模的各个阶段,一旦发现了缺陷,就必须返回到前面阶段进行修改。有些细化工作(如定义服务)要等到动态模型和功能模型建完以后才能进行。在建模的过程中,不一定按前述的工作顺序进行,分析员完全可以以自己的独
46、特方法进行,既可以将几个阶段并行处理,又可以随意组织前述工作顺序。如果是初次使用面向对象方法,建议还是按照前述顺序进行比较好。10.2.6 10.2.6 反复修改反复修改10.2.6 反复修改2023/3/302023/3/306262 1.1.删除冗余的类删除冗余的类 如果某类中缺少属性、操作和关联,则可删除该类。2.2.分解类分解类 “现金兑换卡”可分为“卡权限”和“现金兑换卡”两个功能,前者表示储户访问账户的权限,后者则表示含有分行代码和卡号的数据载体。10.2.6 反复修改2023/3/302023/3/306363 3.3.补充关联补充关联 一个“事务”由若干个“更新”组成,它们构成
47、整体-部分关系。一个“更新”是一个动作,即对账户所做的一次处理,如存款、取款、查询等。“更新”有类型、金额等属性,所以,可补充定义成为一个单独类,“事务”与它构成整体-部分关系。10.2.6 反复修改2023/3/302023/3/306464 4.4.合并类合并类 如在一个应用系统中,两个类虽然名字不同,但是它们所完成的任务以及与其他类的关系也相同,这时可将这两个类合并成为一个类。例如,“分行”与“分行计算机”合并为“分行”。同样,可将“总行”与“中央计算机”合并成为“总行”。通过进一步的优化,得出如图10.6所示的ATM对象模型。10.2.6 反复修改2023/3/302023/3/306
48、565图10.6 优化后的ATM对象模型10.2.6 反复修改2023/3/302023/3/306666 当对象模型建立起来后,接着可以建立动态模型。动态模型的概念和表示方法前一章已经介绍了,本节以ATM系统为例,对动态模型的建立方法给予叙述。建立动态模型对于每个系统并不是都重要,这要看开发系统的类型而定。对于数据库系统来说对于数据库系统来说,动态模型并不重要动态模型并不重要,如果是交互式系统交互式系统,建立动态模型却是非常重要动态模型却是非常重要的。对于一个系统来说,功能模型指明了系统应该“做什么”,而动态模型则明确规定了“什么时候做”。即在何种状态下、接受了什么事件的触发,来确定对象的可
49、能事件的顺序。10.3 建立动态模型10.3 10.3 建立动态模型建立动态模型2023/3/302023/3/306767 建立动态模型的步骤:(1)编写典型的对话脚本;(2)从脚本中提取出事件,联系该事件与其目标对象;(3)组织事件的顺序和状态(采用状态图描绘);(4)比较各个不同对象的状态图,检查对象之间的一致性,确保事件之间的匹配。10.3 建立动态模型2023/3/302023/3/3068681.1.脚本的概念脚本的概念 当系统与用户交互时,为了对目标系统的行为有更具体的认识,用脚本表示系统的行为。脚本描述用户(或其他外部设备)与目标系统之间的一个或多个典型的交互过程,利用脚本来建
50、立动态模型。在建立动态模型的过程时,为了确保整个交互过程的正确性和清晰性,不遗漏重要的交互步骤,首先要编写脚本,为建立动态模型奠定基础。10.3.1 编写脚本10.3.1 10.3.1 编写脚本编写脚本2023/3/302023/3/306969 脚本是事件序列,当系统中的对象与外部用户发生互换信息时,就产生一个事件,所呼唤的信息值就是该事件的参数。对于事件来说,确定触发事件的动作对象和该事件的参数是非常重要的。屏幕布局和输出格式是外观的界面,一般是不会影响交互行为的逻辑和所交换的信息的。10.3.1 编写脚本2023/3/302023/3/307070 2.2.准备脚本准备脚本 有时,在需求