有过编程的经历的读者可能经常会听到面向过程编程和面向对象编程,然后你是否去深入了解过这两个概念,它们之间有什么区别,下面我就来简单介绍一下。
举例1首先用一个十分简单的例子来对这两个概念有一个宏观的认识
假设明天我要从上海出发前往北京,面向过程的我会这样做:打开地图搜索一下,自己开车走哪一条路比较近,选择哪一条国道,走哪一座桥,过哪一个隧道,都是我需要需要考虑的,最后我一步一步的实现它,到达了北京。
而面向对象的我会这样做:开打出行APP选择坐飞机还是火车,选择哪一班车,选择完毕,去车站坐车,到达目的地。
举例2面向过程会要求去掌控每一个细节,而面向对象则只需要挑选合适的工具即可。
我是一名NBA的数据分析师,我的工作是记录球队的统计数据,显然,我需要计算机的帮助。
过程性的程序员可能会这样考虑:
我要输入每名球员的姓名,投篮次数,命中次数,命中率以及其它的一些基本统计数据,篮板,助攻等。为了简化工作我需要计算机来计算数据,并且我还希望程序能够显示这些数据,那么我应该如何做呢?我可能会想到调用函数来完成输入的工作,调用另外一个函数完成计算的工作,然后调用第三个函数完成显示的工作。那么,获得下一场比赛的数据后,又应该怎么做呢?我可不想再从头开始了,这时候我会选择调用一个更新数据的函数。在这些基础上,我会想做一个菜单,选择是输入、计算、显示还是更新。那么这些数据如何存储呢?这时我会用字符串数组来存放名字,另外一个数组存放投篮次数,以及其它数组存放其它数据,这样做好像太麻烦了,可以直接设计一个结构来存储每位球员的所有信息,然后再用这个结构组成的数组来表示整个球队。
总之,采用过程性编程方法时,首先考虑要遵循的步骤,然后考虑如何存放这些数据。
这个时候OOP(面向对象程序设计(Object Oriented Programming))程序员会怎么做呢?
首先考虑的是数据,不仅是考虑如何表示数据,还要考虑如何使用数据:
我要追踪的是什么?当然是选手。因此需要一个对象表示整个选手的各个方面(不仅仅是投篮次数或命中率)。这将是数据的基本单元——一个表示选手姓名和统计数据的对象。我需要一些处理该对象的方法。首先需要一种将基本信息加入到该单元中的方法;其次,计算机应计算一些东西,如命中率,因此需要添加一些执行计算的方法。程序应自动完成这些计算,而用户无需干涉。另外,还需要一些更新和显示信息的方法。所以,用户与数据交互的方式有三种:初始化、更新和报告——这就是用户接口。
总之,采用OOP方法时,首先从用户的角度考虑对象——描述对象所需要的数据以及描述用户与数据交互所需要的的操作。完成对接口的描述后,需要确定如何实现接口和数据存储。最后,使用新的设计方案创建出程序。
查看更多关于【育儿知识】的文章