孔令旗
(焦作師范高等專科學校 教學督導辦公室,河南 焦作 454000)
許多本??圃盒0袹ava作為相關(guān)專業(yè)學生學習的第一門面向?qū)ο蟮挠嬎銠C程序設(shè)計語言,但實際的教學效果并不理想。學生學完Java程序設(shè)計后,被要求編寫一個運用面向?qū)ο髾C制,且規(guī)模很小的Java程序時,相當一部分人會感到困難重重,手足無措。一般來說,學習Java程序設(shè)計語言的困難來自以下三方面:
首先是面向?qū)ο髾C制與思維模式的內(nèi)化
面向?qū)ο蟮幕舅枷胝J為世界是由各種各樣具有自己的運動規(guī)律和內(nèi)部狀態(tài)的對象所組成的,不同對象之間的相互作用和通信構(gòu)成了完整的現(xiàn)實世界。面向?qū)ο髮崿F(xiàn)的機制包括封裝性、繼承性和多態(tài)性等。面向?qū)ο髾C制的理解、掌握,并運用到實際問題的解決過程中去,不可能通過簡單幾次課的教學來完成,需要教師有目的地教學與不斷刻意地培養(yǎng)、訓練才能逐步實現(xiàn)。
其次是專業(yè)的Java開發(fā)環(huán)境
初學者在DOS下用Java JDK來學習程序設(shè)計時,對各種DOS命令的理解、記憶與使用成為他們學習的夢魘??床灰娒恢奈募到y(tǒng)、類路徑讓他們不知所措;當初學者用面向?qū)I(yè)程序員的集成開發(fā)環(huán)境,如Eclipse、NetBeans時,眾多復雜的功能又讓他們眼花繚亂,望而生畏。
再次是非母語表達
Java程序代碼類似英文文章,程序編譯時顯示的錯誤信息是英文的,程序運行時的錯誤信息是英文的,Java的技術(shù)文檔同樣是英文的。對于英語基礎(chǔ)薄弱的學生,特別是不少高職院校學生而言,學習Java程序設(shè)計顯得尤為困難。
事實上BuleJ正是為破解這些難題而專門設(shè)計的。BlueJ是一個開源的Java集成開發(fā)環(huán)境,現(xiàn)由英國肯特大學計算機教育研究小組開發(fā)維護。準確地說,BlueJ是一個用于面向?qū)ο蟪绦蛟O(shè)計教學的工具軟件,它具有交互性、可視性和簡單性三個顯著特點[1],Java之父詹姆斯·高斯林在談到BlueJ時說:“我最喜歡的集成開發(fā)環(huán)境是BlueJ?!盵2]
用BlueJ打開了一個項目,并設(shè)置顯示代碼面板,系統(tǒng)的Window界面如圖1。
圖1 BlueJ的窗口界面
圖1主窗口中的類UML(Unified Modeling Language 統(tǒng)一建模語言)圖勾勒出了項目中類與類之間的使用、繼承關(guān)系,實現(xiàn)了類與類關(guān)系的可視化。類圖標的右鍵菜單可以實現(xiàn)類的編輯、編譯和刪除,以及調(diào)用類的構(gòu)造方法來創(chuàng)建對象;對象席存放用項目或系統(tǒng)類庫中的類創(chuàng)建的對象圖標,實現(xiàn)了對象的可視化。對象圖標的右鍵菜單可以調(diào)用對象方法、查看對象狀態(tài)和刪除對象。這種交互性打破了原本只有程序才能對對象進行操控的程序運行模式,為類與對象的認識與理解、程序的迭代式設(shè)計以及基于類模塊的調(diào)試提供了強有力的支持;在代碼面板里直接輸入Java語句或表達式后就能執(zhí)行或計算,極大地方便了Java數(shù)據(jù)類型、變量、表達式和各種Java語法現(xiàn)象的教學;設(shè)置本地語言后,BlueJ可以用本地語言顯示系統(tǒng)菜單與快捷按鈕,并用本地語言顯示編譯錯誤信息和運行錯誤信息,對英語基礎(chǔ)薄弱的初學者而言,降低了他們的學習難度。
BlueJ自20世紀90年代末問世以來,其軟件版本在不斷更新,2014年推出的最新版本為3.1.1。時至今日,它在計算機教育發(fā)達的西方和印度得到了廣泛應(yīng)用,而在我國的計算機教育中仍難覓BlueJ的蹤跡。本文的目的在于探討如何利用BlueJ的特點與優(yōu)勢,降低Java程序設(shè)計教學的難度,激發(fā)學生學習興趣,培養(yǎng)學生的動手實踐能力,強化訓練面向?qū)ο蟮乃季S習慣,提高課堂與實驗課教學效果,為學生后續(xù)專業(yè)課程的學習打好基礎(chǔ)。
程序設(shè)計課程是一門實踐性很強的課程,學生只有多動手、多實驗,才能理解概念,掌握方法,練就技能,培養(yǎng)能力。教、學、做一體的教學模式[3]特別適合于程序設(shè)計課的教學。學生學習程序設(shè)計最大的動力是興趣,而學生最感興趣的因素是他們在教學實踐活動中不斷獲得的成就感。BlueJ的操控性、即算性和可視性為教、學、做一體的實施提供了有力支撐。
程序設(shè)計教學中的實驗活動可劃分為驗證型、模仿型、擴修型和獨創(chuàng)型四種類型。新內(nèi)容教學初期一般以驗證型、模仿型實驗為主,而中后期則以擴修型、獨創(chuàng)型實驗為主。
BlueJ自帶了若干個項目的例子,存放在安裝目錄下的examples文件夾中。其中的shapes項目內(nèi)包含Circle(圓)、Square(正方形)和Triangle(三角形)3個幾何圖形類,它們都使用了另一個Canvas(畫布)類(參見圖1)。每個類都設(shè)計有用于顯示、隱藏、上下左右移動、水平垂直移動指定距離的public方法。這個直觀圖形的項目特別適合于介紹類、對象的概念,以及它們之間關(guān)系。
教師通過創(chuàng)建對象、調(diào)用方法、查看狀態(tài)等一系列演示操作,揭示對象是由類創(chuàng)建的。一個類可以創(chuàng)建多個對象,用同一個類創(chuàng)建的多個對象有相同的方法,但一個對象的方法僅用于操縱該對象本身。盡管同一個類創(chuàng)建的對象有相同的一組字段,但每個對象的字段都有自己獨立的存儲空間,互不影響。教師演示完后可以給學生布置類似的操作實驗任務(wù),讓學生體會、理解面向?qū)ο蟪绦虻膶崿F(xiàn)機制,以及類和對象之間的關(guān)系,這種實驗屬于模仿型。
學習過構(gòu)造方法的語法格式與作用之后,可給學生布置這樣的實驗:找出項目shapes中Circle類的構(gòu)造方法,并閱讀代碼;希望圓默認用紅色顯示時,如何修改Circle的代碼?為Circle增加一個構(gòu)造方法,可以在創(chuàng)建對象時指定圓的直徑。該實驗不僅可以加深學生對構(gòu)造方法的理解,培養(yǎng)代碼閱讀能力,而且讓學生試著進行代碼的改動與擴展。該實驗屬于擴修型。
用非BlueJ的Java環(huán)境教學時,數(shù)據(jù)類型、變量、表達式、賦值語句、強制類型轉(zhuǎn)換等內(nèi)容的教學大多都是紙上談兵;在進行控制語句與系統(tǒng)類的教學,比如if、for、String時,只有將它們嵌入一個完整程序時才能看到一些效果,不能讓學生充分體驗與練習,不利于學生理解掌握Java的概念與規(guī)則。用BlueJ作為Java教學環(huán)境時,教師可以用代碼面板充分演示講解,學生可以用代碼面板充分練習領(lǐng)會,教學也就不再枯燥乏味。
利用BlueJ平臺易用、靈活的特點,精心設(shè)計并組織足量的教、學、做一體的教學活動,將對Java程序設(shè)計教學質(zhì)量的提高產(chǎn)生積極影響。
對象優(yōu)先就是在教學過程中盡可能早地引入對象的概念,使學生盡早接觸、熟悉、理解、運用面向?qū)ο蟪绦蛟O(shè)計的概念與機制。20世紀末,對象優(yōu)先的教學理念已經(jīng)在西方開展實驗性教學,而BuleJ的問世更進一步推動了對象優(yōu)先教學理念的實施[1]。如今,對象優(yōu)先在國外程序設(shè)計教學中已得到廣泛應(yīng)用。
利用BlueJ環(huán)境,學生接觸對象,調(diào)用對象方法、查看對象狀態(tài)可以早于Java語法和源代碼的學習。在完成概述章節(jié)教學之后,用BlueJ打開前面已提到過的shapes項目,讓學生認識BlueJ界面。以該項目為例介紹面向?qū)ο蟮幕緳C制,使學生看到對象是用類創(chuàng)建的,對象有方法,方法執(zhí)行改變對象的狀態(tài),比如幾何圖形的顏色、位置等。通過教師的演示與學生的親手實驗,學生直觀地感受了對象和類,體會到了方法代碼執(zhí)行的效果,知道了每一個方法都有其名字,可以通過參數(shù)向方法傳遞數(shù)據(jù)等。在以后的教學單元中,先引導學生閱讀類代碼,然后再在設(shè)計第一個類時介紹類代碼的語法格式。
學生從觀察感受、動手實驗、閱讀代碼、規(guī)則學習,到自己編寫代碼,經(jīng)歷了從直觀到抽象,從概要到細節(jié)的認知過程,不斷深化了對類和對象的理解。在介紹Java各種語句和面向?qū)ο蟮臋C制時,要盡可能從項目設(shè)計需要出發(fā)加以引入,體現(xiàn)對象優(yōu)先的理念,使概念、語法教學與項目設(shè)計融為一體。
項目驅(qū)動是當今流行的一種課程教學模式[4]。用傳統(tǒng)的Java環(huán)境教學時,必須等介紹的程序設(shè)計知識累積到一定量后才能引進項目,而此后又會因教學課時數(shù)不足,使項目驅(qū)動實驗草草收場,導致改革的作用不能充分發(fā)揮。BlueJ作為教學環(huán)境,特別適合于逐個類、逐個方法進行實驗調(diào)試,所以BlueJ特別適合于初學者通過不斷迭代、不斷完善的途徑來學習程序設(shè)計。
打號機可以作為教學用的第一個項目,它模擬銀行、大型醫(yī)院等場所為客戶和病人打印接受服務(wù)的排隊號碼。把該項目放在介紹過了Java基本數(shù)據(jù)類型、賦值語句和類代碼的格式后進行教學。教學過程中可以把構(gòu)造方法、if語句、++與--運算等編程知識與該項目融合在一起,構(gòu)成一個教學單元。
初始設(shè)計:代碼中定義一個int字段nextNo存放下一次要打印的服務(wù)號碼,一個方法getNextNo()返回號碼,然后將號碼加1。代碼如下:
public class MarkingMachine {
private int nextNo;
public int getNextNo() {
int x = nextNo; }
nextNo = nextNo + 1;
return x; }
第1次迭代:用構(gòu)造方法改變打印的第1個號為0以及從指定號打印起的問題;第2次迭代:引入++、--運算符解決先訪問nextNo,后加1問題;第3次迭代:介紹System.out.println方法,輸出號碼到終端窗口;第4次迭代:介紹if語句,解決打印到指定號止的問題。
打號機項目之后,“錘子剪子布”游戲的模擬作為第二個項目,該項目實現(xiàn)對象間方法的交互調(diào)用,學習對象引用,傳遞對象參數(shù),并復習強化if控制語句、System.out.println方法的應(yīng)用。初始設(shè)計時,項目中有兩個類,裁判類Referee的對象接受玩家類Player對象的出手數(shù)據(jù),當裁判接收到兩個不同玩家的數(shù)據(jù)后判斷游戲的輸贏。設(shè)計中分別用int值0,1,2對玩家出手數(shù)據(jù)“錘子,剪子,布”進行編碼。甲、乙兩玩家出手數(shù)據(jù)不相等時,條件“(甲數(shù)據(jù) + 1) mod 3 = 乙數(shù)據(jù)”為真時甲勝,否則乙勝。
后續(xù)的迭代設(shè)計可以考慮解決:⑴ Referee用靜態(tài)數(shù)據(jù)、靜態(tài)方法實現(xiàn);⑵ 用隨機整數(shù)作為玩家出手數(shù)據(jù)。
以學生身邊且他們感興趣的事物為項目素材,一方面學生容易理解,對象分析容易做到水到渠成,使他們感到程序設(shè)計并不高深,并且可以解決一些實際問題;另一方面,有趣的例子也可以提高學生的學習興趣。
BlueJ獨特的優(yōu)勢使其成為介紹Java編程教學不可多得的教學工具。無論是采用傳統(tǒng)的教學內(nèi)容組織模式,還是想進行教學改革的嘗試,BlueJ都會對Java程序設(shè)計的教與學起到重要且有效的幫助。事實上BlueJ是一個沒有剪裁的Java標準環(huán)境,完全勝任Java小規(guī)模項目的開發(fā)設(shè)計。如果Java作為本??茖W生的主干專業(yè)基礎(chǔ)課,BlueJ適合于學生打基礎(chǔ)階段學習使用,學生最終還應(yīng)掌握NetBeans、Eclipse等專業(yè)工具。NetBeans和BlueJ團隊為了讓學生從BlueJ平滑過渡到NetBeans,在NetBeans的一些版本上開發(fā)了BlueJ插件,安裝BlueJ插件后NetBeans可以打開使用BlueJ項目。
[參考文獻]
[1] K?lling M, Rosenberg, J. Guidelines for Teaching Object Orientation with Java[C]. Proceedings of the 6th conference on Information Technology in Computer Science Education (ITiCSE 2001). England Canterbury, 2001.
[2] BlueJ[EB/OL]. [2014-02-10].http://www.bluej.org.
[3] 郭英凱. 高職教育“教學做一體”教學模式創(chuàng)新研究[J]. 教育與職業(yè), 2013(36):105-107.
[4] 劉波,沈岳,曾瑩. 高校計算機項目驅(qū)動式教學模式探索[J]. 計算機教育, 2011(4):82-84.