深入理解——面向对象和面向过程

OOP

谈到面向对象逃不掉的一个问题就是面向对象和面向过程的区别和联系

从时间的线性角度来说,面向对象是面向过程的下一个发展阶段,从二者的逻辑角度来说,则并没有纯粹的优劣,而是需要编码者根据特定的情况来选择特定的方式。

从代码的发展的角度来看,随着代码量的逐渐扩大,必然会遇到几个问题:1.代码复用问题,2.问题排查的成本问题,本质就是:如何让写代码更加的便捷,减少编程人员的负担,降低解决问题的难度,迎合大脑解决问题的方式,迎合人类的天性。

进而引出了一个必然的问题就是模块化问题,将问题拆分再聚合几乎是大脑解决问题的核心思路。所以如何模块化,模块和模块之间如何联系是工程学研究的核心内容之一。

在将代码模块化的过程中,会触及两个核心情况:耦合和内聚,即如何适度处理模块和模块之间联系的复杂度?如何适度处理单个模块的功能含量?

为了处理耦合和内聚难以适度导致的问题,体现的表象就是面向过程和面向对象的编程思维的不同。

从代码的横向的角度来看程序的核心是两个内容:数据+算法,那么面向过程就是先考虑算法,将问题的解决过程模块化,然后考虑数据的组织形式

从代码纵向的角度来说面向过程就是将问题解决的每一个步骤进行模块化。

以上是面向过程,下面给出对面向对象的个人理解,横向上,面向对象优先将数据模块化为对象,纵向上通过对象和对象相互作用取代过程和过程相互作用,本质上是将一个整体的过程中的某个行为微化成了一个对象的**方法,**然后再由coder 将这些过程组织成问题的解决步骤。

这样从数据的角度出发去编码,会使得编码更加方便:如在问题排查的过程中,实际的编码过程中,错误体现的都是某个数据结果错误或者程序行为的错误。而因为面向对象的编码方式过程微化程度更高,进而使得DBUG更为容易。

面向过程的组织方式:

image-20240123210009384

面向对象的组织方式:

image-20240123210455796

最后要说的是,面向对象和面向过程没有绝对的优劣,适用的场景不同,可以体现出不同的能力。

本篇关键词:模块化,优先考虑方式,微化程度

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Parallels Desktop 18 for Mac(pd虚拟机) 激活版

Parallels Desktop 18是一款功能强大的虚拟机软件,可以在Mac操作系统上同时运行多种操作系统,包括Windows、Linux、Android等。该软件提供了多种高级功能,如支持DirectX 11游戏、3D图形和OpenGL应用程序,以及运行Windows和Mac应用…

一天吃透消息队列面试八股文

内容摘自我的学习网站:topjavaer.cn 为什么要使用消息队列? 总结一下,主要三点原因:解耦、异步、削峰。 1、解耦。比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问&#xff0…

Stable Diffusion学习

参考 Stable Diffusion原理详解_stable diffusion csdn-CSDN博客 Stable Diffusion是stability.ai开源的图像生成模型,可以说Stable Diffusion的发布将AI图像生成提高到了全新高度,其效果和影响不亚于Open AI发布ChatGPT。 图像生成的发展 在Stable D…

【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案

文章目录 前言 1 方案概述 2 方案实施 2.1 云平台选择 2.2 Python环境搭建 2.3 应用开发与部署 2.4 应用管理 2.5 安全性与隐私保护 3 方案优势与效益 4 推荐图书 5 粉丝福利 前言 随着云计算技术的快速发展,越来越多的企业开始将业务迁移至云端&#x…

多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现WOA-TCN-Multihead-Attention鲸鱼算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效…

keil5 查看stm32 寄存器的值

1 查看芯片内部寄存器的值,首先是在仿真状态下,首先仿真,程序运行。 2 点击菜单栏的 View -> System viewer ,右侧便会出现芯片的所有寄存器(如果没有,需要添加),点击要查看的寄存器,便会出…

8. UE5 RPG创建UI(上)

