1.抽象过程

所有编程语言都有抽象的概念,可以说你解决问题的复杂程度与抽象的方法和质量直接相关。这里的“方法”是指“你要抽象的是什么”,汇编语言是底层机器的一种小型抽象,许多所谓的命令式语言(如FORTRAN,BASIC和C)是汇编语言的抽象,这些语言在汇编语言之上进行了大幅改进,但是这些初级的抽象仍然让你受困于计算机的结构而不是你要解决的问题的结构。程序员需要建立机器模型(“解决空间”,即实施解决方案的地方,如计算机)和实际需要解决的问题模型(“问题空间”,即问题实际存在的地方,如业务需要)直接的联系。建立这种映射联系是非常费力的,而且它不属于编程语言的内在属性,这些都导致编程是非常困难的,而且维护代价也非常高昂,从而产生了完整的“编程方法”产业。

对机器建模的取代方法是对要解决的问题进行建模。如LISP和APL等早期语言选择的是特定的视角来看待这个视角(分别是“所有的问题最终都是列表形式”或者“所有的问题都是算法形式”),Prolog语言则把所有的问题都转换成决策链。此外还产生了基于约束条件(constraint-based)编程的语言和专门通过处理图形符号实现编程的语言(后者被证明限制性过强)。这些方法对于他们被设计时要解决的问题来说都是很好的解决方案,但是一旦超出其特定范围,这些语言就不合适了。

面向对象方法在为程序员提供表示问题空间元素的工具方面取得了长足的进步,这种表示方式具有广泛的概括性,让程序员可以应对各种类型的问题。我们将问题空间中的元素及其在解决空间中的表示方式称为“对象”(你还将需要其他没有解决空间的对象)。这种思想的本质就是此种编程方法可以通过增加新的对象类型使其自身适用于各种特定的问题,因此,当你阅读描述解决方案代码的同时,也在了解问题所在。这种语言相比以前我们拥有的语言更加灵活,提供了更加强大的语言抽象。因此,OOP允许以问题的形式来描述问题,而不是以执行解决方案的计算机的形式来描述问题。它与计算机仍然有一定的关联:每个对象就像一个小型计算机——它具有状态,而且可以执行赋予它的操作请求。如果要在现实世界中对对象作类比,那么说它们都具有特性(Characteristic)和行为(Behavior)似乎不错。

Smalltalk是第一个成功的面向对象语言,而且也是Java赖为根基的语言之一,Alan Kay 总结了其五个基本特征,这些特征表达了纯粹的面向对象编程方式:

  1. 万物皆对象。把对象看成一个新奇的变量,它存储数据,你也可以对这个对象“发号施令”,要求他自己进行一些操作。理论上,你可以在你的程序里把你要解决的问题中的任何概念性部件(如狗,建筑物,服务等等)表示成对象。
  2. 程序是一系列的对象,通过消息机制进行相互调用。你可以通过对这个对象发送消息来调用这个对象,更具体点,你可以把发送消息看作是调用某个特定对象的方法。
  3. 每个对象都有由其他对象组成的存储。好比说,通过打包其他已经存在的对象来创建一个新的对象。因此,你可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的朴素性后面。
  4. 每个对象都有类型。用这个说法,每个对象都是一个类的实例,在此,类与类型同义。类最大的不同是“你可以给他发送什么消息”。
  5. 某一特定类型的所有对象都可以接收同样的消息。这是一句意味深长的表述,你在稍后便会看到。因为“圆形”类型的对象也是“形状”类型的对象,所以圆形也必须接收形状的消息。这意味着你可以编写与“形状”交互并自动处理所有与形状性质相关的事物的的代码。这种可替代性是OOP中最强大的概念之一。

Booch更加简单扼要的描述了一个对象:对象拥有状态、行为和标识。这句话的意思是一个对象有内部数据(给定状态),方法(产生行为),而且每个对象都可以唯一的区别于其他对象——更直观的说法是,每个对象在内存中有独一无二的地址。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值