面向对象和面向过程编程的区别

引言

  小伙伴们,当你们看到这章的时候,显然你们已经跨过了来自指针给你们带来的麻烦,唔~真棒呢,但是我们只学会一些基础的C++语法并不能帮我们解决问题,甚至是稍微难一些的题目我们都没办法解决,那怎么办呢,我想已经有小伙伴知道了,那就是用C++的语法用面向对象的方式去写代码。
  我们之前写的代码都是以一种面向过程的方式编程,这是针对一种问题的解决所写出来的程序,在面临越来越多的代码工程来说,这样的编程方式有点慢了,不要怕,这时候就出现了面向对象化编程,他能在很大程度上拓展我们的解决问题的范围。那到底面向对象化编程是什么呢,它和我们之前学的面向过程化编程有什么区别呢让我们一起来看看吧~

面向过程编程

定义:

面向过程编程(Procedure-oriented Programming,POP)是一种编程范式。

它强调的程序是一系列按照顺序执行的步骤或过程,重点在于编写一系列的函数或者过程来完成具体的任务。在面向过程编程中,数据和对数据的操作上是分离的,通常先定义数据结构,然后编写函数来处理这些数据。

核心思想就是以功能为中心,专注于问题的解决,将整个需求分解为若干个步骤,每个步骤定义为一个函数,通过逐步调用函数来实现整个需求。

  • 例如小杨同学早上开宝马去上学,面向过程编程可以梳理为如下步骤:
    在这里插入图片描述

特点:

  • 以函数为最小单位,强调的是功能行为,主要考虑怎么做(算法)。
  • 面向过程=数据+算法,对于给定输入经过函数处理返回结果(IPO: Input Process Output)。

优缺点:

  • 优点:
      符合人类思维,各代码块分工明确,需要实现的功能拆分的清晰明了。逻辑清晰、流程明确,对于小型程序或简单任务较为高效。
  • 缺点:
      数据和处理数据的函数是相互分离的。对于大型、复杂的系统,其可维护性和可扩展性可能会受到一定限制。
    • 当数据结构改变时,所有和该数据结构有关联的函数都要修改,程序的可维护性差。
    • 函数功能太固定,不易于复用,不容易扩展。

面向对象编程

定义

面向对象编程(Object-Oriented Programming,OOP)也是一种基于对象概念的编程范式。

在面向对象编程中,程序由对象组成,对象是包含数据(属性)和操作这些数据的方法(行为)的实体。对象之间通过发送消息来相互交互和协作。

面向对象编程考虑的核心是将需求中涉及的事物找出来,将事物的数据抽象为属性,行为抽象为方法,再将属性和行为封装在一起形成类型,这些类所产生的对象相互协作完成需求。

  • 例如小杨同学早上开宝马去上学,面向对象编程可以梳理为如下步骤:
    在这里插入图片描述

特点:

  1. 面向对象编程以类为最小单位。
  2. 面对象编程=类+对象+消息(对象调用属性或方法),其中核心是类与对象。

面向对象中的基本概念

封装
   将对象的属性和方法封装在一起,对外只提供必要的接口,隐藏内部实现细节。

  • 类, 描述了一组具有相同特征(属性)和相同行为(方法)的对象。比如、汽车,书,苹果等。
  • 对象,是现实世界实际存在的事物,是类的一个具体示例。例如,某一辆宝马,《三体》,正在吃的那个苹果。
  • 属性,类中的特征(数据)称为类的属性(数据成员)。例如,汽车的颜色,品牌,车牌号码;书的作者、单价、页数;苹果的颜色、大小、品种、甜度等。
  • 方法,类中行为(函数)称为类的方法(成员函数)。例如,汽车加速,启动,停车等。

继承:
  继承允许创建一个新的类(子类),该类可以从现有的类(父类)中继承属性和方法。子类可以扩展和修改父类的功能,同时还可以添加自己特有的属性和方法。通过继承,可以实现代码的复用,减少重复编写相同的代码,提高开发效率。

