UML类图实例

来源:互联网 发布:拆分合并单元格js插件 编辑:程序博客网 时间:2024/05/17 21:43

转:http://blog.csdn.net/xhf55555/article/details/6896316

下面是类图的实例

UML中类图实例

接口:空心圆+直线(唐老鸭类实现了‘讲人话’);
依赖:虚线+箭头(动物和空气的关系);
关联:实线+箭头(企鹅需要知道气候才迁移);
聚合:空心四边形+实线+箭头(雁群和大雁的关系);
合成/组合:实心四边形+实线+箭头(鸟和翅膀的关系);
泛化/继承:空心三角形+实线(动物和鸟的继承关系);
实现:空心三角形+虚线(实现大雁飞翔的接口);

 

UML类图

解释UML类图:

1. 首先看“动物”矩形框,它代表一个类。该类图分为三层,第一层显示类的名称,如果是抽象类就要用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法和行为。

注意前面的符号,‘+’表示public, ‘—’ 表示private, ‘#’表示protected.

2. “飞翔”矩形框表示一个接口图,它与类图的区别主要是顶端有《interface》显示,第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了“讲人话”的接口。

interface IFly                        interface Ilanguage
{                                      {
     voidFly();                          void Speak();
}                                       }

3. 动物,鸟,鸭,唐老鸭他们之间都是继承的关系,继承关系用空心三角形+实现来表示。

4.“大雁”实现了“飞翔”接口。实现接口用空心三角形+虚线来表示。(注:下面的图中应为空心三角形)

classBird:Animal                                     class WideGoose:IFly
{                                                      {
     //继承动物类                                   //实现飞翔接口
}                                                      }

5. 企鹅与气候有很大的关系,企鹅需要“知道”气候的变化,需要“了解”气候规律。当一个类“知道”另一个类时,可以用关联(association)关系。关联关系用实线箭头来表示。

class Penguin :Bird
{
        private Climateclimate;//在企鹅Penguin中,引用到气候Climate对象
}

6. “大雁”和“雁群”这两个类。大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+ 实线箭头表示

classWideGooseAggregate
{
            private  WideGoose[] arrayWideGoose;
            //在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose
}

7. “鸟”和“翅膀”这两个类。鸟和翅膀似整体和部分的关系,并且翅膀和鸟的生命周期是相同的,在这里鸟和其翅膀就是合成关系。合成(composition)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。合成关系用实心的的菱形+实线箭头来表示。另外,合成关系的连线两端还有一个数字“1”和数字“2”,,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两支翅膀。如果一个类可能有无数个实例,则就用“n”来表示。关联关系,聚合关系也可以有基数的。

class Bird
{
       private Wing wing;
       public Bird()
       {
            wing=new Wing();
            //在鸟Bird类中,初始化时,实例化翅膀Wing,它们之间同时生成
       }
}

8. “动物”、“氧气”与“水”之间。动物有几大特征,比如有新陈代谢,能繁殖。而动物要有生命,需要氧气,水以及食物等。也就是说动物依赖于氧气和水。它们之间是依赖关系(Dependency),用虚线箭头来表示

abstract class Animal
{
           public bolism(Oxygenoxygen,Water water)
           {
           }
}

 

 

依赖与关联之区别 :

 

只要存在对象间的交互,无论是控制的还是数据的,两者之间就存在依赖。我们现在说的依赖,它是比关联更弱的关系。

 

依赖是对象间短暂的一种关系,在这个短暂的关系中,被调用类表现为调用类的局部变量、方法的参数、以及调用类调用被调用类的静态方法,在这些情况下,我们说调用类和被调用类之间就属于依赖关系。

 

关联是对象间长期的一种关系,在这个长期的关系中,被调用类表现为调用类的引用、或者调用类的属性,在这些情况下,我们说调用类和被调用类之间就属于关联关系。

常见的关联关系有:一对一关系、一对多关系、多对多关系,例如典型的客户与订单、公司与员工的关系就是一种关联关系。

 

实例:

一、依赖关系:

1、作为调用类的局部变量

Class A

