UML基础篇

摘自网上一些文章。

 

1.UML——统一建模语言(Unified Modeling Language),UML的目标之一就是为开发团队提供标准通用的设计语言,以便更有效地开发和构建计算机应用。

对象建模技术是进行面向对象分析和设计的基础。

通过面向对象分析和设计,就能得出目标系统的对象、类以及它们之间关系的完整结构信息,为编写代码打好基础。

 

2.UML的图可划分为如下三种类型。

  • 静态图(static diagram):描述了那些不发生变化的软件元素的逻辑结构,描绘了类、对象、数据结构及其存在于它们之间的关系。
  • 动态图(dynamic diagram):展示了在运行期间的软件实体的变化,描绘了执行流程、实体改变状态的方式。
  • 物理图(physical diagram):显示了软件实体的不变化的物理结构,描绘库文件、字节文件、数据文件等,以及存在于它们之间的关系。

3.常用的UML图包括用例图(use case diagram)、类图(class diagram)、对象图(object diagram)、序列图(sequence diagram)、状态图(statechart diagram)、活动图(activity diagram)、组件图(component diagram)和部署图(deployment diagram):

   

   

分析阶段

设计阶段

实现阶段

静态图

用例图

ü

 

 

 

对象图

ü

ü

 

 

类图

ü

ü

ü

 

组件图

 

ü

ü

 

部署图

 

 

ü

动态图

协作图

ü

ü

ü

 

序列图

ü

ü

ü

 

活动图

ü

 

 

 

状态图

ü

ü

ü

物理图

文件、数据库等

ü

ü

ü

 

(一)用例图

  • 用例图的主要目的是帮助开发团队以一种可视化的方式来理解系统的功能需求
  • 用例图一般用于表示用例的组织关系,要么是整个系统的全部用例,要么是完成具体功能(例如,所有安全管理相关的用例)的一组用例
  • 在用例图中,用椭圆来表示用例,并将用例的名称放在椭圆的中心或椭圆下面的中间位置。人形符号用来表示角色(用户)。角色和用例之间的关系使用简单的线段来描述,表示角色可以操作此用例。
  • 在用例图中,用一个方框来表示系统的边界。所有系统用例都放在框内,所有动作者都位于框外。动作者和用例之间用直线相连。方框内的每一件事物都是系统的一 部分,方框外的每一件事物都是系统的外部。用例图也可以表示方框内的系统用例之间的关系,最常见的是“使用关系”,用带箭头的直线来表示,箭头指向被使用 的用例。还有一种关系是扩展关系,用来表示继承。
  • 用例图不会列出系统不能完成的功能。如果在用例图中提供清楚的、简要的用例描述,项目赞助商就能很容易地看出系统是否提供了必需的功能。

(二)类图和对象图

  • 类图表示不同的实体(人、事物和数据)如何彼此相关,显示了系统的静态结构。
  • 类图是一个分为三个部分的矩形。最上面的部分显示类的名称,中间部分显示类的属性,最下面的部分显示类的操作(或者说“方法”)。实际上,最常用、最简单的类图就是一个在里面显示了类名的长方形,因为在UML中,大多数类只要有一个能够清楚表达的命名就可以了。
  • 在类名部分还可以显示类的构造类型。类的构造型显示在一对双角括符号“« »”之间,经常放在类的名称上面。常见的构造类型包括实现类(直接显示类名)、接口(在类名上面显示 «interface»),以及工具类(在类名上面显示 «utility»)。如果类名用斜体表示,或者在类名下面标上{abstract},就表示这个类是一个抽象类。
  • 在属性和方法的前面有一个字符用来表示属性或方法的作用域,它们的意义如下:
    • “-”表示属性或方法是私有的(private);
    • “#”表示属性或方法是保护的(protected);
    • “+”表示属性或方法是公用的(public)。
  • 紧接在属性或方法的参数名称的冒号(:)号之后,显示了属性的类型或方法的参数的类型。方法的返回值类型显示在方法后面的冒号之后。
  • 下图显示了一个类Person的类图,它对应的类的C#源代码如下:

    Person

    +name: string

    +sex: char

    -age: int

    +Work(in type: string): void

    +Person(in name: string, in sex: char, in age: int): void

    +Speak(): void

    +Eat(): voi

    类图示意

  • 对象图:用来表示类的实例化对象。
  • 对象图用一个两层的矩形来表示,上层标识对象名和类名,下层标识对象的实例化属性值。下面的代码将创建一个Person类的对象mary:

    Person mary = new Person("Mary", 'F', 24);

    对象mary的对象图如下图所示。

    mary: Person

    name: string   ="Mary"

    sex: char      ='F'

    age: int       =2

    对象图示例

  • 在一个系统中,类之间存在多种关系,如下所示。

    — 继承(inheritance):继承是指一个类从其父类派生而来,继承了父类的属性和方法。基于类的继承叫做一般化(generalization),基于接口的继承,叫做实现(realization)。

    — 关联(association):类之间的关联大多用来表示变量实例持有对其他对象的引用,这种关系是半永久的,但没有包含关系。

    — 依赖(dependency):依赖是不同类的实例之间的暂时关系。

    — 聚合(aggregation):聚合是关联的一种特殊形式,它意味着一种整体/部分(whole/part)的关系,但是部分也可以作为其他整体的组分,而且部分和整体之间也没有生命期的依赖。

    — 组合(composition):组合是聚合的一种特殊形式,组合的关联性比聚合更强,部分只能作为唯一的一个整体的部分,而且部分的生命周期依赖于整体的生命周期。

  • UML类图对这些关系的表示方法如下图所示。具有关联、聚合和组合关系的两个对象之间可能是没有数量关系的一种联系,也可能存在数量关系,比如1对1(不标识)、0个或1个(标识为0…1)、0个或多个(标识为0…*或0…n )、1个或多个(标识为1…*或1…n )或者确切的数字(直接标识数字)。
  • UML类图之间的关系表示方法

  • 下图显示了一个包含了图6-2中的对象的类图。其中包括一个继承关系和两个关联关系。CDSalesReport类继承自Report类。一个 CDSalesReport类与一个CD类关    联,但是CD类并不知道关于CDSalesReport类的任何信息。CD类和Band类都彼此知道对方,两 个类彼此都可以与一个或者多个对方类相关联。
  • 下图显示了一个包含多种关系的类图的另一个例子。Person类实现了IHuman接口,Author类继承了Person类;Book类与 Author类之间的关联是1对多的,即一本书可能有一个或多个作者;Person读书,这是一种暂时的单向依赖;Book由一个或多个Page组成,每 一个Page只能作为一本Book的一部分,这是一种组合关系;Bookshelf里可以不放或者放多本Book,Book也可以放在其他的 Bookshelf中,Bookshelf的存在并不能影响Book的存在性,这是一种聚合关系。包含关系的类图

  • 一个包含多种关系的类图

  • UML与源代码

    UML是一种设计语言,它的目的不是表现细节,而是表现结构,仅仅展示必要的细节。因此,UML不可能与源代码一一对应,只存在结构上的对应关系。作为一种参考,下面列出了上图中的类图的C#源代码:

(四)序列图

  • 序列图显示具体用例(或用例的一部分)的详细流程。它几乎是自描述的,并且显示了流程中不同对象之间的交互关系,同时还可以很详细地显示对不同对象的各种调用。
  • 更新中......

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章