UML简介

        统一建模语言UML是OMG(Object Management Group)在1997年发表的图标式软件设计语言,它综合了很多种当时已经存在的面向对象的建模语言、方法和过程。
        对于一个软件建模系统而言,UML语言具有以下的重要功能:可视化功能、说明功能、建造功能和建文档功能。UML目前是软件行业标准的建模语言。可以采用UML对需求、分析、设计、实现和部署等工作进行形式化描述。达到交流共同的作用。同时基于UML的模型驱动开发支持以架构为核心、快速分析设计和迭代增量的开发方法。
UML包括以下各种图:
  • 用例图
  • 类图
  • 顺序图
  • 协作图
  • 状态图
  • 活动图
  • 构建图
  • 部署图
       在这些图中,用例图、类图和顺序图是最为有用的。在以上这些图中,将他们在大体上可以划分为静态图和活动图两种。静态图描述了系统的静态结构,在显示一个系统已有的类及它们之间的静态关系时最为有用。活动图描述了一个系统的动态性质,在显示系统的元素如何协作产生满足要求的系统行为方面最为有用。静态图如下:

图的名字
介绍
用例图
用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系。
类图
类图表示不同的实体(人、事物和数据)如何彼此相关;换句话说,它显示了系统的静态结构。
组建图
组件图提供系统的物理视图。它的用途是显示系统中的软件对其他软件组件(例如,库函数)的依赖关系。
部署图
部署图表示该软件系统如何部署到硬件环境中。它的用途是显示该系统不同的组件将在何处物理地运行,以及它们将如何彼此通信。

动态图如下:

图的名字
介绍
活动图
活动图可用于在业务单元的级别上对更高级别的业务过程进行建模,或者对低级别的内部类操作进行建模。
状态图
状态图表示某个类所处的不同状态和该类的状态转换信息。
顺序图
序列图显示具体用例(或者是用例的一部分)的详细流程。它几乎是自描述的,并且显示了流程中中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。
协作图
协作图是一种相互作用图,描述发出信息、接受信息的一系列对象的组织结构。

        其中,类图、状态图和顺序图最为常用,以下就这三种图做详细的介绍。

        类图是显示出类、接口以及它们之间的静态结构和关系的图。类图的最基本的元素是类或接口。如下的类图

Program
-salary:double
+lunchHours:long
#jobs:String
+Program
+Program
-work:void
-updateSkills:void
jobTitle:String


类图有以下几层:
  • 类名
  • 属性清单
  • 方法清单
  • 性质清单
        如果一个类有内部成员类,它的类图就会有五层。在类的类图中,除了类名层是不能省略、必须显示的以外,其他的几层都是可以在UML图中省略。
        第一层是类名。类名如果是正体字,表明类是具体的,如果类名是斜体字,表明类是抽象的。显然,以上的类图是一个具体的类。
        第二层是属性层。属性可以是public、private和protected中的其中一种。若属性的左边是加号(+)则表明是public;如果是减号(-)则表明是private;如果是井号(#)则表明是protected。
        第三层是方法层。方法的属性可以是public、private和protected中的其中一种。若方法的属性左边是加号(+)则表明该方法是public;如果是减号(-)则表明该方法是private;如果是井号(#)则表明该方法是protected。如果在方法的下面有一道划线,则表明这是一个静态的方法。
如下面方法所示,一个方法有如下几个要素如:方法的属性(public、private和protected中的其中一种)、方法名(program)、返回值类型(String)、方法参数(int param1, int param2)和方法体({}之间的内容)。
public String program(int param1, int param2)
{
          return "return value = " + param1 + param2;
}
        一个构造函数也属于方法,但是构造函数是特殊的和没有返回类型的方法。一个类的构造函数不一定是public,它也可以是private或protected。
        第四层是性质层,性质是由一个属性即由一个内部变量,一个赋值函数(mutator)和一个取值函数(accessor)组成的结构。如下代码所示:
public String getIETitle()
{
         return ieTitle;
}
public void setIETitle()
{
        this.ieTitle = ieTitle;
}
private String ieTitle;

        接口的类图:接口的类图与类的类图几乎一样,唯一的区别就是接口的名字有"interface"的字样。如下图所示:

Interface
Employee
+employeeID:String
+getEmployeeID():String
+setEmployeeID(id:String):void
+AnInnerClass1

以下介绍类图中的关系:

        在类与类之间,会有连线指明它们之间的关系。类和类、类和接口、接口和接口之间可以建立以下几种关系:一般化关系、关联关系、聚合关系、合成关系和依赖关系,这几种关系都是静态的。

        一般化关系表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,或从实现接口的类指向被实现的接口。如下图所示:
extends
implements
        一般化关系在Java语言中可以直接翻译为关键字extends和implements。前者描述类与类之间、接口与接口之间的关系,后者描述类与接口间的一般化关系。
关联关系:

       关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以上双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头。单向的关联有一个箭头,表示关联方向。在常用中,单向的应用更为普遍,双向的关联通常不鼓励使用。通常是箭头末端的类具有箭头端的实例变量。

       在Java语言里,关联关系是使用实例变量实现的。必不在上面的Teacher类中,就出现了一个类型为Student的实例变量。这个变量实现了这两个类之间的关联关系。每一个关联都有一个名字,如上面的关联名字是Teaches。箭头的方向表明遍历或者查询的方向。
 
        在每一个关联的端点,还可以有一个基数,表明这一端的类可以有几个实例。比如:唐僧和他的徒弟形成一个关联的关系,在这个关系里面,唐僧只能有一个,而徒弟可以有好几个,如下图所示:
常见的基数如下所示:
 
基数
含义
0..1
零个或者一个实例
0..*或者*
对实例的数目没有限制(可以是0)
1
只有一个实例
1..*
至少1个实例
n..m
在n到m个实例
 
一个关联关系往往可以进一步确定为聚合关系或者合成关系。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值