当前位置: 首页 > news >正文

封装(Encapsulation)

 

目录

 概念

好处

数据隐藏

模块化设计

代码复用

简化接口

 示例

意义


概念

封装(Encapsulation)是面向对象编程的一个核心概念,它指的是将数据和相关操作封装在一个对象中,隐藏了实现的细节。(就是实现数据封装和细节封装)

封装通过将数据成员和成员函数放在类的内部,对外部只暴露有限的接口,来保护数据的完整性和安全性。外部程序不能直接访问和修改对象的数据,而是通过公共的方法(成员函数)来间接地进行操作。这样就实现了数据的封装和隐藏,避免了数据被误用或错误修改的风险。

 

好处

数据隐藏

封装可以隐藏对象的内部实现细节,只暴露必要的接口,使得对象对外部的调用者来说更加简单和可理解。这有助于提高代码的安全性和可靠性。

模块化设计

封装将数据和相关操作封装在一个对象中,使得代码具有更高的模块化程度。不同的对象之间相互独立,各自负责自己的功能,减少了代码之间的耦合性,方便代码的维护和扩展。

代码复用

通过封装,可以将常用的功能和操作封装成类的成员函数,实现代码的复用。其他对象可以通过调用这些成员函数来实现相同的功能,避免了重复编写相似功能的代码。

简化接口

封装使得对象可以隐藏自己的内部实现细节,提供简单、一致的外部接口。这样使用对象的代码只需关注如何使用接口,而不需要了解内部的具体实现。

在实际编程中,可以使用访问修饰符(如public、private、protected)来控制类的成员的访问权限。通常,将数据成员声明为私有(private),并提供公共的方法(public)来访问和修改数据成员。这样可以保证数据的封装性,并通过方法实现对数据的控制。

 

 示例

下面是一个简单的C++类的封装示例:

class Person {
private:std::string name;int age;public:// 访问器std::string getName() const {return name;}int getAge() const {return age;}// 修改器void setName(const std::string& newName) {name = newName;}void setAge(int newAge) {age = newAge;}
};

 在这个例子中,Person类封装了私有的name和age数据成员,并提供了公共的访问器和修改器来操作这些数据成员。外部代码可以通过调用访问器和修改器函数来访问和修改对象的状态,而无法直接访问或修改私有数据成员。

意义

封装是面向对象编程的重要特性之一,通过封装可以更好地管理和保护对象的数据,提高代码的安全性、可靠性和可维护性。

http://www.lryc.cn/news/100657.html

相关文章:

  • php 原型模式
  • LiveGBS流媒体平台GB/T28181功能-支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放
  • 6、Nginx实现反向代理
  • Leetcode——404 左叶子之和
  • R并行计算-parallel例子1
  • JavaSE复盘2
  • 如何在3ds max中创建可用于真人场景的巨型机器人:第 3 部分
  • Android性能优化之游戏引擎初始化ANR
  • Jmap-JVM(十六)
  • 【分布式能源的选址与定容】基于多目标粒子群算法分布式电源选址定容规划研究(Matlab代码实现)
  • flink源码分析-获取JVM最大堆内存
  • 第17节 R语言分析:生物统计数据集 R 编码分析和绘图
  • 一文了解什么是Selenium自动化测试?
  • java接口实现
  • 数据结构入门指南:链表(新手避坑指南)
  • SpringBoot第24讲:SpringBoot集成MySQL - MyBatis XML方式
  • linux 查看网卡,网络情况
  • 在Mac上搭建Gradle环境
  • Docker网络与Docker Compose服务编排
  • opencv+ffmpeg环境(ubuntu)搭建全面详解
  • 开发基于 LoRaWAN 的设备须知--最大兼容性
  • 一、SpringBoot基础[日志]
  • libuv库学习笔记-networking
  • C++多线程编程(第三章 案例1,使用互斥锁+ list模拟线程通信)
  • IOS UICollectionView 设置cell大小不生效问题
  • 浅谈3D隐式表示(SDF,Occupancy field,NeRF)
  • 软件测试技能大赛任务二单元测试试题
  • MybatisPlus拓展篇
  • 设置k8s中节点node的ROLES值,K8S集群怎么修改node1的集群ROLES
  • 【*1900 图论】CF1328 E