面向对象分析与设计-OOAD

Published: 20 Sep 2018 Category: SE

Agenda

  • 一、OOA/D概念介绍
  • 二、UML基础知识
  • 三、SunTone 架构方法论

一、OOA/D概念介绍

面向对象分析(OOA)要做的:分析阶段所做的主要工作是理解问题和需求模块,将现实世界中的问题映射到问题域。

在该阶段要明确用户提出了哪些功能要求,为完成这些要求,系统应有哪些构件,采用什么样的结构, 并写出详细的需求规约。

分析过程:

  1. 个体特征分析:标识对象及其属性和服务.
  2. 静态分析:分析和描述系统的静态结构.
  3. 动态分析:分析对象及之间的行为及其控制关系,建立系统的动态模型.

面向对象设计(OOD)要做的:设计阶段则主要是确定实现用户需求的方法,即怎样做才能满足用户需求,并构造出系统的实现蓝图。

OOD首先从OOA的结果开始,并将其从问题域映射到实现域;为满足实现的需要,还要增加一些类、结构及属性和服务, 并对原有类及属性进行调整。此外,还要完成应用控制、人机交互界面的设计等。

二、UML基础知识

UML(Unified Modeling Language)是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

UML图包括且不限于:类图、用例图、序列图、活动图、组件图、部署图。

三、SunTone 架构方法论

SunTone Architecture Methodology(SunTone AM) 是由Sun公司Java顾问专家组设计创造的一个独特的方法论, 实施于互联网相关应用。

这个方法论具有以下特性:

  • Use-case focused. 通过使用功能性的项目场景(functional case scenarios),Sun公司专家顾问们支持确保端到端的服务功能的实现。对Use-case的学习加速了应用的开发, 同时支持通过确定应用功能对所有业务需求的满足,来减少开发的风险。
  • Architecture-centric. Sun专业服务专家在开发周期开始之前,定义并测试了架构,这减少了在后期可能发生技术问题的风险,避免工程返工。
  • Iterative and incremental. 一个阶段性的开发方式意味着采用有规律的测试,以便在开发的早期能够发现问题,确保应用的最后交付发布能够满足用户需要的功能。
  • Integration of systemic qualities. 专注于实现架构对服务水平的需求,包括稳定性、可靠性、可扩展性、功能性完整性和安全性,支持确保基础设施和应用的框架能够满足已经定义好的业务需求。

SunTone AM的开发过程有三个:需求分析、设计分析、架构设计

3.1 需求分析

包括了以下4步:

  • 分析用例场景,创建用例表
  • 根据分析结果细化用例图
  • 创建域模型,使用CRC分析法确定关键抽象词
  • 在域模型中表示关键抽象词的关系

Case背景:

酒店订单管理系统主要提供客户的订单预计管理功能,客户可以通过系统进行酒店房间预定的服务。由于所有的预定服务都会被生效处理,
所以所有的预定操作必须登录后才能进行。系统会提供用户注册服务功能,需要填写姓名,联系电话和密码。
登录用电话作为用户名登录即可。用户在预定过程中,需要用户选择预定的日期,然后系统显示可预定的房间信息。
包括房间类型,金额。房间分为商务间和标准间两种。用户成功预定后,会生成定单信息,同时显示预定成功的信息。
包括订单号,房间类型,预定开始时间,预定结束时间,预定人,金额,订单状态(订单状态包括正常,作废, 失效)。预定成功后的状态是正常。

用户订单管理,用户可以做以下操作:
– 查看自己相关的预计的订单信息,系统会显示最近一个月的用户的所有预定 的订单内容。根据选中订单,查看房间信息。
– 取消订单操作。只有正常状态的订单可以执行取消操作。订单取消后,由正 常状态变成失效状态。
– 恢复取消订单操作。只有失效的订单可以执行恢复操作。订单恢复后,状态 由失效状态变成正常状态

3.1.1 分析用例场景,创建用例表

