编程思想:面向对象和面向过程

2023-10-27

何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦,你知道啦。而这种茫然,其实就是对这两大编程思想的迷糊之处。本文通过学生到校报道注册的实例,阐述了面向过程和面向对象两大思想。希望能对你的学习和工作有所帮助。

一、面向过程

首先我们来认识下,什么是面向过程?如果咬文嚼字的话可以这样来理解,面向过程就是面向解决问题的过程进行编程。仔细思考一下,我们在学习和工作中,当我们去实现某项功能或完成某项任务时,是不是会不自觉的按部就班的罗列出我们要做的事情?(如果没有,建议以后试着步骤化解决问题)。而当我们按着我们罗列的步骤去解决问题时,实质上就是按照面向过程的思想去解决问题。我们罗列的步骤就是过程,按照步骤解决问题就是面向过程。

传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!实现步骤如下:

将要实现的功能描述为一个从开始到结束按部就班的连续的步骤(过程);

依次逐步完成这些步骤,如果某一步的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结束得到想要的结果;

程序的主体是函数,一个函数就是一个封装起来的模块,可以实现一定的功能,各个子步骤往往就是通过各个函数来完成的,从而实现代码的重用和模块化编程!

案例:学生到校报道注册

这里写图片描述
面向过程,就是按照我们分析好了的步骤,按部就班的依次执行就行了!所以当我们用面向过程的思想去编程或解决问题时,首先一定要把详细的实现过程弄清楚。一旦过程设计清楚,代码的实现简直轻而易举。

二、面向对象

讨论完了面向过程,我们再来认识下面向对象。所谓的面向对象,就是在编程的时候尽可能的去模拟真实的现实世界,按照现实世界中的逻辑去处理一个问题,分析问题中参与其中的有哪些实体,这些实体应该有什么属性和方法,我们如何通过调用这些实体的属性和方法去解决问题。

现实世界中,任何一个操作或者是业务逻辑的实现都需要一个实体来完成,也就是说,实体就是动作的支配者,没有实体,就肯定没有动作发生!

现在让我们思考下,上述注册报名的每一个步骤都有哪些动词?

提出 提供 缴 收 获得 分配 增加

有动词就一定有实现这个动作的实体!
所谓的模拟现实世界,就是使计算机的编程语言在解决相关业务逻辑的方式,与真实的业务逻辑的发生保持一致!需要使每一个动作的背后都一个完成这个动作的实体!

因为任何功能的实现都是依赖于一个具体的实体的“动作|操作|行动”,可以看作是一个又一个的实体在发挥其各自的“能力”并在内部进行协调有序的调用过程!

当采用面向对象的思想解决问题时,可分为下面几步:

分析哪些动作是由哪些实体发出的;
定义这些实体,为其增加相应的属性和功能;
让实体去执行相应的功能或动作。

采用面向对象的思想,解决上面的报名问题,应该如下:

第一步:分析那些动作是由哪些实体发出的

学生提出报名
学生缴费
机构收费
教师分配教室
班级增加学生信息

于是,在整个过程中,一共有四个实体:

学生、机构、教师、班级!

在现实中的一个具体的实体,就是计算机编程中的一个对象!

第二步:定义这些实体,为其增加相应的属性和功能

属性就是实体在现实世界中的一些特征表现。如:

人的属性:姓名、性别、身高、三围、体重、电话号码、家庭住址、籍贯等
手机的属性:品牌、价格、颜色、尺寸、待机时间等

功能就是能完成的动作,在面向对象的术语中,动作就叫作方法或者函数。如:

人的动作(功能):吃饭、睡觉、学习、打游戏、走路、跑步、缴费!
手机的动作(功能):打电话、发短信、拍照、打游戏、视频、看电影等

下图显示了在上述实例中出现的实体以及相应的属性和功能:

这里写图片描述

第三步:让实体去执行相应的功能或动作

学生提出报名
学生缴费
学校收费
教师分配教室
班级增加学生信息

所以说,面向过程主要是针对功能,而面向对象主要是针对能够实现该功能的背后的实体。面向对象实质上就是面向实体,所以当我们使用面向对象进行编程时,一定要建立这样一个观念:万物皆对象!

三、面向对象和面向过程的比较

在我们将面向过程和面向对象讨论完后,会明显的感觉两者之间有着很大的区别。面向过程简单直接,易于入门理解,模块化程度较低。而面向对象相对于面向过程较为复杂,不易理解,模块化程度较高。可总结为下面三点:

