• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-01-05)  C++ |   26 条评论  10 
    文章评分 0 次,平均分 0.0

    写本文的目的

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

    1.泛化(Generalization)

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

    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:
    Visio画UML C++类图
    代码:

    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:
    Visio画UML C++类图
    代码:

    #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:
    Visio画UML C++类图
    代码:

    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:Visio画UML C++类图
    代码:

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

    6.依赖(Dependency)

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

    #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");
    }
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/2896.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享