面向对象思维


什么是面向对象
    刚接触编程的时候,多数人本能的反映可能是面向过程(OP)的,而不是面向对象(OO)的。这种现象其实是很正常的,改变思维方式是需要一个过程的,
我大体归纳了一下其形成的原因:


1、直接原因
    你还没有养成面向对象分析问题和解决问题的习惯。建立面向对象的思维方式需要一定时间的训练和揣摩才能形成,所以你可以在学习或具体项目中刻
意地强化这种意识。一般情况下,经过一段时间之后,你会觉得这是自然而然的事情,只有心中OO,眼中自然OO了。


2、历史原因
    我们从小接受的培训都是采用面向过程(OP)的方式分析问题和解决问题,尤其是数学,多数是强调按部就班的解决问题,计算机软件的发展一直就与数
学是很有渊源,所以,顺理成章的,把面向过程(OP)的方式带入到软件开发也是很自然的事情。


    什么是面向对象,或者谈谈你对面向对象的理解,这恐怕是软件开发人员,尤其是程序员和设计师应聘的时候,面试官常最挂在嘴边的问题吧。面向对象
对应的英文是Object-Oriented,把Object-Oriented翻译成“面向对象”,我一直觉得这个译法不太确切,因为多数人第一次看到“面向对象”这四个字
,都很难从字面上理解它到底是什么意思。后来,我又查阅了一些有关的资料,发现港澳台的计算机书籍中是把它翻译成了“物件导向”,这个译法,我感觉
不错,于我心颇有些戚戚焉。“物件导向”比较准确地反映了面向对象认识和解决问题都是要围绕对象展开的。


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


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


    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务
分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

 

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

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

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


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

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


    采用面向过程(OPP)的设计思路,首先分拆整个对战过程,分析双方对战的步骤,得到如下流程:

 

    把上面每个步骤分别用函数进行实现,问题就解决了。

 

 

    我们再来看看面向对象是如何来解决问题,整个象棋游戏可以抽象出3种对象:
1、棋手,负责行棋,这两者行为一致。
2、棋盘,负责绘制棋盘画面。
3、裁判,负责判定诸如吃子、犯规和输赢。


    三者之间的关系如下:

 


    第一类对象棋手负责行棋,并告知第二类对象棋盘中棋子布局的变化,棋盘接收到了棋子布局的变化后,负责在绘制屏幕,同时利用第三类对象裁判来对
棋局进行判定。
从以上两种的实现方式可以看出几点:


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


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


3.5.3 OO的深层思考 
    OO认为:软件系统是一组交互的对象的集合。
    因为人类对现实世界是非常熟悉的,所以OO就是通过抽象的方式,把问题域映射到现实世界,尽量模拟现实世界的万事万物。通过这种方式,就可以运用
现实世界中解决问题的方法与过程,来解决软件领域内的问题。
有人说:OO眼里一切皆对象,这句话还是很有道理的。
OO到底给软件开发带来了什么样的好处?OO的抽象的尺度是如何把握的呢?这都是问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象思维导图(js)是一种基于面向对象编程思想的思维工具,用于描述和组织JavaScript程序中的对象、类、属性和方法之间的关系。下面是面向对象思维导图(js)中的主要概念和要点: 1. 对象(Object):在JavaScript中,对象是由属性和方法组成的实体,可以表示现实世界中的任何事物。对象具有属性来描述其状态,方法来定义其行为。 2. 类(Class):类是对象的蓝图或模板,它定义了对象的属性和方法。类将一组具有相似特征和行为的对象进行分类。 3. 属性(Properties):属性是对象的特征,描述了对象的状态。每个属性都有一个名称和一个对应的值。 4. 方法(Methods):方法是对象的行为,描述了对象可以执行的操作。方法可以修改对象的状态或返回特定的结果。 5. 继承(Inheritance):继承允许一个类从另一个类继承属性和方法,从而实现代码重用和层次结构的构建。 6. 封装(Encapsulation):封装是将数据和方法组合成一个单一实体的控制访问的机制。对象的内部实现细节被隐藏,只暴露给外部需要的部分。 7. 多态(Polymorphism):多态允许不同的对象对同一方法做出不同的响应。通过多态,同一行为可以根据对象的类型产生不同的结果。 8. 实例化(Instantiation):实例化是根据类创建对象的过程。通过实例化,我们可以创建多个具有相同属性和方法的对象。 面向对象思维导图(js)通过这些概念和要点,帮助我们组织和理解JavaScript程序中各个对象之间的关系,提升代码的可维护性和可扩展性。它是面向对象编程的基础,使得我们能够以一种更为结构化和抽象化的方式开发和管理复杂的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值