UI是显示角色的一部分属性玩家可以直接查看的界面,通过直观的形式在屏幕上显示角色的各种信息。如何使用一种可扩展,可维护的形式来制作,这不得不说到耳熟能详的MVC架构。 MVC(Model-View-Controller)是一种常见的软件…

javaWebssh宠物基地管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh宠物基地管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

Unity | 渡鸦避难所-8 | URP 中利用 Shader 实现角色受击闪白动画

1. 效果预览 当角色受到攻击时,为了增加游戏的视觉效果和反馈,可以添加粒子等动画,也可以使用 Shader 实现受击闪白动画:受到攻击时变为白色,逐渐恢复为正常颜色 本游戏中设定英雄受击时播放粒子效果,怪物…

SG-8506CA 可编程晶体振荡器 (SPXO)

输出: LV-PECL频率范围: 50MHz ~ 800MHz电源电压: 2.5V to 3.3V外部尺寸规格: 7.0 5.0 1.5mm (8引脚)特性:用户指定一个起始频率, 7-bit I2C 地址:用户可编程: I2C 接口:基频的高频晶体:低抖动PLL技术应用:OTN, BTS, 测试设备 规格(特征) *1 这包括初…

软件工程实验报告(完整)

博主介绍:✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 &#x1f44…

pikachu_ssrf攻略

ssrf(curl): 打开pikachu靶场: http://127.0.0.1/pikachu-master/vul/ssrf/ssrf_curl.php?urlhttp://127.0.0.1/pikachu-master/vul/ssrf/ssrf_info/info1.php 发现URL地址最后面是info1.php 猜测一下有没有可能存在info2.php?…

java抽象工厂实战与总结

文章目录 一、工厂模式(三种)1.简单工厂模式1.1 概念:1.2 使用场景:1.3 模型图解:1.4 伪代码: 2.工厂方法模式2.1 概念:2.2 使用场景:2.3 模型图解:2.4 伪代码 3.抽象工厂…

C++逆向分析--虚函数(多态的前置)

先理解一件事,在intel汇编层面来说,直接调用和间接调用的区别。 直接调用语法: call 地址 硬编码为 :e8 间接调用语法: call [ ...] 硬编码为: FF 那么在C语法中,实现多态的前提是父类需要实现多态的成员…

深入分析 Linux 网络丢包问题

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330 所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。这些被丢弃包的数量&#…

【分布式技术专题】「分布式技术架构」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)

探索Tomcat技术架构设计模式的奥秘 Tomcat系统架构分析Tomcat 整体结构Tomcat总体结构图以 Service 作为“婚姻”1) Service 接口方法列表 2) StandardService 的类结构图方法列表 3) StandardService. SetContainer4) StandardService. addConnector 以 Server 为“居”1) Ser…

nvm 配置淘宝镜像失效,以及安装node后 npm-v 无效

win11 nvm版本 1.1.4 和1.1.7和1.1.12(目前最新版本24年 一月二十三日) 以上nvm版本都会出现一下问题, 从https://github.com/coreybutler/nvm-windows/releases 下载nvm安装包如下图 傻瓜式安装后,不用去配置环境变量&#…

冰箱和小型制冷系统毛细管选型计算软件介绍

这是一款比较实用的软件,可以快速根据制冷剂类型、制冷量、蒸发温度、冷凝温度、回气温度大致确定毛细管内径和长度。可以根据不同的内径选择对应的长度,通常内径越小长度也会越短。可以选择的冷媒类型 可以设置个人喜好的单位 对于初学者可以使用该软件…

router4j--SpringCloud动态路由利器

前言 本文介绍Java的动态路由中间件:router4j。router4j用于SpringCloud项目,它可以将某个url请求路由到指定的机器上,也可以将所有请求强制转到指定机器。 问题描述 Java后端在开发SpringCloud项目时如果同一个应用起了多个实例&#xff…

UE5.2、CesiumForUnreal实现加载GeoJson绘制单面

文章目录 前言一、实现目标二、实现过程1.实现原理2.数据读取3.三角剖分3.具体代码 4.蓝图测试 前言 UE5、CesiumForUnreal实现加载GeoJson绘制单面(Polygon)功能(StaticMesh方式) 一、实现目标 通过读取本地的Geojson数据&…