zoukankan      html  css  js  c++  java
  • 面向对象分析与设计之OOA学习

    1.从需求到业务用例图

    OOA&D的第一步,就是了解用户需求,并将其转换为业务用例图。我们的 CMS系统需求非常简单,大致可做如下描述:这个系统主要用来发布新闻,管理员只需要一个,登录后可以在后台发布新闻。任何人可以浏览新闻,浏览者可以注 册成为系统会员,注册后可对新闻进行评论。管理员在后台可以对新闻、评论、注册会员进行管理,如修改、删除等。通过以上需求描述,我们画出如下的业务用例 图:

    基于UML的面向对象分析与设计(二)

    业务用例图

    这里要注意三点:

    1.业务用例是仅从系统业务角度关注的用例,而不是具体系统的用例。它描述的是“该实现什么业务”,而不是“系统该提供什么操作”。例如,在实际系统中,“登录”肯定要作为一个用例,但是这是软件系统中的操作,而用户所关注的业务是不包含“登录”的。

    2.业务用例仅包含客户“感兴趣”的内容。

    3.业务用例所有的用例名应该让客户能看懂,如果某个用例的名字客户看不懂什么意思,它也许就不适合作为业务用例。

     

    2.从业务用例图到活动图

    完成了业务用例图后,我们要为每一个业务用例绘制一幅活动图。活动图描述了这个业务用例中,用户可能会进行的操作序列。活动图有个很重要的使命:从业务用例分析出系统用例。例如,下面是“新闻管理”的活动图:

    基于UML的面向对象分析与设计(二)

    “新闻管理”活动图

     

    可以看到,一个“新闻管理”这个业务用例,分解出N多系统操作。这里要特别注意这 些操作,其中很多“活动”都很可能是一个系统用例(当然,不是每个都是)。例如,由这个活动图可以看出,系统中至少要包含以下备选系统用例:登录、注销登 录、查看新闻列表、修改新闻、删除新闻。

    这样,将每个业务用例都绘制出相应的活动图,再将其中的“活动”整合,就得出所有备选系统用例。

     

    3.从活动图到系统用例图

    找出所有的备选系统用例后,我们要对他们进行合并和筛选。合并就是将相同的用例合并成一个,筛选就是将不符合系统用例条件的备选用例去掉。

    一个系统用例应该是实际使用系统的用户所进行的一个操作,例如,“查看新闻列表”就不能算一个系统用例,因为他只是某系统用例的一个序列项。最终我们得出的系统用例图如下:

    基于UML的面向对象分析与设计(二)

    系统用例图

     

    4.从系统用例图到用例规约

    得出系统用例图后,我们应该对每一个系统用例给出用例规约。关于用例规约,没有一个通用的格式,大家可以按照习惯的格式进行编写。对用例规约唯一的要求就是“清晰易懂”。

    下面给出“登录”这个系统用例的一个规约:

    基于UML的面向对象分析与设计(二)

    系统用例规约
     

    5.绘制业务领域类图

    完成了上面几步,下面应该是绘制业务领域类图了。所谓业务领域类图要描述一下三点:

    1.系统中有哪些实体。

    2.这些实体能做什么操作。

    3.实体间的关系。

    基于UML的面向对象分析与设计(二)

    业务领域类图
     

    这里要特别强调:这里的实体不是Actor,而是Actor使用系统时使用的所调 用的实体,是处在系统边界之内的实体。例如,管理员就没有作为一个实体出现在这里,因为管理员处在系统边界之外,它所有的工作都可以通过调用这三个类的方 法完成。并且,这里的“User”实体也不是刚才用例图中注册会员这个Actor,而是作为一个系统内的业务实体,供Actor们使用的。例如,其中的 register功能是给注册会员这个Actor使用,而remove功能,则是给管理员这个Actor使用的。

    理解以上这段话非常重要,我经常看到由于混淆了实体和Actor的关系而导致画出的领域类图不准确或职责分配不准确。这里没有给出每个实体的属性。其实,在领域分析阶段,实体的属性并不重要,重要的是找出实体的操作。

     

    6.绘制实现类图

    以上这几步,就是分析的过程。而下面的步骤就是设计了。

    设计没有分析那么好描述,因为分析是“客户面”,它只关心系统本身的功能和业务,而不关心任何和计算机有关的东西。但是,设计和平台、语言、开发模型等内容关系紧密,因而很难找出一个一致的过程。但是,一般在设计过程中实现类图是要绘制的。

    实现类图和领域类图不一样,它描述的是真正系统的静态结构,是和最后的代码完全一 致的。因此,它和平台关系密切,必须准确给出系统中的实体类、控制类、界面类、接口等元素以及其中的关系。因此,实现类图是很复杂的,而且是平台技术有关 的。所以,这里不可能给出一个准确的实现类图,为了描述,给出一个简化了的实现类图,当然,它是不准确的,而只是从形式上给出实现类图的样子。

    假设这个系统整体使用三层架构。那么,用户模块体系的实现类图大体是这样子(不准确):

    基于UML的面向对象分析与设计(二)

    实现类图
     

    7.绘制序列图

    有了静态结构,我们还要给出动态结构,这样,才能看清系统间的类是如何交互的,从而有效帮助程序员进行编码工作。

    基于UML的面向对象分析与设计(二)

    用户登录时序图
     

    上图给出的是用户登录的序列图。首先注册会员作为Actor,调用 LoginService的loginIn()方法启动序列,然后序列按图示步骤执行。其中LoginService作为业务组件,首先调用数据访问组件 的check()方法,确定用户是否存在,如果存在,则返回给Actor欢迎信息,如果失败,返回错误提示给Actor。

    Actor进行注销操作时,调用loginOut()方法确定输入密码是否是此用户的密码,退出系统,从而完成业务功能。

    要注意,序列图在实际中是很多的,几乎每个类方法都配有相应的序列图。

     

    8.后面的步骤

    在完成了上面的过程后,就可以进行编码、调试、测试等工作了。

     

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/coffee_jiahui/p/3786433.html
Copyright © 2011-2022 走看看