多态:

多态分为编译时多态和运行时多态。

  编译时多态通常通过函数重载来实现,即相同的函数名可以有不同的参数列表,在编译阶段根据参数的类型和数量来决定调用哪个具体的函数。

  运行时多态通过虚函数来实现。当子类重写了父类的虚函数时,通过父类的指针或引用调用虚函数,实际执行的是子类中重写后的版本,从而实现了在运行时根据对象的实际类型来决定调用的方法。

  多态使得程序具有更好的灵活性和可扩展性,能够更方便地处理不同类型但具有相似行为的对象

代码示例:

这里先提前露一下明天要说的内容,这是一个代码示例,他把需要用的功能和属性都放在了类中,分成模块,可以让一个团队分工合作,而不是一个大佬库库敲整个代码程序区。

  • 面向对象编程的主函数:
int main()
{//	定义(创建)Rect类的对象r。Rect r, r1;//	.操作符访问成员,可以访问数据成员或成员函数。r.setLength(2);r.setWidth(3);cout << r.getArea() << endl;cout << r.getPerimeter() << endl;	//	多个对象之间的属性互相独立。r1.setLength(1);//	函数成员参数可以有默认值r1.setWidth();cout << r1.getArea() << endl;cout << r1.getPerimeter() << endl;return 0;
}

结语

  今天的内容算是个开胃前菜,给大家先说说有关面向对象编程的内容,有关具体内容,由于篇幅较长,需要展开来说,所以就放在下一章来说,不过这一章单独拿出来也不是只是因为这个。
  很多人说小杨这个我只会面对过程编程可以么,我说不太行,因为我们未来一定是团队合作,如果一群人来改一份文档,还有各个变量,相比想要完成一个合格的项目是很难的,所以我们一定要学会面向对象化编程。
  好了,小伙伴们加油呀,一定要紧跟着小杨的步伐,冲冲冲!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多机调度问题

#include<iostream> #include<string> using namespace std; struct work {int time;int number; }; int setwork0(int m,int n,int a[],struct work w[]) {int maxtime0;for(int i1; i<m; i){cout<<i<<"号设备处理作业"<<w[i].num…

python系列30:各种爬虫技术总结

1. 使用requests获取网页内容 以巴鲁夫产品为例&#xff0c;可以用get请求获取内容&#xff1a; https://www.balluff.com.cn/zh-cn/products/BES02YF 对应的网页为&#xff1a; 使用简单方法进行解析即可 import requests r BES02YF res requests.get("https://www.…

YOLOv8改进 | 卷积模块 | 分布移位卷积DSConv替换Conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效…

2024百度之星第一场-110串

补题链接&#xff1a; 码蹄集 三个状态转移的计数dp 先确定状态 n个数至多修改k次&#xff0c;保证不出现字串“110” 常规想法先把状态确定为dp[n][k][0/1]&#xff0c;前n个数&#xff0c;修改k次后&#xff0c;末尾数为0/1&#xff0c;不能转移再换思路。 初始状态设定如…

存储请求地址但是使用时请求的是端口

baseURL默认全局加载一次&#xff0c;后续直接读取缓存 解决方案&#xff1a;

类和对象(封装、继承、多态、友元)

c面相对象的三大特性为&#xff1a;封装、继承、多态 c 认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 一、类和对象&#xff08;封装&#xff09; &#xff08;一&#xff09;封装的意义 封装是c面相对象的三大特性之一 封装的意义&#xff1a; 将属性和行为…

网页如何快速被收录?

其实就是要要吸引搜索引擎爬虫更快地抓取你的网页&#xff0c;想让爬虫爬取网页&#xff0c;首要做的自然是创建并提交站点地图。站点地图是搜索引擎了解你网站结构的重要工具。它可以帮助爬虫更快地发现和抓取你网站上的所有重要页面。通过Google Search Console提交站点地图&…

6. 较全的Open3D点云数据处理(python)

