0
点赞
收藏
分享

微信扫一扫

UML关系实现: 泛化、实现、依赖、关联、聚合、组合


文章目录

  • ​​1. UML六种箭头的含义​​
  • ​​2. UML六种分类的实例​​
  • ​​3. 使用腾讯文档里面的流程图里面选UML就行了​​

1. UML六种箭头的含义

UML关系实现: 泛化、实现、依赖、关联、聚合、组合_虚函数

2. UML六种分类的实例

下面的例子中, ​​Person​​​是抽象类, ​​father​​​和​​mather​​​继承​​person​​​类, ​​son​​​是派生类, 继承​​father​​​类
另一个单独的类​​​home​​​, 里面包含​​father​​​,​​mather​​​,​​son​​​三个对象, ​​car​​​和​​land​​​两个对象, 其中​​father​​​对象是在​​home​​​创建对象的时候构造函数中创建的, mather是传入进​​home​​​的, ​​son​​​是​​home​​​的一个方法传入的, 最后通过​​printMembership​​方法打印三个人的名称

具体的UML图如下

UML关系实现: 泛化、实现、依赖、关联、聚合、组合_虚函数_02

#include <iostream>
using namespace std;

class Person{
public:
virtual ~Person(){}
virtual void run() = 0; // 带纯虚函数, 指名该类为抽象类, 定义的是接口
virtual string getName() = 0;
};

// 1.实现 : 子类继承带有纯虚函数的类
class Father : public Person{
public:
Father(): Father("小明"){}
Father(string name) : m_name(name){}
virtual ~Father(){} // 基类析构函数设置为虚函数, 多态时才能回收子类对象
virtual void run(){ // 带虚函数的基类, 子类在实现
cout<< m_name << "爸爸能跑起来了" <<endl;
}
virtual string getName(){
return m_name;
}
private:
string m_name; // 成员变量建议使用m_开头, 表示membership
};

// 2.泛化 子类继承虚函数的父类
class Son : public Person{
public:
Son(): Son("小明"){}
Son(string name) : m_name(name){}
virtual void run(){ // 带虚函数的基类, 子类在实现
cout<< m_name << "儿子能跑起来了" <<endl;
}
string getName(){
return m_name;
}
private:
string m_name; // 成员变量建议使用m_开头, 表示membership
};

class Mather : public Person{
public:
Mather():Mather("小皇") {}
Mather(string name) : m_name(name){}
virtual void run(){
cout << m_name << "妈妈跑起来了" << endl;
}
virtual string getName(){
return m_name;
}
private:
string m_name;
};

class Car{
public:
Car(string n){cout << "一辆车 " << n << endl;}
};

class Land{
public:
Land(string n){cout << "一块地 " << n << endl;}
};

class Home{
private:
// 4.关联
Person *father = nullptr;
Person *son = nullptr;

// 3. 依赖
Person *mather = nullptr;

// 5. 组合关系一个home怎么能没有车和土地呢...
Car *car = new Car("大白");
Land *land = new Land("黄土地");
public:

Home(string fathername, Person *mather) : mather(mather){ // 3. 依赖实现
father = new Father(fathername); // 4. 关联实现
cout << "建造一个家完成了...\n" << endl;
}
~Home(){
if(father != nullptr)
delete father; // 因为爸爸是在类里面定义的, 因此回收的时候需要在当前类的析构函数中回收
if(son != nullptr)
delete son;
}

// 打印家庭成员
void printMembership(){
cout << "这家夫妻俩: " << mather->getName() << " "<< father->getName() << endl;
if(son != nullptr){
cout << "还有个乖娃娃 " << son->getName() <<endl;
}
}
void BuildHouse(){
cout << "拉进来一个人盖房子" << endl;
}
void getSon(Person *son){ // 6.聚合, 传入参数
this->son = son;
}
};

int main(int argc, char const *argv[])
{
Mather *mather = new Mather("赵丽颖");
Home *h = new Home("王羲之",mather);
// h->printMembership();

Person *son = new Son("王八蛋");
h->getSon(son);
h->printMembership();

return 0;
}

3. 使用腾讯文档里面的流程图里面选UML就行了

UML关系实现: 泛化、实现、依赖、关联、聚合、组合_类继承_03


举报

相关推荐

0 条评论