实际工程里为什么不用面向过程编程而是用面向对象编程

在软件工程中,面向对象编程(OOP)比面向过程编程(OPP)更为常用,这背后有多个原因。
以下是对这一现象的具体分析:

1.需求变更应对

	理想情况下用户给了一个需求,程序员吧啦吧啦一写达成需求顺利交付。实际上,给了一个需求吧啦吧啦一写,告诉你不是这样,要啊吧啊吧写。再啊吧啊吧改完演示的时候又是阿西阿西写。用户每次都会说:没事这你就顺手一改,也不是啥大变动。实际只有自己知道这俩要改的天差地别(私下抓狂)。面向对象设计为啥在软工中如此流行就是因为它能处理这种实际情况。面向对象允许更容易地修改和扩展系统。面向过程的代码每次可能要全部改动一遍或全部通读代码,而面向对象只需要改动部分模块中的代码就能保证其他已经实现的功能不受影响。面向对象通过类的继承和多态性来处理变化。当需求变更时,面向对象的方法可以通过增加新的类或修改现有类来适应变化,而不需要重写整个程序。

2.代码复用性提高

面向对象编程鼓励代码复用,通过继承和组合,可以在不同的地方重复使用相同的代码。
这种复用性提高了开发效率,减少了代码维护的工作量。

3.系统结构清晰

面向对象的系统通常具有更清晰的结构,因为对象和类之间的关系反映了现实世界的实体和它们之间的交互。
这种清晰的结构使得系统的设计和实现更加直观,易于理解和维护。

4.模块化设计

面向对象方法支持模块化设计,每个模块(即类)都有明确的职责和接口。
这种模块化使得系统的各个部分可以独立开发、测试和部署,提高了开发效率和系统的可靠性。

具体用哪个

如果是长期项目且逻辑较复杂,只能用面向对象,否则后期修改会改到人死机。
目前来说做的都是机器学习项目,有些科研项目基本都是面向过程来写的,
后期在工程化落地比如产学研结合,应用过程和研究过程完全是两回事。
工程化中最好改成面向对象,将程序模块化。最简单的解耦思路就是将
输入、输出与算法分离,这样确保维护时修改不会导致崩盘。

数据较多时还要考虑测试的便利性。

从开发角度讲,面向过程编程简单直接效率高开发速度快,
面向对象要慢并且模块的设计需要思考和衡量。
但如果这套代码投入使用,改着改着还是会进入解耦阶段
(不然每次都通读代码太痛苦了!!而且写完一段时间再回头看都不知道是哪个sb写的。)

总的来说,面向对象编程之所以在软件工程中被广泛采用,是因为它提供了更好的需求变更应对、代码复用性提高、系统结构清晰以及模块化设计等优势。这些优势使得面向对象编程成为解决复杂软件问题的首选方法。

增加一个python的代码示例,包含测试

import logging
import unittestlogging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)def read_data(file_path):logger.debug(f"Reading data from {file_path}")# Read data logic herereturn []def process_data(data):logger.debug("Starting data processing")# Process data logic herereturn datadef validate_data(data):logger.debug("Validating data")if not isinstance(data, list):raise ValueError("Data should be a list")for item in data:if not isinstance(item, dict):raise ValueError("Each item in the data should be a dictionary")return Trueclass TestDataProcessing(unittest.TestCase):def test_read_data(self):data = read_data('test_file.csv')self.assertIsInstance(data, list)def test_process_data(self):data = [{'key': 'value'}]processed_data = process_data(data)self.assertEqual(processed_data, data)def test_validate_data(self):data = [{'key': 'value'}]self.assertTrue(validate_data(data))with self.assertRaises(ValueError):validate_data([])if __name__ == "__main__":unittest.main()

———————————— 有好的模块设计思路框架可推荐一下,感谢 !———————————————

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

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

相关文章

微信分账系统供应链分润微信支付 (亲测源码)

搭建环境:nginxphp7.2mysql5.7 1.上传源码到网站根目录并解压 2.导入数据库文件到数据库 3.修改数据库链接文件/.env 4.设置运行目录为/public 5.伪静态设置成tp 6.后台地址:域名/zh9025.php 源码下载:https://download.csdn.net/down…

HTB:Buff[WriteUP]

目录 连接至HTB服务器并启动靶机 信息搜集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机开放的端口进行脚本、服务扫描 使用curl分别访问靶机的两个端口 使用浏览器访问靶机8080端口页面 漏洞利用 使用searchsploit搜索该WebAPP 通过python2利用该EXP成功ge…

[UE5学习] 一、使用源代码安装UE5.4

一、简介 本文介绍了如何使用源代码安装编译UE5.4,并且新建简单的项目,打包成安卓平台下的apk安装包。 二、使用源代码安装UE5.4 注意事项: 请保证可以全程流畅地科学上网。请保证C盘具有充足的空间。请保证接下来安装下载的visual studi…

遗传算法(Genetic Algorithm, GA)

简介 遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传机制的优化算法,由 John Holland 于20世纪70年代提出。它是一种模拟生物进化过程的启发式搜索算法,被广泛应用于函数优化、机器学习、调度问题等领域。 代码说明 …

