对象导论 1.1 抽象过程

“我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来 ... ... 除非赞成这个协定中的规定的有关语言信息的组织和分类,否则我们根本无法交谈。”

计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿。

但是,计算机并非只是机器那么简单,计算机是头脑延伸的工具(就像Steve Jobs常喜欢说的“头脑的自行车”一样),同时还是一种不同类型的表达媒体。因此,这种工具看起来工具看起来越来越不像机器,二更像我们头脑的一部分,以及一种写作、绘画、雕刻、动画、电影等一样的表达形式。 

面向对象程序设计(Object-oriented Programming,OOP)便是这种以计算机作为表达媒体的大趋势中的组成部分。

《C编程思想》(thinking in C)一本可以改变你对计算机重新认识的书。

1.1 抽象过程

     所有的编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。

所谓的 “ 类型 ” 是指 “ 所抽象的是什么? ”

(1)汇编语言是对底层机器的轻微抽象。

(2)接着出现的许多所谓 “ 命令式 ” 语言(如 FORTRAN,BASIC,C等)都是对汇编语言的抽象。这些语言在汇编语言基础上有了大幅的改进,但是它们所作的主要抽象仍要求在解决问题时要基于计算机的结构,而不是基于索要解决的问题的结构来考虑。

(3)程序员必须建立起在机器模型(位于“ 解空间 ”内,这是你对问题的结构来考虑)和实际待解决问题的模型(位于“ 问题空间 ” 内,这是问题存在的地方,例如一项业务)之间的关联。

        建立这种映射是费力的,而且不属于编程语言所固有的功能,这使得程序难以编写,并且维护代价高昂,同时也产生了作为副产物的整个“ 编程方法 ”行业。

 另一种对机器建模的方式就是只针对待解决问题建模。

 如 LISP 和 APL 都选择考虑世界的某些特定视图(分别对应于 “ 所有问题最终都是列表 ” 或者 “ 所有问题都是算法形式的 ”)。

      LISP语言(LISP,List Processing的缩写)是一种早期开发的、具有重大意义的表处理语言。它适用于符号处理、自动推理、硬件描述和超大规模集成电路设计等。特点是,使用表结构来表达非数值计算问题,实现技术简单。LISP语言已成为最有影响,使用十分广泛的人工智能语言

     APLA Programming LanguageArray Processing Language 的缩写。肯尼斯·艾佛森在1962年设计这个语言时他正在哈佛大学工作,1979年他因对数学表达式和编程语言理论的贡献而得到图灵奖。

     在许多应用场合下(数学、科学、工程技术、电脑设计、机器人、数据显示、保险技术、传统的数据处理等等)APL是一种非常有力的、表达丰富的和简明的编程语言。它一般被用在一个与用户接口的环境中。它最初的设计目的是将数学公式写成一种电脑可以理解的方式。 但它始终是一种解释执行的计算机语言。

    PROLOG则将所有问题都转换成决策链。

    Prolog(Programming in Logic的缩写)是一种逻辑型程序设计语言。它的第一个实用解释文本于1972年由法国马赛大学研制成功,其理论的发明人为英国科瓦尔斯基教授。它具有自动搜索、模式匹配、回溯等性能,主要特点是以谓词逻辑为理论基础。用PROLOG编程时,人们注重和关心对问题的描述,而不是问题的求解过程,一个PROLOG程序由三种基本语句构成,它们是事实、规则和询问。程序相对简单。自出现以来,已广泛地应用于自然语言理解、定理证明、程序正确性证明、专家系统等领域,并将在新一代计算机系统的开发中发挥重要的作用 。

      此外还产生了基于约束条件编程的语言和专门通过对图形符号操作来实现编程的语言(后者被证明限制性过强)。这些方式对于它们所要解决的特定类型的问题是不错的解决方案,但是一旦超出其特定领域,它们就力不从心了。

      面向对象方式通过向程序员提供表示问题空间中的元素的工具而更近了一步。这种便是方式非常通用,使得程序员不会限于任何特定类型的问题。我们将问题空间中的元素及其在解空间总的表示成为 “ 对象 ”。(你还需要一些无法类比为问题空间元素的对象。)

      这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定问题。

      因此,当你阅读描述解决方案的代码的同时,也是在阅读问题的表述。相比以前我们所使用的的语言,这是一种更灵活和更强有力的语言抽象。所以,OOP允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。

     但是它仍然与计算机有联系:每个对象看起来都有点像一台微型计算机——它具有状态,还有操作,用户可以要求对象执行这些操作。如果要对显示世界中的对象类比,那么它们都具有特性和行为似乎不错。

    Alan Kay 曾经总结了第一个成功的面向对象语言、同时也是Java所基于的语言之一的 SmallTalk 的五个基本特征,这些特征性表现了一种纯粹的面向对象程序设计方式:

     Smalltalk

      Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。

      20世纪70年代到80年代前期,美国施乐公司的帕洛阿尔托研究中心(PARC)开发了Smalltalk编程语言。从Smalltalk-72、Smalltalk-78到Smalltalk-80,他们开发完成了整个Smalltalk系列,Smalltalk编程语言对近代面向对象编程语言影响很大,所以称之为“面向对象编程之母”。(此段摘自《松本行宏的程序世界》)

    1)万物结尾对象。

   这将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。理论上讲,你可以抽取待求解问题的任何概念化构件(够、建筑物、服务等),将其表示为程序中的对象。

    2)程序是对象的集合,他们通过发送消息来告知彼此所要做的。

    要想请求一个对象,就必须对该对象发送一个消息。更具体地说,可以把消息想象为对某个特定对象的方法的调用请求。

    3)每个对象都有自己的由其他对象所构成的存储。

    换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构件复杂的体系,同时将复杂性隐藏在对象的简单性背后。

    4)每个对象都拥有其类型。

    按照通用的说法,“每个对象都是某个类(class)的一个实例(instance)”,这里 “类” 就是 “ 类型 ”的同义词。每个类最重要的区别在于其他类的特性就是“ 可以发送什么样消息给它 ”。

    5)某一特定类型的所有对象都可以接收同样的消息。

     这是一句意味深长的表述,你在稍后便会看到。因为“ 圆形 ”类型的对象同时也是 “ 几何形 ”类型的对象,所以一个“ 圆形 ”对象必定能够接受发送给 “ 几何形 ” 对象的消息。这意味着可以编写与 “ 几何形 ”交互并自动处理所有与几何形性质相关的的事物的代码。这种可替代性(substiutability)是OOP中最强有力的概念之一。

     Booch 对对象提出了一个更加简洁的描述:对象具有 状态、行为 和 标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地域其他对象区分开来,具体说来,就是每一个对象在内存中都有一个唯一的地址。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值