我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:满堂彩 > 后续 >

前言-IT频道-和讯网

归档日期:11-27       文本归类:后续      文章编辑:爱尚语录

  20世纪90年代初,Java一出现就以它的t吸引了众人的眼球,从而在IT界刮起了一阵Java旋风。在随后的年代里,它以惊人的速度发展成为一门计算机领域不可或缺的技术。它以完全面向对象、动态、稳定、多线程,以及跨平台应用等优势成为了实现企业应用、中间件、分布式计算的有力工具。可以毫不夸张地说,现在整个IT业几乎无处不在使用Java。顺应时代要求,近些年来各高等学校也把Java作为计算机专业的重要课程之一,并投入了大量的人力和物力,在一定程度上满足了我国软件企业的人才需求。但遗憾的是,迄今为止,企业对学校培养的学生仍然不甚满意。究其原因,作者认为主要有以下几个方面。

  1.历史原因。在Java出现之前,人们使用的开发工具大多是VB、VC、Delphi等。由于提供这些工具厂商的实力所在,这些开发工具都制作得相当精致,它们都能为用户自动生成一个完整、健壮的程序框架,软件开发者只需在这个框架中填写自己的业务代码,而不必做更多的工作。无疑,这种体贴入微的开发工具对于企业开发人员来说是件好事,但对于教学来说就不是好事了。它容易导致学校只介绍这些工具的使用方法,而不注意介绍这些工具所生成的程序框架,当然更不会去注意这些程序框架的设计思想和方法的介绍,其结果使学生得不到系统架构设计的训练,进而形成了现在这种尴尬的局面:学生学了一些基本语言,然后就使用这些基本语言在工具生成的程序框架中填空。这种现象就像一个建筑专业的学生不会盖房子,只会搞装修一样。于是,就业市场上就出现了企业高薪聘不到系统架构师,而大量计算机专业毕业生又找不到工作的景象。

  2.Java本身的原因。作为应用平台,Java一直没能提供一个令人满意的应用程序编程模型,尤其在开发工具方面显得更为突出。目前,尽管Sun公司和一些大的软件供应商已经意识到这个问题,都想用开发工具来降低Java应用开发的复杂性,但和微软公司的台相比,Java的开发工具仍然显得很逊色。这些开发工具自动生成的代码像这些工具本身一样复杂。因而,人们很难把这些复杂工具组织到教学内容中,使得高校的Java教学与工程实际应用相差甚远,导致毕业生到了企业之后必须要通过较长时间的培训,否则就不能胜任工作。

  3.Java教育思想的原因。要知道,Java不仅仅是一门语言,它更是一门博大精深的技术,是当今先进编程思想和技术的集大成者,而语言只是其技术思想的外在表象。可能由于某种思维惯性,相当一部分学校只是把Java当做一门新的语言来讲授,并没有借用Java平台对面向对象程序设计进行更深层次的介绍,没有使学生在面向对象程序设计方法及思想方面得到真正的训练,从而使学生参加工作后出现了大量很怪异的现象:使用的是面向对象语言Java,而编写的却是面向过程的程序,最终使其开发的软件产品在可维护性、健壮性等方面满足不了企业的要求。

  4.Java教学内容的原因。20世纪80年代以来,伴随着面向对象程序设计思想的日益成熟,一些行之有效的软件工程方法也已蓬勃发展起来。但是很遗憾,这些成果并没有以合适的方式体现在高等学校的教学内容中,尽管也开设了软件工程课程,但因太偏重于理论,从而导致其内容过于空泛,况且与其他课程的配合也较差。特别是在面向对象程序设计中行之有效的设计模式还未以合适的方式引入教学内容。正是由于这方面的缺憾,导致了毕业生空有一身理论而在工程实际问题面前却一筹莫展(从市场上大量缺乏软件架构师的现状就看出了这一点,而培养这种人才正应该是本科教育的责任)。作者认为,对于以培养应用型人才为目标的普通高等学校来说,人们在软件工程实践中总结出来的一些行之有效的设计模式往往比理论更重要。

  仔细分析后,作者认为Java的缺憾(没能提供一个令人满意的应用程序编程模型)为计算机教育弥补自己的缺憾提供了机会。因为Java程序的设计者需要自己来搭建程序框架,这就促使教师必须要向学生介绍程序框架的相应知识,从而也督促教师必须从新的视角对当前的课程体系和教学内容进行审视和改革,以期进一步提升计算机教育水平,使教学更贴近生产实际。作者通过几年的调查和研究发现,有相当一部分学校以并列的方式开设了很多门程序设计语言课,似乎程序语言学得越多,学生的软件开发能力就会越强,显然这个做法值得怀疑。作者认为,计算机语言只是一种人们用来向计算机描述问题和表述解决问题的方法的工具,学生在校期间主要学习C/C++和Java等几种具有代表性的程序语言(当然,像XML、SQL等专用语言例外)即可,即使是讲程序语言也不应该就语言讲语言,而应该通过程序语言课程使学生掌握解决问题的思想和方法。

  目前各高校基本都首先介绍C/C++,这无疑是正确的,但作者不赞成把C和C++分为两门课程,因为C++是C的超集,是C的发展,并不是另一门语言。把C和C++分开来介绍就会使学生造成一种致命的误解:用C编的程序就是面向过程的程序,用C++编的程序就是面向对象的程序。其实不然,用C也可以编写面向对象的程序,用C++也可以编写面向过程的程序(现在有很多人声称用C++编写了面向对象的程序,其实把他的程序仔细看一下就会发现,他编写的还是面向过程的程序),因为面向过程和面向对象只是两种指导程序设计的思想和方法,与使用什么语言并没有直接的联系(当然,C++、C#、Java为面向对象编程提供了更好的支持)。

  在C/C++课程的后面最好开设微软的MFC技术(但不要单纯介绍VC工具),因为微软公司在MFC中比较好地体现了面向对象的设计思想和方法,如它的文档/视图结构。也就是说,可以把MFC作为C/C++课程的一个大实例来看待,从而使学生真正理解C++的用途。另外还可以顺便介绍那些GUI控件及其事件处理机制,可以说是一举两得。

  当学生有了C/C++和MFC的基础之后,学校就可以采用与C++对比的方式快速进行Java语言部分的介绍,以空出学时来介绍Java组件和一些在软件工程实践中行之有效的设计模式(如各种工厂模式、模板模式、策略模式和MVC模式等),从而使学生初步掌握面向抽象编程的思想和技术,建立程序框架的初步概念,也使课程进一步贴近工程实际。因此,Java课程应该是程序设计课程的总结课程。

  基于上述思想,作者编写了本书。本书以介绍面向对象程序设计思想和方法为目标,以设计模式为线索,重点介绍了面向抽象编程技术。主要内容包括Java语言、虚拟机、设计模式应用、组件和事件处理机制。

  在Java语言部分重点介绍了接口和抽象类,在程序结构部分重点介绍了Java常用的设计模式,在GUI和组件的内容中重点介绍了事件和事件处理机制,而把虚拟机的介绍则分散在部分章节中,用以支持Java动态性的介绍。

  在编写过程中,为使本书更符合培养目标和更切合教学实际需要,作者多次请学生和教师阅读了本书的初稿,他们(特别是一些学生)在提出修改意见的同时也提出了一些问题,由于这些问题在一定程度上具有普遍性,所以作者在此一并进行回答。

  应该这样说:与C++相比,Java的基本语言确实比较简单,初学者上手很快。之所以如此,是因为这两种语言的定位不同,Java定位于高端软件开发,而C++则要兼容C并要兼顾底层系统软件的开发,所以它必须保留一些指针、虚函数、运算符重载等初级功能。除此之外,鉴于C++发展当时面向对象思想的不成熟,因此不可避免地有一些缺憾,例如它的不符合分类学原理的多继承,接口概念不清晰等。而Java则利用其后发优势,把那些令程序员头痛的底层初级功能都隐藏了起来。例如,程序员无须再使用容易出问题的指针,也无须显式地销毁对象等。另外,Java还在概念上进一步清晰了接口和抽象类,提供了反射机制等。但要注意,Java的整体技术并不简单。例如,为了实现代码的重用,Java在其自身系统中大量地使用了设计模式;为了提升动态性,Java还提供了类的反射机制。因此,全面地理解和掌握Java思想并开发出质量较高的Java程序还是一件较难的事情。

  桌面系统并不是Java的优势,加之在先修课中学生已经学习了一定数量的GUI组件,因此本书安排GUI这章的主要目的是介绍Java的事件处理机制和一个常用的设计模式——观察者模式。

  确实有这个问题,这也是作者曾经犹豫过的问题。但作者思虑再三,还是这样写了。因为据作者的教学经验,虽然学生学过了操作系统课程,但普遍对进程和线程的知识掌握得不好,而多线程程序的设计又是现代应用程序设计的重要技术基础,况且Java的线程还引入了其他系统不多见的管程。所以作者认为,为了使学生能在一个真实的系统中再复习一下操作系统的内容还是值得的。当然,在实际教学活动中如何来处理这部分内容可以由教师灵活掌握。例如,让学生自学,或者让他们结合操作系统课撰写小论文。

  前面谈到了,桌面系统并不是Java的优势,它的优势在于网络的企业应用,即大家常说的JavaEE,而本书介绍的JavaSE正是JavaEE的基础,所以本书也只能命名为Java技术应用基础。

  毋庸置疑,对于任何工程设计来说,成熟的经验是至关重要的,特别是对于计算机这种强非线性系统。好的经验给我们以指导,并节约我们的时间;坏的经验则给我们以借鉴,可以减少失败的风险。然而,从知识层面上来讲,经验只是作为一种工作的积累而存在于个人的大脑中,很难被传授或者记录。为了解决这样的问题,人们提出了模式的概念。所谓模式,是指在一个特定背景下,反复出现的问题解决方案。通常在提到软件设计模式的时候,一般指的是在GOF的经典图书《DesignPattern——Elementsof Reusablet-OrientedSoftware》中出现的23个模式,它们是软件设计过程中反复出现的一些问题的解决方案。Java发展之时,正是模式兴盛之际,因此Java在其API中就大量地使用了设计模式,从而使得任何学习Java的人不在一定程度上了解模式,就不会真正地理解和掌握JavaAPI,也就谈不到用这些API来编写程序了。从这个角度来说,学习模式是学习Java和学习面向对象编程(不仅局限于Java)的必经之路。

  这是没有任何疑问的。只要系统的源码开放,那么它的源码就是最好的教材和老师。要知道,这些源码都是顶级高手编写的,不读不是太浪费了吗?为此,本书也在引导读者阅读源码上给了足够的注意。

  不能。因为做一个软件系统架构师需要多方面的基础和知识,绝不是学一本书就能解决问题的,但这本书确有一部分内容是以培养架构师为目标来编写的。

  从全局来看,普通本科学校程序设计课程开设的顺序似乎应为:C/C++→MFC→Java(或者C#)→软件构件

  以C/C++奠定程序设计基础,为学习操作系统、数据结构、编译原理做准备;以MFC了解面向对象程序设计思想和方法并了解事件驱动程序设计的特点,兼顾GUI及其组件(控件);在学生学习了操作系统、数据结构、编译原理之后,以Java(或者C#)作为程序设计总结课,使学生掌握当代程序设计技术的综合应用(特别是设计模式),进一步使教学内容靠近实际应用。

  由于Java课程的信息量巨大,不可能完全依靠教师的课堂教学来解决问题,好在面对的都是高年级学生,他们在先修课的学习中都已形成了一定的自学能力(自学能力的培养也是高等教育的责任)。所以作者建议,在Java的教学中要在教师的指导之下,充分发挥学生的自学能力。鉴于此,建议在教学中采取如下策略:语言部分。教师重点介绍接口、抽象类的概念和应用,其余部分由学生自学。

  程序结构和模式部分。教师重点介绍策略模式、简单工厂模式、单例模式和桥梁模式,并通过这些设计模式的介绍,让学生重点领会面向抽象编程和使用关联扩充功能的思想和方法。这个部分可以说是整个Java教学的突破点,处理是否得当将直接影响后续教学效果。

  虚拟机对Java特性的支持。由于这些内容都散落在相应的章节中,因此应选择适当的时机结合先修课(可能有些课是并行开设的,如操作系统、编译原理)进行一次梳理和总结。

  Java Beans部分。这部分是学生将来学习EJB的重要基础,也是深化理解GUI组件的基础,所以需要慎重处理。

  作者认为,处理好上述几个部分后,其他部分就会好办得多。再就是一定要引导学生阅读JavaAPI源码并鼓励学生进行讨论和撰写小论文,这会大幅度提高学生分析问题和解决问题的能力。

  作者在编写本书的过程中参考了大量相关文献和网上资料,并引用了其中一些例题、文字和插图。在此,对这些文献和资料作者的辛勤劳动表示诚挚的谢意。同时也向对本书内容的编排和文字提出了很好意见和建议的老师及同学表示感谢。

  在一本50万字左右的书中既要介绍Java语言,又要介绍虚拟机和设计模式,对水平有限的作者来说确实是一件难事,所以恳请读者对书中的缺点和错误提出批评和指正。

本文链接:http://goldsfida.com/houxu/883.html