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

一、面向过程

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

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

  1. 将要实现的功能描述为一个从开始到结束按部就班的连续的步骤(过程);
  2. 依次逐步完成这些步骤,如果某一步的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结束得到想要的结果;
  3. 程序的主体是函数,一个函数就是一个封装起来的模块,可以实现一定的功能,各个子步骤往往就是通过各个函数来完成的,从而实现代码的重用和模块化编程!

案例:学生到校报道注册

面向过程流程图:

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

二、面向对象

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

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

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

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

  有动词就一定有实现这个动作的实体!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 都可以实现代码重用和模块化编程,但是面对对象的模块化更深,数据更封闭,也更安全!因为面向对象的封装性更强!
  2. 面对对象的思维方式更加贴近于现实生活,更容易解决大型的复杂的业务逻辑
  3. 从前期开发角度上来看,面对对象远比面向过程要复杂,但是从维护和扩展功能的角度上来看,面对对象远比面向过程要简单!

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

四、通俗易懂地举例说明“面向对象”和“面向过程”有什么区别?

如何大象装进冰箱?

面向过程:
为了把大象装进冰箱,需要3个过程。
1) 把冰箱门打开(得到打开门的冰箱)
2) 把大象装进去(打开门后,得到里面装着大象的冰箱)
3) 把冰箱门关上(打开门、装好大象后,获得关好门的冰箱)
每个过程有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱。

1:
冰箱开门(冰箱)
冰箱装进(冰箱, 大象)
冰箱关门(冰箱)
==换个写法
(冰箱开门 冰箱)
(冰箱装进 冰箱 大象)
(冰箱关门 冰箱)

2:
冰箱关门(冰箱装进(冰箱开门(冰箱), 大象))
==换个写法
(冰箱关门 (冰箱装进 (冰箱开门 冰箱) 大象))

面向对象:
为了把大象装进冰箱,需要做三个动作(或者叫行为)。
每个动作有一个执行者,它就是对象。
1) 冰箱,你给我把门打开
2) 冰箱,你给我把大象装进去(或者说,大象,你给我钻到冰箱里去)
3) 冰箱,你给我把门关上
依次做这些动作,就能把大象装进冰箱。

1:
冰箱.开门()
冰箱.装进(大象)
冰箱.关门()

2:
冰箱.开门().装进(大象).关门()

编程思想:面向对象和面向过程相关推荐

  1. 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)

    面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...

  2. 什么是面向对象编程?面向对象和面向过程有什么区别?

    面向对象 面向对象的程序设计(Object-Oriented Programming,简记为OOP),是当下最流行的程序设计方式之一.在面向对象的设计思想中,将程序视为多个对象共同协作的结果.程序被划 ...

  3. 面向对象编程(一)——面向对象和面向过程

    面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向 ...

  4. python面向对象和面向过程的区别_Python11-01_面向对象----面向对象和面向过程的区别...

    面向对象编程 面向对象(OPP)编程思想主要针对大型软件设计而来的.面向对象编程使程序的扩展性更加强,可读性更好.使得编程可以像搭积木一样简单. 面向对象编程将数据和操作数据的方法封装到对象中,组织代 ...

  5. python 递归函数_Python尚学堂高淇|P82P86面向对象和面向过程的区别LEGB规则nonlocal_global递归函数阶乘计算案例...

    P82-递归函数-阶乘计算案例 #使用递归函数计算阶乘def factorial(n):if n==1:return 1else:return n*factorial(n-1)result=facto ...

  6. python面向对象和面向过程_python--什么是面向对象和面向过程,对象的进化,什么是对象...

    最近开始重新学习一边python,之后会持续更新python的学习笔记,主要偏重的是python语法跟内存之间的关系 1.python中,一切皆对象,常见的数据结构是对象,函数是对象,类也是对象,对象 ...

  7. 001面向对象和面向过程

    面向对象编程思想 目标: 理解面向过程,和面向对象编程思想 路径: 面向过程编程思想 面向对象编程思想 两种模式中的优缺点 举例说明 讲解 编程思想其实就是编程思路,我们开发中两种中经典的编程思想,就 ...

  8. 【c++开篇】浅谈面向对象与面向过程(举例说明)

    浅谈面向对象与面向过程 前言:刚接触C++第一时间,都会经常听到这样一话:C语言面向过程,C++面向对象.在老师模拟面试时,问道你对面向对象与面向过程的认识时,我有点懵答的不是很完整,刚好C++开篇写 ...

  9. 面向对象与面向过程的区别

    面向对象 面向对象是一种以"对象"为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为. 面向 ...

最新文章

  1. 公开课报名 | 深入浅出理解A3C强化学习
  2. 11月下旬国内域名解析商Top10:中国数据5.03%居第四
  3. 【错误记录】Android 分区存储 错误 ( 文件格式不匹配 )
  4. matlab显示的图片,手动保存时四周有白边
  5. keyshot渲染图文教程_一篇文章教你学会3D建模和渲染 反正我是信了
  6. 【AutoML】优化方法可以进行自动搜索学习吗?
  7. LINQ 查询表达式(C# 编程指南)
  8. 博客url什么形式_URL的完整形式是什么?
  9. delphi7 如何判定dbgrid两行重复_良渚文化陶器上的图案、符号和文字(5)良渚文化陶器上文字的判定...
  10. linux下安装微信,qq,企业微信,百度网盘,Foxmail等软件方法
  11. 2021北师大丰台实验高考成绩查询,【北京市丰台区实验学校网站】2021招生|怎么样|排名|高中部|初中部...
  12. 《深度学习Python实践》第22章——文本分类实例
  13. 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
  14. python博弈论代码_博弈论的算法总结
  15. 曼切斯特编码波特率和比特率的关系
  16. python 字符串时间带有月份简写 星期简写 时区, 格式化为其他样式
  17. 1.0.16-Python练习题-求一张纸对折多少次能达到珠峰高度
  18. 抠取头发丝(用PS cc)
  19. vue开发企业微信应用-开发必读
  20. 百度糯米猴年初一夺冠  协同创新三大法器赢得漂亮

热门文章

  1. Brainstorm-the walkthrough example: Image Classification
  2. php的memcache安装,在window10下面
  3. 对每个小组的评论和建议
  4. 【转载】OpenStack Swift学习笔记
  5. 在C#中运用 SQLite
  6. Java核心API需要掌握的程度
  7. socket buffer套接字缓存
  8. git commit查找提交的关键字
  9. 8X25Q充电部分软件梳理(CP侧)
  10. 人体反应测试仪 c语言,人体反应速度测试仪毕业设计说明