前言:

在一段时间的练习中,我都是把代码一撸到底,然后感觉好没意思。后来呢,和班里的大佬进行沟通学习才知道我的写法是面向过程的写法,但是呢,我们也都知道java是面向对象的一种编程语言,所以在一段时间里在网上进行查找面向对象的写法,并对面向对象进行总结,下面大家一起来探讨一下,如果有错,请批评指正!!!!

一、面向对象与面向过程的区别:

首先,如果想使用面向对象的思想进行编程,那么就需要知道到底什么是面向对象和面向过程,下面我在查询的时候找到的俩个小列子进行帮助
理解:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

第一个列子:

可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、
开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤
9、输出最后结果。把上面每个步骤用不同的方法来
实现。

如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、
黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢
等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接
收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计
中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。
而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

第二个列子:

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫
盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我
觉得这个比喻还是比较贴切的。

由于我们不是学厨师的,所以蛋炒饭制作的细节就不在这里多说了,但最后的一道工序肯定是把米饭和鸡蛋混在
一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要
一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。

蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒
掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖
浇饭的缺点是入味不均,可能没有蛋炒饭那么香。

到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否
则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒
饭更有优势,他可以组合出来任意多的组合,而且不会浪费。

盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程
的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任
何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要
表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

二、面向对象的特点:

在了解其特点之前,咱们先谈谈对象,对象就是现实世界存在的任何事务都可以称之为对象,有着自己独特的个性
浅谈面向对象和面向过程的编程及优缺点

属性用来描述具体某个对象的特征。比如小志身高180CM,体重70KG,这里身高、体重都是属性。
面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成!

属性属于对象静态的一面,用来形容对象的一些特性,方法属于对象动态的一面,咱们举一个例子,小明会跑,
会说话,跑、说话这些行为就是对象的方法!所以为动态的一面, 我们把属性和方法称为这个对象的成员!

类:具有同种属性的对象称为类,是个抽象的概念。比如“人”就是一类,期中有一些人名,比如小明、小红、
小玲等等这些都是对象,类就相当于一个模具,他定义了它所包含的全体对象的公共特征和功能,对象就是
类的一个实例化,小明就是人的一实例化!我们在做程序的时候,经常要将一个变量实例化,就是这个原理!
我们一般在做程序的时候一般都不用类名的,比如我们在叫小明的时候,不会喊“人,你干嘛呢!”而是说的是
“小明,你在干嘛呢!”

三、面向对象的优缺点:

1、面向对象相对面向过程的优点

    1)结构清晰。使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富
        有人性化。

    2)封装性。减小外部对内部的影响。封装将对象有关的数据和行为封装成整体来处理,使得对象以外的
        部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难
        度。

    3)容易扩展,代码重用率高。容易扩展,在大框架不变的情况下很容易就开发出适合自己的功能,实现
        简单,可有效地减少程序的维护工作量,软件开发效率高。

2、面向对象相对面向过程的缺点

    1)增加工作量。如果一味地强调封装,当进行修改对象内部时,对象的任何属性都不允许外部直接存
        取,则要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并
        且使程序显得臃肿。

    2)性能低。由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,
        计算时间和空间存储大小的都开销很大。

四:如何向面向对象的思想转变

完全的面向对象当然是需要长期的练习以及熟悉设计模式的,不过第一步很容易。首先把你的代码改造成,以若干数据结构为核心,把每一个函数都改造成只操作一个数据结构的函数,然后把它们改成class。如果你要跨数据结构,要么选择其中一个数据结构,另外的都用操作那个数据结构的函数,然后就可以把这个函数放进某个class里。要么全部都用操作那些数据结构的函数,然后就作为一个全局函数,只接受那几个class。