处理教材:Introduction to Objects of "Thinking in Java"

来源:互联网 发布:java二维码识别原理 编辑:程序博客网 时间:2024/05/19 15:24

——关于以TIJ为课本的Java教与学的方法

本章开头提出,语言是思维的工具,是思维的媒介,而计算机作为一种智能工具,其目的是要能够扩展人的智能(“bicycles for the mind”),所以,程序语言的目标则是成为通用问题及其解决机制的描述媒介和工具,就如同自然语言是人类思维解决问题时采用的描述媒介和工具一样。面向对象编程语言正是一类这样的编程语言。

抽象的过程这一节,显示了编程语言的发展过程,但是涉及了汇编、LISP等同学们可能不熟悉的其它程序设计语言名称和相关知识,这里我解释一下。所谓抽象的过程,就是对事物简化的、或者是映像的表示方法,比如对于单链表的一个节点,就可以抽象为一个数据元素和一个指针构成的结构体。由于编程语言最终是由机器来运行,所以在早期的语言中,往往编程需要很多与问题无关却与机器有关的考虑,比如刚才的单链表节点,就需要先了解C语言的指针概念和操作,然后才能抽象成功。我们希望在编程过程中尽量少地考虑机器和语言,而集中注意力于现实问题中的概念。在过去教学数据结构的过程中,同学们往往不是被结构或算法本身难住了,而是被typedef、引用、指针等语言上的考虑所难住。所以,java希望尽可能让程序员使用问题本身带来的概念,而不是编程语言强加给你的概念,这也是面向对象的最高目标。

其实,每一种语言都带来一种“结构”,就是该语言所涉及的基本概念和它们之间的联系,如汇编中的寄存器,C/C++中的地址和指针,LISP中的表等,在这个结构之上,形成了针对该语言的解决方案的表达,这种表达离现实世界越远,使用该语言进行程序设计的难度就越高。

面向对象语言的目标,就是提供一套方便灵活的方式,让用户直接创建新的类型,以表达问题空间中的各类概念元素,实际上就是在让用户扩展这门编程语言,直到现实生活中的各种概念元素都能表达为语言中某种类型,那么,使用这门编程语言就可以按照现实的考虑问题的方式来进行程序设计了。

所谓的对象,就是指任何问题空间中的“东西”,也就是我们头脑中的每一个“概念”,比如“学生”、“老师”、“节点”等。那么,面向对象的思想就是要让每一个现实生活中的“概念”都可以表示成一个程序语言中的一个类型。比如,建立一个学生类型,那么“学生”概念就可以被这个类型的变量描述了,如果问题空间中的每一个概念都已经被这样表示了,那么,我们在设计解决该问题的程序时就可以完全用问题空间中的概念来思考了。

接下来是对“面向对象”概念的引入。Smalltalk是第一个成功的面向对象语言,它的创始人Alan Kay提出了面向对象系统的五大特征,这也刻画了对象的概念。(16

An object has interface 一节以及后面几节基本上都是对java特性的介绍。主要的目的是如作者在本章开头所说的“a big picture”,给有的学习者一个Overview,但是,这个Overview其实这里讲解的深度很难把握,对于水平高一些的同学会觉得没有新内容,对于水平比较初级的同学又不能理解细节(比如"is-a vs. is-like-a relationships","late-binding in polymorphism"等)。我想,Eckel在此处也会感到困难,所以,他在介绍java特征的时候,加入了对于基本术语的辨析(如typeclasstypeinterface),融入了设计元素和理念(如UMLcohesion of a software design)等。然而,对于中国学生而言,这里的英文比较冗长,我记得当时第一次读是用了一下午才读完的。

对于我们的教学而言,由于同学们已经了解了C/C++,那么面向对象的思想是基本熟悉的,关键在于基本术语(term)的辨析,以及UML的使用等。还有某些高级话题,如web开发,因为整本书几乎只有在这里提到了web开发,与后续内容没有联系(除了第四版新增的flex入门以外,而ServeletJSP均在《Thinking in Enterprise Java》一书中),作者之所以放进来可能是为了在培训· 中照顾白领阶层,他们往往是从其他软件领域转入java,更加功利或者说是急切,一开始学习就想进入网络开发,但是Eckel和他们玩了一个智力游戏,为了引导他们到建立熟练且深入的java基础的道路上来(如果对学习方法理解不够,请参考http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/index.html)。所以只是在开头的时候这样喂了一点网络开发相关知识,实际上,到了后续章节,感受到java深度的时候,学生也不敢再急切地说“我要学习网络开发”了,当然,在打好基础之后,是可以比较轻松地进入到Enterprise Java的。对于我们的教学来讲,这些内容即使现在讲了,因为不能立即得到照应,学生也会在后面的学习中很快忘记,所以,可以推后到自学或是等到讲Servlet的时候作为网络开发历史背景来讲。

因此,对于本章,应介绍面向对象的历史背景,以及解释所提到的java和面向对象开发的术语和术语辨析,再把使用UML的地方加以介绍。由于本章没有做练习的必要,所以只能是放在第一个45分钟里。第一节课除了介绍为什么要学习java,采用怎样的教学和学习方法、希望能达到怎样的目标,然后就是这一章的内容了,本章讲清了Java语言的基本术语和特征,而且某些地方比较深入(如up-casting、单根继承结构The single rooted hierarchygarbage collector in "Object creation & lifetime"等),是超出了一般课本水平不少的。

到了第二节,主要应该是关于学习方法中网络平台的介绍、如何下载和使用jdk,使用jdkdoc,以及命令行等实践的内容,而作业应当是注册加入网络学习平台和翻译java.sun.com或者jdk中的一段话,以及自主探究命令行的使用,关于命令行,掌握cmddircdnotepad,理解当前目录(.)和相对路径的概念,就已经足够了。

原创粉丝点击