999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

模板方法模式在C++多態(tài)性教學中的運用

2020-01-03 08:59:30李濤任廷艷羅剛黎路
現(xiàn)代計算機 2019年33期
關(guān)鍵詞:排序教學學生

李濤,任廷艷,羅剛,黎路

(黔南民族師范學院,都勻 558000)

0 引言

多態(tài)性是面向?qū)ο缶幊陶Z言的基本特征之一,它是指一個類的成員函數(shù)在程序運行時具有多種形態(tài)[1]。在C++語言中,通常使用虛函數(shù)形式來實現(xiàn)的[2],其核心理念通過基類指針或者引用來指向子類對象,并調(diào)用由子類重寫的個性化的虛函數(shù)[3]。但從實際教學效果來看,由于面向?qū)ο缶幊趟枷氤橄蠡瑢τ诔鯇W者來說很難理解這些抽象的概念以及虛函數(shù)運行時調(diào)用機制[4],導致學生無法對面向?qū)ο蟮亩鄳B(tài)性特征深入理解。

針對問題,從面向?qū)ο蟮某绦蛟O(shè)計思想出發(fā),嘗試將設(shè)計模式的一些思想引入到課程教學中。讓學生通過案例學習,加深學生理解虛函數(shù)實現(xiàn)運行多態(tài)性的基本原理[5]。教學實踐表明,在教學過程中運用設(shè)計模式相關(guān)內(nèi)容可加深學生對面向?qū)ο缶幊趟枷氲睦斫猓蕴岣咚麄兘鉀Q問題的實踐能力。

1 教學方案設(shè)計

在教學過程中,我們提出了一種啟發(fā)式的教學方法,針對教學內(nèi)容選擇設(shè)計模式中部分思想進行輔助教學,將原先注重講解語法的教學模式,轉(zhuǎn)化為引入精心設(shè)計教學案例,通過案例逐步引導學生完成相關(guān)的類和功能設(shè)計。在完成設(shè)計的基礎(chǔ)上,引導學生對其設(shè)計代碼進行分析、比較和優(yōu)化。在此過程中,通過教師分析與講解,學生回答問題及討論,讓學生加深對繼承、多態(tài)、虛函數(shù)等概念的理解,最后,引導學生完成相應(yīng)的編碼,并讓其做相應(yīng)總結(jié)。這樣大大提高了學生舉一反三的能力,對于編程的能力也有很大提升[6]。

2 模板方法模式在教學中的案例運用

以面向?qū)ο笾卸鄳B(tài)性教學為例,通過引入設(shè)計模式中的模板方法模式讓學生了解抽象類和純虛函數(shù)的概念及用途。

(1)引入案例:教學過程中引入主題場景:從鍵盤輸入一個整型數(shù)組,對數(shù)組中的數(shù)由小到大進行排序,然后把排序之后的結(jié)果打印顯示出來。任務(wù)整個流程由輸入數(shù)據(jù)、排序和打印數(shù)據(jù)三個具體步驟組成,輸入數(shù)據(jù)和打印數(shù)據(jù)兩個步驟是整個流程中不變的,而對數(shù)據(jù)進行排序這一步驟,因可以選擇不同排序算法,存在可變性造成實現(xiàn)細節(jié)不同。

(2)提出問題:遵循面向?qū)ο笏枷胪瓿上嚓P(guān)類定義及功能實現(xiàn)?在討論中,學生會指出定義一個類,將輸入數(shù)據(jù)和打印數(shù)據(jù)以成員函數(shù)的形式實現(xiàn),同時定義兩個用于排序成員函數(shù)(簡單選擇排序和冒泡排序)。然后通過定義類的對象按步驟順序依次調(diào)用輸入、排序及打印相應(yīng)的成員函數(shù)來實現(xiàn)整個程序。學生設(shè)計部分程序示例代碼如下。

#include

#include

using namespace std;

class AbstractSort

