2017编程提高第3节课——面向对象设计(3)
LanyuanXiaoyao's Blog ヽ(✿゚▽゚)ノ

2017编程提高第3节课——面向对象设计(3)


学习UML的好处

  • 终于能看懂领导画的UML图了
  • 终于可以在概念层面和别人交流了
  • 注意: UML不是OOA/OOD, 它只是一种表示法

UML的阴和阳

Class Diagram

  • 类(Class)封装了数据和行为,它是具有相同属性、操作、关系的对象集合的总称
  • 类图展示类及类之间的静态关系
  • 和具体实现/语言无关

    Class的图形化标识

  • 分为三部分的矩形
    • 类名
    • 属性(字段)
    • 方法(操作)
  • 修饰符
    • +public
    • -private
    • #protected
  • 抽象类:斜体字 (或者用«abstract»表达)
  • 静态变量或者方法用下划线

类之间的关系

  • Has a
    • 关联 : 一个对象需要“知道”另外一个对象
    • 聚合: 集合-成员关系
    • 组合: 整体-部分, 具备生命周期控制
  • Is a
    • 继承
  • 依赖

关联

  • 一个类需要知道另外一个类属性和方法才能工作
  • 关联可以是单向的也可以是双向的
  • Has a 关系
  • 实例变量

聚合

  • 聚合也是一种关联
    • 表达整体和部分的关系,仅仅通过语法层面无法区分是关联还是聚合,需要考察类之间的逻辑关系
  • A聚合了B, 但是B可以在A创建之前就存在
  • 实例变量

组合

  • 比聚合更强的关联, 同样, 聚合和组合无法通过语法来区别
  • 整体的对象负责代表部分的对象的生命周期
    • Document由Page组合而成, Page是由Document来创建

常见的多重性关联关系

例子

  • 计算机
    • CPU,主板,硬盘,键盘,鼠标
  • 航母编队
    • 航空母舰,预警机,潜艇,驱逐舰
  • 订单(Order)
    • 订单项(LineItem)
  • 调查问卷
    • 问卷选项

依赖

  • 体现为局部变量、方法的参数或者对静态方法的调用

继承

3分钟练习

画出Singleton模式的类图

何时使用类图?

  • 要关注关键的概念和类
    • 不要事务巨细,画出所有的类
  • 不要只关注结构而忘了行为
    • 类需要行为来验证

Sequence Diagram 顺序图/时序图

  • 描述了对象之间传递消息的时间顺序
  • 顺序图的主要元素
    • 对象/参与者
    • 时间线
    • 消息
    • 激活

Sequence Diagram 的 Combined Fragment

三分钟练习

画出和下列代码对应的顺序图

Use case

  • a use case is a list of actions or event steps, typically defining the interactions between a actor and a system, to achieve a goal
    • Use case 把系统当做黑盒子, 只考虑和系统的交互, 不考虑内部的实现。
    • 是一种有效的需求分析技术
  • Formal use case vs informal use case

例子

Informal use case

Use case diagram

  • Use case diagram试图回答这几个问题
    • 软件系统是为谁建立的?
    • 软件系统必须做什么事情?
  • 描述了用户的各种需求,向用户展示了其所需要的系统的整体结构及其边界
    • Actor
    • Use case
    • Relation

Actor (活动者)

  • Actor是指向软件系统发出请求,或享受系统服务的事物。
  • Actor可以是人,也可以是系统:定时器,时钟,硬件设备

Use case (用例)

  • 用例是指系统的一个功能模块。
  • 命名惯例: 动词+名词

Use case 的关系

include

extend

generalization

我的个人经验

  • UML可以让你对系统全局有个了解
    • 对阅读源码也很有用
  • 但是,文档非常容易过时
    • 把代码写完就不错了,还让我更新文档?
    • 类图,顺序图描述了细节,容易落后于代码的更新
    • 用例图相对稳定
  • 在讨论或思考时用UML图沟通想法很有用
    • 一个白板就够了

作业

骰子游戏

  • 骰子游戏,一次丢两个骰子,如果总和是7则赢, 否则就输
  • 从中提取类, 画出类图和顺序图

类提示: Player , DiceGame, Dice

画出一个购物网站的Use case 图

  • 用户可以搜索产品
  • 用户可以查看产品的细节
  • 用户可以登录
  • 用户可以把产品加入购物车
  • 用户可以下订单


评论