面向对象与面向过程讲解
目录
简介
面向过程编程(Procedural Programming)
什么是面向过程编程?
特点:
面向对象编程(Object-Oriented Programming)
什么是面向对象编程?
特点:
面向对象 vs. 面向过程
选择合适的范式
优势和劣势
总结:
简介
"面向对象"(Object-Oriented, OO)和"面向过程"(Procedural Programming, PP)是两种不同的编程范例,它们对于如何组织和管理代码中的数据和功能有着不同的理念。在本文中,我们将详细讨论这两种编程范例的原理、特点以及适用场景。
面向过程编程(Procedural Programming)
什么是面向过程编程?
面向过程编程是一种以过程(或函数)为中心的编程范式。在这种范式中,程序被划分为一系列的过程,每个过程负责执行特定的任务。数据通常被视为与过程分开的,处理数据的过程与数据本身分离。
特点:
以过程为中心: 在面向过程编程中,重点放在编写过程或函数上。程序的控制流由一系列函数调用组成。
数据与过程分离: 数据和处理数据的函数通常是分开的,这意味着数据是被传递给函数处理的,而不是被包含在对象内。
顺序执行: 程序通常按照顺序执行,一个过程的输出成为另一个过程的输入。
易于理解: 面向过程的代码通常易于理解和维护,因为函数的目的和操作是清晰可见的。
不适合复杂问题: 面向过程编程在处理复杂问题时可能会导致代码的结构混乱,难以维护。
面向对象编程(Object-Oriented Programming)
什么是面向对象编程?
面向对象编程是一种以对象为中心的编程范式。在这种范式中,程序被组织为一组对象,每个对象包含数据和与数据相关的方法(或函数)。对象是类的实例,类是对象的模板,定义了对象的属性和行为。
特点:
以对象为中心: 在面向对象编程中,对象是基本单位。对象包含数据和方法,这些方法可以访问和操作对象的数据。
数据封装: 数据和相关的方法被封装在对象内部,对象可以控制对其数据的访问。
继承: 面向对象编程支持继承,允许一个对象继承另一个对象的属性和方法,从而促进代码重用。
多态: 多态性允许不同对象对相同的方法做出不同的响应,这增强了代码的灵活性。
适用于复杂问题: 面向对象编程在处理复杂问题时具有更好的结构和组织能力,因此适用于大型应用程序开发。
面向对象 vs. 面向过程
选择合适的范式
选择面向对象编程或面向过程编程取决于项目的性质和需求:
面向对象编程适用于大型和复杂的应用程序,因为它提供了更好的组织结构和代码重用。它也更容易维护,因为数据和操作数据的方法封装在对象内。
面向过程编程适用于小型应用程序或需要简单的脚本的情况。它可以更直接地解决问题,因为没有类和对象的概念。
优势和劣势
面向对象编程的优势:
- 代码模块化:代码分成对象,易于维护和测试。
- 代码重用:类和继承使代码重用更容易。
- 灵活性:多态性和继承提供更多的灵活性。
- 抽象性:可以将复杂的现实世界问题抽象为对象和类。
面向对象编程的劣势:
- 学习曲线:面向对象编程的概念可能对初学者来说有些复杂。
- 性能:面向对象编程在某些情况下可能会引入额外的性能开销。
面向过程编程的优势:
- 简单性:更直接,适合处理较小规模的问题。
- 性能:在某些情况下,可能更快,因为没有对象和方法的间接开销。
面向过程编程的劣势:
- 难以扩展:在大型项目中,难以维护和扩展。
- 缺乏代码重用:代码通常不能轻松地重用,因为它不是以模块化的方式组织的。
总结:
面向对象编程和面向过程编程是两种不同的编程范式,每种都有其自己的优势和劣势。选择哪种范式通常取决于项目的复杂性和需求。在实际开发中,通常可以结合使用这两种范式,根据具体情况选择合适的方法来解决问题。无论选择哪种编程范式,重要的是编写干净、可维护和可理解的代码。
相关文章:
面向对象与面向过程讲解
目录 简介 面向过程编程(Procedural Programming) 什么是面向过程编程? 特点: 面向对象编程(Object-Oriented Programming) 什么是面向对象编程? 特点: 面向对象 vs. 面向过程…...
【SA8295P 源码分析 (四)】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析
【SA8295P 源码分析】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解析 系列文章汇总见:《【SA8295P 源码分析 (四)】网络模块 文章链接汇总 - 持续更新中》 本文链接:《【SA8295P 源码分析 (四)】23 - QNX Ethernet MAC 驱动 之 emac1_config.conf 配置文件解…...
Python【list列表去重】
目录 要求: 将list中的重复数据去重,至少使用两种方案 方案一: 方案二: 要求: 将list中的重复数据去重,至少使用两种方案 方案一: 使用set ,可以将list转换为set࿰…...
Leetcode——字符
520. 检测大写字母 class Solution { public:bool detectCapitalUse(string word) {int big 0, small 0, len word.length();for (int i 0; i < len; i) {if (word[i] > 65 && word[i] < 90) {big;}else {small;}}if (big len || small len) {return tr…...
深入解析docker内核网桥
今天做虚拟桌面,朋友问我,为什么vnc 连接另一个docker 容器一直超时,原因是在docker 启动的时候没有组网,那么接下来我就要解析下docker的内核网络。 我们思考几个问题,带你了解linux 中docker 网络实现的基本原理。 文…...
ubuntu18.04服务器双网口配置上外网
记录一下配置服务器过程,本以为简单,结果整了一天。 服务器有2个网口,网口2是用来上外网的,原来用的01-netcfg.yaml进行ip地址设置,主要就用2条命令: vi /etc/netplan/01-netcfg.yaml (打开后…...
【安全体系架构】——防御深度架构
防御深度架构: 防御深度架构是一种多层次的安全模型,旨在通过在网络和系统的各个层次上部署多个安全措施,以抵御不同类型的威胁和攻击。这个模型承认单一的安全措施可能无法全面防御所有潜在威胁,因此采用了多层次的安全防御策略…...
Opencv之RANSAC算法用于直线拟合及特征点集匹配详解
Opencv之RANSAC算法用于直线拟合及特征点集匹配详解 讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时,最近邻匹配与Ransac匹配的不同之处 另外,Ransac也被用于椭圆拟合、变换矩阵求解等 1. 直线拟合 1.1 原理 RANSAC(RANdom …...
Jenkins环境部署与任务构建
一、CI/CD 1、CI/CD 概念: CI/CD 是一种软件开发和交付方法,旨在加速应用程序的开发、测试和部署过程,以提高软件交付的质量和效率。 (1) 持续集成 (CI Continuous Integration): 持续集成是开发团队频繁集成其代码更改的过程。开发者将其…...
ES6 Class和Class继承
1.class的基本语法 class可以理解为是一个语法糖,将js只能通过构造函数创建实例的方法进行了补充 构造函数: function Person ({ name, age18 }) {this.name namethis.age age } new Person({name: 张三}) Class类: class Person {con…...
C++11 packaged_task
std::packaged_task 把一个方法打包成一个task扔到线程中执行,然后通过packaged_task中的furture等待执行结果。 void test_promise() {std::packaged_task <int()> task([]()->int {std::cout << "packaged_task begin \n" << std…...
delete、drop、truncate三兄弟
比较方面/具体命令deletetruncatedrop删除范围逐行删除(记录行)逐页删除(数据页)整张表(数据表结构)所属范畴数据操作语言(DML)数据定义语言(DDL)数据定义语言…...
C/C++运算优先级
文章目录 前言1.运算优先级表2.举例说明:总结 前言 最近复习C基础知识的时候,发现对这部分还是有些模糊。常用的 - ,括号等运算符对于它们的优先级还是比较明确的。但是涉及到移位运算,逻辑运算这种,再结合四则运算…...
apache搭建静态网站,moongoose搭建网站后台,出现的跨域问题解决
文章目录 1,问题描述1.1,当网页和后台是不同服务时会产生跨域问题1.2,跨域问题 2,nginx端口转发解决跨域问题2.1,下载并安装nginx2.1.1,解压后如下所示2.1.2,进入解压目录后,执行配置…...
LiveQing视频点播流媒体RTMP推流服务功能-支持视频点播分屏大屏展示视频轮巡分组播放RMP推流直播大屏展示
LiveQing支持视频点播分屏大屏展示视频轮播分组播放RMP推流直播大屏展示 1、分屏展示2、轮巡播放3、RTMP推流视频直播和点播流媒体服务 1、分屏展示 LiveQing支持将视频点播、鉴权直播,拉转直播视频流,进行分屏播放。 2、轮巡播放 3、RTMP推流视频直播和…...
tf loss构建常用到函数
1、tf.map_fn tf.map_fn是TensorFlow中的一个函数,用于对给定的函数和输入进行逐元素的映射,其定义如下: tf.map_fn(fn,elems,dtypeNone,parallel_iterationsNone,back_propTrue,swap_memoryFalse,infer_shapeTrue,nameNone,fn_output_sign…...
行为型模式-备忘录模式
备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏…...
Android Studio初学者实例:RecyclerView学习--模仿今日头条--续
新学期开始了,这篇文章收到了很多人的评论有很多地方不懂,所以写下了以下的文章--续篇 首先使用RecyclerView也好还是使用ListView,更或是GridView你都要先构思需要什么 这些东西无一例外通常都是用在列表显示下,那么需要一些&a…...
栈和队列的C++模拟实现
一、栈stack 1.介绍(库里面的文档介绍) 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对…...
UE4/5:通过Blender制作BlendShape导入【UE4/5曲线、变形目标,blender形态键】
UE4/5里面,我们经常可以在一些骨骼模型上面看到相关的曲线,如Metahuman里面就是通过这个曲线来改变人物的脸部表情。 而这里笔者将教导如何去制作这种曲线。 这种曲线都是存在于骨骼模型上的,所以我们要么直接制作骨骼模型导入ue࿰…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