{

Void MethodA()

{

B b = new B();

b.MethodB();

}

}

2、作为调用类方法的参数

Class A

{

Void MethodA(B b)

{

b.MethodB();

}

}

3、调用被调用类的静态方法

Class A

{

Void MethodA()

{

B.StaticMethod();

}

}

 

二、关联关系

1、作为调用类的引用

Class A

{

B b;

Public Class A

{

b = new B();

}

Void MethodA()

{

b.MethodB();

}

}

2、作为调用类的属性

Class A

{

B b;

Public PropertyB

{

Get { return this.b; }

Set { this.b = value; }

}

}

 

首先,关联可以双向,而依赖是单向的,类A与类B双向关联可以是A与B相互可以作为对方的一个attribute,单向的话,就指其中一个类作为另一个类中的attribute;依赖就只有单向的,不存在attribute的问题,例如类A依赖类B,表示在类A中有三种类B的使用方法:一是类B是全局的,二是类B在类A中实例化,三是类B作为参数被传递
其次,关联一般使用实例变量的方式实现,而依赖一般使用方法的参数及对静态方法的调用的方式来实现。通常,依赖关系都可以有一个(动态)的名字。

关联还可以演化成聚合和合成关系。

关联强调的是结构,依赖强调的是使用

唐僧和徒弟就是关联,而程序员和程序之间就是依赖


首先类之间的关系从宏观上可以分为:关联、依赖、继承(泛化),而其中关联又有两种特例:聚合和组合,不过在UML2.X中聚合和组合合成一种关系了。

  • 从使用的频率来看,关联(包括聚合和组合)关系是使用最为广泛的;其次是依赖和继承
  • 关联和依赖的区别:
    1. 从类之间关系的强弱程度来分,关联表示类之间的很强的关系;依赖表示类之间的较弱的关系;
    2. 从类之间关系的时间角度来分,关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。比如学生管理系统中的Student类和Class(班级)类,一个Student对象属于哪个Class是一个重要的业务关系,如果这种关系不保存,系统就无法管理。另外,依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的,比如Student类和StuEditScreen(学生登录界面)类之间就是一种依赖关系,StuEditScreen类依赖Student类,依赖Student对象的信息来显示编辑学生信息。
    3. 设计类之间的关系是遵循的原则:首先判断类之间是否是一种“关联”关系,若不是再判断是否是“依赖关系”,一般情况下若不是关联,就是依赖关系
    4. 依赖一般情况下是以下几种情况之一:a、ClassA中某个方法的参数类型是ClassB;这种情况成为耦合;b、ClassA中某个方法的参数类型是ClassB的一个属性;这种情况成为紧耦合;c、ClassA中某个方法的实现实例化ClassB;d、ClassA中某个方法的返回值的类型是ClassB;如果出现了上述四种情况之一,两个类很有可能就是“依赖”关系。
    5. 依赖关系(Dependency):是类与类之间的连接,依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。下面的例子中class A 依赖与class B、C、D。

      java 代码
      1. public class A{
      2. public getB(C c, d){
      3. new E();
      4. new B(c, d, e);
      5. }

    6. 关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。
      关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。关联在代码中一般表示为属性(成员变量),例如下面例子中 class A与B关联
      java 代码
      1. public class A{
      2. private b;
      3. }
      如果B也关联到A,那么它们就是双向的关联。
      java 代码
      1. public class B{
      2. private A a;

    7. 聚合关系(Aggregation):是关联关系的一种,是强的关联关系。聚合是整体与个体之间的关系。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。

      与关联关系一样,聚合关系也是通过实例变量来实现的。

      ***关联关系所涉及的两个类是处于同一层次上的,而在聚合关系中,两个类处在不平等的层次上的,一个代表整体,一个代表部分。(关联与聚合仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。

    8. 组成关系(Composition):是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期,合成关系是不能共享的。

      代表整体的对象需要负责保持对象的存活,在一些情况下负责将代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,

      *******代表部分的对象在每一个时刻只能与一个对象发生合成关系,由后者排它的负责其生命周期。


  • 0 0
    原创粉丝点击