首页 > 其他分享 >【GiraKoo】面向对象开发系列之【封装】

【GiraKoo】面向对象开发系列之【封装】

时间:2024-10-30 15:45:47浏览次数:1  
标签:GiraKoo 封装 变量 程序开发 面向对象 内聚 数据

【技术分享】面向对象开发系列之【封装】

理解

封装是面向对象程序开发的基石。

程序开发,最核心价值,是数据。
程序其实是读取数据,操作数据,保存数据等一系列操作。
那么经过良好组织过的数据,将使编程事半功倍。

高内聚,低耦合

说到数据,经常挂在嘴边的,就是这句高内聚,低耦合了。
这并不是绝对规则。高和低是程度副词。我们要尽量高内聚,尽量低耦合。
对于初学者,这一句话,可能就懵了。不同的人,有不同的评价标准。那么什么样算是高,什么样算是低呢?

1. 一个数据只让一个对象进行管理。

避免公开的全局变量。如果一个数据开放程度过大。就难保不会有人想要偷懒,直接读取/设置。
当管理这个数据的人过多,那么想要对这个数据进行升级、优化,会大概率导致其他模块被迫修改。
不符合面向对象开发的价值观。

2. 同样的数据不在多处进行管理。

如果一个程序里面,有多个地方保存了同一个数据,例如当前是不是白天“isDay1”,"isDay2"。
那么当有开发新的功能时,有的人用了变量1,有的人用了变量2。很容易出现数据不一致的情况。
一定要逼着再开发第三个程序段,用于保证isDay1和isDay2保持同步?那岂不是自己给自己添堵!
所以,同样的数据,不要在多个地方进行管理。

3. 能通过其他数据计算出来的数据,不要重复保存。

在程序开发中,经常还会出现一种情况。那就是可以通过计算出来的数据,还要再拿一个变量进行保存。

class DayNightControl
{
    bool isDay;      // 当前是否是白天
    bool isNight;    // 当前是否是黑夜(这个数据就是重复)
}

当前是否是晚上,可以通过!isDay获得,那么就不要再重复记录isNight。这是一个一眼就能看出问题的例子。
还有很多隐藏的情况。

例如:某个控件是否显示。显示条件可能由A,B,C三个条件控制。本可以通过A&&B&&C进行计算得出。此时额外增加一个visible变量,就会给后续的程序维护造成麻烦。

标签:GiraKoo,封装,变量,程序开发,面向对象,内聚,数据
From: https://www.cnblogs.com/girakoo/p/18515957

相关文章

  • 【GiraKoo】面向对象开发系列之【为什么要用面向对象】
    开源项目:https://girakoo.com/问答为什么要有面向对象开发?面向过程开发的C语言,往往有以下几个问题:不同的开发人员需要使用功能完全相同,或者大部分相同的函数。如果某个算法存在问题,很难保证工程里面其他位置的代码也同步获得更新。各个模块之间都是硬链接,A调用B。如果B过时......
  • 【GiraKoo】线程本地存储(Thread Local Storage, TLS)
    【技术分享】线程本地存储(ThreadLocalStorage,TLS)在项目开发中,遇到了关于TLS相关的问题。为了了解该机制的用途,在微软的官网查找了一些资料。本文参考官方文档,简单介绍一下TLS的用途与使用方法。微软官方文档链接一、简介线程本地存储(TLS),可以使多个线程,通过TlsGetValue函......
  • 【GiraKoo】常用编码的对比(ASCII,GB2312,GBK,GB18030,UCS,Unicode)
    甯哥敤缂栫爜鐨勫姣旓紙ASCII锛孏B2312锛孏BK锛孏B18030锛孶CS锛孶nicode锛�鍦ㄧ▼搴忓紑鍙戜腑锛屾枃瀛楃紪鐮佷竴鐩存壆婕旂潃浜虹暅鏃犲锛屽嵈鑳屽悗鎹呬竴鍒€鐨勮鑹层€�鍙兘鍦ㄦ簮浠g爜鏂囦欢涓紝娉ㄩ噴鑾悕鍏跺鍦板彉鎴愪簡涔辩爜銆�鍙兘鏄彂閫佺粰鍒......
  • 【GiraKoo】C++编译中常用的内置宏
    开源项目:https://girakoo.com/联系方式:[email protected]简介针对不同的平台,很多头文件,函数名称,类型占用空间不一致。为了保证跨平台可编译,经常需要在项目中使用宏进行区分系统宏操作系统可使用的宏Windows32位_WIN32Windows64位_WIN32;_WIN64Linux__linu......
  • 【GiraKoo】Android系统版本代号一览
    Android系统版本代号一览VersionCodeNameAPI时间13.0Tiramisu332022.0812.0SnowCone31,322021.1011.0R/11302020.0910.0Q/10292019.059.0P/(Pie)282018.088.1O_MR1272017.128.0O/(Oreo)262017.087.1N_MR125201......
  • 【GiraKoo】C++中static关键字的作用
    C++中static关键字的作用在程序中良好的使用static,const,private等关键字,对于代码的健壮性有很大的帮助。本文介绍的就是C++中static关键字的一些常见用法与区别。适合萌新程序员理解static的作用。一、在类内修饰变量限制变量的存储位置(保存在静态区),所有类对象共享一份数据。......
  • 【GiraKoo】C++多线程消息分发架构
    【开源需求】C++多线程消息分发架构项目【gi_messager】在多线程环境中,为每个线程提供独立的消息队列MessageLoop。注:主线程默认自动创建消息队列。MessageLoopCenter提供MessageLoop的查询功能。能够获得指定MessageLoop的句柄。同一个MessageLoop可以绑定多个......
  • vue中封装一个弹窗
    vue3父元素<template><divclass="app"><some-modalv-model:visible="modalVisible"/></div></template><scriptsetup>import{ref}from"vue";importSomeModalfrom"@/compone......
  • MKV视频封装软件 MKVToolNix v88.0 中文便携版
    由MoritzBunkus精心打造的MKVToolNix,是一款开源且功能丰富的Matroska视频文件编辑器。这款软件不仅是MKV处理工具的集合,更是字幕组、电影电视剧论坛和视频工作者的得力助手。MKVToolNix支持跨平台操作,几乎兼容所有主流操作系统,能够将多种视频编码、多达16条音频和不同语言的字......
  • 鸿蒙接口封装
    ts接口封装代码:    request.tsimportpromptfrom'@system.prompt'importhttpfrom'@ohos.net.http';exportdefault(methods:string,uri:string,params:object,success:Function)=>{consthttpRequest=http.createHttp();co......