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
學生寫話
學生寫的話
主站蜘蛛池模板: 九色国产在线| 无码国产伊人| 色婷婷成人网| 久久精品国产亚洲AV忘忧草18| 久久夜色精品国产嚕嚕亚洲av| 小说 亚洲 无码 精品| a级毛片在线免费观看| 看国产一级毛片| 欧美三级视频网站| 国国产a国产片免费麻豆| 天天色天天综合网| 亚洲精品不卡午夜精品| 中文国产成人精品久久一| 国产无码精品在线播放| 尤物成AV人片在线观看| 99视频在线精品免费观看6| 国产无码网站在线观看| 国内丰满少妇猛烈精品播| 一级高清毛片免费a级高清毛片| 女人18毛片一级毛片在线 | 狠狠色香婷婷久久亚洲精品| 国产理论最新国产精品视频| 全部无卡免费的毛片在线看| 538国产在线| 免费人成又黄又爽的视频网站| 无码免费的亚洲视频| 亚洲精品亚洲人成在线| 国产精品偷伦视频免费观看国产 | 国产精品吹潮在线观看中文| 91福利一区二区三区| 中文字幕无码av专区久久| 久久久久88色偷偷| 99ri精品视频在线观看播放| 精品国产免费观看| 国产精品无码制服丝袜| 亚洲最大在线观看| 性视频久久| 亚洲成人动漫在线| 日韩精品亚洲一区中文字幕| 蝌蚪国产精品视频第一页| 国产白浆一区二区三区视频在线| 亚洲天堂区| 制服丝袜亚洲| 99在线观看视频免费| 亚洲综合在线最大成人| 91久久偷偷做嫩草影院| 九九九九热精品视频| 欧美亚洲综合免费精品高清在线观看 | 国产亚洲日韩av在线| 国产精品尤物铁牛tv | 原味小视频在线www国产| 国产午夜福利亚洲第一| 成人福利在线观看| 97久久免费视频| 日韩欧美国产区| 国产在线精彩视频二区| 国产成人91精品| 在线网站18禁| 韩国v欧美v亚洲v日本v| 亚洲综合专区| 久久婷婷综合色一区二区| 久久这里只有精品8| 国产区91| 伦伦影院精品一区| 日本道综合一本久久久88| www.av男人.com| 欧美激情,国产精品| 99视频只有精品| 成人国产一区二区三区| аⅴ资源中文在线天堂| 欧美人与牲动交a欧美精品| 麻豆a级片| 国产高清色视频免费看的网址| 欧美日韩va| 欧美一级视频免费| 欧美一级高清片欧美国产欧美| 精品国产Av电影无码久久久| 国内毛片视频| 日本亚洲国产一区二区三区| 婷婷亚洲视频| 成人免费午间影院在线观看| 三级欧美在线|