封装与共生性
1.封装的级别:
a.原始代码行:0级封装;
b:程序快:1级封装;
c:类和对象结构:2级封装;
d:包:3级封装.
e:部件:4级封装.
书中涉及的就这5种封装结构,但不难想象,接下来的封装结构会延续这一特点,也即抽象程度会越来越高,设计的难度也越来越大(设为N级封,则在设计时一方面要考虑该级别的“对象”结构及其交互,同时还要考虑N-1及以下级别的设计要求,包括接口,交互等等)。
2.类的设计要求
TO 0级 1级 2级
FROM
0级 结构化程序 信息输出 -----------
1级 内聚 耦合 -----------
2级 ------------ 类的内聚 类的耦合
3.封装的原因
封装是由于代码,程序和类之间的共生性引起的。共生性的种类:
静态共生性:
名称共生:int i;若i改成j,则程序中有关变量i的引用都要变成j。
类型共生性:如上例,若改成char i,则产生类型共生
常量共生性:如确定一个人的坐标,设(0,0)经度0,纬度0为参考,然后加上相关的移动值,则经纬度之间产生常量共生。
算法共生性:与常量共生性类似
位置共生性:
动态共生性:
执行共生性:必须以一定的顺序执行代码;
同步共生性:时限制;
数值共生性:算法的限制,例如a,b,c三个数值组成一个三角形的要求是任意两个的和大于第三个(类的不变式);
标识共生性:
差异共生性:例如在一个程序中定义了
int i;int j。则如果想把i改成j,除了要考虑i的名称共生,还要考虑差异性共生,即需要先将j改成其他,然后再改i,或者把i改成非j的其他字母。
4.共生性和封装边界
一个没有封装单元的系统会产生两个问题:
a共生性泛滥
b混淆了哪个是真正的共生性,哪个是偶然相似或相临(只是貌似)
5.共生性和可维护性
为了提高系统性能,共生性提供了3个指导原则:
a 通过将系统拆分为封装的元素使得整个共生性(包括差异共生性)达到最小
b 将任何超越封装边界的共生性最小化
c 在封装边界内将共生性最大化
6.共生性滥用的实例
a C++友员函数的
b 无约束的继承·····
c 以来于实现的偶然性