小皮博客 | Xiaopi's Blog

9-OO与设计模式-2-UML入门

面向对象与设计模式的培训素材。
第二部分 UML基础

概要

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG(对象管理组织,Object Management Group)标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。

UML图的一般分类

用例图:描述系统功能;
类图: 描述系统的静态结构;
对象图 :描述系统在某个时刻的静态结构;
包图:
时序图:按时间爱你顺序描述系统元素间的交互;
协作图:按照时间和空间顺寻描述系统元素间的交互和它们之间的关系;
状态图:描述了系统元素的状态条件和响应;
活动图:描述了系统元素的活动;
组件图:描述了实现系统的元素的组织;
配置图:描述了环境元素的配置,并把实现系统的元素映射到配置上。

UML符号

1.类(Class):

  • 使用三层矩形框表示。
  • 第一层显示类的名称,如果是抽象类,则就用斜体显示。
  • 第二层是字段和属性。
  • 第三层是类的方法。
  • 注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。

2.接口(Interface):

  • 使用两层矩形框表示,与类图的区别主要是顶端有<>显示。
  • 第一行是接口名称。
  • 第二行是接口方法。

3.继承类(extends):

  • 用空心三角形+实线来表示。

4.实现接口(implements):

  • 用空心三角形+虚线来表示

5.关联(Association):

用实线箭头来表示。

6.聚合(Aggregation):

  • 用空心的菱形+实线箭头来表示
  • 聚合:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,例如:公司和员工

7. 组合(Composition):

  • 用实心的菱形+实线箭头来表示
  • 组合:部分和整体的关系,并且生命周期是相同的。例如:人与手

8.依赖(Dependency):

  • 用虚线箭头来表示,例如:动物与氧气

UML图示及解答

一个经典的UML图

title-img

图1 一个经典的描述面向对象的UML图

Generalization(泛化)

表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。

图2 Generalization(泛化)

Dependency(依赖)

表现为函数中的参数(use a)。是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。

title-img

图3 Dependency(依赖)

Association(关联)

  • 表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可复用的类。(双向关联的情况需要参考”重构–改善现有代码设计”一书)
  • 从类之间关系的强弱程度来分,关联表示类之间的很强的关系;依赖表示类之间的较弱的关系;
  • 从类之间关系的时间角度来分,关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。比如学生管理系统中的Student类和Class(班级)类,一个Student对象属于哪个Class是一个重要的业务关系,如果这种关系不保存,系统就无法管理。另外,依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的,比如Student类和StuEditScreen(学生登录界面)类之间就是一种依赖关系,StuEditScreen类依赖Student类,依赖Student对象的信息来显示编辑学生信息。
  • 设计类之间的关系是遵循的原则:首先判断类之间是否是一种“关联”关系,若不是再判断是否是“依赖关系”,一般情况下若不是关联,就是依赖关系
    依赖一般情况下是以下几种情况之一:a、ClassA中某个方法的参数类型是ClassB;这种情况成为耦合;b、ClassA中某个方法的参数类型是ClassB的一个属性;这种情况成为紧耦合;c、ClassA中某个方法的实现实例化ClassB;d、ClassA中某个方法的返回值的类型是ClassB;如果出现了上述四种情况之一,两个类很有可能就是“依赖”关系。
    依赖关系(Dependency):是类与类之间的连接,依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。下面的例子中class A 依赖与class B、C、D。
    从使用的频率来看,关联(包括聚合和组合)关系是使用最为广泛的;其次是依赖和继承

title-img

图4 Association(关联)

Aggregation(聚合)

关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。
title-img

图5 Aggregation(聚合)

Composition(组合)

关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。Composition(组合关系)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
title-img

图6 Composition(组合)

一个更有代表性的UML图

title-img

图7 一个更有代表性的UML图

版权声明

本文标题:9-OO与设计模式-2-UML入门

文章作者:盛领

发布时间:2015年04月11日 - 22:52:05

原始链接:http://blog.xiaoyuyu.net/post/d1859230.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

如您有任何商业合作或者授权方面的协商,请给我留言:sunsetxiao@126.com

盛领 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!