面向对象编程简介
面向对象编程(OOP)是一种编程范式,强调通过“对象”来设计软件。对象是数据和功能的封装,使得程序更易于理解和维护。本文将介绍面向对象的基本概念、特性以及其在软件开发中的重要性。
1. 面向对象的基本概念
1.1 对象
对象是类的实例,包含状态(属性)和行为(方法)。例如,考虑一个“汽车”对象,它可能有以下属性和方法:
- 属性:颜色、品牌、速度
- 方法:加速、刹车、转向
1.2 类
类是对象的蓝图,定义了对象的属性和方法。类可以看作是创建对象的模板。
class Car {String color;String brand;int speed;void accelerate() {speed += 10;}void brake() {speed -= 10;}
}
2. 面向对象的四大特性
2.1 封装
概念
封装是将数据(属性)和操作这些数据的方法(行为)结合在一起,形成一个独立的对象。通过封装,内部状态对外部代码是隐藏的,外部只能通过特定的方法访问和修改这些状态。
优势
- 数据保护:封装可以防止外部代码直接访问对象的内部数据,确保数据的完整性和正确性。
- 提高可维护性:内部实现的更改不会影响外部代码,只要外部接口保持不变。
class BankAccount {private double balance;public void deposit(double amount) {balance += amount;}public double getBalance() {return balance;}
}
2.2 继承
概念
继承是一个类(子类)基于另一个类(父类)的特性和行为的机制。子类可以继承父类的属性和方法,并可以添加自己的特性或重写父类的方法。
优势
- 代码重用:子类可以重用父类的代码,减少重复。
- 可扩展性:可以在不修改父类的情况下,扩展或改变子类的功能。
class Animal {void eat() {System.out.println("Eating...");}
}class Dog extends Animal { // Dog 继承 Animalvoid bark() {System.out.println("Barking...");}
}
2.3 多态
概念
多态是同一操作作用于不同对象的能力。它允许对象以多种形式出现,通过方法重载和方法重写来实现。
优势
- 灵活性:可以使用同一接口处理不同类型的对象,提高代码的灵活性和可扩展性。
- 可维护性:通过多态,可以减少条件语句,使代码更加简洁和易于维护。
2.4 抽象
抽象是隐藏复杂性,提供简单接口的机制。抽象类和接口用于定义抽象行为,子类需要实现这些行为。
abstract class Shape {abstract void draw();
}class Circle extends Shape {void draw() {System.out.println("Drawing a circle");}
}
3. 面向对象的优势
- 提高代码的可重用性:通过继承和接口,可以轻松复用已有代码。
- 增强代码的可维护性:封装和抽象使得复杂系统更易于管理和维护。
- 提高代码的可扩展性:新功能可以通过扩展类和接口轻松添加,而不影响现有代码。
面向对象编程是一种强大且灵活的编程范式,适用于各种规模的软件项目。通过理解和运用封装、继承、多态和抽象等特性,可以设计出更高效、可维护和可扩展的系统。希望这篇文章能够帮助你更好地理解面向对象编程的核心概念!
相关文章:
面向对象编程简介
面向对象编程(OOP)是一种编程范式,强调通过“对象”来设计软件。对象是数据和功能的封装,使得程序更易于理解和维护。本文将介绍面向对象的基本概念、特性以及其在软件开发中的重要性。 1. 面向对象的基本概念 1.1 对象 对象是…...
【ArcGIS_Python】使用arcpy脚本将shape数据转换为三维白膜数据
说明: 该专栏之前的文章中python脚本使用的是ArcMap10.6自带的arcpy(好几年前的文章),从本篇开始使用的是ArcGIS Pro 3.3.2版本自带的arcpy,需要注意不同版本对应的arcpy函数是存在差异的 数据准备:准备一…...
云计算——AWS Solutions Architect – Associate(saa)1、什么是云,AWS介绍
什么是云? 什么是云? 云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易护展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法。 简单理解为:云是 共享资源,按需付费࿰…...
快手ip属地是定位吗?怎么改
在当今数字化时代,随着网络平台的不断发展,用户隐私和数据安全成为了公众关注的焦点。各大社交媒体平台纷纷推出的“IP属地”功能,无疑为网络环境增添了一抹新的色彩。其中,快手的IP属地显示功能尤为引人注目。那么,快…...
graylog初体验
最近graylog比较火,部署了一个来测试下,看下后续能不能代替目前占用资源比较多的elk,目前未对graylog性能进行深入测试,只是简单体验了下,graylog的UI比较简陋,但是在报警以及权限方面优于ELK,整…...
MySQL实战-解决方案
1. MySQL 主从集群同步延迟问题的解决方案 在主从复制架构中,主库执行写操作后,将更新事件写入 Binlog,从库通过 I/O 线程将 Binlog 数据同步到本地的 Relay Log,再由 SQL 线程解析并执行,从而保持数据一致性。然而&a…...
使用 CSS 实现透明效果
在 CSS 中,实现透明效果有几种方法,具体使用哪种方法取决于具体需求。以下是一些常见的方法: 使用 opacity 属性: opacity 属性可以设置整个元素的透明度,包括其所有的子元素。 .transparent { opacity: 0.5; /* 0 表…...
LabVIEW2025中文版软件安装包、工具包、安装教程下载
下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述2条许可协议”,点击下一步 3、点击下一步,安装NI Packa…...
2025.2.5——五、[网鼎杯 2020 青龙组]AreUSerialz
题目来源:BUUCTF [网鼎杯 2020 青龙组]AreUSerialz 一、打开靶机,整理信息 直接得到一串php代码,根据题目可以看到还有序列化 二、解题思路 step 1:代码审计 <?phpinclude("flag.php");highlight_file(__FILE__…...
Oracle Life DBA的一天
/***************************************************************************************************************** Navicat Premium Data Transfer Source File : Oracle Life DBA的一天.sql Source Server Type : Oracle Source Server Version : 190…...
手写MVVM框架-实现简单v-bind
v-bind 有两种情况: 1.绑定的是一个简单的属性 <div :class"customClass">简单v-bind</div> 2.绑定的元素上面有表达式 <div :class"{customClass: a 1 > 2}">简单v-bind</div> 这一章我们先说第一种情况&…...
【力扣】240.搜索二维矩阵 II
题目 我的代码 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for(int i0;i<matrix.size();i){for(int j0;j<matrix[0].size();j){if(targetmatrix[i][j]){return true;}else if(target<matrix[i][j]){brea…...
PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架
2025年1月7号,由杨德杰、赵子敬、刘洋联合提出PlanLLM,一种基于可微调大型语言模型(LLM)的跨模态联合学习框架,用于解决视频程序规划任务。通过引入LLM增强规划模块和互信息最大化模块,PlanLLM突破了现有方…...
使用服务器部署DeepSeek-R1模型【详细版】
文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中,模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别,如何高效、稳定地将深度学习模型部署到…...
TCP三次握手、四次挥手过程及原理
TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接…...
AWS App2Container
AWS App2Container 是一个由 Amazon Web Services (AWS) 提供的工具,它帮助用户将现有的传统应用程序(特别是运行在虚拟机或物理服务器上的应用)转化为容器化的应用,从而可以在 AWS 上更方便地部署、管理和扩展。具体来说…...
《一》深入了解软件测试工具 JMeter-自我介绍
深入了解软件测试工具 JMeter 在当今的数字化时代,软件已经渗透到我们生活的方方面面,从日常使用的手机应用到复杂的企业级系统,软件的质量和性能直接影响着用户体验和业务的成功。而软件测试作为保障软件质量的关键环节,其中的性…...
(算法竞赛)图论+DFS深搜——图的dfs遍历1
题目描述 给定一个无向图,包含 n 个顶点(编号为 1 到 n)和 e 条边。要求从顶点 1 开始进行深度优先搜索(DFS),并按照访问顺序输出遍历结果。注意:当存在多个邻接点时,优先访问编号较…...
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...
快速搭建GPU环境 | docker、k8s中使用gpu
目录 一、裸机部署安装 GPU Driver安装 CUDA Toolkit测试 二、Docker 环境安装 nvidia-container-toolkit配置使用该 runtime 三、 k8s 环境安装 device-plugin安装 GPU 监控 一、裸机部署 裸机中要使用上 GPU 需要安装以下组件: GPU DriverCUDA Toolkit 二者的关…...
基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper
KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…...
分库分表详解
分库分表确实有垂直切分和水平切分两种,针对给出的描述,以下是对这两种切分方式的详细分析和验证: 垂直切分 描述:将表按照功能模块、关系密切程度划分出来,部署到不同的库上。 分析:垂直切分主要是根据…...
【重生之学习C语言----水仙花篇】
目录 编辑 ----------------------------------------begin-------------------------------------- 一、什么是水仙花数? 二、问题分析 确定数字的位数:计算输入数字的位数 n。 分离每一位数字:例如将 153 分离为 1、5、3。 计算各…...
云端IDE如何重定义开发体验
豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...
模拟实现string类
目录 一.构造与析构函数 二.基础小功能的实现 1.clear 2.c_str 3外部对私有的查看 三.实现string的迭代器 四.string的增删查改 1.push_back尾插 1.1reserve扩容 1.2尾插 3.运算符重载 4.insert在任意位置插入 5.erase删除 5.1npos的处理 5.2函数的实现 6.find查…...
使用一个大语言模型对另一个大语言模型进行“调教”
使用一个大语言模型对另一个大语言模型进行“调教”(通常称为微调或适配),是一种常见的技术手段,用于让目标模型更好地适应特定的任务、领域或风格。以下是基于搜索结果整理的详细步骤和方法: 1.准备工作 安装必要的…...
十二、Docker Compose 部署 SpringCloudAlibaba 微服务
一、部署基础服务 0、项目部署结构 项目目录结构如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…...
深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用
在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…...
C# 使用ADO.NET访问数据全解析
.NET学习资料 .NET学习资料 .NET学习资料 在 C# 的应用开发中,数据访问是极为关键的部分。ADO.NET作为.NET 框架下用于数据访问的核心技术,能够帮助开发者便捷地与各类数据源进行交互。本文将深入剖析ADO.NET,带你掌握使用 C# 通过ADO.NET访…...
趣解单词,实现快速记忆
英文单词 love,是“爱”的意思: love v./n.爱;喜欢;热爱;爱情;心爱的人 那什么是爱呢?love,首字母为l,是一根绳子,ve-通f,love通life࿰…...
TEMU电池法规:CE-battery法规指令主要检测以下这三样,汞、镉、铅
TEMU电池法规:CE-battery法规的指令主要检测以下这三样,汞、镉、铅有害物质: CE-Battery认证是依据欧盟新电池法规EU 2023/1542指令进行的电池安全检测报告。该认证针对所有类别的电池,包括内置或添加到产品中的电池,…...
vscode 如何通过Continue引入AI 助手deepseek
第一步: 在deepseek 官网上注册账号,得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步: 打开vscode,在插件市场安装Continue插件, 点击设置,添加deepseek模型,默认…...
【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)
搭建完全分布式高可用大数据集群(Scala+Spark) scala-2.13.16.tgzspark-3.5.4-bin-without-hadoop.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Spark的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/softwa…...
【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命
目录 一、DeepSeek-R1 势不可挡二、DeepSeek-R1 卓越之处三、DeepSeek-R1 创新设计四、DeepSeek-R1 进化之路1. 强化学习RL代替监督微调学习SFL2. Aha Moment “啊哈”时刻3. 蒸馏版本仅采用SFT4. 未来研究计划 部分内容有拓展,部分内容有删除,与原文会有…...
前缀和练习——洛谷P8218:求区间和
题目: 这道题很简单,直接根据题目无脑套公式 代码: #include<bits/stdc.h> using namespace std; const int N 1e5 9; using ll long long; ll a[N], perfix[N]; int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步输…...
uv 安装包
是的,你可以使用 uv 来安装 Python 包。uv 是一个高性能的 Python 包安装器和解析器,由 astral.sh 团队开发,旨在替代 pip 和 pip-tools,提供更快的包安装体验。 ### 如何使用 uv 安装包 1. **安装 uv**: 如果你还…...
【机器学习】训练(Training)、验证(Validation)和测试(Testing)
机器学习中训练(Training)、验证(Validation)和测试(Testing)这三个阶段的作用和关系。 1. 训练阶段 (Training) - 使用训练集数据来训练模型 - 模型通过学习训练数据的特征和模式来调整其内部参数 - 这个阶段模型会不断优化以减少预测误差 - 通常使用最大的数据集比例&…...
3. k8s二进制集群之负载均衡器高可用部署
Haproxy 和 Keepalived安装Haproxy配置文件准备Keepalived配置及健康检查启动Haproxy & Keepalived服务继续上一篇文章《K8S集群架构及主机准备》,下面介绍负载均衡器搭建过程 Haproxy 和 Keepalived安装 在负载均衡器两个主机上安装即可 apt install haproxy keepalived…...
C++游戏开发实战:从引擎架构到物理碰撞
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 C 是游戏开发中最受欢迎的编程语言之一,因其高性能、低延迟和强大的底层控制能力,被广泛用于游戏…...
MSPFN 代码复现
1、环境配置 conda create -n MSPFN python3.9 conda activate MSPFN pip install opencv-python pip install tensorflow pip install tqdm pip install matplotlib2、train 2.1 创建数据集 2.1.1 数据集格式 |--rainysamples |--file1: |--file2:|--fi…...
[c语言日寄]浮点数在内存中的储存
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
PySpark学习笔记5-SparkSQL
sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java,Scala,python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…...
支持 APQP (先期产品质量策划) 的软件系统-汽车电子行业专用研发管理信息化平台
支持 APQP (先期产品质量策划) 的软件系统 在制造业竞争白热化的当下,产品质量已然成为企业立足市场的核心竞争力。APQP(先期产品质量策划)作为保障产品质量的关键流程,贯穿于产品从概念萌生到最终交付的整个生命周期,…...
配置@别名路径,把@/ 解析为 src/
路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js ,内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定: 使用 表示src文件所在路径: path.resolve(__dirname,src)…...
以为是响应式对象丢失导致数据没有回显
背景:之前ruoyi生成的vue2代码, <el-form ref“form”,后面我改成vue3的写法,没有实例化form, 在vue3中是需要定义const form ref(); 导致点击了修改后,页面弹框显示出来,数据没有回显。 一直…...
【汇编语言】直接定址表(二)—— 「代码‘导航员’:直接定址表的功能与应用」
文章目录 前言1. 直接定址表1.1 问题引入(一)—— 为算法清晰而查表1.2 分析与解决问题1.2.1 两个十六进制表示一个字节1.2.2 得到数值对应的数码字符1.2.2.1 最粗暴的方法——比较1.2.2.2 使用映射关系来解决1.2.2.3 存在的问题及解决 1.3 得到子程序1.…...
05vue3实战-----配置项目代码规范
05vue3实战-----配置项目代码规范 1.集成editorconfig配置2.使用prettier工具2.1安装prettier2.2配置.prettierrc文件:2.3创建.prettierignore忽略文件2.4VSCode需要安装prettier的插件2.5VSCod中的配置2.6测试prettier是否生效 3.使用ESLint检测3.1VSCode需要安装E…...
不含101的数
不含101的数 真题目录: 点击去查看 E 卷 200分题型 题目描述 小明在学习二进制时,发现了一类不含101的数: 将数字用二进制表示,不能出现 101 。 现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个不含 101 的数ÿ…...
Linux/C高级(精讲)----shell结构语句、shell数组
shell脚本 功能性语句 test 可测试对象三种:字符串 整数 文件属性 每种测试对象都有若干测试操作符 1)字符串的测试: s1 s2 测试两个字符串的内容是否完全一样 s1 ! s2 测试两个字符串的内容是否有差异 -z s1 测试s1 字符串的长度是…...
基于微信小程序的消防隐患在线举报系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...