UML类图、6种关系

目录

一,类图

二,类的6种关系

1,泛化

2,实现

3,组合

4,聚合

5,关联

6,依赖

三,总结


一,类图

类图中,每个类由3个部分组成,上面的是类名,中间的是属性,下面的是方法。

属性和方法可以用修饰符修饰:加号(+)表示public;减号(-)表示private;井号(#)表示protected

二,类的6种关系

类的6种关系:泛化 实现 组合 聚合 关联 依赖

6种关系依次减弱。

参考:UML类图几种关系的总结

1,泛化

泛化是一种继承关系,如老虎类继承动物类,动物是老虎的泛化,老虎是动物的特化。

class Animal {
public:
    Animal() {
        posX = posY = 0;
    }
    void move(int dx, int dy) {
        posX += dx, posY += dy;
    }
    void getPos() {
        cout << "x=" << posX << ", y=" << posY << endl;
    }
private:
    int posX, posY;
};

class Tiger :public Animal {
public:
    Tiger() {
        this->name = "Tiger";
    }
    string name;
};

int main()
{
    Tiger t;
    cout << t.name << endl;
    t.move(3, 4);
    t.getPos();
    return 0;
}

2,实现

实现关系是子类实现了接口类。

在JAVA中,有专门的接口类和实现的关键字。

在C++中,用纯虚类作为接口类,而且纯虚类也没有关键字,包含纯虚函数的就是纯虚类。

 老虎类实现了攀爬接口类。

class Animal {
public:
    Animal() {
        posX = posY = 0;
    }
    void move(int dx, int dy) {
        posX += dx, posY += dy;
    }
    void getPos() {
        cout << "x=" << posX << ", y=" << posY << endl;
    }
private:
    int posX, posY;
};

class Climb {
public:
    Climb() {
        posZ = 0;
    }
    virtual void GoClimb(int dz) = 0;
    void getHeight() {
        cout << "z=" << posZ << endl;
    }
protected:
    int posZ;
};

class Tiger :public Animal, public Climb {
public:
    Tiger() {
        this->name = "Tiger";
    }
    string name;
    void GoClimb(int dz) {
        posZ += dz;
    }

};

int main()
{
    Tiger t;
    cout << t.name << endl;
    t.move(3, 4);
    t.getPos();
    t.GoClimb(5);
    t.getHeight();
    return 0;
}

3,组合

组合是整体与部分的关系,个体没有独立的生命周期。

组合是把个体对象作为整体类的属性。

 

组合关系中,有1对1的,也有1对多的。 

每只老虎有4条腿,1个头。

class Leg {
protected:
    int len;
};
class Head {
protected:
    int size;
};

class Tiger {
public:
    Tiger() {
        this->name = "Tiger";
    }
private:
    string name;
    Leg leg[4];
    Head head;
};

4,聚合

聚合也是整体与部分的关系,但个体有独立的生命周期。

聚合是把个体对象的指针作为整体类的属性。

 

 虎群里可能有1-n只老虎。

class TigerGroup {
private:
    vector<Tiger*> vtiger;
};

5,关联

关联是一种拥有关系,它使一个类知道另一个类的属性和方法,

如老虎拥有若干食物,那么它就知道每个食物是什么,什么颜色,有没有坏掉等等。

有1-n的单向关联,也有n-n的双向关联,双向关联可以用双向箭头,也可以没有箭头。

  

class Food {
protected:
	string foodName;
	string foodColor;
};

class Tiger {
public:
	Tiger() {
		this->name = "Tiger";
	}
private:
	string name;
	Leg leg[4];
	Head head;
	vector<Food> food;
};

在《大话设计模式》中企鹅和气候的关系也是关联,理由是企鹅需要知道气候的变化。

6,依赖

依赖是一种使用关系,如老虎喝水。

 

class Leg {
protected:
	int len;
};
class Head {
protected:
	int size;
};

class Food {
protected:
	string foodName;
	string foodColor;
};

class Water {
private:
	float weight;
};

class Tiger {
public:
	Tiger() {
		this->name = "Tiger";
	}
	void Drink(Water water) {
		return;
	}
private:
	string name;
	Leg leg[4];
	Head head;
	vector<Food> food;
};

三,总结

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值