好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

面向对象分析和设计范例.ppt

50页
  • 卖家[上传人]:tian****1990
  • 文档编号:81560303
  • 上传时间:2019-02-21
  • 文档格式:PPT
  • 文档大小:508.50KB
  • / 50 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1,第7章 面向对象分析与设计范例,7.1 系统需求获取 7.1.1 案例背景介绍 某学校的图书馆目前仍然在使用传统卡片管理着所有的图书和读者信息,但随着图书和读者数量的不断增加,图书馆工作人员的工作量也越来越大,而且还经常出现管理混乱的情况,比如书明明就放在馆中,但是却查找不到等等问题为了提高工作效率和管理水平,学校的领导经研究决定,在采用开架借阅的基础上利用现代技术手段对图书馆进行管理为此,学校委托软件学院组织计算机教师开发一套图书馆信息管理系统2,,7.1.2 需求获取 1. 用户访谈 2. 初始需求文档的形成,3,7.2 分析问题领域,7.2.1 高层用例识别 1. 识别参与者 借阅者 ,图书管理员 2. 识别用例 借书, 还书, 预定书刊, 取消预定, 维护借阅者信息, 维护书刊信息 维护物理书刊信息,登录, 3.识别角色及用例间的关系,4,3.识别角色及用例间的关系,,5,3.识别角色及用例间的关系,6,7.2.2 用例分析,一般先使用专门的文档页对用例进行说明; 1.需求理解 2.事件描述 3.活动框图,7,7.3 静态建模,7.3.1确定对象 (1) 借阅者(Borrower) (2) 书刊(Title) (3) 物理书刊(Book) (4) 借阅记录(Loan) (5) 预定记录(Reservaion) 另外,还可以抽象出代表持久性的父类:类OID和类Persistent。

      它们实现了与数据库有关的表示和操作 (6) 类Persistent (7) 类OID,8,,7.3.2描述对象的属性 7.3.3描述对象之间的关联 (1) Title 类与Borrower Information类的关联 (2) Title类与Book类的关联 (3)Title类与Book Title、Magazine Title类的关联 (4) Book类与Borrower Information类的关联,9,(1)Title 类与Borrower Information类的关联,10,(2)Title类与Book类的关联,标题和书目的关联是一种特殊的关联形式:聚合关系两者是包容的关系,是一种强关联11,(3)Title类与Book Title、Magazine Title类的关联,图书和杂志都只是标题的一种,它们现在唯一的区别只是对出借时间的限制不同显而易见,Title 类与Book Title、Magazine Title类之间的关联也是一种特殊的关联形式:继承关系12,(4)Book类与Borrower Information类的关联,每个借书者可以借阅多个书目,每个书目同时只能被一个借书者借阅。

      Book类与Borrower Information类的关联是一般性关联,13,7.2.2 用例分析,建立初始用例模型,只是完成了系统需求分析的一部分要实际建立系统,针对每个系统用例还需要更具体的细节,即用例的详细流程 每个用例是一组场景(Scenario)的集合,而每个场景又是一个步骤序列这些步骤在用例模型中并没有表现出来如下图,14,如使用注释来说明这些用例,会影响图的简洁和清晰15,解决办法: 1 文本框图: 一般使用专门的文档页对用例进行说明,在文档中主要描述下列内容: ●发起用例的参与者; ●用例的前置条件; ●场景中的详细步骤; ●场景完成后的后置条件; ●用例的参与者 还可以列出场景的假设条件和简短的场景描述 2 活动框图 3 举例说明:如“读者借书”用例的两种描述,16,7.2.2 用例分析-1.需求理解,第二次会议议题:导出和分析每个用例 与会人员:包括系统分析员、一名图书馆管理员和一名 读者 目的:详细了解系统每一个功能的操作流程和步骤 图书馆管理员: 已注册的用户根据用户名和要借的书名查找图书 如果找不到,则没有这本书;或者我查看一下该书的借阅记录,看其所有书目是否全部借出,如果没有全部借出,则取一本给借书者。

      如果书全部借出,这时候应该询问借书者是否预订该书在书借出后,要对图书和借书者分别进行登记另外,如果预定者借了这本书,还要取消预订17,7.2.2 用例分析- 2.事件描述,根据上述会谈记录,我们描述“借书”用例如下 用例叙述:管理员将图书借给借书者并进行登记 假设条件:借书者信息已经存储于系统中,即不是一个新用户 前置条件;借书者将姓名和要借的书名告诉管理员 后置条件:借书者拿到书,借阅信息被登记 参与者: 借书者 详细步骤见下页,18,7.2.2 用例分析- 2.事件描述,步骤序列: 主事件流: (1) 借书者提出借书申请,用例开始 (2) 管理员选择“借书”选项 (3) 查找选择该标题 Al:没有这个标题 (4) 选择该标题下的有效书目 A2:无有效书目 (5) 查找选择借书者 A3:找不到借书者信息 (6) 图书馆将书借出 (7) 登记一个新的借阅 A4:借阅者有预订 (8) 用例结束,19,7.2.2 用例分析- 2.事件描述,其他事件流: Al:没有这个标题 (1) 系统显示无标题提示信息 (2) 返回主事件流第(3)步 A2:无有效书目 (1) 系统显示无有效书目提示信息 (2) 返回主事件流第(2)步 A3:找不到借书者信息 (1) 系统显示该借书者为无效用户 (2) 返回主事件流第(5)步 A4:借阅者有预订 (1) 清除预订信息 (2) 返回主事件流第(8)步,20,7.2.2 用例分析- 2.事件描述,事件流需要的详细程度: 建立事件流时的主要问题是事件流需要的详细程度 要确定需要的详细程度,就考虑文档的阅读者。

      事件流的用户有以下三类: ● 用户通过审查这个文档以确认其准确反映用户的期望 ● 系统设计员用其创建系统设计和最终建立系统 ● 测试人员以事件流为依据创建测试脚本21,活动框图是另一种建模事件流的方式,比文本方式直观,22,7.4 动态建模,类框图表示的是类和对象之间的静态关系, 而在系统运行过程中,组成系统的对象是相互配合,协同完成每一个用例的功能的 当系统与用户(也可能是其他系统)交互或系统内部各对象交互的时候,组成系统的对象为了适应交互要经历必要的变化 因此,需在模型中反映对象在系统中的变化,23,7.4.1动态用例分析,事件流和活动图对每个用例情景进行了描述,了解了用例的详细流程如下:,24,7.4.1动态用例分析,不足:无法显式地表示出每个用例涉及到哪些对象,更不能表示出哪个对象执行哪个活动以及对象之间的消息工作方式 改进:可以为每个活动标记上负责的对象,但那不会使对象之间的交互变得清晰 更好的方法:在为一个过程建模的时期,先使用事件流和活动图帮助你获得对整个过程的理解,然后用交互图可以将活动分配到各个类中25,7.4.1动态用例分析,通常创建交互图的步骤如下: 1)从事件流中寻找角色。

      2)从事件流中寻找对象 3)把活动图中的每个活动分配到对象中 4)将对象的服务转换为消息,并查找每个消息的发送对象和接收对象 5)根据事件流中消息发送的顺序将其中加入框图中26,“借书”用例的交互图,下面我们还是以“借书”用例为例,介绍如何使用交互图对用例进行分析,为用例中对象之间的交互建立模型 以下介绍: 窗体类和业务类的依赖关系 借书(无预定)的步骤序列,时序图,协作图,27,“借书”用例的交互图,首先,交互图表现的是角色与系统以及系统内部对象之间的交互,角色与系统的交互是通过界面元素完成的,我们必须提供窗体和对话框作为人机交互的界面 因此在进行用例动态分析之前,还需要考虑系统中必需的界面对象 借书窗体(Lend Window) 还书窗体(Return Window) 预订窗体(Reservation Window) 系统维护窗体(Maintenance Window),28,“借书”用例的交互图,我们将以上这些对象与原来的业务对象分为两组:所有的窗体类组织在一起放在GUI Package包中(界面包),所有的业务类组织在一起放在Business Package包中(业务包)界面包和业务包的依赖关系如下:,,29,借书者没有预订图书的用例,该用例由图书馆管理员启动,涉及到的类有Lend Window、Title、Borrower Information、Loan、Book。

      用例的步骤序列(事件流)如下: 1) 图书馆管理员打开借书窗体界面 2) 输入标题信息,查找该标题 3) 查找该标题下的有效书目 4) 输入借书者信息,查找该借书者 5) 创建一个新的借阅30,时序图的工作原理,图书馆管理员角色向Lend Window对象发出查找标题、查找书目和查找借书者的请求, 由Lend Window对象分别向Title、Book、Borrower Information和Loan对象发送查找、创建等消息, Title等对象收到消息后执行相应的操作 时序图可以表示用例的一个情景,也可以使用脚本在框图中加入一些条件逻辑,从而综合表示用例的多个情景31,用例“借书”的时序图,book,32,在协作图中更容易地看出对象之间的通信,book,33,7.4.2 对象状态分析,对象状态分析的另一个工具是状态图与交互图一样,状态图也可以帮助分析员、设计员和开发人员理解系统中对象的行为, 交互图通过一个用例的完整事件流程分析多个对象之间的交互来了解每个对象的行为, 状态图只是针对单个对象建模,通过分析单个对象的内部状态转换来了解一个对象的行为34,7.4.2 对象状态分析,如果一个类有一些重要的状态行为,则它具有多种状态,据此可以创建状态框图。

      要确定一个类是否有重要的状态行为,可以通过以下两种方法: l检查类的属性:考虑一个类的实例在属性值不同时如何表现,因为如果对象的行为表现不同,则其状态也不同 l检查类的关联:看看关联重数中带0的关联,0表示这个关联是可选的关联存在和不存在时类的实例是否表现相同?如果不同,则可能有多种状态35,Title对象有两种状态:预订状态和非预订状态 Title的状态图 如下:,36,分析Title的状态图,在Title状态图中,显示了标题的不同状态以及状态之间的转换情况 一个标题对象的初始状态为非预订状态 在非预订状态下,如果借书者预订标题的话,则标题转入预订状态预订标题是一个事件,事件导致标题从一个状态过渡到另一个状态 在预订状态下,如果发生标题预订事件,则标题的状态不变;如果发生取消预订事件,这时候状态的转换情况则要视预订数目而定(预订数目是否为1是状态转换的保证条件) 同时,在事件发生的同时,将导致相应的活动,预订标题会将标题的预订数目加1,而取消标题预订则将标题的预订数目减1 只有开始状态,而没有停止状态37,Book类状态图 原则上不需要对每个类创建状态图,一般只用于复杂的类 状态图仅用于文档,而不用于生成代码。

      38,7.4.3 描述对象操作,对象是由描述其属性的数据以及可以对该数据施加的操作(即服务)封装在一起所构成的独立单元 标志类的操作时,要特别注意以下几种类: l 注意只有一个或很少操作的类 l 注意没有操作的类 l 注意有太多操作的类 另外,要注意应该尽量利用继承机制减少冗余的操作39,7.4.3 描述对象操作,对象的操作与对象在行为上的义务密切相关,基本上可以分为两类:“知道”型操作与“做”型操作 一个对象的“做”(doing)型操作包括: l 自己完成某项任务 l 发起其他对象执行动作 l 控制和协调其他对象内的动作 一个对象的“知道”(knowing)型操作包括: l 知道自己的私有的、封装了的数据 l 知道与自己相关联的对象信息 l 知道自己派生出来或者计算出来的事物40,7.4.3 描述对象操作,从另外的角度,操作可以分为四种类型: l 实。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.