【C/C++】面相对象开发之封装
封装继承多态是面向对象程序开发的基础概念。是实现面向对象的基本要素。
封装
程序开发,最核心价值,是数据。
程序其实是读取数据,操作数据,保存数据等一系列操作。
那么经过良好组织过的数据,将使编程事半功倍。
高内聚,低耦合
说到数据,经常挂在嘴边的,就是这句高内聚,低耦合了。
这并不是绝对规则。高和低是程度副词。我们要尽量高内聚,尽量低耦合。
对于初学者,这一句话,可能就懵了。不同的人,有不同的评价标准。那么什么样算是高,什么样算是低呢?
1. 一个数据只让一个对象进行管理。
避免公开的全局变量。如果一个数据开放程度过大。就难保不会有人想要偷懒,直接读取/设置。
当管理这个数据的人过多,那么想要对这个数据进行升级、优化,会大概率导致其他模块被迫修改。
不符合面向对象开发的价值观。
2. 同样的数据不在多处进行管理。
如果一个程序里面,有多个地方保存了同一个数据,例如当前是不是白天“isDay1”,"isDay2"。
那么当有开发新的功能时,有的人用了变量1,有的人用了变量2。很容易出现数据不一致的情况。
一定要逼着再开发第三个程序段,用于保证isDay1和isDay2保持同步?那岂不是自己给自己添堵!
所以,同样的数据,不要在多个地方进行管理。
3. 能通过其他数据计算出来的数据,不要重复保存。
在程序开发中,经常还会出现一种情况。那就是可以通过计算出来的数据,还要再拿一个变量进行保存。
class DayNightControl
{
bool isDay; // 当前是否是白天
bool isNight; // 当前是否是黑夜(这个数据就是重复)
}
当前是否是晚上,可以通过!isDay获得,那么就不要再重复记录isNight。这是一个一眼就能看出问题的例子。
还有很多隐藏的情况。
例如:某个控件是否显示。显示条件可能由A,B,C三个条件控制。本可以通过A&&B&&C进行计算得出。此时额外增加一个visible变量,就会给后续的程序维护造成麻烦。
【C/C++】面相对象开发之封装的更多相关文章
- Java开发知识之Java面相对象
Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...
- mybatis10 实现类代理对象开发
mapper实现类代理对象开发 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则: SqlSession sqlSession = sqlSessionFactory.open ...
- 文成小盆友python-num7 -常用模块补充 ,python 牛逼的面相对象
本篇内容: 常用模块的补充 python面相对象 一.常用模块补充 1.configparser模块 configparser 用于处理特定格式的文件,起内部是调用open()来实现的,他的使用场景是 ...
- 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结
201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...
- js编程-面相对象
//js面相对象编程 //定义constructor构造方法 function myFn(name,sex){ this.name = name; this.sex = sex; } //用proto ...
- python 的面相对象编程--对应c++
在python的面相对象编程中,我们常常在class中可以看到a(), _b() , __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...
- 面向对象【day08】:问答式面相对象(四)
本节内容 1.什么是面向对象编程 2.什么是市类?什么是对象?又有什么关系? 3.什么时候适用面向对象? 4.self就是调用当前方法的对象 5.封装.继承.多态 6.字段方法 1.什么是面向对象编程 ...
- Java-Runoob-面向对象:Java 封装
ylbtech-Java-Runoob-面向对象:Java 封装 1.返回顶部 1. Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细 ...
- JS中的面相对象
1.使用Object或对象字面量创建对象 JS中最基本创建对象的方式: var student = new Object(); student.name = "easy"; stu ...
随机推荐
- react hooks & component will unmount & useEffect & clear up
react hooks & component will unmount & useEffect & clear up useEffect & return === u ...
- 如何在ASP.NET Core中编写高效的控制器
通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...
- Vue3组件(九)Vue + element-Plus + json = 动态渲染的表单控件
一个成熟的表单 表单表单,你已经长大了,你要学会: 动态渲染 支持单列.双列.多列 支持调整布局 支持表单验证 支持调整排列(显示)顺序 依据组件值显示需要的组件 支持 item 扩展组件 可以自动创 ...
- 还原Oracle数据库dmp文件(Win系统)
准备工作: 1.核对数据字符集: 一般Oracle在安装的时候默认是选择ZHS16GBK,如有改动,使用 select userenv('language') from dual;语句查看使用的字 ...
- TERSUS无代码开发(笔记02)-简单实例加法
简单实例加法 1.用户端元件(显示元件)(40个) 图标 英文名称 元件名称 使用说明 服务器端 客户端 Pane 显示块 是一个显示块,是HTML的div标签 √ Row 行 行元件中的显示元件 ...
- 微信小程序:上滑触底加载下一页
给商品列表页面添加一个上滑触底加载下一页的效果,滚动条触底之后就发送一个请求,来加载下一页数据, 先在getGoodsList中获取总条数 由于总页数需要再另外的一个方法中使用,所以要把总页数变成一个 ...
- vue修改elementUI的分页组件视图没更新问题
转: vue修改elementUI的分页组件视图没更新问题 今天遇到一个小问题平时没留意,el-pagination这个分页组件有一个属性是current-page当前页.今天想在methods里面手 ...
- 《C++ Primer》笔记 第10章 泛型算法
迭代器令算法不依赖于容器,但算法依赖于元素类型的操作. 算法永远不会执行容器的操作.算法永远不会改变底层容器的大小. accumulate定义在头文件numeric中,接受三个参数,前两个指出需要求和 ...
- HDU1067 Gap
题目: Let's play a card game called Gap. You have 28 cards labeled with two-digit numbers. The first d ...
- a标签不能继承父级的颜色
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...