1 泛化关系:
1.1 定义:
泛化关系是一般元素和具体元素之间的一种分类关系。具体元素与一般元素完全一致,但包含一些额外的信息(is a)。在允许使用一般元素的场合,可以使用具体元素的实例。
1.2 描述:
在实际生活中,有许多东西都具有共同的特征。对象也可以具有共同的特征,您可以使用它们所属类之间的泛化关系来阐明这些共同特征。通过将共同特征抽取到它们所属的类中,可以在将来更容易地变更和维护系统。泛化是的多态成为可能。
1.3 举例:
交通工具为父类,汽车和自行车为子类。
图 1 泛化
代码:Transport.h
#ifndef TRANSPORT_H_HEADER_INCLUDED_B16409BB
#define TRANSPORT_H_HEADER_INCLUDED_B16409BB
//##ModelId=4E9B908F0196
class Transport
{
};
#endif
==================================================
代码:Bicycle.h
#ifndef BICYCLE_H_HEADER_INCLUDED_B1647D9B
#define BICYCLE_H_HEADER_INCLUDED_B1647D9B
#include "Transport.h"
//##ModelId=4E9B9091037A
class Bicycle : public Transport
{
};
#endif
================================================
代码:Car.h
#ifndef CAR_H_HEADER_INCLUDED_B16447DF
#define CAR_H_HEADER_INCLUDED_B16447DF
#include "Transport.h"
//##ModelId=4E9B909302AF
class Car : public Transport
{
};
#endif
===============================================
===============================================
2 依赖关系:
2.1 定义:
如果两个元素其中一个的定义发生改变则会引起另一个元素发生变化则称这两个元素之间存在依赖关系(use a)。
2.2 描述:
依赖可能存在于下列几种情况中:
1) 一个类要发送消息给另一个类
2) 一个类将另一个类作为其数据的一部分
3) 一个类的操作中将另一个类作为其参数
2.3 举例:
系统类依赖于窗口类,当窗口类发生变化时,系统类也会放生变化。
图 2 依赖
代码:Form.h
#ifndef SYSTEM_H_HEADER_INCLUDED_B1644885
#define SYSTEM_H_HEADER_INCLUDED_B1644885
#include "Form.h"
//##ModelId=4E9BC232002E
class System
{
};
============================================
代码:System.h
#ifndef TRANSPORT_H_HEADER_INCLUDED_B16409BB
#define TRANSPORT_H_HEADER_INCLUDED_B16409BB
//##ModelId=4E9B908F0196
class Transport
{
};
==============================================
===============================================
3 关联关系
3.1 普通关联关系:
3.1.1 定义:
类与类之间的联接,它使一个类知道另一个类的属性和方法(has a)。
3.1.2 描述:
关联是对象间长期的一种关系,在这个长期的关系中,被调用类表现为调用类的引用、或者调用类的属性,在这些情况下,我们说调用类和被调用类之间就属于关联关系。关联可以是双向的,也可以是单向的。
3.1.3 举例:
图 3 普通关联
代码:Team.h
#ifndef TEAM_H_HEADER_INCLUDED_B16449D0
#define TEAM_H_HEADER_INCLUDED_B16449D0
class Player;
//##ModelId=4E9BD0170157
class Team
{
};
#endif
===============================================
代码:Player.h
#ifndef PLAYER_H_HEADER_INCLUDED_B164167F
#define PLAYER_H_HEADER_INCLUDED_B164167F
class Team;
//##ModelId=4E9BD02402EE
class Player
{
};
#endif
===============================================
===============================================
3.2 聚集关系
3.2.1 定义:
3.2.2 描述:
聚集关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚集关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥 有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,则A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。
3.2.3 举例:
图 4 聚集关系
代码:Class.h
#ifndef CLASS_H_HEADER_INCLUDED_B1645976
#define CLASS_H_HEADER_INCLUDED_B1645976
#include "Student.h"
//##ModelId=4E9BE69303D8
class Class
{
};
#endif
===============================================
代码:Student.h
#ifndef STUDENT_H_HEADER_INCLUDED_B1645C8B
#define STUDENT_H_HEADER_INCLUDED_B1645C8B
//##ModelId=4E9BE69701B5
class Student
{
};
#endif
================================================
================================================
3.3 组合关系:
3.3.1 定义:
关联关系的一种,是最强的关联关系(owns a)。
3.3.2 描述:
组合是关系当中的最强版本,它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命期的关系。被包含的对象还可以再被别的对象关联,所以被包含对象是可以共享的,然而绝不存在两个包含对象对同一个被包含对象的共享。
3.3.3 举例:
图 5 组合关系
代码:Class.h
#ifndef CLASS_H_HEADER_INCLUDED_B1645976
#define CLASS_H_HEADER_INCLUDED_B1645976
#include "Student.h"
//##ModelId=4E9BE69303D8
class Class
{
};
#endif
================================================
代码:Student.h
#ifndef STUDENT_H_HEADER_INCLUDED_B1645C8B
#define STUDENT_H_HEADER_INCLUDED_B1645C8B
//##ModelId=4E9BE69701B5
class Student
{
};
#endif
================================================
================================================
4 实现关系
4.1 定义:
是将一种模型元素与另一中国模型元素链接起来,从而说明和其实现之间的关系。
4.2 描述:
泛化和实现关系都可以将一般描述与具体描述联系起来。泛化将同一语义层上的元素连接起来,并且通常在同一模型内。实现关系则将不同语义层内的元素连接起来,通常建立在不同的模型内。
4.3 举例:
图 6 实现关系
代码:Interface.h
#if !defined(_INTERFACE_H)
#define _INTERFACE_H
class Interface {
public:
};
#endif
==========================================
代码:Car.h
#if !defined(_CAR_H)
#define _CAR_H
#include "Interface.h"
class Car : public Interface {
public:
};
#endif
=========================================
=========================================