參考链接:

http://www.uml.org.cn/oobject/201211231.asp  深入浅出UML

http://www.open-open.com/lib/view/open1328059700311.html  UML类图几种关系的总结

一.类

类的定义:

类是一些数据的以及对这些数据进行操作的方法的封装。它是具有同样属

性、操作、关系的对象集合的总称。类 = 数据 + 方法。

类的长处:

使代码模块化,便于管理和维护,还能够隐藏代码实现细节保护知识产权等。

类与对象的关系:

在软件系统执行时,类将被实例化成对象(Object),对象相应于某个详细的事

物。是类的实例(Instance)。

类的种类:

实体类(学生,商品等),控制类(用户注冊类等),边界类(菜单,窗体等)。

(1) 实体类:实体类相应系统需求中的每一个实体,它们通常须要保存在永久存储体中。一般使用数据库表或文件来记录,实体类既包含存储和传递数据的类,还包含操作数据的类。实体类来源于需求说明中的名词,如学生、商品等。

(2) 控制类:控制类用于体现应用程序的运行逻辑,提供相应的业务操作。将控制类抽象出来能够减少界面和数据库之间的耦合度。控制类通常是由动宾结构的短语(动词+名词)转化来的名词,如添加商品相应有一个商品添加类,注冊相应有一个用户注冊类等

(3)边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包含界面类。如对话框、窗体、菜单等。

二.UML中类的表示                          使用工具: UMLet

在UML中,我们要表示一个类,那么首先我们得确保UML中表示出的类与代码中的类保持一致,那么我们先看看代码中的类的表示。

public class Employee{

private:

string name;

int age;

string email;

public:

void modifyInfo();

string getName();

......

}

这个类有下面几个属性:

1.名字        Employee

2.可见性      公开

3.数据        name,age,email

4.方法        modifyInfo(),getName()...;

所以我们的UML类图也要保持这些属性。

对照后我们easy发现:

第一个框为类名:然后我们发现Employee 是public 型的。可是UML

类图中是没有反映出这个事实的。

第二个框为属性:这里的’-’号表示公开性为private,除了’-’号,还有其

他符号。例如以下。然后是属性名称,属性类型。

UML规定属性的表示方式为:

可见性 名称:类型 [ = 缺省值 ]

第三个框为方法。表示方法跟属性差点儿相同。

可见性:

名称

缩写形式

含义

Public

+

可从全部其它类型訪问。

Private

-

仅仅能由此类型的内部定义訪问。

Package

~

仅仅能在包括此类型的包以及显式导入此类型的全部包中訪问。

Protected

#

仅仅能由此类型以及从其继承的类型訪问。

三.类之间的关系

在UML类图中,常见的有下面几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition)。依赖(Dependency),在绘图过程中一定要搞清楚它们之间箭头的指向以及箭头类型。

1.泛化(Generalization)

【泛化关系】这个就相当于C++类中的继承关系,就是父类和子类的关系。

【箭头指向】带三角箭头的实线,箭头指向父类

2.实现(Realization)

【实现关系】是一种类与接口的关系,表示类是接口全部特征和行为的实现。

【箭头指向】带三角箭头的虚线,箭头指向接口。

这里的实现与泛化有点类似。从目的上来说,类是主要为了使代码模块化。避免反复开发。而接口主要是为了实现不同系统之间的交互,方便他人调用这些方法而且能保护知识产权。

3.关联(Association)

【关联关系】:是一种拥有的关系,它使一个类知道还有一个类的属性和方法;如:老师与学生。丈夫与妻子关联能够是双向的。也能够是单向的。双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。

【箭头及指向】:带普通箭头的实心线。指向被拥有者

3.1双向关联

比如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系。例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWF5aDU1NDAyNDI4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

3.2单向关联

类的关联关系也能够是单向的,单向关联用带箭头的实线表示。比如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系。例如以下图所看到的:

4.聚合(Aggregation)

【聚合关系】:是总体与部分的关系,且部分能够离开总体而单独存在。如车和轮胎是总体和部分的关系,轮胎离开车仍然能够存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分。必须考察详细的逻辑关系。

【箭头及指向】:带空心菱形的实心线,菱形指向总体。

5.组合(Composition)

【组合关系】:是总体与部分的关系,但部分不能离开总体而单独存在。如公司和部门是总体和部分的关系,没有公司就不存在部门。

