張靜華
文章編號:1672-5913(2009)08-0072-03
摘要:本文以“C++程序設(shè)計”課程為對象,探討了大學(xué)編程語言課的實例教學(xué)方法,進(jìn)行了C++程序?qū)嵗O(shè)計,并提出構(gòu)建一個基于Web的程序?qū)嵗詫W(xué)系統(tǒng),彌補了課堂教學(xué)實例數(shù)量不足的問題,同時在系統(tǒng)中提供了自適應(yīng)實例學(xué)習(xí)控制策略作為學(xué)生實例學(xué)習(xí)的指導(dǎo)。
關(guān)鍵詞:實例教學(xué);實例設(shè)計;自適應(yīng);實例學(xué)習(xí)策略
中圖分類號:G642
文獻(xiàn)標(biāo)識碼:B
1引言
在編程語言課的教學(xué)中,程序?qū)嵗哂蟹浅V匾囊饬x。好的實例設(shè)計有助于學(xué)生對內(nèi)容的理解;大量實例的累積可以達(dá)到量變到質(zhì)變的作用,使學(xué)生從看懂到領(lǐng)悟。在教學(xué)過程中,實例的選擇和對學(xué)生實例學(xué)習(xí)的指導(dǎo)都將對編程語言課的學(xué)習(xí)有很大幫助。本文以“C++程序設(shè)計”課程為例探討了實例教學(xué)方法。首先確定基于實例教學(xué)的總的思想和方法,然后重點探討實例的設(shè)計和一個基于Web的自適應(yīng)實例自學(xué)系統(tǒng)。
2基于實例的教學(xué)
C++課程基于實例的教學(xué)從兩方面入手。其一為教學(xué)中恰當(dāng)?shù)膶嵗x擇運用;其二為課余時大量的實例提供與自學(xué)指導(dǎo)。具體包括:
(1) 實例運用上注意實例的連貫性,若知識點相關(guān),則采用同一系列實例進(jìn)行擴(kuò)展,即題目內(nèi)容相近,但針對不同知識點做局部改變擴(kuò)展,使能快速理解實例,并專注于教學(xué)點。
(2) 適當(dāng)采用實例的歸納、對比、類比等方法。如窮舉法,通過多種實例類比,說明什么問題可以用窮舉法解決;又如面向?qū)ο蟪绦蚣軜?gòu)與程序設(shè)計思想,通過對同一問題進(jìn)行結(jié)構(gòu)化設(shè)計和面向?qū)ο笤O(shè)計的對比。
(3) 伴隨教學(xué)進(jìn)度分解一個復(fù)雜的綜合實例,逐步講解程序設(shè)計方法思想。采用問題引導(dǎo)的方法,由綜合實例的某個步驟提出問題,引出新知識點,改進(jìn)程序,層次推進(jìn)至最終完成問題。
(4) 每講完一次課程后,為學(xué)生總結(jié)本次課程的語法知識點和程序設(shè)計思想。提示下堂課將會涉及的前序知識點,以及與下堂課有直接關(guān)系的前序?qū)嵗⑻岢鲱A(yù)備問題。布置與課堂實例的算法相似的程序作業(yè),學(xué)生能通過知識的直接遷移來完成作業(yè)。
(5) 要求學(xué)生在課余根據(jù)相應(yīng)知識點通過實例自學(xué)系統(tǒng)學(xué)習(xí)并練習(xí)相應(yīng)實例來達(dá)到進(jìn)一步的練習(xí)和提高,系統(tǒng)會根據(jù)學(xué)生在實例庫中的學(xué)習(xí)情況進(jìn)行相應(yīng)的控制指導(dǎo)。
3C++程序?qū)嵗O(shè)計
程序?qū)嵗脑O(shè)計是實例教學(xué)的重點,通過對領(lǐng)域知識點的分析總結(jié),有針對性的進(jìn)行實例設(shè)計。同時實例之間并不是孤立的,有意識的設(shè)計了有聯(lián)系的各種實例組,形成系統(tǒng)的全面的實例庫。
3.1領(lǐng)域知識點總結(jié)
對于“C++程序設(shè)計”課程,領(lǐng)域知識點涉及兩個方面,其一為C++語法理解與應(yīng)用,其二為如何應(yīng)用程序設(shè)計思想解決實際問題。
首先從語法角度開始,每個語法考察點都是一個領(lǐng)域知識點。如:各種基本數(shù)據(jù)類型的長度、文字常量表示、符號常量表示、變量定義和類型轉(zhuǎn)換等。
從程序設(shè)計角度講,程序設(shè)計相關(guān)理論方法技巧都是一個領(lǐng)域知識點。程序設(shè)計思想涉及遞歸、迭代、窮舉和分治等。程序設(shè)計方法與技巧包括數(shù)據(jù)設(shè)計、算法設(shè)計和程序架構(gòu)設(shè)計。數(shù)據(jù)設(shè)計包括簡單數(shù)據(jù)設(shè)計、數(shù)組數(shù)據(jù)結(jié)構(gòu)應(yīng)用和結(jié)構(gòu)體應(yīng)用等;算法設(shè)計包括分支算法、循環(huán)算法、循環(huán)嵌套和循環(huán)與條件語句的嵌套等多種程序設(shè)計技巧;程序架構(gòu)設(shè)計包括函數(shù)設(shè)計和程序架構(gòu)組織。面向?qū)ο蟪绦蛟O(shè)計思想包括類的抽取與設(shè)計(屬性設(shè)計、方法設(shè)計、構(gòu)造方法設(shè)計、訪問控制設(shè)計)、應(yīng)用類屬性與類方法解決問題,應(yīng)用類的聚合解決相應(yīng)問題和應(yīng)用類間的消息連接解決相應(yīng)問題等。
3.2基于領(lǐng)域知識點的實例設(shè)計
將C++程序?qū)嵗譃槿齻€層次:
(1) 純語法實例:用于演示基本語法,可以沒有實際含義;
(2) 算法實例:有一定實際意義的算法思想實例,用于演示程序設(shè)計思想和方法技巧;
(3) 綜合實例:需要多個知識點的綜合設(shè)計實例,重點演示解決問題的思維方式和程序架構(gòu)。
純語法實例設(shè)計中,為每個語法知識點都設(shè)計若干相應(yīng)的語法實例程序,一個實例會涉及多個語法知識點,但會有重點演示的語法知識點。將設(shè)計好的程序進(jìn)行題目設(shè)計,通過總結(jié)學(xué)生作業(yè)、考試中的問題,找出相應(yīng)語法容易出錯的形式,設(shè)計了相應(yīng)的問題形式,如讀程序?qū)懡Y(jié)果,程序填空,錯誤辨析等。
算法實例一般都是解決實際問題的題目,針對每個程序設(shè)計方法知識點設(shè)計算法實例。每個實例涉及一個或多個重點演示的設(shè)計知識點。如雞兔同籠問題,水仙花數(shù)問題應(yīng)用的是雙重循環(huán)技巧,也是窮舉設(shè)計思想。
綜合實例都是有一定意義的較復(fù)雜的實際問題,如我們設(shè)計的學(xué)生成績分析系統(tǒng),模擬停車場輔助系統(tǒng),模擬選課系統(tǒng)等。綜合實例只給出問題描述,而不是具體要求設(shè)計哪些類,哪些函數(shù),鍛煉學(xué)生對復(fù)雜問題的整體分析設(shè)計能力。每個實例都盡量將多個知識點應(yīng)用進(jìn)來。如學(xué)生成績分析系統(tǒng)涉及類、對象、類的組合、模板、排序算法、文件操作和運算符重載等。模擬停車場系統(tǒng)也涉及類對象、繼承、多態(tài)、類的組合、數(shù)組和搜索算法等。并且將每個綜合實例分解為若干階段,多個子問題,隨著教學(xué)進(jìn)度不斷擴(kuò)展引入新問題,通過不斷修改程序來解決新的問題。
3.3實例的組織
在實例設(shè)計中,每個知識點都設(shè)計若干個實例。除了針對知識點外,還根據(jù)知識點之間的相關(guān)關(guān)系,遞進(jìn)關(guān)系,有意識的設(shè)計有各種聯(lián)系的實例,創(chuàng)建多種形式的實例組。如:類比實例組(題目不同,算法相同);對比實例組(題目相同,算法不同);擴(kuò)展實例組(基于知識點的遞進(jìn)關(guān)系,不斷擴(kuò)展的系列實例)等。
4基于Web的自適應(yīng)實例自學(xué)系統(tǒng)
課余時大量的實例提供與自學(xué)指導(dǎo)是實例教學(xué)設(shè)計的一個重點。如何能達(dá)到這個目的,我們探討了一個基于Web的實例自學(xué)系統(tǒng),根據(jù)目標(biāo)知識點,教學(xué)進(jìn)度,實例的難易程度,實例之間的關(guān)聯(lián),以及學(xué)生的學(xué)習(xí)情況為學(xué)生選擇實例,指導(dǎo)學(xué)生對實例的學(xué)習(xí)。
實例學(xué)習(xí)的指導(dǎo)策略為:由語法到算法,由易到難;根據(jù)學(xué)習(xí)情況優(yōu)先選擇擴(kuò)展實例,若當(dāng)前實例不理解則選擇類比實例,若還不理解選擇前序知識點實例,若實例理解選擇知識點的其他實例,適當(dāng)選擇對比實例,達(dá)到一定程度增加難度;追蹤一個綜合實例。保證選擇的任何實例都不含未學(xué)習(xí)的知識點。
4.1創(chuàng)建程序?qū)嵗龓?/p>
實例庫不是實例的簡單集合,為了與教學(xué)順序和教學(xué)目標(biāo)配合,并且在學(xué)生進(jìn)行實例學(xué)時時提供相應(yīng)的控制,需要設(shè)計實例庫的組織形式。
首先保存設(shè)計好的所有實例。三種程序?qū)嵗枰幚淼膬?nèi)容不同,故分別構(gòu)建語法實例表(實例編號,題目描述,題目內(nèi)容,問題講解,難度等級)、算法實例表(實例編號,題目描述,分析,程序,講解,難度等級)、綜合實例表(實例編號,題目描述,實例分解步驟)以及綜合實例步驟表(實例編號,步驟編號,問題描述,程序,講解,難度等級)。
保存總結(jié)出來的領(lǐng)域知識點。由語法知識點表(知識點編號,標(biāo)題,語法描述)和設(shè)計方法知識點表(知識點編號,標(biāo)題,算法思想描述)描述。
構(gòu)造實例與領(lǐng)域知識點之間的關(guān)系。每個實例都涉及一個或多個語法知識點,語法實例一般會有一個(或多個)主語法知識點,算法實例與綜合實例的分步實例會有一個(或多個)主設(shè)計知識點。建立實例與知識點之間的關(guān)系表(實例類型,實例編號,相關(guān)知識點編號,相關(guān)知識點類型,是否主知識點),標(biāo)識出實例涉及的所有語法知識點,并標(biāo)出語法實例的主語法知識點,和其他實例的主設(shè)計知識點。表結(jié)構(gòu)為。
建立實例之間的關(guān)系。由實例關(guān)系表(關(guān)系類型,關(guān)系編號,實例編號,備注)構(gòu)建不同的實例組。
一般教學(xué)領(lǐng)域知識點間有固定的前序關(guān)系。但程序?qū)嵗g卻沒有先序關(guān)系,每個實例都是獨立的。但一個實例一般會涉及多個語法知識點,雖然許多語法之間是沒有先序關(guān)系的,但教學(xué)進(jìn)度卻使這些知識點有了先序關(guān)系。故實例使用的先后順序與教學(xué)順序有關(guān)。為了能正確的提供學(xué)生適宜的實例,除盡量提供一些僅涉及當(dāng)前知識點的實例外,還要將每個實例涉及的知識點都詳細(xì)指出,同時構(gòu)建教學(xué)進(jìn)度表,在學(xué)生自主學(xué)習(xí)過程中屏蔽沒學(xué)過內(nèi)容的相關(guān)知識點。教學(xué)進(jìn)度表將相應(yīng)的學(xué)習(xí)目標(biāo)知識點表的知識點按教學(xué)進(jìn)度標(biāo)識出順序關(guān)系,可直接在教學(xué)目標(biāo)相關(guān)的兩個表中增加一個字段標(biāo)識順序號。
4.2學(xué)生信息庫
課程的每個學(xué)生都是系統(tǒng)允許的用戶,為每個學(xué)生提供學(xué)習(xí)狀況記錄,這里稱為學(xué)生模型。學(xué)生模型由三個表組成,分別記錄學(xué)生的能力程度、學(xué)習(xí)過程和學(xué)生當(dāng)前追蹤的綜合實例及當(dāng)前步驟。根據(jù)學(xué)生的學(xué)習(xí)過程情況浮動學(xué)生的能力值。學(xué)習(xí)過程記錄所學(xué)的實例編號,實例類型,實例難度等級,實例關(guān)系編號,學(xué)習(xí)狀況。學(xué)習(xí)能力程度記錄當(dāng)前的能力,用一個0~100之間的數(shù)表示。
4.3自適應(yīng)學(xué)習(xí)控制策略
學(xué)生學(xué)習(xí)過程中,若讓學(xué)生隨意選擇實例學(xué)習(xí),那么眾多的實例會使學(xué)生無所適從,故系統(tǒng)設(shè)計了自適應(yīng)學(xué)習(xí)控制策略,其結(jié)合教學(xué)順序,教學(xué)目標(biāo),實例難度,實例關(guān)系,并根據(jù)學(xué)生的學(xué)習(xí)狀況提供適于學(xué)生的實例建議。其控制流程如圖1所示。根據(jù)學(xué)生模型選中恰當(dāng)實例,學(xué)生學(xué)習(xí)一個實例時,學(xué)習(xí)完后由學(xué)生選擇對實例的學(xué)習(xí)情況:不理解,理解,能編程。記錄學(xué)生模型,從新計算學(xué)生能力值,然后根據(jù)學(xué)生能力和學(xué)生在當(dāng)前實例的學(xué)習(xí)情況,根據(jù)約定的策略推薦下個實例(屏蔽掉當(dāng)前不適于學(xué)習(xí)的實例)。

