Java编程思想解析 第1章 对象导论 1.1 抽象过程

来源:互联网 发布:文字抽奖软件 编辑:程序博客网 时间:2024/05/19 06:50

1.抽象机制

抽象,就是我们描述环境、表达问题,并展现解决方案的一种机制。在日常生活中,我们解决问题的方式不同,而且对同一环境、同一问题、同一解决方案,不同人的表达方式也可能不同。所有编程语言都提供抽象机制,这是语言的根本,我们选择一门编程语言,就是遵守此语言的抽象机制的相关协定,与计算机交流,与其他此语言的程序员交流,来解决我们的程序设计问题。


人们所能解决的问题的复杂性直接取决于抽象的类别和质量。所谓的类别,指的是“所抽象的是什么?”

(1)汇编语言是对底层计算机的轻微抽象,汇编源码描述的就是类似如下:在某个寄存器中放个2字节的数据;从内存地址0X12345A取个8字节数据传给某接口等等。写汇编程序,就像在计算机元器件(芯片、管脚、电阻)上铺一层控制面板,在此控制面板上操作机器组件。

(2)命令式语言(过程语言),如Basic、C等,是对汇编语言的抽象,把寄存器、内存地址用一个更高层的控制面板盖起来:将数据按自己大小和用途进行分类(类型),给内存地址起个名字(变量名)来表示,等等。这时候,程序员操作的就不是机器组件了,但扔是基于机器本身,需要了解计算机结构,不能很好地基于待解决的问题的结构来编程。编程人员需要在机器模型和实际待解决问题的模型间进行映射,比较费力。学好课程《数据结构》可以一定程度上提升过程语言的抽象层级。

(3)算法语言,如LISP和APL,认为所有问题都是算法,所操作的都是算法,这些算法就是抽象,就是对问题建模,这个时候,程序员就很少考虑机器结构了,重心转到分解问题和表达问题上来了,抽象对象有了质的飞跃。但世上的问题问题五花八门,不仅仅是算法这么简单,一旦换个其他领域,这类语言就力不从心了。

(4)面向对象语言,提供了更多、更强大的表示“问题空间的元素”的工具,根据问题描述问题。通过面向对象语言编程,可以更好地应对、解决更多领域中的问题。代码就是问题的描述、就是问题方案的展现。其本质为:将“操作计算机这个对象”的方式,改为了“操作管理问题空间的各个对象”的方式。


2.第一个成功的面向对象语言Smalltalk的五个特性(Alan Kay总结)

(1)万物皆为对象。

可将对象视为特殊的变量,它可以存储数据,还可让它在自身上执行操作。

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

要想让某个对象执行某个操作,必须给其发送消息,即调用此对象的某个方法(函数),或者我们常说的“调用请求”。

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

从对象出发,可以构建其他更大更复杂的对象。反过来,复杂的对象可以分而治之,从小对象开始构建。

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

每个对象都是某个类型(type)或类(class)的一个实例。所有的OOP编程语言都用class机制来实现Type概念。从现在开始,类(class)就是类型(type)的同义词。每个类区别于其他类的一个重要特性就是:可以方式什么样的消息给它。

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

这就话说得有点拗口,涉及到继承和多态。水果是某类型,橘子是水果的一个特定类型,发送给苹果的消息,也可以发送给橘子类型的所有对象。换句话说,水果类型有某个接口方法,橘子类型也必然也有某个接口方法。接口下节讨论。


如上这些特性体现了纯粹的面向对象程序设计方式。Grady Booch有个更简洁的描述:对象具有状态、行为和标识。

(1)状态:对象拥有内部数据值表示对象当前状态。

(2)行为:调用对象的方法或函数,对象就产生了行为,也可能会改变对象状态。

(3)标识:每个对象都可以唯一的标识,和其他对象区分开来,比如用内存地址、散列码等。


PS:

(1)Alan Kay(阿伦凯),计算机大师,Smalltalk面向对象编程环境语言的发明人之一,也是面向对象编程思想的创始人之一,他还是笔记本电脑最早的构想者和现代Windows GUI的最初尝试者。

(2)Grady Booch(格雷迪 布奇),Booch方法的主创人。Booch方法是在UML出现之前比较普及的一种面向对象的软件设计方法,它包括一个很像UML的图标语言。《面向对象分析与设计》作者。

0 0
原创粉丝点击