Java基础-面向对象-面向对象思维

Java工程师知识树 / Java基础


什么是面向对象

面向对象对应的英文是==Object-Oriented==,把Object-Oriented翻译成==“面向对象”==或者==“物件导向”==。

“物件导向”比较准确地反映了面向对象认识和解决问题都是要围绕对象展开的。

所以,面向对象的思维方式认为:==软件系统是一组交互的对象的集合==。一组相关的对象组合为一个子系统,一组子系统继续组合为更复杂的子系统,直至组
合成整个系统。

面向对象方式的出发点尽可能模拟人类习惯的思维方式,将“问题域”中涉及的内容抽象为“对象”,使软件开发的方法与过程尽可能接近人类认识世
界解决问题的方法与过程。******OO眼里一切皆对象。

和面向过程的区别

面向过程就是分析出解决问题所需要的步骤然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

面向过程认识和解决问题的思维,可以称为“流程论”,重点放在处理过程的步骤,流程是整个系统的核心

面向对象认识和解决问题的思维,可以称为“组装论”,重心放在对象的抽象和提取上,然后将对象组装为整体

所以OO和OP从思维方式来讲,出发点还是完全不同的。

举例:咱们用象棋对战的例子,来比较OP和OO的不同:

红方:功夫熊猫 黑方:悍娇虎 裁判:龟仙人

采用面向过程(OPP)的设计思路,首先分拆整个对战过程,分析双方对战的步骤,得到如下流程:
把上面每个步骤分别用函数进行实现,问题就解决了。
我们再来看看面向对象是如何来解决问题,整个象棋游戏可以抽象出3种对象:
1、棋手,负责行棋,这两者行为一致。
2、棋盘,负责绘制棋盘画面。
3、裁判,负责判定诸如吃子、犯规和输赢。

三者之间的关系如下:

第一类对象棋手负责行棋,并告知第二类对象棋盘中棋子布局的变化,棋盘接收到了棋子布局的变化后,负责在绘制屏幕,同时利用第三类对象裁判来对
棋局进行判定。

从以上两种的实现方式可以看出几点:

  • 1、可维护性
    面向对象是以数据和功能来划分问题,而不是依据流程和步骤。同样是绘制棋盘的行为,在面向过程的设计中分散在了很多的步骤中,很可能出现在不同
    的绘制版本中,只是不是很像一份“蛋炒饭”中的鸡蛋?在面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一,这就是把鸡蛋从
    “蛋炒饭”中分离出来的效果。

  • 2、可扩展性
    假如我要加入悔棋的功能,如果要改动面向过程的设计,那么从行棋到显示再到判定这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。
    如果是面向对象的话,只用改动棋盘对象就行了,棋盘对象保存了双方的棋谱,简单回溯,减一就可以了,而显示和判定不涉及,同时整体对各个对象功能的
    调用顺序都没有变化,改动只限定在了局部。

你可能感兴趣的:(Java基础-面向对象-面向对象思维)