用例名称 创建房间预定定单申请
描述 用户申请一个房间的预定服务,创建一个预定申请定单
角色 房客, 酒店前台
前置条件 用户已经登录, 用户已经打开主页面
主路径 1. 用户请求酒店预订系统预定页面
  2. 系统显示预定页面
  3. 用户输入预订开始时间和预订结束时间
  4. 用户选择房间类型
  5. 用户点击“预订查询“按钮进行查询
  6. 系统开始查询可预订的房间信息
  7. 系统把查询到的信息,通过列表返给用户
  8. 用户选择一个房间后,点击预计铵钮进行预定
  9. 系统请求房间的预定,记录预定者的用户信息,预定开始时间,预定结束时间,并把房间状态改为已预定
  10. 系统返回预定成功信息给用户,返回订单信息。包括订单号,预定房间类型,预定开始时间,预定结束时间,金额,预定者信息,订单状态
后置条件 转到用户订单查看页面 发短信通知给预定用户
分支说明 房间未找到,用户预定时间冲突
非功能性需求 预定响应时间不能超过10秒

3.1.2 根据分析结果细化用例图

细化用例图

3.1.3 创建域模型,使用CRC分析法确定关键抽象词

域模型是描述问题域中实体交互关系的模型

  • 域模型通常用类图来表示
  • 实体的名称又称关键抽象词(Key Abstraction)

整理出关键字,填入下表:

候选关键字 淘汰原因 建议模型名称
客户    
订单    
用户    
房间类型    
房间信息    
订单状态    
姓名    
联系电话    
金额    
密码    

CRC (Class-Responsibility-Collaborator),用于发现关键抽象词,帮助确定类、职责和协作者之间关系。

分析法的步骤说明如下:

  • 选择一个候选的关键抽象词
  • 确定一个该候选项在其中使用较多的用例
  • 扫描用例说明,确定职责和协作者
  • 使用CRC卡记录该关键抽象词表
  • 根据结果更新候选关键抽象词表
  • 上述过程是一个迭代过程。

一些选择合适的关键抽象词的技巧:

1、咨询领域专家(有经验的人);
2、选择在名称中用到了候选关键抽象词的用例;
3、选择在主路径和描述中都出现的用例,例如:名词“订单“在以下地方出现了多次;
4、用例名称部分(见3.1.1);
5、主路径和描述。

选择好关键词之后,要确定职责和协作者。

再使用CRC卡记录关键抽象词:

CRC卡

更新关键抽象词表:

候选关键字 淘汰原因 建议模型名称
客户   Customer
订单   ReservationOrder
用户 与客户定义相同  
房间类型 房间信息属性  
房间信息   Room
订单状态   OrderStatus
姓名 客户模型属性  
联系电话 客户模型属性  
金额 客户模型属性  
密码 客户模型属性  
短信服务 外部系统  

3.1.4 在域模型中表示关键抽象词的关系

根据关键抽象词画出类图,包括已知的属性和操作。

类图

至此,需求模型的分析过程结束。

3.2 设计分析

一般步骤:

  1. 健壮分析法及设计模型的用途和元素
  2. 使用健壮分析法创建用例的设计模型
  3. 生成设计模型的序列图

健壮性分析方法:

  1. 选择一个用例
  2. 将参与者放入协作图中
  3. 分析该用例(活动图),对于该用例中的每个活动:
    3.1 确定并添加边界组件
    3.2 确定并添加服务组件
    3.3 确定并添加实体组件
  4. 将协作图转换为序列图

协作图:

协作图

圈圈按出现顺序依次表示边界组件、服务组件、实体组件。

序列图

3.3 架构设计

架构模型主要包含:

  • 高级部署图 – 展示了系统硬件的拓朴结构以及各硬件结点上顶级系统组件的部署情况
  • 系统部署图 – 展示了一个或多个用例的组件图以及这些组件在系统高层结构上组织情况
  • Tier和layer打包图 – 展示了架构师为各层所选择的包结构

3.3.1 创建组件图

组件图

组件图2

3.3.2 考虑部署中会应用到的架构技术

架构图

3.3.3 评估架构模型

初步的架构模型建立之后,调整架构模型使用之符合系统性的质量:

  • – 调整分解的基础结构以满足各项QoS(Quality of Service)需求
  • – 评估多种设计方案
  • – 原型化部署的配置并进行性能测试以确认Qos

以下是常用的基础结构模式,来解决Qos需求问题

  • – Replication
  • – Load balance
  • – Failover
  • – Off-load shared resource – Forward cache
  • – Request prefetch
  • – Request short circuit
  • – Session affinity

最终确定的系统高级部署图:

部署图

以上