关于编程中面向对象与面向过程的理解

概述

面向对象编程(Object-Oriented Programming )简称 OOP 和面向过程编程(Procedural Programming)是两种不同的编程范式或编程思想,它们在处理问题的方式、组织代码的结构以及程序设计哲学上有显著的不同点。

概念

面向过程编程

面向过程着重于解决问题的步骤和顺序,将整个程序划分为一系列可执行的函数或者过程,这些函数通常是相互独立的,并且通过函数调用来协同工作。

在代码中的具体表现为:程序被组织为一个个函数,函数之间通过参数传递数据,函数内部实现具体的计算或操作。

面向对象编程

面向对象则聚焦于"对象",即现实世界中的实体和概念的抽象。它将数据(属性)和操作数据的行为(方法)绑定在一起,形成"类",通过创建类的实例(对象)来解决问题。对象之间通过消息传递进行通信和协作。

在代码中的具体表现为:程序由类组成,类定义了对象的状态和行为,通过实例化类得到对象,通过对象间的交互来完成功能。

案例

为了能更直观地理解面向对象与面向过程,这里以现实中围棋比赛为例看看在代码中的实现:

swift 复制代码
**面向过程**
func funcname (Parameters) -> returntype
{
    猜先
    黑子先手
    棋盘绘制
    规则判定
    白子后手
    棋盘绘制
    规则判定
    ...
    黑子先手
    棋盘绘制
    规则判定
    白子后手
    棋盘绘制
    规则判定
    结束比赛
}

可以看到面向过程编程关注的是解决问题的步骤,将问题分解为一系列详细的步骤,并通过函数或子程序来逐个实现这些步骤。这些函数或子程序会按照预定的顺序进行调用,从而完成整个任务。

swift 复制代码
如果用面向对象思想去实现下围棋功能,首先将整个围棋游戏分为三个对象:
1. 黑白双方,这两方的行为是一样的。
2. 棋盘系统,负责绘制画面。
3. 规则系统,负责判定犯规、输赢等。
然后赋予每个对象一些属性和行为:
黑白双方负责接受用户输入,并告知第二类对象(棋盘系统)棋子布局的变化。
棋盘系统接收到了棋子的变化,并负责在屏幕上面显示出这种变化。
第三类对象(规则系统)来对棋局进行判定。

可以看出,面向对象是以功能来划分问题,而不是以步骤解决。比如绘制画面这个行为,在面向过程中是分散在了多个步骤中的,可能会出现不同的绘制版本,所以要考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘系统这个对象中出现,从而保证了绘图的统一。

优缺点

面向过程编程

  • 优点:结构清晰,执行效率相对较高,对于小型、简单的项目或者对性能要求较高的场合比较适用。
  • 缺点:当程序规模增大、需求变化频繁时,面向过程编程难以做到良好的模块化和抽象,复用性和扩展性相对较差,代码维护成本可能较高。

面向对象编程

  • 优点:提供更好的模块化和封装,有助于减少代码冗余,增强了复用性和扩展性。通过继承和多态机制能够很好地应对复杂系统的构建和维护。
  • 缺点:相比于面向过程,面向对象编程可能引入更多的间接层(如类的实例化),因此在某些特定场景下可能会导致运行效率略低于纯面向过程编程。但其带来的可维护性和灵活性的优势通常被认为远胜于性能上的微小损失。
相关推荐
小尤笔记6 天前
Python操作系统的6个自动化脚本
数据库·python·自动化·php·编程语言·python入门
神经星星11 天前
【TVM 教程】使用 Relay Visualizer 可视化 Relay
人工智能·机器学习·编程语言
GoppViper22 天前
golang学习笔记17——golang使用go-kit框架搭建微服务详解
笔记·后端·学习·微服务·golang·编程语言·go-kit
GoppViper25 天前
golang学习笔记12——Go 语言内存管理详解
笔记·后端·学习·golang·编程语言·内存优化·golang内存管理
GoppViper25 天前
golang学习笔记11——Go 语言的并发与同步实现详解
笔记·后端·学习·golang·编程语言·goroutine·golang并发
一丝晨光1 个月前
安全API
java·开发语言·c++·安全·编程·c·编程语言
GoppViper1 个月前
golang学习笔记15——golang依赖管理方法
笔记·后端·学习·golang·编程语言·源代码管理·golang依赖管理
GoppViper1 个月前
golang学习笔记10——golang 的 Gin 框架,快速构建高效 Web 应用
笔记·学习·golang·gin·编程语言
Geektec1 个月前
智能代码编辑器:Visual Studio Code的深度剖析
vscode·编辑器·编程·代码编辑器·编程语言
股票程序交易接口1 个月前
更适合编写股票盯盘软件或者量化交易平台的语言是Python还是C
量化交易·编程语言·股票api接口·股票量化接口·python股票接口