面向“对象”和“过程”
在学习软工视频的时候总是想不明白,面向对象和面向过程,这两个东西字面上肯定能分得清,这个是没有问题的,但是具体到怎样算是面向对象,怎样又是面向过程?这样一问,大概模糊的想法还是有的,毕竟是模糊的。
面向对象的程序设计方法所得到的程序是类的集合,而面向过程的程序设计方法所得到的程序是函数的集合,因此在设计面向对象的程序时,不要使用独立的函数去构造程序。
面向对象:面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后在由这些部分组合而成为一个整体。
面向过程:是把一个项目、一件事情按照一定的顺序从头尾一步一步的做下去 ,先做什么,后做什么,一直到结束。其实也可以理解为一个事情完成的方法。是一个单入口,单出口的过程。
举个例子说明一下:五子棋的游戏
面向对象:
黑白双方,这两方的行为是一模一样的,棋盘系统,负责绘制画面;规则系统,负责犯规,输赢等;第一类对象(玩家对象)负责接收用户输入,并告知第二类对象(棋盘对象)棋子布局在变化,棋盘对象在接收到棋子N的变化就要负责界面上显示出这种变化。同时利用第三类对象(规则系统)来判定这场棋局。
很显然面向对象就是按功能划分的,而不是用步骤划分的。
面向过程:
利用上面的步骤,分别通过函数来实现就是面向过程。
通过上面的例子,功能上的统一保证了面向对象设计的可扩展性,比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的顺序都要进行大规模进行调整。这样的改动是全局性的;如果面向对象的话,只用改动棋盘对象就行了,这样的改动是局部的。
在面向对象程序设计中有三大原则:封装、继承和多态。
封装:
封装是一种把代码和有关这个代码的操作的数据捆绑在一起,使这两者不容易受外界的干扰和无用的机制。封装相当于一种外包装器,防止封装之外的所定义的其他代码任意的访问和干扰。对包装器内部代码和数据的访问通过一个明确的定义的接口来控制。封装代码的好处是每一个人都知道怎么访问代码,而且无其他副作用。比如:在Java中,最基本的封装单元就是“类”,对象是类的实例化~~~
继承:
继承是指一个对象从另一个对象获得属性的过程。支持按层次分类的概念。一个深度继承的子类将继承它在类层次的每个祖先的所有属性。类似于现实生活中的子继承父。例如:猫是动物,猫是哺乳动物。“哺乳动物”继承“动物”的“动物”的属性。(个人想法,如有错误,望加指正)
多态:
多态是指一个方法只有一个名称,但是可以有多个形态,也就是程序中可以定义多个同名的方法;可以用“一个接口,多个方法。”来描述。可以通过方法的参数和类型进行引用。
有封装、继承和多态所组成的环境中,程序员可以编写出比面向过程更加健壮,更具有扩展性的程序,经过仔细设计的类层次的结构是重用代码的基础,封装能让程序员不必修改共有接口的代码即可实现程序的移植,多态能使程序员开发出简洁,易懂,易修改的代码,例如:汽车从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,无论是奔驰还是跑马。驾驶员都能找到方向盘,手刹,换挡器,经过一段时间驾驶后,都能知道手动挡和自动挡之间的差别,因为他们实际上都知道这两者的共同超类:传动设置。从封装的角度看,驾驶员总是能看的封装的特性。比如:刹车器。不用知道其中的构造。与其他外部设备没有造成干扰,比如:刹车的过程中并不伴随着换挡。多态的角度,汽车这个对象是由多个不同的接口构成的。
面向过程和面向对象都有其不同的运用方式。以上都是本人一个菜鸟通过查询资料和自己的一些理解,如有不对的地方,望大神加以指导。
若安好,便是晴!