注意&#xff1a;以下内容来自博客爆肝5万字❤️Open3D 点云数据处理基础&#xff08;Python版&#xff09;_python 点云 焊缝-CSDN博客&#xff0c;这篇博客写的全且详细&#xff0c;在这里是为了记笔记方便查看&#xff0c;并非抄袭。 1.点云的读写 代码如下&#xff1a; …

ARM功耗管理软件之软件栈及示例

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?

ubuntu22.04速装中文输入法

附送ubuntu安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb

python中pip换源

目录 1. 背景2. Python 的 pip 换源2.1 临时换源&#xff08;命令行中使用参数&#xff09;2.2 永久换源&#xff08;修改配置文件&#xff09;2.2.1 Windows系统2.2.2 Linux/macOS系统 2.3 使用 pip-config 命令换源&#xff08;Linux/macOS 特定&#xff09; 3. 常用的 PyPI …

深入分析 Android BroadcastReceiver (七)

文章目录 深入分析 Android BroadcastReceiver (七)1. 高级应用场景1.1 示例&#xff1a;动态权限请求1.2 示例&#xff1a;应用内通知更新 2. 安全性与性能优化2.1 示例&#xff1a;设置权限防止广播攻击2.2 示例&#xff1a;使用 LocalBroadcastManager2.3 示例&#xff1a;在…

三分钟给AI Agent应用对话增加人类情感!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

[算法]——堆排序(C语言实现)

简单的介绍一下用堆排序的算法对整形数据的数据进行排序。 一、堆的概念 堆是具有下列性质的完全二叉树&#xff1a;每个结点的值都大于或等于其左右孩子节点的值&#xff0c;称为大顶堆&#xff1b;或者每个结点的值都小于或等于其左右孩子结点的值&#xff0c;称为小顶堆。 …

GenAI 用于客户支持 — 第 1 部分:构建我们的概念验证

作者&#xff1a;来自 Elastic Chris Blaisure 欢迎来到 Inside Elastic 博客系列&#xff0c;我们将展示 Elastic 的内部运营如何解决实际业务挑战。本系列将揭示我们将生成式 AI&#xff08;gererative AI - GenAI&#xff09;集成到客户成功和支持运营中的历程&#xff0c;让…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…

几个常见的FPGA问题之序列发生器、编码器、D触发器

几个常见的FPGA问题之序列发生器、编码器、D触发器 语言 :Verilg HDL 、VHDL EDA工具: Vivado 几个常见的FPGA问题之序列发生器、编码器、D触发器一、引言二、背景1、序列发生器(Sequence Generator)2、编码器(Encoder)3、D触发器(D Flip-Flop)二、问题及解决方案1. 序…

二进制方式部署consul单机版

1.consul的下载 mkdir -p /root/consul/data && cd /root/consul wget https://releases.hashicorp.com/consul/1.18.0/consul_1.18.0_linux_amd64.zip unzip consul_1.18.0_linux_amd64.zip mv consul /usr/local/bin/ 2.配置文件 // 配置文件路径&#xff1a; /roo…

将深度相机的实时三维坐标数据保存为excel文档

一、如何将数据保存为excel文档 1.excel文件库与相关使用 &#xff08;1&#xff09;导入相应的excel文件库&#xff0c;导入前先要进行pip安装&#xff0c;pip install xlwt import xlwt # 导入用于创建和写入Excel文件的库 (2) 建立一个excel文档&#xff0c;并在第0行写…

web安全渗透测试十大常规项(一):web渗透测试之Fastjson反序列化

渗透测试之Java反序列化 1. Fastjson反序列化1.1 FastJson反序列化链知识点1.2 FastJson反序列化链分析1.3.1 FastJson 1.2.24 利用链分析1.3.2 FastJson 1.2.25-1.2.47 CC链分析1.3.2.1、开启autoTypeSupport:1.2.25-1.2.411.3.2.2 fastjson-1.2.42 版本绕过1.3.2.3 fastjson…