圖1 自適應(yīng)學(xué)習(xí)控制流程
(1) 實例選擇策略。
將學(xué)生能力分為5個等級,分別為(bad,lower,low,middle,high)。若學(xué)生能力為lower則選擇語法實例,否則進(jìn)入算法實例與綜合實例;若學(xué)生能力為low,則選擇初級實例;若學(xué)生能力為middle,則選擇中級實例;若學(xué)生能力為hign,則選擇高級實例;若學(xué)生能力為bad,則回溯。回溯方法為查看當(dāng)前所有不理解的實例,根據(jù)實例包含的知識點,找出使用最多的知識點,選擇其教學(xué)實例,若有與本實例呈系列的實例優(yōu)先選擇。
若學(xué)生當(dāng)前實例學(xué)習(xí)狀況為不理解,且能力沒降級,則選擇類比實例,若能力降級則選擇低一級難度實例。若當(dāng)前學(xué)習(xí)狀態(tài)為理解,則選擇類比實例(并專注設(shè)計程序),若能力升級也可選擇高一級實例。若學(xué)習(xí)狀態(tài)為會編程,且能力沒升級,則進(jìn)入其他實例,否則提供更高一級實例。
(2) 學(xué)生能力計算。
學(xué)習(xí)過程中,初次進(jìn)入系統(tǒng)學(xué)習(xí)能力程度設(shè)為50,每學(xué)習(xí)一個實例,若狀況為不理解則能力程度降低,若為理解則能程度上升,若為可編程則上升幅度更大,能力程度升降分值具體如表1所示。依據(jù)量變到質(zhì)變的原理,能力值累積到一定程度,在學(xué)生的能力進(jìn)入新的等級。學(xué)習(xí)能力值與能力等級的關(guān)系通過一個映射關(guān)系描述:<50,能力等級為bad,50~60之間lower,60~70直接low,70~90之間middle,90以上為high。

