面向对象——类设计(三)

来源:互联网 发布:单片机自动光控窗帘 编辑:程序博客网 时间:2024/06/06 04:20

模型类与控制类

让保存数据的类,仅用于数据的持有,除此之外,不向外界提供过多的修改接口(甚至是访问接口),修改(有时是访问)接口统一交由其控制类。举一个不恰当的例子,试卷类仅用于记录成绩,只有教师类(控制类)可对成绩进行一系列的修改和访问。

让控制类(操纵数据的类),仅用于操作动作(而不保存数据),操纵的方式主要有两种:

  • 维护模型类的对象作为控制类的私有成员变量

  • 将模型类的实例以参数的形式传递给控制类的相关成员函数

这多少已经开始有点 MVC 的设计思想了。

“谁来监督监督者?”,也存在控制类控制类,使更一层的抽象和提取。但“我附庸的附庸,不是我的附庸”,正如企业的董事长不会事无巨细,直接管理流水线上的每一个员工一样,控制类的控制类也不直接操作数据,而是通过中间的桥梁和媒介,位于中间层的空间类。

所以 MVC 的设计思想,自然内嵌了一种分层的关系。

继承体系

父类和子类(甚至爷类和孙类)之间的不同和差异能有多少?有时不需要很大,只需要重写某一虚函数,甚至唯一的差异在私有成员的持有上,私有成员自然带来构造函数的不同;

子类比父类功能和属性(成员函数和成员变量)上会只多不少,这里的,意味着一种功能的拓展,“站在了巨人的肩膀人”。

空参空实现的构造函数的意义

在类的继承层次较深时,如果继承关系中的一层,给出了一种形式的构造(非空参构造)时,编译器就不会为当前类再提供以调用当前类成员函数默认构造为职责的空参构造形式,底层类的构造函数在其初始化参数列表的位置就要显式的给出其父类的实现。

如何在一个类的内部实现规则可选、实现模式可调

所谓规则、所谓模式,都是有限状态集,对有限状态最有力的模拟类型即是枚举类型变量,我们定义这些状态或规则所对应的枚举类型,以一个该枚举类型变量作为该类的构造函数所需的参数(该类内部需维护一个私有的该枚举类型变量),在相关的不同规则、模式下的处理函数时。

class Model{public:    enum criterion { normal, case1, case2};    Model(criterion criter):_criter(criter){}    void process()    {        switch (_criter)        {        case normal:            break;        case case1:            break;        case case2:            break;        default:            break;              }    }private:    const criterion _criter;};
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 韵达快递不发货怎么办 发物流丢了怎么办啊 圆通快递寄丢了怎么办 中通快递弄丢了怎么办 中通快递寄丢了怎么办 中通快递丢了怎么办 物流没保价坏了怎么办 顺丰保值快递丢了怎么办 顺丰保价件丢失怎么办 公司购买货物对方没有发票怎么办 加工货物对方不取怎么办 物流发货发错了怎么办 货车拉的货丢了怎么办 壹米滴答丢货怎么办 物流东西弄丢了怎么办 理赔款账号打错了怎么办 顺丰快递搞丢了怎么办 论文表格跨页了怎么办 网线突然没网了怎么办 室内门高门洞矮怎么办 路基填方土质含水率大怎么办 公路工程材料价格不予调差怎么办 桩基偏位60公分怎么办 定义的跨板受力筋长度不够怎么办 支座梁体预埋钢板忘记埋了怎么办 做nt小孩头朝下怎么办 简历上传的照片太大怎么办 本科毕业论文没写英文摘要怎么办 气泵储气罐有个小眼漏气怎么办 吸拉开关坏了怎么办 窗口数量已达上限怎么办 村土地原始台账没有怎么办 涂防晒霜后出汗怎么办 张拉千斤顶泄荷回油不到位怎么办 隧道二衬打到一半没混凝土怎么办 在左车道骑电动车撞到车怎么办 电镐钻头卡住了怎么办 玩具机器人无线遥控不了怎么办 电锤锤头卸不下来怎么办 打地基没打出硬土层怎么办 中标的项目经理没有B证怎么办