都可以实现代码重用和模块化编程,但是面对对象的模块化更深,数据更封闭,也更安全!因为面向对象的封装性更强!

面向对象的思维方式更加贴近于现实生活,更容易解决大型的复杂的业务逻辑。

从前期开发角度上来看,面向对象远比面向过程要复杂,但是从维护和扩展功能的角度上来看,面对对象远比面向过程要简单!

如何选择面向对象还是面向过程,对于一个有着丰富开发经验的老手来说,这是个得心应手的过程。而对于一个新手而言,其实从两者的对比就可以看出,当我们的业务逻辑比较简单时,使用面向过程能更快的实现。但是当我们的业务逻辑比较复杂时,为了将来的维护和扩展,还是面向对象更为靠谱点!当然,当我们被经理催着上交项目时,不要再选择纠结了,哪个能让你更快的完成项目就用哪个吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程思想:面向对象和面向过程 的相关文章

  • iOS Cookies.binarycookies(俗称63数据)存取

    iOS 系统会自动将Safari或APP中网络请求的cookie保存为文件 APP的cookie保存路径为APP的沙盒路径 var mobile Containers Data Application x x x Library Cooki
  • json文件解析出现异常

    今天在尝试用自带的NSJSONSerialization方法来解析本地json文件的时候碰到了系统异常 app自动终止 问题如下 代码
  • Dictionary字典的用法及用途原理

    Dictionary 实例化Dictionary private Dictionary
  • js中,清空对象(删除对象的属性)

    在项目中 有些对象用完后需要重置 下面简单介绍下JS中清除对象的方法 方法如下 方法一 字面量定义对象 第一步 定义一个空对象并打印出来 代码和效果 代码 const student console log student 打印结果 第二步
  • 基本的垃圾回收算法总结

    Java虚拟机中的垃圾回收机制的是虚拟机的灵魂所在 下面介绍下虚拟机中的主要回收算法 引用计数法 实现 对于实例化的一个对象O 只要有任何一个其他的对象引用O O的引用计数器就加一 当引用失效的情况下 引用计数器减一 优点 实现简单 缺点
  • Scala学习笔记(三)——类和对象

    3 1 类 字段和方法 类和字段与java类似 方法推荐尽量避免使用返回语句 尤其是多条返回语句 代之可以把每个方法当作是创建返回值的表达式 如下 3 2 分号推断 除非以下情况的一种成立 否则行尾被认为有分号 1 由一个不能合法作为语句结
  • Unity 的 mathf.lerp

    Unity 的mathf lerp float a float b float t 是线性插值函数 a b的顺序很重要 如果a 10 b 0 则说明是从10到0的变化 如果是a 0 b 10 则说明是从0向10的变化 t的范围在0 1之间
  • JavaScript的OO思想(一)

    类class是Object Oriented面向对象的语言有一个标志 通过类我们可以创建任意多个具有相同属性和方法的对象 JavaScript中没有类的概念 但它也是面向对象的 只是实现方法会有所不同 创建单个对象有两种基本方法 1 使用O
  • iOS左对齐自动换行collection样式

    前言 想必大家工作中或多或少会遇到下图样式的UI需求吧 像这种cell长度不固定 以此向右对齐排列的样式UI可以说是很常见的 实现方式 一般的实现可能主要是分一下两种 1 一种是用button依次排列实现 动态计算text宽度 记录之前一个
  • Swift open public等修饰符详解

    swift 中关于open public internal fileprivate private 修饰的说明 open 用open修饰的类可以在本某块 sdk 或者其他引入本模块的 sdk module 继承 如果是修饰属性的话可以被此模
  • undefined、undeclared、NaN、Null区别

    undefined的是声明了但是没有赋值 javascript在使用该变量是不会报错 undeclared 是未声明也未赋值的变量 JavaScript访问会报错 Null 只有一个null undefined 是由null派生处理的 因此
  • 实体类(VO,DO,DTO)的划分

    经常会接触到VO DO DTO的概念 本文从领域建模中的实体划分和项目中的实际应用情况两个角度 对这几个概念进行简析 得出的主要结论是 在项目应用中 VO对应于页面上需要显示的数据 表单 DO对应于数据库中存储的数据 数据表 DTO对应于除
  • OS中 main.h 的一些基本概念 以及 类与对象的概念及其实现

    目录 头文件 import lt gt 与 import 的区别 include 与 import 的区别 OC语言的特点 自动释放池 面向对象的 特征 与 概念 以及其基本思想 类 与 对象 的概念 如何用OC中创建与使用对象 如何给对象
  • 【C++历险记】面向对象

    个人主页 兜里有颗棉花糖 欢迎 点赞 收藏 留言 加关注 本文由 兜里有颗棉花糖 原创 收录于专栏 C 之路 本专栏旨在记录C 的学习路线 望对大家有所帮助 希望我们一起努力 成长 共同进步 目录 一 多继承以及菱形继承 二 多继承引发的问
  • 面向对象之魔法方法

    目录 概念 魔法方法分类 构造与初始化 new new 的使用场景 init del 类的表示 str repr bool 访问控制 比较操作 eq ne lt gt 容器类操作 重要 可调用对象 序列化 getstate setstate
  • 像数组一样使用NodeList:一个对象组合的有效用法

    场景 我是用querySelectorAll 查询了一些标记 并收到了一个NodeList响应 问题 节点列表类似于数组 比如 他们都有一个长度属性 它们都在括号中的索引访问它们的属性或者子元素 NodeList 0 尝试使用 map fi
  • iOS开发,tableView中cell的重用详解

    注意 原创版权 转载必须标明出处作者 翻版必究 iOS中tableView是一个大的模块组件 它的重要性每个iOSCoder都是了解的 但是tableView中却有个重大的坑 就是cell的重用 每个刚接触iOS开发的人都深受其海 那么经过
  • 蓝牙之四-Handler

    Handler机制 Handler允许用户发送和处理Message以及线程MessageQueue相关的可运行对象 每个Handler实例都对应一个单线程以及该线程的MessageQueue 当创建新的Handler时 该Handler将被
  • iOS App打包上架详细流程

    一 前言 作为一名iOS开发者 把辛辛苦苦开发出来的App上传到App Store是件必要的事 但是很多人还是不知道该怎么上传到App Store上 下面就来详细讲解一下具体流程步骤 二 准备 一个已付费的开发者账号 可分为 账号类型分为个
  • BMS开发之面向对象思想(adbms1818)

    借鉴adbms1818的底层驱动代码 前言 adbms1818的主要用途就是不同种类的寄存器里面存储不同的数据 程序员需要通过特定的协议往寄存器里面写入或者读出数据 1 定义一个结构体 里面存储了adbms1818的所有寄存器的信息 然后我