【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)

深度极限学习机 (DELM) 作为一种新型的深度学习算法,凭借其独特的结构和训练方式,在诸多领域展现出优异的性能。本文将重点探讨DELM在多输入单输出 (MISO) 场景下的应用,深入分析其算法原理、性能特点以及未来发展前景。 1、 DELM算法原理及其…

[Redis#0] iredis: linux上redis超好用的环境配置

目录 Features 特征 Install 安装 Pip Brew Linux的 Download Binary 下载 Binary Usage 用法 Using DSN 使用 DSN Change The Default Prompt更改默认提示 Configuration 配置 Keys Development 发展 Release Strategy 发布策略 Setup Environment 设置环境 De…

软件测试——性能测试概念篇

前言:在完成对web网页或者接口的功能测试后,我们还需要考虑性能方面的因素,在学习完性能测试后,目标是能够对个人编写的项目进行性能测试,找到性能不足的地方(性能问题个人很难去解决,如&#x…

从搭建uni-app+vue3工程开始

技术栈 uni-app、vue3、typescript、vite、sass、uview-plus、pinia 一、项目搭建 1、创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2、安装sass npm install -D sass// 安装sass-loader,注意需要版本10,…

探索 .NET 9 控制台应用中的 LiteDB 异步 CRUD 操作

本文主要是使用异步方式,体验 litedb 基本的 crud 操作。 LiteDB 是一款轻量级、快速且免费的 .NET NoSQL 嵌入式数据库,专为小型本地应用程序设计。它以单一数据文件的形式提供服务,支持文档存储和查询功能,适用于桌面应用、移动…

AWS 新加坡EC2 VPS 性能、线路评测及免费注意事项

原文论坛给你更好的阅读讨论体验💐: AWS 新加坡EC2 VPS 性能、线路评测及免费注意事项 - VPS - 波波论坛 引言 对于那些习惯薅“羊毛”的朋友来说, AWS 的 免费套餐 可能已经非常熟悉。这台vps是我用外币卡薅的免费的12个月的机器&#xf…

C++ASCII码表和字符操作

目录 1. 引言 2. ASCII码表 2.1 控制字符 2.2 可显示字符 3. 字符操作 3.1 记住几个字符规律 3.2 打印能够显示的ASCII码 3.3 字母大小写转换 3.4 数字转数字字符 1. 引言 在电子计算机中,只能识别由 0 和 1 组成的一串串的二进制数字,为了将人类…

git使用(二)

git使用(二) git常用基本操作命令git clonegit loggit remotegit statusgit addgit commitgit pushgit branchgit pull git常用基本操作命令 git clone 项目开发中项目负责人会在github上创建一个远程仓库,我们需要使用git clone将远程仓库…

密码学11

概论 计算机安全的最核心三个关键目标(指标)/为:保密性 Confidentiality、完整性 Integrity、可用性 Availability ,三者称为 CIA三元组 数据保密性:确保隐私或是秘密信息不向非授权者泄漏,也不被非授权者使…

netstat -tuln | grep 27017(显示所有监听状态的 TCP 和 UDP 端口,并且以数字形式显示地址和端口号)

文章目录 1. 确定占用端口的进程使用 lsof 命令使用 fuser 命令 2. 结束占用端口的进程3. 修改 MongoDB 配置文件4. 检查 MongoDB 日志文件5. 重新启动 MongoDB 服务6. 检查 MongoDB 服务状态总结 [rootlocalhost etc]# netstat -tuln | grep 27017 tcp 0 0 127.0.…

ElasticSearch7.x入门教程之集群安装(一)

文章目录 前言一、es7.x版本集群安装二、elasticsearch-head安装三、Kibana安装总结 前言 在工作中遇到了,便在此记录一下,以防后面会再次遇到。第一次使用是在2020年末,过了很久了,忘了些许部分了。 在工作当中,如果…

I.MX6U 裸机开发18.GPT定时器实现高精度延时

I.MX6U 裸机开发18.GPT定时器实现高精度延时 一、GPT定时器简介1. GPT 功能2. 时钟源3. 框图4. 运行模式(1)Restart mode(2)Free-Run Mode 5. 中断类型(1)溢出中断 Rollover Interrupt(2&#x…

key-value存储实现

文章目录 一、项目简介二、项目流程图三、网络3.1、epoll实现3.2、io_uring实现 四、协议五、存储5.1、array实现5.2、rbtree实现5.3、hash实现 六、测试 一、项目简介 key-value存储其实是一个小型的redis,用户在客户端输入存储相关的指令发送给服务器端&#xff…

大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?

大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务? 如果在局域网内,可以不需要进行二次开发,通过对打印机进…

微软发布Win11 24H2系统11月可选更新KB5046740!

系统之家11月22日报道,微软针对Win11 24H2系统推出2024年11月最新可选更新补丁KB5046740,更新后系统版本后升至26100.2454,此次更新后修复当应用程序以PDF和XLSX格式导出图表对象时停止响应、无法使用API查找旋转信息等问题。以下小编将给大家…

探索 RocketMQ:企业级消息中间件的选择与应用

一、关于RocketMQ RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统&…