Scratch與物件導向式程式語言教學
中山國中 林合彥老師
九年一貫資訊教育議題中,在國中七年級將程式語言納入課程大綱,並明訂授課時數為七至九節課。對於沒有受過程式撰寫訓練的教師,一開始難免惶惶無助,再加上心理上一直認為「寫程式」是件困難的事,所以能不碰就不碰。近年來出現了Scratch這樣的工具,它簡易的堆積木操作方式,加上坊間如雨後春筍般的書籍,一時之間變成中小學程式語言教學的主流,老師教得很輕鬆,學生學得很高興,但是有沒有人去細問,程式語言到底要教給學生什麼樣的觀念?程式的撰寫方式從早期的程序導向式演變成目前的物件導向式,也就是將原來程式與資料分開的觀念變成程式與資料合併在物件上,讓程式的撰寫方式與我們平常熟悉的事物行為一致,讓「寫程式」變得自然而然。既然大家都喜歡使用Scratch這樣的工具,而且大家也公認它是讓學生學習程式語言的最佳入門軟體,如果也能從其中學到物件導向程式設計的基本觀念,豈不妙哉!
無論是那一種程式描述語言,其基本的語法結構可以歸納成三種:循序、條件及迴圈,這樣的結構是我們要教給學生的,一般課本都會配合美美的流程圖展示給學生看,老師為了說明這樣的結構,想盡辦法舉了一個又一個的例子,真正能體會的孩子又有好幾?個人認為,不妨將這些語法結構,在「操弄物件」的時候才帶進來。嚴謹的物件導向程式設計觀念,包含較深入的「封裝」、「繼承」及「多形」的結構,但是簡易的「物件(Object)」、「屬性(Property)」、「事件(Event)」、「訊息(message)」及「方法(Method)」的觀念還是很容易了解的,前面提到過,這些與我們平常所熟悉的事物行為是一樣的。
課堂上進入程式語言學習主題之前,我們常會喚起學生的舊經驗以作為和新知識的連結,比方說我們可以舉身邊常見的動物「狗」為例,狗有許多不同的種類,有體型較大的拉不拉多犬、狼犬,有嬌小的博美狗、臘腸狗等,不論是那一隻狗,我們都稱牠是一個「物件」,也都有牠們自己的「特徴」,例如:名字、外形、毛色、身長及身高等等,在這裡我們只是換個名詞「屬性」來表示而己;喜愛狗的人看到愛犬總會忍不住的抱抱或摸摸牠們,就以「摸摸牠」這件事來說,這個「事件」產生的「訊息」傳遞到不同的狗身上,產生的「反應」也不一樣,有的狗可能搖搖尾巴,有的可能繞著你轉圈圈等等,像這些「搖尾巴」、「轉圈圈」等「反應」,我們也只是換個名詞「方法」來表示罷了!這樣的例子,相信很多教師能夠舉得更多更有趣,經由這樣的經驗描述,我們就將簡易的「物件」、「屬性」、「事件」、「訊息」及「方法」的觀念串在一起了。
談到程式,我們都會說它是一連串指揮電腦工作的命令集合。在電腦的視窗操作環境下,我們使用鍵盤及滑鼠產生了一連串的「事件」,而視窗上的各個元件(按鈕、文字、圖像等)就是我們要操控的「物件」,至於這些物件對於發生的「事件」(按下鍵盤、按下滑鼠等)會產生怎麼樣的反應,那就是程式設計師要去撰寫的程式(方法)了。進入Scratch操作畫面後,首先讓學生觀察的是畫面上的「貓咪」物件:這個物件的名稱、座標、方向、造型及聲音等,這些都是這個物件的「特徵」,在物件導向程式設計來說,指的就是「屬性」,這些資料都是可變動的。讓學生拖曳「快樂貓」,並觀察物件座標的變化,此時可以補充說明畫面上座標及方向的定義,另外也可以進入造型的編輯模式,讓學生去彩繪貓咪及了解「造型中心點」的意義;最後再去觀察另一個物件「舞台」的屬性有什麼不同。
回到舞台畫面,用滑鼠點擊「快樂貓」這個物件,此時可以問學生「滑鼠點擊」的事件,它所產生的「訊息」傳遞給哪一個物件?學生一定會回答「快樂貓」,然後再問「快樂貓」這個物件有沒有什麼反應?為什麼沒有呢?因為偉大的程式設計師沒有告訴牠要怎樣去反應。所以我們要去寫程式,告訴「快樂貓」如何針對被滑鼠點擊後該有的反應。進入「快樂貓」的程式編輯模式,我們以堆積木的方式寫下了對應事件的程式(方法):當快樂貓被點一下時執行:移動10步、然後換下一個造型、接著發出喵一聲、最後顯示你好的文字並停留0.1秒鐘。就這樣自然而然的引出了「循序執行」的語法結構。接著繼續引導學生點擊「快樂貓」向右移動直到碰到畫面右邊界,若繼續點擊會發現物件穿出畫面,讓學生觀察此時物件的座標,並思考如何解決這個問題。很明顯的發現「快樂貓」的x座標等於191時,恰好碰到邊界,所以我們在程式最後再加上「條件判斷」的語法:如果快樂貓的x座標大於191,則令其面向左邊;繼續點擊快樂貓向左移動可以發現,當其x座標等於-189時恰好碰到左邊界,這個時候就可以考考學生怎樣處理接下來要轉向的問題了。程式寫到這裡,有學生可能會問「能不能只點一下,快樂貓就能自己來回的移動,而不用這麼麻煩的不停的點?」,這個時候就是講解「迴圈結構」的時機,果然加上重覆執行的語法結構,快樂貓從此過著幸福快樂的來回奔波日子。經由上面的練習,我們不但讓學生了解物件導向程式設計的基本觀念,而且在解決問題中,自然而然的知道程式語法的三種基本架構。至於要更詳細的探討物件之間的互動(在某個事件下的訊息傳遞),訊息廣播及接收的指令就留待大家應用了!
程式語言教學就是這麼有趣,在師生間的腦力激盪中,常常會有意想不到的火花出現。嘗試使用Scratch讓學生認識物件導向程式設計的基本觀念,提供大家參考,期待大家有更多的想法!