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

news2024/11/24 16:33:03

引言

  小伙伴们,当你们看到这章的时候,显然你们已经跨过了来自指针给你们带来的麻烦,唔~真棒呢,但是我们只学会一些基础的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.coloradmin.cn/o/1877492.html

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

相关文章

Linux基础 - BIND加密传输缓存服务器

目录 零. 简介 一. 安装 二. 安全的加密传输 三. 部署缓存服务器 四. 总结 零. 简介 BIND&#xff08;Berkeley Internet Name Domain&#xff09;是一款广泛使用的开源 DNS&#xff08;域名系统&#xff09;服务器软件。 域名系统的主要作用是将易于人类理解的域名&…

实验2 色彩模式转换

1. 实验目的 ①了解常用的色彩模式&#xff0c;理解色彩模式转换原理&#xff1b; ②掌握Photoshop中常用的颜色管理工具和色彩模式转换方法&#xff1b; ③掌握使用Matlab/PythonOpenCV编程实现色彩模式转换的方法。 2. 实验内容 ①使用Photoshop中的颜色管理工具&#xff…

Node.js个人博客

1. 项目介绍 项目演示地址&#xff1a;https://ximingx.org.cn/ 项目github&#xff1a;https://github.com/ximingx/blog 想象一下,你是一位热爱写作的程序员小王。每天,你都有很多新的想法和技术心得想要分享。但是,管理你的博客网站却成了一个让你头疼的问题。 周一早晨…

统计分析利器:深入解读卡方检验与单因素方差分析的应用案例【练习题】

一、卡方检验 1.对400人进行问卷调查&#xff0c;询问对于教学改革的看法&#xff0c;调查结果如下表所示&#xff0c;请问不同学科不同性别的人意见是否相同。 学科 男生 女生 工科 80 40 理科 120 160 &#xff08;性别&#xff0c;学科均无序分类>卡方检验&am…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目录 一.RemoteAttestation原理介绍1.1 远程认证原理1.2 远程认证步骤1.3 远程认证基本流程1.4 IAS通过以下步骤验证报告的签名1.5 关键术语1.6 总结二.源码分析2.1 README2.1.1 README给出的编译流程2.2 重点代码分析2.2.0 主要代码模块交互流程分析2.2.1 isv_app文件夹2.…

Leetcode刷题笔记 | 二叉树基本性质 | 一天的题量 | 5道题目 | 深度优先搜索 | 广度优先搜索 | 递归 | 遍历

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;本期毛毛张分享的是LeetCode关于二叉树&#x1f332;的性质的一些基础题&#xff0c;做这些题目的本质还是遍历二叉树&#x1f3c3;‍➡️的过程&#…

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app&#xff0c;一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目&#xff0c;可以节省大量的开发时间。 这…

Docker部署Dillinger个人文本编辑器

Docker部署Dillinger个人文本编辑器 一、Dillinger介绍1.1 Dillinger简介1.2 Dillinger使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、拉取Dillinger镜像五、部署Dill…

前后端分离的后台管理系统开发模板(带你从零开发一套自己的若依框架)上

前言&#xff1a; 目前&#xff0c;前后端分离开发已经成为当前web开发的主流。目前最流行的技术选型是前端vue3后端的spring boot3&#xff0c;本次。就基于这两个市面上主流的框架来开发出一套基本的后台管理系统的模板&#xff0c;以便于我们今后的开发。 前端使用vue3ele…

YOLO网络结构特点收录

YOLO网络结构特点收录 YOLO&#xff08;You Only Look Once&#xff09;网络结构随着版本迭代不断进化&#xff0c;以下是一些关键版本的网络结构特点概述&#xff1a; YOLOv1 输入&#xff1a;将图像调整至固定尺寸&#xff0c;如448x448像素。骨干网络&#xff1a;初期版本…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作数

Every day a Leetcode 题目来源&#xff1a;3190. 使所有元素都可以被 3 整除的最少操作数 解法1&#xff1a;遍历 遍历数组&#xff0c;累加最少操作数&#xff0c;即 min(num % 3, 3 - num % 3)。 代码&#xff1a; /** lc appleetcode.cn id3190 langcpp** [3190] 使所…

ElementUI框架搭建及组件使用

前言: 当开始使用ElementUI框架来搭建网站或Web应用程序时&#xff0c;了解框架的基本结构和组件的使用是至关重要的。ElementUI是一个基于Vue.js的框架&#xff0c;提供了丰富的UI组件和工具&#xff0c;可以帮助开发人员快速构建现代化的用户界面。 在本文中&#xff0c;我…

电脑提示vcomp140.dll丢失的几种有效的解决方法,轻松搞定dll问题

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是找不到vcomp140.dll。那么&#xff0c;究竟什么是vcomp140.dll呢&#xff1f;为什么会出现找不到vcomp140.dll的情况呢&#xff1f;本文将从vcomp140.dll的定义、常见原因、对电脑的影响以及解…

[鹏城杯 2022]babybit

发现一个压缩包提取出来提取出来两个压缩包里面是注册表使用MiTeC Windows Registry Recovery 恢复注册表 flag在ROOT\ControlSet001\Control\FVEStats里的OsvEncryptInit和OsvEncryptComplete中 NSSCTF{2022/6/13_15:17:39_2022/6/13_15:23:46}

Nuxtjs3教程

起步 官方文档 官方目录结构 安装 npx nuxi@latest init <project-name>后面跟着提示走就行 最后yarn run dev 启动项目访问localhost:3000即可 路由组件 app.vue为项目根组件 <nuxt-page />为路由显示入口 将app.vue更改内容如下 <template><d…

PostgreSQL 17 Beta 1 发布!

PostgreSQL 全球开发小组宣布&#xff0c;PostgreSQL 17 的第一个测试版本现已可供下载。此版本包含 PostgreSQL 17 正式发布时将提供的所有功能的预览&#xff0c;但测试期间版本的某些细节可能会发生变化。 #PG培训#PG考试#postgresql培训#postgresql考试#postgresql认证 您…

【Qt+opencv】编译、配置opencv

文章目录 前言下载opencv编译opencvmingw版本 总结 前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它包含了超过2500个优化的算法。这些算法可以用来检测和识别面部&#xff0c;识别对象&#x…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

Python_Socket

Python Socket socket 是通讯中的一种方式&#xff0c;主要用来处理客户端与伺服器端之串连&#xff0c;只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…

pdf怎么转换成jpg,本地转换还是在线转换?

PDF&#xff08;Portable Document Format&#xff09;和JPG&#xff08;Joint Photographic Experts Group&#xff09;这两种文件格式在我们的日常生活和工作中扮演着举足轻重的角色。PDF因其跨平台、保持原样性强的特点&#xff0c;被广泛应用于文件传输和存储&#xff1b;而…