翁佩純,馬慧,張遠(yuǎn)海
(1.電子科技大學(xué)中山學(xué)院,中山 528400;2.中山火炬職業(yè)技術(shù)學(xué)院,中山 528400)
以“任務(wù)驅(qū)動(dòng)”的《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)案例設(shè)計(jì)
翁佩純1,馬慧1,張遠(yuǎn)海2
(1.電子科技大學(xué)中山學(xué)院,中山 528400;2.中山火炬職業(yè)技術(shù)學(xué)院,中山 528400)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》是一門(mén)實(shí)踐性很強(qiáng)的課程,教學(xué)案例將直接影響其教學(xué)效果。針對(duì)目前教學(xué)案例存在的問(wèn)題進(jìn)行分析總結(jié),提出以“任務(wù)驅(qū)動(dòng)”的教學(xué)案例設(shè)計(jì)方法。通過(guò)實(shí)例講述從案例選題、內(nèi)容設(shè)計(jì)、任務(wù)分解等方面,將面向?qū)ο笤O(shè)計(jì)的知識(shí)點(diǎn)融入到一個(gè)案例中,并以任務(wù)驅(qū)動(dòng)學(xué)生進(jìn)行團(tuán)隊(duì)協(xié)作開(kāi)發(fā),提供一種新的教學(xué)思路。
任務(wù)驅(qū)動(dòng);案例設(shè)計(jì);面向?qū)ο蟪绦蛟O(shè)計(jì)
《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程是計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)一門(mén)重要的且實(shí)踐性很強(qiáng)的專(zhuān)業(yè)基礎(chǔ)課,其教學(xué)案例的設(shè)計(jì)將直接影響本課程的教學(xué)質(zhì)量。由于課程的學(xué)習(xí)對(duì)象一般是大一的學(xué)生,多數(shù)學(xué)生屬于第一次接觸計(jì)算機(jī)編程,加上面向?qū)ο蟪绦蛟O(shè)計(jì)本身的抽象性和復(fù)雜性,使很多學(xué)生望而卻步。任務(wù)驅(qū)動(dòng)教學(xué)法,是指學(xué)生在教師的幫助下,緊緊圍繞一個(gè)共同的任務(wù)活動(dòng)中心,在強(qiáng)烈的問(wèn)題動(dòng)機(jī)的驅(qū)動(dòng)下,通過(guò)對(duì)學(xué)習(xí)資源的積極主動(dòng)應(yīng)用,進(jìn)行自主探索和互動(dòng)協(xié)作的學(xué)習(xí),并在完成既定任務(wù)的同時(shí),引導(dǎo)學(xué)生產(chǎn)生一種學(xué)習(xí)實(shí)踐活動(dòng)[1]。本文將以“任務(wù)驅(qū)動(dòng)式”來(lái)進(jìn)行教學(xué)案例的設(shè)計(jì),研究出一套符合《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程的教學(xué)案例。
目前《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程的教學(xué)案例,普通存在以下幾個(gè)問(wèn)題:
(1)教學(xué)案例多數(shù)以知識(shí)點(diǎn)為目標(biāo)進(jìn)行設(shè)計(jì),比較單一,缺乏案例之間的連貫性。
(2)以標(biāo)準(zhǔn)化習(xí)題和簡(jiǎn)單的編程題為主,缺少對(duì)知識(shí)綜合運(yùn)用能力的訓(xùn)練和考核,這種脫離實(shí)際應(yīng)用的案例最終導(dǎo)致學(xué)生失去學(xué)習(xí)興趣。
(3)從教學(xué)效果上來(lái)看,學(xué)生基本程序設(shè)計(jì)能力差,遇到實(shí)際應(yīng)用問(wèn)題毫無(wú)頭緒,無(wú)法分析和解決實(shí)際問(wèn)題。
在教學(xué)案例的設(shè)計(jì)上,以“任務(wù)驅(qū)動(dòng)式”來(lái)進(jìn)行設(shè)計(jì)主要有以下幾個(gè)原則:
(1)教學(xué)案例的設(shè)計(jì)應(yīng)該逐步提高、前后連貫,要能緊密聯(lián)系實(shí)際,讓學(xué)生在實(shí)踐中鞏固課堂知識(shí)的同時(shí),進(jìn)一步增強(qiáng)學(xué)生獨(dú)立分析問(wèn)題、解決問(wèn)題的能力。
(2)由教師對(duì)任務(wù)進(jìn)行分解,完成示范性教學(xué),讓學(xué)生分組進(jìn)行程序開(kāi)發(fā),同時(shí)學(xué)習(xí)如何按“分而治之”策略解決一個(gè)具有相當(dāng)規(guī)模與復(fù)雜性的實(shí)際問(wèn)題。
(3)鼓勵(lì)學(xué)生在完成任務(wù)的基礎(chǔ)上進(jìn)行一定程度的創(chuàng)新,以任務(wù)為驅(qū)動(dòng),但不是以任務(wù)為終結(jié),從而培養(yǎng)學(xué)生的創(chuàng)新能力。
3.1 案例選題
首先案例的選題應(yīng)具有一定挑戰(zhàn)性,同時(shí)應(yīng)兼有趣味性。在實(shí)施任務(wù)驅(qū)動(dòng)的過(guò)程中,“以任務(wù)為主線、教師為主導(dǎo)、學(xué)生為主體”的教學(xué)模式,每成功完成一個(gè)子任務(wù)都能給學(xué)生帶來(lái)極大的成就感,激發(fā)學(xué)生實(shí)踐的興趣。例如,模擬銀行柜臺(tái)存取款程序、模擬圖書(shū)館借還書(shū)程序等。
3.2 內(nèi)容設(shè)計(jì)
案例的內(nèi)容應(yīng)注重前后知識(shí)運(yùn)用的綜合性和連貫性,后續(xù)案例以前續(xù)案例為基礎(chǔ)。例如,在講授類(lèi)與對(duì)象的知識(shí)時(shí),設(shè)計(jì)的案例包含如何類(lèi)的定義和實(shí)現(xiàn),成員函數(shù)的調(diào)用等內(nèi)容,后續(xù)的內(nèi)容如對(duì)象數(shù)組、類(lèi)的繼承與派生、文件讀寫(xiě)等知識(shí)要點(diǎn)都可以不斷的融入到前面案例中。這樣一方面可以復(fù)習(xí)前面的知識(shí),一方面可以培養(yǎng)學(xué)生系統(tǒng)化意識(shí),以幫助學(xué)生建立知識(shí)體系。
3.3 任務(wù)分解
對(duì)于難度和規(guī)模較大的案例,為了避免學(xué)生突然面對(duì)這類(lèi)實(shí)驗(yàn)時(shí)毫無(wú)頭緒,須將其分解為一個(gè)個(gè)學(xué)生可把握復(fù)雜性的任務(wù),再為每一任務(wù)提供足夠的指南與參考資源,每一任務(wù)同時(shí)也是可交付、可評(píng)價(jià)的。任務(wù)分解可使學(xué)生同時(shí)學(xué)習(xí)如何按“分而治之”策略解決一個(gè)具有相當(dāng)規(guī)模與復(fù)雜性的實(shí)際問(wèn)題。
3.4 兼顧實(shí)踐創(chuàng)新
以任務(wù)驅(qū)動(dòng)進(jìn)行教學(xué)時(shí),可提供一些進(jìn)一步完善開(kāi)發(fā)的意見(jiàn),作為選做的進(jìn)階任務(wù)。通過(guò)加分等獎(jiǎng)勵(lì)方式,鼓勵(lì)動(dòng)手能力較好的學(xué)生去嘗試。同時(shí),鼓勵(lì)學(xué)生在此基礎(chǔ)上自行創(chuàng)新,收集這些素材作為以豐富教學(xué)資源庫(kù)。
下面將以一個(gè)具體的教學(xué)案例來(lái)說(shuō)明以 “任務(wù)驅(qū)動(dòng)”的教學(xué)案例設(shè)計(jì)思路和方法。
4.1 案例描述
在講授“類(lèi)與對(duì)象”這一概念時(shí),對(duì)于初次接觸“面向?qū)ο蟆边@個(gè)抽象的概念,多數(shù)學(xué)生一時(shí)難以接受。因此在設(shè)計(jì)教學(xué)案例時(shí)應(yīng)遵從“由易入難,逐步推進(jìn)”的設(shè)計(jì)原則,把各個(gè)知識(shí)點(diǎn)包含在案例的講授當(dāng)中[2]。例如,如何定義類(lèi)、使用對(duì)象數(shù)組、動(dòng)態(tài)申請(qǐng)內(nèi)存、拷貝構(gòu)造函數(shù)等。這個(gè)案例將設(shè)計(jì)一個(gè)簡(jiǎn)易圖書(shū)館借閱管理系統(tǒng),把抽象的概念用具體的實(shí)例展示給學(xué)生,使學(xué)生能融會(huì)貫通。
下面的案例將以面向?qū)ο蟮姆椒ㄔO(shè)計(jì)一個(gè)簡(jiǎn)易圖書(shū)館借閱管理系統(tǒng),實(shí)現(xiàn)查找圖書(shū)、登錄系統(tǒng)、借書(shū)、還書(shū)等功能,按需求設(shè)計(jì)并實(shí)現(xiàn)Book類(lèi)、Reader類(lèi)、Library類(lèi)。
4.2 任務(wù)分解
這個(gè)題目對(duì)于剛剛接觸面向?qū)ο蟪绦蛟O(shè)計(jì)的學(xué)生來(lái)說(shuō),會(huì)覺(jué)得任務(wù)超出負(fù)荷且毫無(wú)頭緒。因此下面將進(jìn)行任務(wù)分解,使每一個(gè)任務(wù)做到學(xué)生能接受并相信此任務(wù)的難度是在自己的實(shí)踐能力之內(nèi)。
(1)Book類(lèi)定義與實(shí)現(xiàn)
【任務(wù)1-1】編寫(xiě)一個(gè)Book類(lèi),用于描述圖書(shū),其數(shù)據(jù)成員(私有)如表1所示。
表1 Book類(lèi)數(shù)據(jù)成員表
通過(guò)組織學(xué)生分小組討論該題目,讓學(xué)生進(jìn)行自主學(xué)習(xí),主要包含以下幾個(gè)知識(shí)點(diǎn):
(1)類(lèi)的定義
(2)數(shù)據(jù)成員的定義
(3)構(gòu)造函數(shù)的定義
(4)成員函數(shù)的定義
接下來(lái)進(jìn)行示范性教學(xué),可由教師給出類(lèi)的定義頭文件”Book.h”,由學(xué)生來(lái)完成類(lèi)的實(shí)現(xiàn)。這樣不僅給學(xué)生主動(dòng)思考自主學(xué)習(xí)的機(jī)會(huì),而且有助于培養(yǎng)學(xué)生良好的編程風(fēng)格。以下是參考代碼。
class Book {
private:
string name;string ISBN;string writer;
string public_name;double price;int number;
public:
Book(string myname="Unknown",string myISBN="Unknown",string mywriter="Unknown",string mypub="Unknown",double myprice=0.0,int mynum=0);
void setData(string myname,string myISBN,string mywriter,string mypub,double myprice,int mynum);
void print();
string getName();
string getWriter();
string getISBN();
int getNumber();
void borrow();
void restore();
};
【課堂討論】完成以上Book類(lèi)的實(shí)現(xiàn)之后,組織學(xué)生進(jìn)行課堂討論:
①圖書(shū)館中有多本書(shū),如何表示和存儲(chǔ)?
②目前暫未實(shí)現(xiàn)Reader讀者類(lèi),如何測(cè)試借還書(shū)?
在經(jīng)過(guò)充分討論之后,給出下一個(gè)任務(wù)。
【任務(wù)1-2】本任務(wù)的設(shè)計(jì)目的是將Book類(lèi)的定義與實(shí)現(xiàn)設(shè)計(jì)成為一個(gè)可交付的題目,從而讓學(xué)生收獲一個(gè)子任務(wù)的成就感。
·在main函數(shù)中,定義一個(gè)Book類(lèi)的對(duì)象數(shù)組,包含5本書(shū),參考代碼如下。
Book arrBooks[5]={
Book("Java編程思想","??藸?,"機(jī)械工業(yè)出版社",78.0,3,"9787111213826"),
Book("C++程序設(shè)計(jì)","陳可","電子工業(yè)出版社",45.6,2,"9787145513853"),
Book("程序設(shè)計(jì)基礎(chǔ)","張欣易","北京大學(xué)出版社",35.0,3,"9784380850350"),
Book("Linux入門(mén)","李旺","機(jī)械工業(yè)出版社",56.7,1,"9784254465775"),
Book("Unix編程大全","程查斯","清華大學(xué)出版社",128.5,2,"9784343465729")};
·設(shè)計(jì)一個(gè)系統(tǒng)主菜單,要求有以下選項(xiàng),如圖1所示。
·編程模擬10次借還書(shū)的操作,要求所操作的圖書(shū)序號(hào)是隨機(jī)的,借還書(shū)的操作是等概率的。參考代碼如下。
srand((unsigned)time(0)); //#include<ctime>
for(int i=0;i<10;i++)
{
int j=rand()%2;
if(j==0)
{
//模擬借書(shū)操作
int index=rand()%5;//總共5本書(shū),模擬其下標(biāo)
arrBooks[index].borrow();
}
else{
模擬還書(shū)操作;}
}
圖1 任務(wù)1的系統(tǒng)主菜單
(2)Reader類(lèi)定義與實(shí)現(xiàn)
【任務(wù)2-1】編寫(xiě)一個(gè)Reader類(lèi),用于描述讀者,其數(shù)據(jù)成員(私有)如表3所示。
表2 Reader類(lèi)數(shù)據(jù)成員表
【課堂討論】引導(dǎo)學(xué)生對(duì)下面幾個(gè)方面進(jìn)行課堂討論并進(jìn)行程序開(kāi)發(fā):
①缺省構(gòu)造函數(shù)的作用;
②析構(gòu)函數(shù)的作用;
③成員函數(shù)borrow算法描述如下:
void borrow(Book&b)
{
如果已借書(shū)本數(shù)未達(dá)到max上限,則
b.borrow();//調(diào)用Book類(lèi)的borrow函數(shù),使該書(shū)書(shū)目減1
//把書(shū)本b的各項(xiàng)信息復(fù)制到數(shù)組中的第number個(gè)元素中
arrBooks[number++]=b;
}
④成員函數(shù)restore算法描述如下:
void restore(Book&b);
{
首先查找書(shū)本b在books數(shù)組中的下標(biāo)index
如果找到這本書(shū),則把它從arrBooks數(shù)組中刪除
b.restore();//調(diào)用Book類(lèi)的restore函數(shù),使該書(shū)書(shū)目加1
number--;
}
【任務(wù)2-2】本任務(wù)的設(shè)計(jì)目的是融合任務(wù)1和任務(wù)2,設(shè)計(jì)成為一個(gè)可交付的題目,從而讓學(xué)生完成讀者借還書(shū)操作的功能。
①定義Reader類(lèi)的對(duì)象數(shù)組,參考代碼如下。
Reader arrReaders[2]={Reader("陳小藝","150302","計(jì)算機(jī)",10),Reader("吳海","150204","人文社科",5)};
②設(shè)計(jì)一個(gè)系統(tǒng)主菜單,要求有如圖2所示的選項(xiàng)。
圖2 任務(wù)2的系統(tǒng)主菜單
(3)借書(shū)和還書(shū)時(shí),首先要輸入該讀者的借書(shū)證號(hào)登錄系統(tǒng)。設(shè)計(jì)子菜單如圖3所示。
【問(wèn)題反饋】學(xué)生經(jīng)過(guò)編程運(yùn)行之后,發(fā)現(xiàn)了如下問(wèn)題:
①初始化Reader對(duì)象數(shù)組后,每個(gè)對(duì)象所包含的arrBooks指針是錯(cuò)誤指針。
圖3 登錄系統(tǒng)后的菜單
②借還書(shū)成功后圖書(shū)庫(kù)存數(shù)量未發(fā)生變化。
根據(jù)所反饋的問(wèn)題,教師進(jìn)行重點(diǎn)知識(shí)點(diǎn)講解,問(wèn)題①講解拷貝構(gòu)造函數(shù)的知識(shí)點(diǎn),問(wèn)題②講解函數(shù)的參數(shù)為對(duì)象引用的知識(shí)點(diǎn),貫徹“示范-模仿-實(shí)踐”的教學(xué)方式。
(3)Library類(lèi)定義與實(shí)現(xiàn)
通過(guò)上述任務(wù)1和任務(wù)2的練習(xí),學(xué)生基本能掌握類(lèi)的定義格式,構(gòu)造函數(shù)的含義與作用,對(duì)象數(shù)組,動(dòng)態(tài)對(duì)象數(shù)組的申請(qǐng)與釋放等,此時(shí)在原基礎(chǔ)上提出新的任務(wù)要求,學(xué)生只需將已完成的項(xiàng)目略加整合和修改即可,較容易被接受。
【任務(wù)3】編寫(xiě)一個(gè)Library類(lèi),用于描述圖書(shū)館,其數(shù)據(jù)成員(私有)包含有:
①Book*arrBooks;//Book對(duì)象數(shù)組,包含所有圖書(shū)館的書(shū)
②int book_num; //目前已有書(shū)目數(shù)
③Reader*arrReaders; //Reader對(duì)象數(shù)組,包含所有讀者
④int reader_num;//目前已有讀者數(shù)
要求實(shí)現(xiàn)圖書(shū)管理函數(shù):查看所有圖書(shū),查找圖書(shū)功能;實(shí)現(xiàn)讀者功能函數(shù):登錄系統(tǒng),借書(shū),還書(shū)功能等。
【任務(wù)進(jìn)階】豐富Library類(lèi)的功能,增加管理員用例,以區(qū)分普通讀者。管理員可對(duì)圖書(shū)和讀者進(jìn)行增刪改操作。
這個(gè)進(jìn)階任務(wù)雖然看似簡(jiǎn)單,卻包含了許多知識(shí)點(diǎn),如管理員身份的表示,登錄后的菜單調(diào)用等。可以組織學(xué)生以2~3人的團(tuán)隊(duì)形式進(jìn)行討論和課后開(kāi)發(fā),再由團(tuán)隊(duì)進(jìn)行演示。從教學(xué)效果來(lái)看,不少學(xué)生能完成以上進(jìn)階任務(wù),其中有不少學(xué)生還考慮到字體顏色、背景顏色等效果,鍛煉了學(xué)生的創(chuàng)新能力。
經(jīng)過(guò)以上任務(wù)分解,學(xué)生基本可以清楚整個(gè)圖書(shū)館借閱管理系統(tǒng)流程和架構(gòu),熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)思想,并在每一個(gè)任務(wù)中得到了鍛煉。在任務(wù)驅(qū)動(dòng)的過(guò)程中,教師應(yīng)發(fā)揮指導(dǎo)作用,引導(dǎo)學(xué)生將所接觸到的知識(shí)自我消化,融合新舊知識(shí),探索知識(shí)創(chuàng)新應(yīng)用,從而超過(guò)課本的局限,應(yīng)用到解決實(shí)際問(wèn)題上。
以任務(wù)驅(qū)動(dòng)的教學(xué)案例,通過(guò)課堂討論、團(tuán)隊(duì)協(xié)作、模仿并創(chuàng)新等方式,讓學(xué)生在實(shí)踐中消化和理解知識(shí)難點(diǎn)。連續(xù)的幾屆教學(xué)實(shí)踐證明,采用“以任務(wù)驅(qū)動(dòng)的案例式教學(xué)模式”,有利于培養(yǎng)學(xué)生分析問(wèn)題、解決問(wèn)題的能力,進(jìn)一步提高學(xué)生的協(xié)作能力和創(chuàng)新能力。
[1]張松敏,王國(guó)強(qiáng).案例—任務(wù)驅(qū)動(dòng)模式的計(jì)算機(jī)程序語(yǔ)言教學(xué)探究[J].計(jì)算機(jī)教育,2010(2).
[2]楊瑞龍,朱征宇,朱慶生.引入軟件設(shè)計(jì)模式的面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)方法[J].計(jì)算機(jī)教育,2012(10).
Design of Task-Driven Teaching Cases in OOP Course
WENG Pei-chun1,MA Hui1,ZHANG Yuan-hai2
(1.University of Electronic Science and Technology of China,Zhongshan Institute,Zhongshan 528400;2.Zhongshan Torch Polytechnic,Zhongshan 528400)
OOP course is a very practical course.Teaching cases will directly affect its teaching effect.Analyzes and summarizes the currently problems existing in the teaching cases,proposed task-driven teaching cases.Gives an example to show how to put OOP knowledge points into a teaching case from the case topics,content and decomposition.
Task-Driven;Teaching Case Design;OOP
電子科技大學(xué)中山學(xué)院教學(xué)團(tuán)隊(duì)項(xiàng)目(No.JXTD201502)、“十二五”規(guī)劃2013年青年課題子課題項(xiàng)目(No.W_QNZ201401)
1007-1423(2016)21-0050-05
10.3969/j.issn.1007-1423.2016.21.011
翁佩純(1982-),女,廣東潮安人,碩士,講師,研究方向?yàn)榫W(wǎng)絡(luò)計(jì)算、移動(dòng)應(yīng)用開(kāi)發(fā)
馬慧(1981-),女,廣東中山人,博士,副教授,研究方向?yàn)閿?shù)據(jù)庫(kù)理論、圖數(shù)據(jù)查詢
張遠(yuǎn)海(1978-),男,黑龍江牡丹江人,本科,工程師,研究方向?yàn)橥ㄐ偶夹g(shù)
2016-05-17
2016-07-20