亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2020-01-03 08:59:30李濤任廷艷羅剛黎路
        現(xiàn)代計(jì)算機(jī) 2019年33期
        關(guān)鍵詞:子類排序多態(tài)性

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

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

        0 引言

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

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

        1 教學(xué)方案設(shè)計(jì)

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

        2 模板方法模式在教學(xué)中的案例運(yùn)用

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

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

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

        #include

        #include

        using namespace std;

        class AbstractSort

        {

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

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

        private:

        int array[6];

        };

        int main()

        {

        AbstractSort arraysort;

        arraysort.inputData();

        arraysort.SelectSort();

        arraysort.print();

        return 0;

        }

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

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

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

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

        (4)實(shí)現(xiàn):設(shè)計(jì)一個(gè)描述數(shù)組排序的抽象類AbstractSort,定義成員函數(shù)inputData用于輸入數(shù)據(jù),因存在不同排序算法,把成員函數(shù)Sort設(shè)置為純虛函數(shù),具體由子類來(lái)實(shí)現(xiàn)使用哪種排算法進(jìn)行排序。定義print成員函數(shù)作為模板方法,作為整個(gè)步驟序列總控制,依次調(diào)用inputData和Sort等成員函數(shù)。定義兩個(gè)子類,BubbleSort和SelectSort,分別繼承抽象類AbstractSort,并對(duì)sort函數(shù)進(jìn)行定義實(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){//作為模板方法控制整個(gè)流程步驟順序

        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ù)的實(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;

        }

        }

        }

        }

        };

        測(cè)試程序如下:

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

        3 結(jié)語(yǔ)

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

        猜你喜歡
        子類排序多態(tài)性
        單核苷酸多態(tài)性與中醫(yī)證候相關(guān)性研究進(jìn)展
        排序不等式
        卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計(jì)
        恐怖排序
        節(jié)日排序
        刻舟求劍
        兒童繪本(2018年5期)2018-04-12 16:45:32
        關(guān)于對(duì)稱共軛點(diǎn)的倒星象函數(shù)某些子類的系數(shù)估計(jì)
        馬鈴薯cpDNA/mtDNA多態(tài)性的多重PCR檢測(cè)
        GlobalFiler~? PCR擴(kuò)增試劑盒驗(yàn)證及其STR遺傳多態(tài)性
        CYP3A4*1G基因多態(tài)性及功能的初步探討
        国产一区二区一级黄色片| 人妻精品无码一区二区三区| AV有码在线免费看| 一区二区av日韩免费| 国产三级不卡视频在线观看| 久久精品国产清自在天天线| 精品久久久久久中文字幕| 成年男人裸j照无遮挡无码| av网址在线一区二区| 亚洲女同一区二区久久| 亚洲日本高清一区二区| 精品伊人久久大线蕉色首页| www插插插无码免费视频网站| 亚洲欧美日韩精品高清| 91久久精品一区二区三区大全| 亚洲国产精品久久久久秋霞小说| 人人色在线视频播放| 国内精品一区二区三区| 国产自产21区激情综合一区| 亚洲av成熟国产一区二区| 亚洲精品久久国产精品| 久久综合狠狠综合久久| 亚洲av色福利天堂| 久草精品手机视频在线观看| 亚洲精品久久区二区三区蜜桃臀| 少妇仑乱a毛片| 中文字幕不卡在线播放| 国产一区二区在三区在线观看| 伊人久久综合无码成人网| 久久伊人色av天堂九九| 国产欧美日本亚洲精品一4区| 女同av一区二区三区| 国产欧美一区二区三区在线看| 国产激情视频白浆免费| 国产一区二区高清不卡在线| 精品亚洲麻豆1区2区3区| 久久国产热这里只有精品| 人妻无码一区二区| 国产精品污一区二区三区在线观看| 亚洲精品人成中文毛片| 精产国品一二三产区m553麻豆|