封装继承多态是面向对象程序开发的基础概念。是实现面向对象的基本要素。

封装

程序开发,最核心价值,是数据。

程序其实是读取数据,操作数据,保存数据等一系列操作。

那么经过良好组织过的数据,将使编程事半功倍。

高内聚,低耦合

说到数据,经常挂在嘴边的,就是这句高内聚,低耦合了。

这并不是绝对规则。高和低是程度副词。我们要尽量高内聚,尽量低耦合。

对于初学者,这一句话,可能就懵了。不同的人,有不同的评价标准。那么什么样算是高,什么样算是低呢?

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++】面相对象开发之封装的更多相关文章

  1. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  2. mybatis10 实现类代理对象开发

    mapper实现类代理对象开发 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则: SqlSession sqlSession = sqlSessionFactory.open ...

  3. 文成小盆友python-num7 -常用模块补充 ,python 牛逼的面相对象

    本篇内容: 常用模块的补充 python面相对象 一.常用模块补充 1.configparser模块 configparser 用于处理特定格式的文件,起内部是调用open()来实现的,他的使用场景是 ...

  4. 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结

    201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...

  5. js编程-面相对象

    //js面相对象编程 //定义constructor构造方法 function myFn(name,sex){ this.name = name; this.sex = sex; } //用proto ...

  6. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  7. 面向对象【day08】:问答式面相对象(四)

    本节内容 1.什么是面向对象编程 2.什么是市类?什么是对象?又有什么关系? 3.什么时候适用面向对象? 4.self就是调用当前方法的对象 5.封装.继承.多态 6.字段方法 1.什么是面向对象编程 ...

  8. Java-Runoob-面向对象:Java 封装

    ylbtech-Java-Runoob-面向对象:Java 封装 1.返回顶部 1. Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细 ...

  9. JS中的面相对象

    1.使用Object或对象字面量创建对象 JS中最基本创建对象的方式: var student = new Object(); student.name = "easy"; stu ...

随机推荐

  1. react 遍历 object

    @observable obj = { name: "ajanuw", age: 22, }; @computed get list() { return _.toPairs(th ...

  2. 为什么说NGK的去中心化预言机越来越受欢迎?

    2020年区块链市场非常火热,从年初的交易所杠杆,到Defi热潮,一波连着一波,风向不断切换,很多人无奈感叹跟不上时代,很多人欢欣雀跃登上了早班车.随着Defi的不断火热,预言机也进入了大众视野.NG ...

  3. .NET探索模型路由约定实现伪静态

    概述 IPageRouteModelConvention接口用于自定义PageRouteModel,这个对象在Microsoft.AspNetCore.Mvc.ApplicationModels命名空 ...

  4. Scrapy 项目:腾讯招聘

    目的: 通过爬取腾讯招聘网站(https://careers.tencent.com/search.html)练习Scrapy框架的使用 步骤: 1.通过抓包确认要抓取的内容是否在当前url地址中,测 ...

  5. IdentityServer4之Authorization Code(授权码)相对更安全

    前言 接着授权模式聊,这次说说Authorization Code(授权码)模式,熟悉的微博接入.微信接入.QQ接入都是这种方式(这里说的是oauth2.0的授权码模式),从用户体验上来看,交互方式和 ...

  6. RabbitMQ基础教程

    目录 RabbitMQ相关概念介绍 生产者和消费者 队列 交换器.路由键.绑定 交换器类型 RabbitMQ运转流程 AMQP协议介绍 AMQP生产者流转过程 AMQP消费者流转过程 安装Rabbit ...

  7. HTTP 请求URL中不能含有空格

    如果含有空格 会报 不合法参数异常 正确做法是将其encode URLEncoder.encode(targetString, "utf-8").replaceAll(" ...

  8. 破解MySQL库user表hash密码

    目录 得到用户名和密码 hash 带*和不带*的区别 破解hash 在线工具 Hashcat 实验环境 select version(); 得到用户名和密码 hash mysql安装好就会默认生成图中 ...

  9. 上百本电子书(Java/Hadoop/Spark/Linux/机器学习/)免费分享 百度云持续更新

    分享一下自己整理的超多电子书, 其中包括:Java,Hadoop,Spark,Linux,Hbase,Hive,机器学习,区块链 目录如下: 1 Java 基础 2 Java 虚拟机 3 Java 并 ...

  10. Elasticsearch精进之路:elasticsearch-head插件使用教程

    一.elasticsearch-head插件的作用 ealsticsearch是一个分布式.RESTful 风格的搜索和数据分析引擎,所有的数据都是后台服务存储着,类似于Mysql服务器,因此如果我们 ...