系統(tǒng)當(dāng)然也允許學(xué)生自主控制策略選擇。尤其在課程學(xué)完進(jìn)行總復(fù)習(xí)的時候。提供了多種查詢方式。如查詢包含某知識點的所有實例??梢园床襟E查看綜合實例,按系列查看相關(guān)實例等。
5結(jié)束語
在編程語言課教學(xué)中很多學(xué)生反映,課堂上的有些例子來不及細(xì)想就過去了,有些內(nèi)容僅用了一個例子講解印象不夠深刻,多數(shù)學(xué)生表示希望多看一些實例,只是沒有來源,也有些學(xué)生看了很多參考書的實例,但反映還是不懂或不會編程序。程序?qū)嵗詫W(xué)系統(tǒng)的形式可以提供大量實例,并指導(dǎo)學(xué)生慢慢體會,逐步深入。在有限的學(xué)時下,課堂教學(xué)實例需要精心設(shè)計,同時要提供大量實例供學(xué)生課下自學(xué),本文正是針對此問題探討的解決方法。
參考文獻(xiàn):
[1] Yuji Yoneyamaa,Kotaro Matsushitab,Kenneth J. Mackinb, et al. Puzzle Based Programming Learning Support System with Learning History Management[A]. 16th International Conference on Computers in Education[C],2008, 623-627.
[2] 程靜,楊明,邱玉輝. 基于知識點對象的個性化學(xué)習(xí)系統(tǒng)實施[J]. 西南師范大學(xué)學(xué)報,自然科學(xué)版,2006,31(5):120-123.
[3] 劉偉,付璐,余英良. 個性化CAI中教學(xué)策略的設(shè)計與實現(xiàn)[J]. 河南科技大學(xué)學(xué)報,自然科學(xué)版,2007,28(2):44-49.
[4] Natalia Stash,Alexandra Cristea,Paul De Bra. Learning Styles Adaptation Language for Adaptive Hypermedia[A]. AH 2006[C],2006.323-327.
Discussion about Example Teaching for Programming Language Course
ZHANG Jing-hua
(School of Computer Science of Technology, North China Electric Power University, Baoding, 071003, China)
Abstract: This paper based on C++ Program design course, discussed the example teaching method for programming language course, gave the program example design method and designed a web based program example self-learning system, which remedied the shortage of example in classroom teaching, and instructed the students studying examples on the system by providing a adaptive learning control strategy.
Key words:example teaching; example design; adaptive; example learning strategy