您现在的位置是:首页 >技术教程 >类间关系与复用网站首页技术教程
类间关系与复用
                简介类间关系            
            类间的逻辑关系:
 垂直方向:
- 泛化
 - 实现
 
水平方向:
- 关联
 - 依赖
 
1、类间关系的强弱——强关联
 A.h必须包含B.h才能编译成功,则A和B之间存在强关联。
例一://b.h
#include "a.h"
class B{
	A mA;
};
结论:尽可能不使用对象成员,而用指针或引用。
例二://b.h
class B {
	public: void f(A * pA) {
		return pA->g();
	}
};
结论:直接使用内联方式定义成员函数,可能增强文件的依赖性,可使用前置声明和外联实现避免。
 
2、类间关系的强弱——硬关联
 A和B类间有双向关系,且B与A之间有强关联,那么A和B之间有硬关联。
//B.h
#include <A.h>
class B {
public:
	B();
	B(int);
private:
	A ma;	
};
//A.h
class A {
public:
	 A (int);
	 B Foo();
private:	 
	int mData;
};
 
3、类间关系的强弱——弱关联
 A.cpp中必须包含B.h才能编译通过,则A与B之间存在弱关联。
//B.h
class B {
public:
	B();
	B(int);
private:	
};
//A.h
class B;
class A {
public:
	A (int);
	B func();
private:
	int mData;	
};
//A.cpp
#include <A.h>
#include <B.h>
B A::func() {
return B(mData);
}
结论:最常见的关联形式。
 
4、类间关系的强弱——软关联
 A只使用了B的指针或引用,那么A和B之间存在软关联。
class B;
class A {
public: A (B * pb);
private: B * mpB;
}
结论:使用指针或引用数据成员,函数参数以指针或引用形式传递,函数的返回值不要使用传值形式。(多用指针,因为如果使用引用的话可能需要自定义构造函数。)
 
降低编译期依赖性:
 即尽可能指针或引用,而不是对象形式。
 类间的联系依次减弱:
 1、继承:类间的垂直关系
 2、硬关联;
 3、强关联;
 4、弱关联;
 5、软关联。
自定义类型的数据成员:
- 使用指针形式
 - 引用形式的缺点:需提供构造函数(有的需拷贝构造函数)
 - 对象形式的缺点:提高了编译期的依赖性(但无需用户自己为其拷贝赋值)
 
函数的自定义类型参数:
- 使用指针和引用形式
 
函数返回的自定义类型:
- 尽可能不使用对象形式
 - 适当使用前置声明和外联实现
 
类间关系的代码形式(水平方向)
关联(强):
1、数据成员形式:
class B { A * mA };
依赖(弱)(因为可能函数没有调用,而数据成员一定会使用):
2、函数参数:
class B {
  void Func(A * pA);
}
3、函数返回值:
class B {
	A * Func1();
};
4、函数实现:
int B::Func(int n){
	A * pa = new A;
	int val = pa->g() + n;
	delete pa;
	return val;
}
 

 (关联类可以是一个,也可以有多个)
一般关联强调非偶然性的“知道”。
- 一般关联
 - 自关联
 - 关联类
 
聚集关联:强调整体——部分关系
- 聚合
 - 组合


 
依赖关系

 注意:逻辑关系是程序员自己想的,仅从代码角度而言可能并不能区分。(甚至一段完全相同的代码可能既被认为是关联关系也是聚合关系)
应用:黑盒复用与白盒复用
 
 (二进制代码即可)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。
        
    
        
    
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结