面向过程与面向对象
各位读者朋友,我是你们的好朋友IT黑铁,最近巩固面向对象的过程中,想要总结一直模糊的编程思想之间的区别,如下是我如今技术水平所能感受到的,后续成长后会再次修正。若有错误,请多指教!
1. 核心思想区别
面向过程是关注过程的实现,侧重于算法;而面向对象是关注参与系统构成的对象元素,并且较为关注对象的内部构成,即面向对象侧重于数据。
面向过程举例:完成一个程序,先去思考从输入到输出的实现流程,虽然可以说是只写了粗略的函数声明,重要的数据元素也用了结构体包装,其他的数据结构程序员根本不关心,用到的时候再去临时添加。
面向对象举例:完成一个程序,先去思考参与整个流程的数据对象,将其属性和行为抽象出来,虽然这其中可以受到设计模式的指导在抽象时就在考虑组织,但通常是最后才去考虑对象之间如何组织得到输出。
可以看出,面向过程注重的是算法思想,而面向对象关注的是数据类型的组成方式。
2. 封装与不封装的区别
在一个庞大的系统里,如果采用不封装的方式,将难以定位到一个数据和函数的位置。没有组织性,难以知道一个变量的具体含义(仅靠程序员的编程水平来规范是极不可靠的)。最不能接受的是函数与数据之间的关系难以界定,不能知道函数内部使用的数据是来自哪里,这样导致的后果是总是在找变量名是来自哪。并且其安全性也极差,因为没有针对数据的保护措施,信息暴露在视野里。
而若是采用封装,肉眼可见的就是组织层次分明,操作的单位不再是单个简单独立的数据结构,而是操作大粒度的对象。更像是以人的思维来完成工作,将每个实体抽象成类再派生成对象,一个对象里拥有的属性和方法都是它特有的,能够清晰的分清里和外,内部实现显而易见的就知道什么是外部的数据、什么是自己的属性,外部调用也能轻易分清调用的是哪个对象的方法。如果类抽象的程度好,那么在进行对象交互的设计时,层次结构就明显的能够找到适合的解决方案,就像是水到渠成。另外它的关键字对数据进行了保护,隐藏了对象的成员,只提供对象接受的公共方法给外部调用,这也是我们非常想要的,它能阻止某些非法、错误的修改属性。
3. 代码复用的程度
在面向过程里,代码复用只能通过函数一个方式,缺少了对数据的复用,移植非常的困难。
而面向对象里,代码复用程度就让人感到愉悦。将对象抽象成类,从类派生一个新对象,尤其简单,就能得到一个预想的毫无差别的对象。面向对象的继承特性,使代码复用再提升一个阶层,正如其名,体现对象间的父子关系,子类继承父类的特性,无需重复编码父类的特性,只用关注自己要扩展的。为了让懒惰的程序员不用编码相同的地方,他们又设计了通用编程,在C++里称作模板,在Java里称作泛型,它不关注数据类型,任一数据类型都用相同的代码,通过编译器将他们隐式转型,当然也可以显示地指定转型,这种技术广泛应用于容器技术。
4. 多态造就的易扩展和灵活性
面向对象的封装和继承引入了面向过程没有的、设计者最想要的多态性。
虽然多态包含以下两种情况:
函数(或方法)的重载
接口继承子类实现的多态
第一种情况面向过程也有,是对相同函数名不同参数列表的重载,这里主要说的是第二个。在设计模式里常用的、推荐的就是接口继承,接口继承,使后续扩展留足了空间,新的类只需继承接口,在自己的类里重载抽象方法,由于子类属于父类的派生类,可以向上转型,在调用时使用父类调用方法,执行不同的子类实现。这样带来的好处,让增加新功能时,不用改动原有代码,只使用自己的类,灵活多变,易扩展。
标签:总结,对象,子类,复用,面向对象,面向,过程 From: https://www.cnblogs.com/itdaling/p/16943087.html