随机推荐

  • css 深度选择器/deep/

    在vue element ui时会遇到无法修改element ui样式问题 当style设置为scoped的时 所写的样式对子组件且元素是遍历出来时 样式是不生效的 如果希望样式对子组件也生效 可以使用 deep 深度选择器 模板
  • 人工智能-模糊计算(一)

    一 模糊理论基础 1 引入什么是模糊 一粒种子肯定不能构成一堆 两粒也不能 但是人们承认一亿粒种子肯定能构成一堆 那么这个界限在哪儿呢 是否可以说325647粒种子不是一堆而325648粒种子则构成一堆呢 E Borel 在上面这个问题当中
  • mui滚动条实现横竖都能滚动

    网上查了半天就没有说明白的 官方文档也是言语不详 但是有点用 首先 在mui做手机app的时候 自己通过overflow auto 然后固定宽高去展示滚动条是不好使的 只能用它提供的这种滚动方法 官方例子 div class mui scr
  • 2021数学建模国赛一等奖经验总结与分享

    建模国一经验总结 超详细 可根据需要选择性阅读 0 前言 1 前期准备 1 1 学习与感悟 1 2 寻找队友 1 3 比赛推荐 1 4 前期磨合与训练 1 5 资源与知识储备 2 比赛期间 时间分配和节奏问题 一些小建议 3 论文部分方法总
  • 【翻译】是时候与科技建立更持久的关系了吗?

    当轨道交通时间到来时 你可以进行轨道交通 但不是之前 罗伯特 A 海因莱因 在他的SF小说 通往夏天的门 中 海因莱因认为 对于特定形式的技术变革 时间必须是正确的 在必要的技术和文化基础到位之前 它不会发生 问题是 我们是否已经达到了最终
  • 【Linux 系列笔记】04 VMware Workstation安装(超细!!!)

    作者 MiTu 本帖内容著作权归作者所有 转载请务必保留本文链接 VMware 和 CentOS 的安装 前言 安装VMware Workstation 前言 在学习Linux前 必须有一个Linux发行版的系统才能来学习 安装Linux系
  • 数据结构:八种常见数据结构

    八种常见数据结构 一 前言 二 常用的数据结构 数组 Array 栈 Stack 队列 Queue 链表 Linked List 树 Tree 图 Graph 堆 Heap 散列表 Hash 三 八种数据结构的区别 数组 栈 队列 链表 树
  • Golang Array 数组使用注意事项和细节

    在go数组当中 长度是数据类型的一部分 3 int 3 int 数组使用注意事项和细节 1 数组是多个相同类型数据的组合 一个数组一旦声明 定义了 其长度是固定的 不能动态变化 var a 3 int a 0 1 1 这样是不行的 必须是整
  • 解决网络正常,但chrome浏览器无法正常使用的问题

    其他浏览器和联网软件工具都能正常使用 唯独chrome浏览器一直崩溃 连设置页面都打不开 根本就无法设置 在网上找了很多方法 整理的方法有 1 代理问题 2 重置网络netsh winsock reset 然后重启 3 重新安装 然而 这些
  • 哪些事件经常会导致项目被延误

    http horizon itpub net post 339 394756 1 上级领导主管臆断 制定了不现实的期限 项目经理与程序员们被迫按照不合理的进度表开展工作 2 客户的需求发生了变化 但没有对进度表作出相应的修改 3 低估了项目
  • WEB工程启动加载jar包顺序

    WEB工程在TOMCAT容器中启动的时候jar包的加载顺序 1 java home lib 目录下的java核心api 2 java home lib ext 目录下的java扩展jar包 3 java classpath Djava cl
  • spring中的控制反转和依赖注入之间的关系

    Spring中的控制反转 把new这一个过程交给了spring容器去处理 控制反转就是将new对象这一个过程交给外部去做 即Spring 而不是自己去创建 图中的1 控制正转 并没有这个名词 只是为了更好的理解什么是控制反转 图2中并没有n
  • hexo博客主题diaspora的gitalk配置(多图预警)

    前提 已装好git hexo环境 首先 在github上注册 如下图所示 进入设置 开发者设置 新建OAuth App 注册 注册完成 注意事项均在图中标出 现在完成了第一步 然后去主题页下载主题 也可以在你的hexo文件夹下右键打开git
  • java快速对接微信支付分(一)

    1 微信支付分产品介绍 维信支付分是对个人的身份特质 支付行为 使用历史等情况的综合计算分值 旨在为用户提供更简单便捷的生活方式 1 用户可在具体应用场景中 开通威信支付分 此为最常见的开通方法 开通后 用户可以在 微信 gt 我 gt 服
  • Windows安装ElasticSearch

    Linux买了个最小配的服务器 内存玩不起 window实验一下 准备工作 第一步 安装java 下载链接 进去下个最新版的就行 https www oracle com technetwork java javase downloads
  • 实现简单的栈与队列

    前言 前面已经详细地介绍了基本的顺序表和链表 这次要介绍的是数据结构中的栈与队列 从本质上来说 二者是特殊的线性表 是依赖于顺序表或链表来实现的 所以只要能够很好地掌握顺序表和链表 再了解清楚栈与队列的概念及基本结构 就可以很好地将二者实现
  • python编写递归函数、计算n!(n=10)_十、Python函数递归(带实例演示)

    在一个函数体内调用它自身 被称为函数递归 函数递归包含了一种隐式的循环 它会重复执行某段代码 但这种重复执行无须循环控制 例如有如下数学题 己知有一个数列 f 0 1 f 1 4 f n 2 2 f n 1 f n 其中 n 是大于 0 的
  • 初步使用openEuler华为欧拉Linux系统

    使用openEuler 1 下载镜像文件 2 启动虚拟机软件安装虚拟机 3 开始配置系统 4 开始使用 5 安装桌面 5 1 安装必备的字体 5 2设置桌面图形化界面 5 3安装ukui 5 4重启 6 整体评价 参考文献 1 下载镜像文件
  • Html+css(第一天)

    基础认识 1 五大浏览器有哪些 IE浏览器 火狐浏览器 Firefox 谷歌浏览器 Chrome Safari浏览器 欧朋浏览器 Opera 2 相同的网页在不同浏览器中显示效果会完全一致吗 因为不同浏览器渲染引擎不同 解析的效果会存在差异
  • 编程思想:面向对象和面向过程

    何谓面向对象 何谓面向过程 对于这编程界的两大思想 一直贯穿在我们学习和工作当中 我们知道面向过程和面向对象 但要让我们讲出来个所以然 又感觉是不知从何说起 最后可能也只会说出一句就是那样啦 你知道啦 而这种茫然 其实就是对这两大编程思想的