{

public:void inputData();//輸入數(shù)據(jù)void print();//打印數(shù)據(jù)

void SelectSort();//簡單選擇排序void BubbleSort();//冒泡排序

private:

int array[6];

};

int main()

{

AbstractSort arraysort;

arraysort.inputData();

arraysort.SelectSort();

arraysort.print();

return 0;

}

這段程序代碼初步實現(xiàn)整個流程,但是基于面向?qū)ο蟮模荒荏w現(xiàn)面向?qū)ο蟮亩鄳B(tài)性。多態(tài)使程序調(diào)用的函數(shù)在運行時動態(tài)確定,而不是在編譯時靜態(tài)地確定[7]。某個任務(wù)要實現(xiàn)的算法需要多個步驟,但其中有一些步驟是固定不變的,而另一些步驟則是不固定的,而設(shè)計模式中模板方法模式就是應(yīng)用于在這種場景下。首先在抽象類中確定整個流程的步驟順序,其次實現(xiàn)固定不變的步驟,最后把變化或不固定的步驟留給子類來實現(xiàn)。

(3)模式引入:模板方法模式使得子類可以不改變算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟[8],是由一個抽象類和一組子類通過繼承結(jié)構(gòu)組成。在抽象類中的定義一個模板方法,它是把基本操作方法組合在一起形成一個總算法或一個總行為的方法,并由子類不加以修改地完全繼承下來[9],通常定義為成員函數(shù)。將算法中不變步驟以類成員函數(shù)形式實現(xiàn),算法中的變化步驟或一些不確定的細節(jié)以純虛函數(shù)的形式在子類中實現(xiàn)。純虛函數(shù)是實現(xiàn)一個接口來規(guī)范派生類的行為,也就是說,規(guī)范繼承抽象類必須實現(xiàn)該函數(shù)。

設(shè)計類圖如圖1。

圖1 模板方法模式下的類圖

(4)實現(xiàn):設(shè)計一個描述數(shù)組排序的抽象類AbstractSort,定義成員函數(shù)inputData用于輸入數(shù)據(jù),因存在不同排序算法,把成員函數(shù)Sort設(shè)置為純虛函數(shù),具體由子類來實現(xiàn)使用哪種排算法進行排序。定義print成員函數(shù)作為模板方法,作為整個步驟序列總控制,依次調(diào)用inputData和Sort等成員函數(shù)。定義兩個子類,BubbleSort和SelectSort,分別繼承抽象類AbstractSort,并對sort函數(shù)進行定義實現(xiàn)不同排序算法。下面給出抽象類AbstractSort和BubbleSort子類代碼如下:

