王小正 楊 鑫 侯 青
摘要:在全面分析Java EE相關(guān)教材現(xiàn)狀的基礎(chǔ)上,重點(diǎn)闡述面向應(yīng)用型本科院校的Java EE已有教材在編寫(xiě)目標(biāo)、內(nèi)容設(shè)置及案例設(shè)計(jì)等方面出現(xiàn)的問(wèn)題,并針對(duì)以上問(wèn)題說(shuō)明教材的內(nèi)容編排思路和案例設(shè)計(jì)具體方案。
關(guān)鍵詞:Java EE;教材設(shè)計(jì);應(yīng)用型本科院校
0 引言
Java EE是Sun公司主導(dǎo)提出的輕量級(jí)企業(yè)級(jí)應(yīng)用框架,為開(kāi)發(fā)具有跨平臺(tái)性、可擴(kuò)展性、高穩(wěn)定性的軟件系統(tǒng)提供強(qiáng)大的支持,已在政府、金融、通信、電力等多個(gè)行業(yè)得到廣泛應(yīng)用,例如電子商務(wù)、電子政務(wù)系統(tǒng)。目前國(guó)內(nèi)對(duì)Java EE工程師需求量很大,IDC統(tǒng)計(jì)數(shù)據(jù)顯示,J2EE人才占軟件開(kāi)發(fā)人才需求的60%左右。幾乎所有高校的軟件學(xué)院和軟件工程專業(yè)都開(kāi)設(shè)了Java EE課程,相關(guān)的教材也如雨后春筍般涌現(xiàn),使教師和學(xué)生有了充分的選擇余地,有力地促進(jìn)相關(guān)課程在高校的普及和發(fā)展。
1 Java EE教材現(xiàn)狀
根據(jù)教材書(shū)籍適用的讀者人群,可以把JavaEE教材大致分為3類:第1類教材適用的讀者人群主要是具有一定的開(kāi)發(fā)經(jīng)驗(yàn),有初步JSP網(wǎng)絡(luò)編程基礎(chǔ),初步了解Java EE框架的開(kāi)發(fā)人員。名為《輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》的書(shū)籍就屬于此類教材,該書(shū)816頁(yè),詳細(xì)介紹了JavaEE開(kāi)發(fā)環(huán)境、核心技術(shù)及框架技術(shù)的原理和應(yīng)用,內(nèi)容非常翔實(shí),應(yīng)該說(shuō)該書(shū)作為一本面向企業(yè)工程師讀者群介紹Java EE技術(shù)的原理和應(yīng)用的工具書(shū)是非常合適的。第2類教材適用的讀者人群主要是高職院校的大三學(xué)生及社會(huì)IT專業(yè)培訓(xùn)機(jī)構(gòu)的學(xué)員。筆者于2012年與企業(yè)工程師及相關(guān)教師合作編寫(xiě)的教材《Java EE項(xiàng)目實(shí)訓(xùn)教材》屬于此類教材,該教材總共206頁(yè),刪去了Java EE中涉及的許多原理性知識(shí)及部分內(nèi)容介紹,主要以多個(gè)小案例和一兩個(gè)綜合案例來(lái)指導(dǎo)學(xué)生動(dòng)手實(shí)踐,從而初步掌握J(rèn)ava EE技術(shù)的基本使用。第3類教材適用的讀者人群是應(yīng)用型本科院校的大三或大四學(xué)生,《Java EE基礎(chǔ)實(shí)用教程》屬于這類教材,該教材與第1類教材相比,內(nèi)容編排上做了縮減,省略了許多難度較高的技術(shù)細(xì)節(jié),相比于第2類教材又增加了一定的原理性知識(shí)的介紹。
目前市面上與Java EE相關(guān)的第1類和第2類教材品種較多,應(yīng)該說(shuō)這兩類教材針對(duì)特定的人群在內(nèi)容編排和目標(biāo)定位方面都是比較恰當(dāng)?shù)?。而?類教材品種較少,雖然教材的目錄結(jié)構(gòu)和所用案例是比較全面的,但是作為針對(duì)應(yīng)用型本科院校學(xué)生的教材,還存在兩個(gè)問(wèn)題:一是該類教材編寫(xiě)的目標(biāo)定位和應(yīng)用型本科院校開(kāi)設(shè)此課程的目標(biāo)不是太吻合,學(xué)生使用此類教材學(xué)習(xí)后并不能夠很好地把之前已學(xué)的基礎(chǔ)知識(shí)融會(huì)貫通,沒(méi)有達(dá)到鞏固所學(xué)知識(shí)的目的。二是此類教材使用的案例相對(duì)分散,前后章節(jié)的案例沒(méi)有連貫性,使學(xué)生在學(xué)習(xí)過(guò)程中不容易領(lǐng)會(huì)和掌握J(rèn)ava EE技術(shù)的要領(lǐng)。
2 教材建設(shè)實(shí)踐
2.1 教材建設(shè)基本思路
鑒于當(dāng)前面向應(yīng)用型本科院校的Java EE教材所存在的問(wèn)題和原因,根據(jù)教學(xué)過(guò)程中積累的經(jīng)驗(yàn)和學(xué)生反饋,面向應(yīng)用型本科院校的JavaEE教材的建設(shè)應(yīng)圍繞兩個(gè)方面進(jìn)行:首先,教材編寫(xiě)的目標(biāo)應(yīng)該與應(yīng)用型本科院校培養(yǎng)目標(biāo)一致,應(yīng)用型本科院校培養(yǎng)的工科類學(xué)生既不同于研究型大學(xué)培養(yǎng)的高端人才,又有別于高職院校培養(yǎng)的技能型人才。因?yàn)榧夹g(shù)在不斷地更新,行業(yè)發(fā)展也在不斷變化,培養(yǎng)的人才應(yīng)該是既具有一定的專業(yè)理論功底又具有較強(qiáng)的實(shí)踐工程能力的應(yīng)用型人才,這類人才在今后的職業(yè)生涯中既能很快適應(yīng)應(yīng)用開(kāi)發(fā)技術(shù)快速發(fā)展的環(huán)境,又具有較強(qiáng)的學(xué)習(xí)潛力,從而滿足社會(huì)對(duì)此類人才的需求。為了達(dá)成上述目標(biāo),教材內(nèi)容編排所涉及的知識(shí)點(diǎn)應(yīng)該是相互貫通的,要能夠讓學(xué)生在學(xué)習(xí)過(guò)程中不斷鞏固之前所學(xué)的一系列專業(yè)知識(shí),從而達(dá)到融會(huì)貫通的境界。在案例設(shè)計(jì)上要前后連貫、由淺人深、觸類旁通,從而使學(xué)生相對(duì)輕松地、系統(tǒng)地理解和掌握J(rèn)ava EE的精髓。
2.2 教材內(nèi)容編排概要
大多數(shù)院校都把Java EE課程開(kāi)設(shè)時(shí)問(wèn)安排在大三下學(xué)期,這個(gè)階段的學(xué)生已經(jīng)修完了許多專業(yè)課。因此該課程所選教材在內(nèi)容安排上應(yīng)把Java EE所涉及的相關(guān)知識(shí)與學(xué)生已修的專業(yè)課知識(shí)相關(guān)聯(lián),在介紹相關(guān)知識(shí)時(shí)應(yīng)從學(xué)生已學(xué)知識(shí)進(jìn)行延伸,從而使學(xué)生在學(xué)習(xí)過(guò)程中既鞏固了已學(xué)知識(shí),又能夠更好地理解和掌握新知識(shí)。我們把Java EE所涉及的技術(shù)分為3個(gè)部分,每部分的相關(guān)技術(shù)及其涉及的知識(shí)點(diǎn)見(jiàn)表1。
從表1可以看出,Java EE是一門(mén)涉及面廣、實(shí)踐性要求高的技術(shù)課程,在校學(xué)生往往缺乏實(shí)際軟件項(xiàng)目的鍛煉,容易對(duì)Java EE技術(shù)的用途產(chǎn)生困惑,難以理解Java EE的復(fù)雜實(shí)現(xiàn)。但是Java EE中的技術(shù)涉及的知識(shí)點(diǎn)學(xué)生大多數(shù)都已學(xué)習(xí)或接觸過(guò),因此在教材內(nèi)容編排和案例設(shè)計(jì)上應(yīng)結(jié)合已學(xué)知識(shí),使學(xué)生觸類旁通,從而真正理解和掌握這些技術(shù)。
2.3 具體內(nèi)容編排及案例設(shè)計(jì)舉例
以“Spring”技術(shù)的內(nèi)容編排及案例設(shè)計(jì)為例。
首先需要讓學(xué)生知道“Spring”技術(shù)的實(shí)質(zhì)是什么,由于“Spring”技術(shù)的核心是“控制反轉(zhuǎn)IOC”,這其實(shí)是一種設(shè)計(jì)模式,學(xué)生初次接觸這個(gè)概念是很難理解的。大三的學(xué)生基本都已學(xué)過(guò)軟件工程這門(mén)課程,因此,內(nèi)容安排上應(yīng)該從回顧已經(jīng)學(xué)習(xí)或接觸過(guò)的軟件工程的工廠設(shè)計(jì)模式人手。通過(guò)回顧工廠設(shè)計(jì)的優(yōu)缺點(diǎn),進(jìn)一步闡述IOC的實(shí)質(zhì)其實(shí)就是工廠模式的升華,然后進(jìn)行具體案例設(shè)計(jì),在案例中把工廠模式和IOC進(jìn)行比較,從而使學(xué)生真正理解這種技術(shù)的實(shí)質(zhì),為今后學(xué)習(xí)和使用類似的技術(shù)打下良好基礎(chǔ)。
“Spring”模塊具體內(nèi)容編排及案例設(shè)計(jì)如下。
工廠模式是通過(guò)專門(mén)定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。如果簡(jiǎn)單工廠模式所涉及的具體產(chǎn)品之間沒(méi)有共同的邏輯,那么我們就可以使用接口來(lái)扮演抽象產(chǎn)品的角色。通過(guò)該模式在一定程度上提高了程序的復(fù)用性,降低了代碼的耦合度。
舉例說(shuō)明工廠模式的應(yīng)用。
創(chuàng)建一個(gè)Java Project,命名為“FactoryExample”。建立接口Animal,代碼如下:
package face;
public interface Animal
{
void eat();
void walk();
}
建立Cat類和Dog類,分別實(shí)現(xiàn)Animal接口。
Cat.java代碼如下:
package iface;
import face.Animal;
public class Cat implements Animal{
public void eat()
{
System.out.println(“貓吃魚(yú)!”);
}
public void waLk(){
System.out.println(“貓爬樹(shù)!”);
}
}
創(chuàng)建Dog.j ava文件,代碼如下:
package iface;
import face.Animal;
public class Dog implements Animal
{
public void eat(){
System.out.println(”狗啃骨頭!”);
}
public void walk(){
System.out.println(“狗奔跑!”);
}
}
建立工廠類Factory,代碼如下:
package Factory;
import iface.Cat;
import iface.Dog;
import face.Animal;
public class MyFactory{
public Animal getAnimaI(String name){
if(name equals(“Cat”)){
retum new Cat();
} else if(name.equals(“Dog”)){
return new Dog();
}else{
t h r o w
n e wlllegaIArgumentException(“參數(shù)不正確”);
}
}
}
建立測(cè)試類Test,代碼如下:
package test;
import face.Animal;
import Factory. MyFactoy;
public class test
{
public static void main(String[] args)
{
Animal animal=null;
animal=new MyFactoyO.getAnimal("Cat");
animal.eat0;
animal.walk0;
animal=new MyFactoyO.getAnimal(“Dog”);
animal.eat0;
animal.walk0;
}
}
在簡(jiǎn)單工廠模式中,調(diào)用程序無(wú)需直接創(chuàng)建所調(diào)用類的實(shí)例,都是通過(guò)工廠類實(shí)現(xiàn)實(shí)例化,從而降低了程序間的耦合度。表面上是在一定程度上緩解了代碼耦合問(wèn)題,但實(shí)質(zhì)上這種代碼耦合并沒(méi)有改變。通過(guò)IOC模式可以徹底解決這種耦合,它把耦合從代碼中移出去,放到統(tǒng)一的XML文件中。而Spring框架則提供了更好的辦法,開(kāi)發(fā)人員可以直接應(yīng)用Spring提供的IOC方式,即被調(diào)用者的實(shí)例工作由Spring容器完成,讓bean與bean之間以配置文件組織在一起,對(duì)象間的具體實(shí)現(xiàn)互相透明,從而在調(diào)用的對(duì)象發(fā)生變化時(shí)不用重新修改并編譯具體的代碼。既降低了程序間耦合度,又減輕了開(kāi)發(fā)者的負(fù)擔(dān)。
控制反轉(zhuǎn)的實(shí)現(xiàn)方法如下:
修改配置文件applicationContext.xml,修改后,代碼如下:
<?xml version=“1.0”encoding="UTF-8"?>
xmlns="http://www. springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instancc" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-bcans-3.O.xsd">