组合关系是关联关系的一种。是比聚合关系还要强的关系,它要求普通的聚合关系中代表总体的对象负责代表部分的对象的生命周期。

【箭头及指向】:带实心菱形的实线。菱形指向总体

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWF5aDU1NDAyNDI4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系。即一个类的实现须要还有一个类的协助。

【箭头及指向】:带箭头的虚线,指向被使用者

各种关系的强弱顺序:

  泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 

UML学习之类图的更多相关文章

  1. UML学习(类图和序列图等)

    visio绘制UML图使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?新建->选择绘图类型->选择软件与数据库模板->选择UML模型图-& ...

  2. Uml学习-类图简介

    类图(Class Diagram)简介  类图是面向对象分析(OOA,Object-Oriented Analysis)和面向对象设计(OOP,Object-Oriented Deisgn)思想的重要 ...

  3. UML学习-活动图创建

    活动图(Activity Diagram)可以实现对系统动态行为的建模,主要是将用例细化,即用例内部的细节可以以活动图的方式描述.活动图描述活动的顺序,主要表活动之间的控制流,是内部处理驱动的流程,在 ...

  4. UML学习-时序图

    时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的.顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序.时序图中包括的建模元素主要有:对象(Actor) ...

  5. UML学习(二)-----类图

    UML学习(二)-----类图 http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html http://www.cnblogs ...

  6. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...

  7. UML学习笔记:活动图

    UML学习笔记:活动图 活动图 活动图是UML中描述系统动态行为的图之一,用于展现参与行为的类的活动或动作.在UML里,活动图很类似于流程图,但是有一些区别: 活动图着重表现系统行为,描述对象活动的顺 ...

  8. Thinking in UML 学习笔记(四)——UML核心视图之活动图

    在UML中活动图的本质就是流程图,它描述了为了完成某一个目标需要做的活动以及这些互动的执行顺序.UML中有两个层面的活动图,一种用于描述用例场景,另一种用于描述对象交互. 活动图只是我们用来描述业务目 ...

  9. [UML]UML系列——状态机图statechart diagram

    系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...

随机推荐

  1. 一种实现C++反射功能的想法(二)

    在介绍我的思路前, 让我们准备下预备知识 C++是怎么实现类函数的绑定的. 我们知道类的非静态成员函数是存储在全局区, 并在内存中只保存一份副本. 我们调用非静态成员函数是通过类对象进行调用. 那么如 ...

  2. iOS 数据持久性存储-对象归档

    对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...

  3. MYSQL根据分类分组取每组一条数据且按条件能排序的写法

    之前在一个项目的开发中,有遇到要根据分类来分组获取每组一条按某个条件字段排序的数据结果,于是先自己写了一条语句: select * from `表A` GROUP BY `c`; 上面这个语句有可以根 ...

  4. ICE学习第二步-----从第一个程序了解ICE(HelloWorld)

    ICE(Internet Communications Engine)是一种面向对象的中间件平台,主要用于网络通讯.它为面向对象的“客户端-服务器”模型的应用提供了一组很好的工具和API接口.目前在全 ...

  5. 1s延时程序

    #include <reg52.h>sbit P1_0 = P1^0;void Delay(); // 下面引用时一定要和这里的大小写一致否则会有警告或错误 void Main(){whi ...

  6. C语言学习之笔记

    第一章 概述 1. C语言的特点 ①语言简洁.紧凑,使用方便.灵活.共有32个关键字(也称保留字),9种控制语句. ②运算符丰富,共有34种运算符. ③数据结构丰富,数据类型有:整型.实型.字符型.数 ...

  7. 工作总结:将电脑中的ARP缓存清空黑屏命令

    ARP -d 将电脑中的ARP缓存清空ARP-a  查看arp缓存arp-s   ip与mac绑定

  8. Preparing for the Contest

     Codeforces Round #222 (Div. 1)B:http://codeforces.com/contest/377/problem/B 题意:m个任务,每个任务会有一个复杂度,然后给 ...

  9. KVM如何以HADOOP作共享存储?

    看到西部数码的作法. 回想IBM的SMARTCLOUD作法,这主要就是应用了HDFS? 外加上HBASE和ZOOKEEPER保驾的? 然后,再想到,这HDFS和OPENSTATCK的SWIFT...纠 ...

  10. 使用next-key locks 用于搜索和索引扫描,可以防止幻读

    Next-Key Locks A next-key lock is a combination of a record lock on the index record and a gap lock ...