class AbstractSort{

public:

virtual void sort(int array[],int n)=0;//設(shè)置sort()作為純虛函數(shù)

void inputData(int array[],int n){

int i;

for(i=0;i

cout<<"array["<

cin>>array[i];

cout<

}

}

void print(int array[],int n){//作為模板方法控制整個流程步驟順序

cout<<"輸入數(shù)據(jù)"<

inputData(array,n);

sort(array,n);

cout<<"排序結(jié)果: ";

for(int i=0;i

cout<

}

};

class BubbleSort:public AbstractSort{

public:

void sort(int array[],int n){//純虛函數(shù)的實現(xiàn)由派生類給出

int i,j,temp;

for(i=0;i

for(j=0;j

if(array[j]>array[j+1]){

temp=array[j];

array[j]=array[j+1];

array[j+1]=temp;

}

}

}

}

};

測試程序如下:

int main(){

int a[5];

AbstractSort*p;

SelectSort cs;

p=&cs;

p->print(a,5);

int b[8];

BubbleSort bs;

p=&bs;

p->print(b,8);

return 0;

}

(5)總結(jié):抽象類是一種特殊的類,是為了抽象和設(shè)計的目的建立的,主要功能是將相關(guān)操作組織為繼承層次結(jié)構(gòu)中的結(jié)果接口,繼承層次結(jié)構(gòu)為派生類提供公共根。派生類將在其基類中具體實現(xiàn)作為接口的操作。純虛函數(shù)是在抽象類中聲明的一個虛函數(shù),它要求任何派生類定義自己的實現(xiàn)方法以實現(xiàn)多態(tài)性。模板方法模式主要應(yīng)用于多個子類中有共有的代碼,并且邏輯基本相同[10];對一些復雜的算法進行了分割,將算法的固定部分設(shè)計為模板方法和父類的成員函數(shù),而一些可變的細節(jié)則由其子類實現(xiàn)。

3 結(jié)語

在C++課程教學中引入部分設(shè)計模式的思想進行授課,不僅是對傳統(tǒng)C++課程的革新,更是提高學生實踐能力的有效手段。在實踐中發(fā)現(xiàn),設(shè)計模式對于塑造學生的編程思維,培養(yǎng)學生的編程習慣,提升學生的編程水平具有重要作用。

猜你喜歡
排序教學學生
排序不等式
微課讓高中數(shù)學教學更高效
甘肅教育(2020年14期)2020-09-11 07:57:50
恐怖排序
節(jié)日排序
趕不走的學生
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
“自我診斷表”在高中數(shù)學教學中的應(yīng)用
東方教育(2017年19期)2017-12-05 15:14:48
對外漢語教學中“想”和“要”的比較
唐山文學(2016年2期)2017-01-15 14:03:59
學生寫話
學生寫的話
主站蜘蛛池模板: 制服丝袜一区| 无码精品国产VA在线观看DVD| 久操线在视频在线观看| 青青草国产在线视频| 国产精品一区二区国产主播| 免费观看亚洲人成网站| 国产视频欧美| 国产微拍精品| 97视频免费在线观看| 高潮爽到爆的喷水女主播视频| 天天爽免费视频| 色成人亚洲| 美女无遮挡免费视频网站| 正在播放久久| 欧美午夜一区| 国产免费怡红院视频| 国产麻豆福利av在线播放| 在线中文字幕日韩| 久久无码高潮喷水| 国模沟沟一区二区三区| 日韩欧美中文| 久久久久久久久18禁秘 | 國產尤物AV尤物在線觀看| 狠狠色综合久久狠狠色综合| 在线观看精品国产入口| 国产欧美日韩18| 专干老肥熟女视频网站| 国产自在自线午夜精品视频| 找国产毛片看| 欧美成人手机在线观看网址| 色综合中文综合网| 国产精品网曝门免费视频| 999福利激情视频| 亚洲三级片在线看| 一级一级一片免费| 亚洲无码高清视频在线观看 | 色综合久久久久8天国| 性网站在线观看| 日韩无码视频网站| jizz国产视频| 国内精品视频区在线2021| 成人免费黄色小视频| 国产噜噜在线视频观看| 国产一区免费在线观看| 国产精品永久在线| 国产香蕉97碰碰视频VA碰碰看| 亚洲欧美一级一级a| 亚洲国产精品无码久久一线| 中文字幕在线欧美| 91精品久久久无码中文字幕vr| 91在线无码精品秘九色APP| 91破解版在线亚洲| 国产一区二区色淫影院| 国产成人1024精品下载| 一级毛片免费高清视频| 国产91特黄特色A级毛片| 日韩a在线观看免费观看| 91精选国产大片| 亚洲精品成人7777在线观看| 天堂在线视频精品| 午夜精品影院| 老司机精品一区在线视频| 国产一区二区三区免费| 色综合久久久久8天国| 中国国产一级毛片| 久久一级电影| 在线精品亚洲一区二区古装| 久久国产成人精品国产成人亚洲 | 久久久久无码国产精品不卡| 久久精品国产免费观看频道| 国产美女免费| 毛片大全免费观看| 亚洲国产成人久久77| AV无码一区二区三区四区| 免费一级毛片| 亚洲精品在线观看91| 日韩精品一区二区三区大桥未久| 亚洲va欧美ⅴa国产va影院| a级免费视频| 精品偷拍一区二区| 国产va视频| 72种姿势欧美久久久久大黄蕉|