zoukankan      html  css  js  c++  java
  • OOAD 引论和用例模型

    OOAD概述

    OOA

    Object-Oriented Analysis (OOA):面向对象的分析与设计

    OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。这一部分的工作被称为需求分析

    OOA的成果:

    业务领域用例图

    活动图

    协作图

    大量的业务文档资料

    OOD

    Object-oriented design (OOD)用面向对象的方法为真实世界建立一个计算机中的虚拟模型



    OOD的地位

    OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。

    OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师

    系统架构设计师的任务

    确定系统的总体框架---大多采用已有的领域框架

    正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构---系统概要设计

    分析现实的可获取的技术资源,分解出软件的各个组件,安排好开发任务流程---系统详细设计

     

    OOD的成果

    系统中有多少个类?

    系统中这些类间有什么关系(系统静态特性)?

    系统中这些类生成的对象如何协作来完成工作(系统动态特性)?

    系统中如何管理这些类和对象?

    OOP

    Object-oriented Program (OOP)

    用一种面向对象的语言来实现OOD完成的系统设计

    流行的面向对象语言简介

    JavaC++Object PascalC#VB.net……

     

    关于OOP

     

    用面向对象的语言编程不是OOP

    OOP最重要的特征是面向对象理论的广泛应用

    OOP的成果是可运行的实际系统

    OOP中掺杂着OODOOPOOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。

     

    OOAD 引论和用例模型()

    1.1 OOAD 中使用 UML 和模式

             OOAD 的目标是设法生成一个高质量的软件蓝图

             UML 是用来绘制软件蓝图的符号语言

             是一种思考和交流的工具

             模式(Pattern)是已命名的,针对一个问题的,经过反复验证的一种优化解决方案

             软件开发中的一些指导原则(Principles

             UPUnified Process)是一种指导软件开发活动的方法

             本书是在 UP 的指导下,以一个案例(POS)为红线介绍 OOAD

     

    1.2 分配职责

             OOAD开发出的软件系统是由一组相互合作的对象组成

             很象现实生活中的团队合作

             应该包含哪些成员? OOA

             各个成员的职责是什么?   OOD

     

             OOAD中最关键,最基本的技能是如何熟练的为软件组件分配职责

             必不可少的一项活动,且对软件质量影响很大

             比较难以掌握的一种技能

             GRASP 模式:关于对象设计和职责分配的一组基本原则

     

    1.3     什么是分析和设计?

             分析强调的是对问题和需求的调查研究(What?)

             需求分析 对需求的调查研究

             对象分析 对领域对象的调查研究

             设计强调的是一个能满足需求的(概念上的)解决方案(How?)

    1.4     什么是OOAD

             OOA 强调的是在问题领域内去发现对象或概念

             问题领域指的是需要开发的软件系统的背景领域

             问题领域随着软件系统的不同而不同

             问题领域涉及的都是已经存在的实体或概念

             OOD 强调的是如何定义软件对象及他们之间的协作方式来满足需求

             软件对象大都是受领域对象的启发而得到的

             在很多情况下软件对象和领域对象一一对应

             但软件对象之间协作方式的定义却没有这么直观


    一个 OOAD 的例子

    1.5 OOAD 举例: 掷骰子游戏(软件)

             OOAD 过程的主要活动

         定义用例           (需求获取)

         定义领域模型       OOA, 对象分析)

         定义交互图     OOD, 对象设计)

         定义设计类图       OOD, 对象设计)

     

     

     

             定义一个用例(简化的例子)

        用例名: 玩掷骰子游戏

        参与者: 玩游戏者

        用例描述:    玩游戏者一次掷两个骰子,如果两个骰子的面值相加为七则赢

             定义领域模型

         在做OOAD, 我们先创建一个问题域的对象模型,然后在此对象模型的基础上构建一个求解域的对象模型(软件蓝图)

         问题域的模型的创建是通过识别问题域中的相关概念,概念的属性和相互关系,并将其用UML符号表示出来而完成的

    定义交互图

             利用交互图来探索领域模型中的对象应如何合作来实现软件系统的需求

             交互图有两种形式(语义等价的)

         顺序图(Sequence Diagram

         合作图(Collaboration Diagram

             对象间的合作是通过一个对象向另一个对象发送消息(请求服务)来实现的

    定义设计类图

             在领域模型概念类的基础上定义设计类

             设计类与软件实现(Java, C++)类相对应

    OOAD引论和用例模型()

    迭代开发和统一过程

     

                       

     

             现代软件的两个突出特点是复杂和多变

             软件规模变得越来越大

             从软件的构思开始至软件停止使用充满了变化

             迭代开发是能很好地适应这两个特点的一种巧妙的方法

             主动迎接变更,不断反馈和调整

             统一过程(UP)是综合了当前最佳实践经验的一种流行的迭代开发方法

             迭代的软件生命周期

             风险驱动

     

             UP中一个最重要的思想: 迭代(方式的)开发

             整个软件工程的开发活动被组织成一系列时间长度确定的小的工程开发活动,每个小的过程称之为一个迭代

             每个迭代有它自己的需求分析,设计,实现和测试活动

    通过迭代使系统向用户的真实需求收敛

     

     

    需求用例模型

             需求的基本概念

             用例建模(Use-Case Modeling

             用例的种类和书写格式

             ActorsGoals和用例的发现

             用例图

     理解需求

             定义:需求就是系统必须提供的能力和必须遵守的条件

         能力 =》 功能

         条件 =》 约束

             需求获取中的挑战

         如何发现需求

         如何进行需求的交流

         如何记录需求

         如何管理需求

             软件开发中的一个独特事实是:软件的需求总是在变化的

             需求的有效管理称为软件开发的一个关键问题

         希望在分析和设计之前发现所有的需求被证明是不现实的

         需求的变化是需要管理的

             保证需求是朝着用户的真实需要而变化的

             保证需求最终是可实现的

     

     

    需求的类型

     

             UP中,需求是按照 FURPS+ 模型分类的

             FURPS+ 模型

         功能性需求 Functional

         非功能性需求

             可用性(Usability

             可靠性(Reliability

             性能  Performance

             部分

         ImplementationInterfaceOperationsPackagingLegal

             FURPS+ 模型可用作需求工作的 Check List(检查表)

             需求的记录

         UP中,需求主要是在用例模型(功能性需求)中记录的

         非功能性需求是在补充说明文档中记录的

     

     用例模型

     

             功能性需求主要是在用例模型中记录的

             用例可以借助于目标(Goal)和情节(Scenario)引出

     目标和情节

             用户都有一些希望系统帮助实现的目标(Goal

             用例是描述如何使用系统来达到目标的一组情节

             例:

        收银员使用POS是为了达到对商品销售和用户支付进行跟踪管理的目标

             处理销售(用例):一个顾客携带采购的商品到达收费口。收银员使用POS系统记录每件商品。系统给出商品的清单和累加值。顾客输入支付信息,系统对信息进行验证和记录。系统给行库存信息。顾客从系统得到收据。顾客携带商品离开。

     

     

    有关用例的一些背景情况

             用例的概念最早是 Ivar Jacobson 1986年提出来的

             使用用例来记录需求已被软件界广泛接受

         简单实用

         UML 的支持

         UP 用例驱动的概念

             《编写有效用例》,Alistair Cockburn,影印版,机械工业出版社,2002,是一本非常优秀的参考书,简明,易懂,和实用

     

     用例和其增添的价值

             有关用例的几个基本概念

     

     

     

             参与者(Actor):

        具有行为能力的事物,可以是人,系统或组织

             场景(Scenario:

        参与者和系统之间的一个特定的一系列交互

             用例(Use Case:

        描述参与者使用系统来达成目标的一组成功和失败的场景

     

    用例(Use Case)和场景(Scenario)之间的关系

         场景是用例的一个特例

         用例包含了一组相关场景

    一个有效用例的两个显著特点

         能给用户返回可观察到的价值

         帮助用户达到他的一个目标

     

     用例和功能性需求

             用例是用来描述系统(功能性)需求的

             用例主要是以文字方式记录下来的

             用例图是系统用例,使用者,之间关系的图形表示

             用例图是用例的抽象概括描述,仅有用例图是不够的

     

     用例的类型和格式

             用例的目的是记录系统作什么(What),而不是怎么做(How

             用例记录交互的重点在业务过程而不在技术特点

             黑箱用例把要开发的系统看成一个黑箱子,只描述系统的职责

     

    例:系统记录销售信息         (黑箱用例的描述方式)

         系统将销售信息写入数据库    (不是黑箱用例)

         系统为销售信息生成一条 SQL INSERT 语句(更不是黑箱用例)

     

    例:收银员用扫描器来读入每件商品的信息

         vs ’收银员使用POS系统记录每件商品

     

     

     

             常用的用例书写格式

         简洁用例(brief,摘要形式)

             通常在编写用例的早期用来记录主要成功场景,多由一个文字段落组成

         临时用例(casual

             非正式的由多个文字段落组成,记录成功和失败的场景

         详述用例(fully dressed

             最正式,详细的格式

     

     详细用例示例:处理销售(Process Sale

             用例1:处理销售(见教材第35页)

             详细用例的格式由下述几个大的部分组成

         绪言元素

         项目相关人员和其兴趣的列表

         前置条件和后置条件(成功保证)

         主要成功场景和步骤

         扩展部分(其它可能的分支)

         特殊需求

         技术和数据变更列表

     

     

     

     

     用例格式的解释

    绪言元素部分

             主要参与者:调用系统服务来完成目标的主要参与者

         项目相关人员列表

        例: 收银员:希望能够准确,快速的输入,而且没有支付错误。

            售货员:希望自动更新销售提成

             前置条件和后置条件:规定了用例开始时和结束时应该为真的条件

        例:

         前置条件:

            收银员必须已经被识别和授权

         后置条件:

            存储了销售信息。准确计算了税金。更新了帐目和库存,记录了提成,和生成了收据

     

     

    主要成功场景和步骤(基本流程)

             能够满足项目利益的典型成功路径(Happy Path)

    例:主要成功场景

    1.  
      1. 顾客携带购买的商品到达 POS 收费口
      2. 收银员开始一次新的销售
      3. 收银员输入商品标识
      4. 。。。

    收银员重复 3-4步,直到结束

    5   。。。

    扩展流程

             扩展部分包括了除了’Happy Path’ 之外的所有其它可能的情况

             扩展场景是从基本场景中分支出来的

             一个扩展是由两部分组成:条件和处理

     

    1:扩展部分

        3a 非法的标识

            1 系统指示错误并拒绝输入

        3b 有多个相同类别的商品,不需要跟踪每一个具体商品

            1 收银员可以输入商品类别的表示和数量

     

     

    在条件部分,应使用系统或参与者能够检测到的事务为条件

    25a 系统检测到与外部税金计算系统的通信故障

        5b 外部税金计算系统不工作

    3:对在基本路径中多个步骤可能发生的扩展

        36a 顾客要求收银员去掉一个已经输入的商品

            1 收银员输入商品标识并删除该商品

            2 系统显示更新后的累加值

        3b 有多个相同类别的商品,不需要跟踪每一个具体商品

            1 收银员可以输入商品类别的表示和数量

    4   对在基本路径中任意一个步骤都可能发生的扩展(用 *a, *b, *c, …

        *a 当系统崩溃时(可在任意时间发生)

        为了支持系统恢复和正确地记帐,要保证所有交易敏感的状态和事件可以从场景的任意一步中恢复出来

        1 收银员重启系统,登录,要求恢复到上一个状态

        2 系统重构上一个状态

     

     

     

    用例的目标和范围

             用例可在不同的抽象程度上写,可以包含不同范围的内容

             在怎样的抽象程度写更好?一个用例的粒度应怎样确定?

    例: 那一个是有效的用例?

        a 谈判一个供货合同

        b 处理退货

        c 登录系统(Log In

     

     

     

    子功能目标和用例

             向系统证明我的身份并获得授权使用不是一个用户(级)目标,它是一个子功能目标 辅助用户目标的子目标

             为子功能目标写独立用例会使用例模型中的用例数大量增加

             用例模型中用例的数量和粒度影响着对模型的理解,维护和管理

             一般只当子功能目标对应的用例在多个用户级用例中出现,为了减少模型中的冗余,才将其定义为一个独立的用例

     找出主要参与者,目标和用例

             发现用例的基本途径是

         选择系统边界

         识别主要参与者和目标

         定义用例

     

    参与者(Actor

             参与者事具有行为能力的事务

         人,系统,组织

             三类参与者

         主要参与者:通过使用系统实现自己目标

             如,收银员

             是发现用户目标和用例的一个起点

         次要参与者:向系统提供服务

             如,自动支付授权服务

             明确外部接口和协议

         后台参与者:不是前两钟参与者,但是用例的行为和其利益有关

             如,政府的税务机关

             用例图(Use Case Diagram

         稻草人标识参与者

         矩形表示(待开发)系统

         用椭圆标识用例

         连线标识使用或交流关系

  • 相关阅读:
    你有认真了解过自己的“Java对象”吗? 渣男
    布隆过滤器,你也可以处理十几亿的大数据
    阻塞队列——手写生产者消费者模式、线程池原理面试题真正的答案
    Java集合面试题汇总篇
    Github 骚操作
    责任链模式——更灵活的if else
    时间复杂度到底怎么算
    创造DotNet Core轻量级框架【二】
    创造DotNet Core轻量级框架【一】
    小胖李的面试之旅(二)
  • 原文地址:https://www.cnblogs.com/majunfeng/p/3933861.html
Copyright © 2011-2022 走看看