Visio画UML C++类图

2014年1月5日 由 Creater 留言 »

写本文的目的

1.复习下常见的类关系
2.熟悉下visio下如何画类图,为机器人项目代码的完整与规范性做好铺垫。
本文介绍了在Visio中画UML C++类图,在UML类图中,常见的有以下几种关系: 泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
本文以司机驾驶的车作为例子,车(Car)可以为摩托车(Motor)或者公交车(Bus)。

1.泛化(Generalization)

使用范围:继承
举例:车与汽车,摩托车
描述:车是所有类型车的基类,所有实际的车类型为其子类
UML:
Generalization
代码:

class Car
{
public:
	Car(){};
	virtual ~Car(){};
	virtual void run(){}
private:

};
class Motor : public Car
{
public:
	virtual void run(){}
};
class Bus : public Car
{
public:
	virtual void run(){}
};

2.实现(Realization)

使用范围:继承,并实现接口
举例:车与汽车,摩托车
描述:车是所有类型车的虚基类,所有实际的车类型为其子类.与Generalization不同的是,Realization中基类为虚基类。是一种类与接口的关系,表示类是接口所有特征和行为的实现.
UML:
Realization
代码:

class Car
{
public:
	Car(){};
	virtual ~Car(){};
	virtual void run()=0;
private:

};
class Motor : public Car
{
public:
	virtual void run(){}
};
class Bus : public Car
{
public:
	virtual void run(){}
};

3.关联(Association)。关联是一种拥有关系。

使用范围:作为类的数据成员
举例:驾驶员需要开车,即驾驶员类中有车这个数据成员
描述:驾驶员类作为数据成员在驾驶员类中。而且关联是一种拥有的关系,它使一个类知道另一个类的属性和方法。
UML:
Association
代码:

#include <iostream>
using namespace std;
class Car
{
public:
	Car(){};
	virtual ~Car(){};
	virtual void run()=0;
private:

};
class Motor : public Car
{
public:
	virtual void run(){cout<<"开摩托"<<endl;}
};
class Bus : public Car
{
public:
	virtual void run(){cout<<"开公交车"<<endl;}
};
class People
{
public:
	virtual ~People(){}
	virtual void drive(){}
};
class Driver : public People
{
private:
	Car *car;
public:
	Driver(Car *_car):car(_car){}
	void drive(){cout<<"驾驶员";car->run();}
};
int main() {
	Car *car = new Bus();
	People *people = new Driver(car);
	people->drive();
	delete people;
	delete car;
	system("pause");
}

4.聚合(Aggregation),聚合是一种包含关系

使用范围:作为类的数据成员
举例:车包含轮胎
描述:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
UML:
Aggregation
代码:

class Car
{
public:
	Car(){};
	virtual ~Car(){};
	virtual void run()=0;
private:

};
class Motor : public Car
{
public:
	virtual void run(){}
	void setWheel(Wheel *_wheel){this->wheel = _wheel;}
private:
	Wheel *wheel;
};
class Bus : public Car
{
public:
	virtual void run(){}
	void setWheel(Wheel *_wheel){this->wheel = _wheel;}
private:
	Wheel *wheel;

};

5.组合(Composition),组合也是一种包含关系

使用范围:作为类的数据成员
举例:车轮的构成包含橡胶
描述:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
UML:Composition
代码:

class CarDoor
{};
class Car
{
public:
	Car(){};
	virtual ~Car(){};
private:
	CarDoor *door;
};

6.依赖(Dependency)

使用范围:局部变量、方法的参数或者对静态方法的调用
举例:某个人如果新买了一辆车,则需要在该人名下增加一台车,用车作为参数传入。
描述:再局部变量中定义对象、在成员函数中作为参数或者对静态方法的调用
UML:
Dependency
代码:

#include <iostream>
#include <vector>
using namespace std;
class Car
{
public:
	Car(){};
	virtual ~Car(){};
	virtual void run()=0;
private:

};
class Motor : public Car
{
public:
	virtual void run(){}
};
class Bus : public Car
{
public:
	virtual void run(){}
};
class People
{
public:
	virtual ~People(){}
	virtual void drive(){}
	void addCar(Car *car){cout<<"新买了一台车"<<endl;cars.push_back(car);}
private:
	vector<Car*> cars;
};
class Driver : public People
{
public:
	void drive(){}
};
int main()
{
	People *people = new Driver();
	Car *motor = new Motor();
	people->addCar(motor);
	Car *bus = new Bus();
	people->addCar(bus);
	delete motor;
	delete bus;
	delete people;
	system("pause");
}
广告位

发表评论

你必须 登陆 方可发表评论.