OOD沉思录 之 类和对象的关系--包含关系4
|
4.9 在实现语义约束时,最好根据类定义来实现。但是这经常会导致泛滥成灾的类,在这种情况下约束应当在类的行为中实现,通常在类的构造函数中实现,但不是必须如此。 class 汽车
{
汽车(发动机 para)
{
m_发动机=para;
}
发动机 m_发动机;
}
class 发动机{...}
class 奥迪A6:汽车{......}
class 凯梅瑞:汽车{......}
class 丰田发动机:发动机{......}
class 三菱发动机:发动机{......}
问题,假设奥迪A6只能使用丰田发动机,凯梅瑞只能使用三菱发动机,问题是汽车只包含了抽象的发动机,对抽象的汽车类来说,所有发动机没有任何区别,那么需要我们把这个 奥迪A6(丰田发动机 para):base(para){}
凯梅瑞(三菱发动机 para):base(para){}
class 汽车
{
。。。。。。
void 启动()
{
//先检查汽车的状态,如果状态不合法,则告诉用户汽车无法启动,因为什么原因;如果合法,则开启发动机
if(检查状态())
m_发动机.启动();
else
throw "汽车使用了不配套的发动机!";
}
}
4.10 在类的构造函数中实现语义约束时,把约束测试放到构造函数领域所允许的尽量深的包含层次中。 class 汽车
{
汽车(发动机 para)
{
if(!检查状态(para))//这个检查状态的实现和上面类似,从一个字典里查询
throw new "发动机不匹配";
}
}
4.11 约束所依赖的语义信息如果经常改变,那么最好放在一个集中式的第三方对象中。 4.12 约束所依赖的语义信息如果很少改变,那么最好分布在约束所涉及的各个类中。 类包含的数据成员分为两种,一种是描述性的,如长宽高颜色等,另一种是具有行为的子对象,如汽车包含方向盘,而方向盘本身就是一个具有"有意义的行为"的对象。 4.9 类必须知道它包含什么,但是不能知道谁包含它。 4.10 同一个类包含的对象之间不应当有使用关系。 从复用性和复杂性角度考虑。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
