• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      以“軟件設(shè)計模式”促進(jìn)“面向?qū)ο蟪绦蛟O(shè)計”課程教學(xué)方法研究

      2019-10-08 11:55:52尹梓名周雷鄭建立
      軟件 2019年8期
      關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計教學(xué)方法

      尹梓名 周雷 鄭建立

      摘 ?要: “面向?qū)ο蟪绦蛟O(shè)計”是高校計算機(jī)類專業(yè)的核心課程,其中有關(guān)面向?qū)ο蟮睦^承、多態(tài)、反射等概念一直是授課講解時的難題,缺乏能將這些概念應(yīng)用并向?qū)W生解釋清楚的案例。本文基于“知識降維”思想,將軟件設(shè)計模式這門課中的部分通俗易懂的內(nèi)容經(jīng)過簡化后引入“面向?qū)ο蟪绦蛟O(shè)計”的課程中,解決了講解面向?qū)ο蟾拍钊狈Π咐?,學(xué)生不易理解部分抽象概念等問題,同時加深了學(xué)生對于這些概念的理解,取得了較好的課堂效果。

      關(guān)鍵詞: 面向?qū)ο蟪绦蛟O(shè)計;軟件設(shè)計模式;教學(xué)方法

      中圖分類號: TP311 ? ?文獻(xiàn)標(biāo)識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.08.049

      本文著錄格式:尹梓名,周雷,鄭建立. 以“軟件設(shè)計模式”促進(jìn)“面向?qū)ο蟪绦蛟O(shè)計”課程教學(xué)方法研究[J]. 軟件,2019,40(8):216219+228

      【Abstract】: “Object-oriented programming” is the core course of computer specialty in colleges and universities. Concepts such as inheritance, polymorphism and reflection of object-oriented are always difficult problems in teaching. There are few cases that can apply these concepts and explain them clearly to students. Based on the idea of “knowledge dimensionality reduction”, this paper simplifies some easy-to-understand contents in the course of software design pattern and introduces them into the course of “object-oriented programming”. It solves the problems of lack of cases in explaining object-oriented concepts and difficulty for students to understand some abstract concepts. At the same time, it deepens students' understanding of these concepts and achieves better effects.

      【Key words】: Object-oriented programming; Software design patterns; Teaching method

      0 ?引言

      “面向?qū)ο蟮某绦蛟O(shè)計”一直是高校計算機(jī)相關(guān)專業(yè)的專業(yè)基礎(chǔ)課[1],是學(xué)生學(xué)習(xí)其他多門計算機(jī)課程的基礎(chǔ),所以是計算機(jī)教學(xué)課程的重中之重[2]。但是在面向?qū)ο蟮慕虒W(xué)過程中,如何讓學(xué)生從“面向過程”的編程思維轉(zhuǎn)變?yōu)椤懊嫦驅(qū)ο蟆钡木幊趟季S,并快速地樹立“面向?qū)ο蟆钡木幊趟枷胍恢笔沁@門課程的教學(xué)難點(diǎn)。筆者在高校中同時兼任“面向?qū)ο蟪绦蛟O(shè)計”和“軟件設(shè)計模式”這兩門課的教學(xué)工作,在教學(xué)過程中發(fā)現(xiàn),如果把二者的授課內(nèi)容穿插結(jié)合起來,既有助于學(xué)生對于“面向?qū)ο蟆本幊趟枷氲睦斫?,也有助于學(xué)生對于面向?qū)ο蟪绦蛟O(shè)計這門課中部分核心概念的理解[3]。但是,一般認(rèn)為“軟件設(shè)計模式”是“面向?qū)ο蟪绦蛟O(shè)計”的后續(xù)課程,是面向?qū)ο笏枷氲母呒墤?yīng)用[4]。如果不經(jīng)修改直接把“軟件設(shè)計模式”課程中的部分例子挪到“面向?qū)ο蟪绦蛟O(shè)計”的課堂,反而不利于學(xué)生理解,加深學(xué)生的困惑,不會起到非常好的教學(xué)效果。所以本文基于一種“知識降維”思想,即將“軟件設(shè)計模式”中的知識充分簡化后,結(jié)合實(shí)際例子[5],再放到“面向?qū)ο蟪绦蛟O(shè)計”的課堂進(jìn)行講解,會使學(xué)生從中受益。

      1 ?課程定位及教學(xué)目標(biāo)

      1.1 ?面向?qū)ο蟪绦蛟O(shè)計

      “面向?qū)ο蟪绦蛟O(shè)計”是計算機(jī)相關(guān)專業(yè)本科生的一門專業(yè)基礎(chǔ)課。該課程主要講授面向?qū)ο蟪绦蛟O(shè)計的思想和方法,使學(xué)生深刻理解和領(lǐng)會面向?qū)ο蟪绦蛟O(shè)計語言的基本概念、基本語法以及面向?qū)ο蟪绦蛟O(shè)計的精髓:抽象、封裝、繼承、多態(tài)及模板等,使學(xué)生養(yǎng)成面向?qū)ο蟮木幊趟季S習(xí)慣。在此基礎(chǔ)上,通過大量的程序?qū)嵗?,使學(xué)生熟練運(yùn)用面向?qū)ο蟪绦蛟O(shè)計的方法分析和求解實(shí)際設(shè)計問題,使學(xué)生充分掌握面向?qū)ο蟪绦蛟O(shè)計的精髓。該課的前修課程是C語言或者有其他程序設(shè)計語言 基礎(chǔ)[6]。

      1.2 ?軟件設(shè)計模式

      “軟件設(shè)計模式”是計算機(jī)相關(guān)專業(yè)本科生的一門專業(yè)選修課。該課程是一門具有較強(qiáng)理論性和實(shí)踐性的軟件設(shè)計和開發(fā)類課程。主要學(xué)習(xí)軟件設(shè)計模式基礎(chǔ)知識、UML類圖、面向?qū)ο笤O(shè)計原則、常用的創(chuàng)建型設(shè)計模式、結(jié)構(gòu)型設(shè)計模式和行為型設(shè)計模式。本課程要求學(xué)生掌握常用軟件設(shè)計模式的動機(jī)、定義、結(jié)構(gòu)、實(shí)現(xiàn)、使用效果以及應(yīng)用實(shí)例,能夠?qū)⑺鶎W(xué)知識應(yīng)用到實(shí)際軟件項(xiàng)目設(shè)計與開發(fā)中,進(jìn)一步培養(yǎng)學(xué)生的工程實(shí)踐能力和專業(yè)技術(shù)水平,為今后從事相關(guān)工作奠定基礎(chǔ)[7]。

      本課程面向的學(xué)生是前期已經(jīng)學(xué)習(xí)過“面向?qū)ο蟪绦蛟O(shè)計”,并具有一定的項(xiàng)目開發(fā)經(jīng)驗(yàn),但對面向?qū)ο蟮木幊趟枷胝J(rèn)識較膚淺,對設(shè)計模式還沒有概念。通過本門課的學(xué)習(xí),使學(xué)生對軟件架構(gòu)方法和面向?qū)ο笥幸粋€深入的了解,通過程序的不斷重構(gòu)和演變,把設(shè)計模式的學(xué)習(xí)門檻降低,使學(xué)生初步掌握程序的設(shè)計模式[8]。

      2 ?面向?qū)ο蠛驮O(shè)計模式課程之間的關(guān)系

      經(jīng)過多年的教學(xué)實(shí)踐,筆者深刻地體會到“面向?qū)ο蟪绦蛟O(shè)計”和“軟件設(shè)計模式”是兩門關(guān)系極為密切的課程,就好比是武俠小說中“九陰真經(jīng)”的上卷和下卷,必須同時修煉才能達(dá)到良好的效果?!懊嫦?qū)ο蟪绦蛟O(shè)計”這門課是“軟件設(shè)計模式”的基礎(chǔ),而“軟件設(shè)計模式”是“面向?qū)ο蟪绦蛟O(shè)計”的升華。一般學(xué)校的計算機(jī)專業(yè)在設(shè)置課程的時候都會把這兩門課設(shè)為不同的課程,建議學(xué)生選課時兩門課都選,如果只選擇其中一門課則不會達(dá)到良好的學(xué)習(xí)效果。如果只學(xué)習(xí)面向?qū)ο蠖鴽]有學(xué)習(xí)設(shè)計模式,則無法深刻理解面向?qū)ο筮@種編程方法的好處,最突出的問題就是不理解抽象類和接口這些多態(tài)技術(shù)的意義,學(xué)生在學(xué)習(xí)中最突出的疑問就是“既然已經(jīng)有了普通類,為什么一定要使用抽象類?”一旦解決這個疑惑,將極大有助于他們對于面向?qū)ο笏枷氲睦斫?。而這個問題的最好的答案就在設(shè)計模式中。非常多的設(shè)計模式都能體現(xiàn)出使用抽象類編程的好處。反過來,如果只學(xué)習(xí)設(shè)計模式而沒有學(xué)習(xí)面向?qū)ο?,由于缺乏面向?qū)ο蟮木幊袒A(chǔ)和思維訓(xùn)練,很難去深刻理解利用設(shè)計模式編程的妙處,需要付出極大的努力才能完全掌握。兩門課的關(guān)系可以歸納為“面向?qū)ο?,入門根基;設(shè)計模式,登峰造極”。

      3 ?以“軟件設(shè)計模式”促進(jìn)“面向?qū)ο蟪绦蛟O(shè)計”課程教學(xué)案例

      本文為了說明如何以“軟件設(shè)計模式”促進(jìn)面向?qū)ο蟮恼n程教學(xué),選取了三個案例。這三個案例分別對應(yīng)“面向?qū)ο蟪绦蛟O(shè)計”教學(xué)中比較難以講解的三個問題:一是繼承,二是反射,三是多態(tài)。

      3.1 ?案例1——設(shè)計模式促進(jìn)學(xué)生對于繼承的理解

      繼承是面向?qū)ο蟪绦蛟O(shè)計中的基本概念,與封裝和多態(tài)合稱面向?qū)ο蟮娜蠡咎卣?。一個類從另一個類派生出來時,稱之為派生類或子類,被派生的類稱為基類或父類。派生類從基類那里繼承特性,從一個基類派生出來的多層類形成了類的層次結(jié)構(gòu)。繼承的優(yōu)點(diǎn):1、提高代碼的復(fù)用性;2、提高代碼的可擴(kuò)展性。

      如何向?qū)W生講解“繼承”這個概念,是“面向?qū)ο蟪绦蛟O(shè)計”這門課要解決的重要問題之一。對于初次接觸面向?qū)ο蟮膶W(xué)生來說,這是比較難以理解的概念。根據(jù)面向?qū)ο筮@門課的課程安排,“繼承”一般是在“類和對象”這兩個概念之后講解,而學(xué)生在初步接受了“類”這個概念后,會本能地認(rèn)為“需要用到哪個功能就將這個功能設(shè)計成一個或幾個類”,不理解繼承的功用。究其原因,這是因?yàn)閷W(xué)生接觸到的軟件設(shè)計題目都比較初級,還未接觸到復(fù)雜的需要用到繼承的題目。因此,從“知識降維”的角度,需要在課堂上講解一個實(shí)例,對比使用繼承和不使用繼承二者的區(qū)別,就可以說明使用繼承的妙處。

      在設(shè)計模式中,幾乎每一種模式都會用到類和類之間的繼承,考慮到學(xué)生剛接觸類和對象這些概念,對于面向?qū)ο蟮脑O(shè)計方式還處于較為粗淺的階段,所以選擇較為簡單的一種模式——簡單工廠模式來進(jìn)行講解比較合適。經(jīng)簡化后的講解案例如下:

      “某公司要編寫圖像編輯器軟件,可以解析并顯示各種格式類型的圖像,包括BMP,JPEG,PNG等,該公司設(shè)計人員希望設(shè)計一個靈活易用的圖像編輯器,通過設(shè)置不同的參數(shù)即可顯示不同格式的圖像,而且可以較為方便地對圖像編輯器進(jìn)行擴(kuò)展,以便能夠在將來增加一些新類型的圖像。”

      本題目對于初學(xué)的學(xué)生來說,如果不使用繼承,而是用到什么功能就設(shè)計什么類,會設(shè)計成如圖1所示。

      從圖中可以看出,客戶端(Client)要與三種圖像格式類打交道,每個類中都維護(hù)了描述圖像基本

      信息的字段,如圖像的高(Height),圖像的寬(Width),圖像的分辨率(Resolution)等。本文只是舉例,如果在實(shí)際工程項(xiàng)目中,需要處理的圖像基本信息會更多。這部分字段在各個類中無疑是冗余的。如果某部分代碼有問題,就需要在所有的圖像類中都進(jìn)行修改,這會增加代碼修改不徹底的風(fēng)險。利用簡單工廠模式,可以將該案例題目設(shè)計成如下形式:

      如圖2所示,Image是簡單工廠模式的抽象產(chǎn)品類,ImageFactory是簡單工廠模式的工廠類,BMP,JPEG,PNG是簡單工廠模式的具體產(chǎn)品類,是Image這個抽象類的子類,分別對應(yīng)三種圖像格式。如果要求圖像編輯器再增加解析GIF格式的圖像,只需要將GIF類繼承抽象的Image類,由于在Image類中已經(jīng)有圖像的基本信息字段,這些字段同樣可以用在GIF圖像的解析過程中,所以不必再在GIF類中定義,簡化了代碼。

      從這個例子中可以看出,將跟圖像相關(guān)的各種圖像格式共有的類成員放到抽象類中,在子類中不需要將同樣的代碼書寫多次;同時將對于不同格式圖像的解碼方法Decode設(shè)置成抽象方法,在不同的子類中予以不同的實(shí)現(xiàn),這體現(xiàn)了類之間繼承的好處——代碼復(fù)用與便于擴(kuò)展。

      3.2 ?案例2——設(shè)計模式促進(jìn)學(xué)生對于反射的理解

      反射是面向?qū)ο蟪绦蛟O(shè)計這門課比較難以理解的概念,通過反射可以在運(yùn)行時獲得每一個類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、時間和構(gòu)造函數(shù)等,還可與獲得每個成員的名稱、限定符和參數(shù)等。有個反射,編程人員即可對每一個類型了如指掌。如果獲得了構(gòu)造函數(shù)的信息,可以直接創(chuàng)建對象,即使這個對象的類型在編譯時還不知道。

      學(xué)生在學(xué)習(xí)反射時總是摸不清這個技術(shù)的優(yōu)勢,因?yàn)檫@部分知識相對獨(dú)立,與前面的類和對象的知識是一種逆向關(guān)系。如果單從面向?qū)ο筮@門課很難舉出一個例子來說明。如果結(jié)合設(shè)計模式這門課中的內(nèi)容,就非常容易說明這個知識點(diǎn)的優(yōu)勢了。

      在多種設(shè)計模式中,如果不用反射技術(shù),就難以完全符合開閉原則,比如工廠方法模式,抽象工廠模式,適配器模式等。本文以工廠方法模式為例,說明在程序中使用反射的必要性。

      圖3為工廠方法模式的UML圖。按照設(shè)計,客戶端只需要和同為接口的抽象工廠類和抽象產(chǎn)品類打交道就可以。但是在實(shí)際運(yùn)用中,如果不使用反射機(jī)制,客戶端無法避免和具體工廠類打交道,這就造成當(dāng)需要再增加一種產(chǎn)品時,就需要修改客戶端的代碼,這并不符合面向?qū)ο笤O(shè)計原則中的開閉原則(對擴(kuò)展開放,對修改關(guān)閉)。運(yùn)用設(shè)計模式的初衷就是讓上層客戶端只跟抽象層打交道而不和具體實(shí)現(xiàn)類打交道,這樣才能使程序具備良好的擴(kuò)展性。所以為了使工廠方法模式完全符合開閉原則,需要使用反射技術(shù)??蛻舳送ㄟ^配置文件讀取需要實(shí)例化的具體產(chǎn)品類名,然后通過反射技術(shù)生成這個類的對象,并將這個對象賦值給抽象工廠類的對象引用變量。以上即可實(shí)現(xiàn)工廠方法模式,又完全符合開閉原則。這個例子就可以說明反射機(jī)制的優(yōu)勢以及必要性。

      3.3 ?案例3——設(shè)計模式促進(jìn)學(xué)生對于多態(tài)的理解

      筆者曾經(jīng)在面向?qū)ο蟪绦蛟O(shè)計這門課中做過不記名投票,寫出這門課比較難以理解的知識點(diǎn),共有50人參與,每人最多寫2個,共計90個,歸納起來投票結(jié)果如下:

      從圖4的統(tǒng)計數(shù)據(jù)可以看出,投票數(shù)量最多的三個分別是抽象類和抽象方法、虛函數(shù)、接口。這三個概念都是在程序多態(tài)設(shè)計中要用到的,所以可以看出,學(xué)生對于多態(tài)的概念的理解還是不到位,多態(tài)是面向?qū)ο蟪绦蛟O(shè)計教學(xué)中的重點(diǎn),同時也是面向?qū)ο蟪绦蛟O(shè)計這門課最難理解的難點(diǎn)之一,需要教師在授課中花大力氣去進(jìn)行概念講解、總結(jié)歸納與課堂練習(xí)。

      多態(tài)是實(shí)現(xiàn)各種設(shè)計模式的核心手段之一。為了符合面向?qū)ο笤O(shè)計的開閉原則,很多種設(shè)計模式都分成相對穩(wěn)定的抽象層和具備不同實(shí)現(xiàn)的實(shí)現(xiàn)層,這就實(shí)現(xiàn)了多態(tài)。抽象類和接口是設(shè)計模式實(shí)現(xiàn)多態(tài)的兩種最常用的手段。設(shè)計模式中的關(guān)于抽象類和接口的用法和例題非常適合在面向?qū)ο蟪绦蛟O(shè)計的課堂上給學(xué)生講解,用以加深其對這兩個概念的理解。為了簡化理解,降低同學(xué)們的學(xué)習(xí)負(fù)擔(dān),基于“知識降維”的思想,還是以設(shè)計模式中的簡單工廠模式為例。如果不用抽象類,如圖1所示,如果客戶要求增加圖像編輯器可以打開的圖像類型,那么必須修改上層客戶端的代碼。而在實(shí)際中上層和下層往往是不同團(tuán)隊(duì)在負(fù)責(zé),下層稍有修改,上層就要跟著修改,然后經(jīng)過測試,發(fā)布等流程。這樣設(shè)計程序,程序維護(hù)起來非常麻煩。

      而采取圖2的簡單工廠模式,在客戶端和具體的三個圖像類BMP,JPEG,PNG之間加入一個抽象類Image,就可以使得程序的擴(kuò)展相對容易。本文仍然以再增加解析GIF格式的圖像為例,由于圖像解析所需的字段已經(jīng)定義在了抽象基類Image中,在GIF類中只需要重寫GIF格式圖像解析的Decode方法即可。增加GIF類后,雖然增加了解析GIF圖像的功能,但是對于上層客戶端來說,代碼無需任何改動。因?yàn)榭蛻舳耸轻槍Τ橄髮觼砭幊痰?,而抽象層是穩(wěn)定的。本例可以說明使用抽象類的必要性。

      4 ?總結(jié)

      面向?qū)ο蟮某绦蛟O(shè)計對于接觸計算機(jī)編程事件不太長的學(xué)生來說,很多概念有些難以理解。對于授課教師來說,缺乏能說明面向?qū)ο蟪绦蛟O(shè)計這門課中一些概念的例子。本文認(rèn)為這些例子恰恰存在于軟件設(shè)計模式這門課中。可以借助設(shè)計模式的部分例子,經(jīng)簡化后,去講解面向?qū)ο笳n程中的一些概念,將起到事半功倍的效果,加深學(xué)生的理解。未來本研究還會運(yùn)用一些教學(xué)質(zhì)量評價模型去評價本教學(xué)方法帶來的效果[9-10]。

      參考文獻(xiàn)

      [1] 陳晶. 計算機(jī)科學(xué)與技術(shù)專業(yè)核心課程考核方式改革的研究[J]. 軟件, 2018, 39(11): 33-35.

      [2] 江紅, 余青松. C#程序設(shè)計教程(第2版)[M]. 北京: 清華大學(xué)出版社, 2014.

      [3] 錢誠, 徐煜明. 面向?qū)ο蟪绦蛟O(shè)計課程案例法教學(xué)探討[J]. 電子世界, 2018(22): 100.

      [4] 戴華, 楊志和. 軟件設(shè)計模式課程的教學(xué)模式改革探討[J]. 課程教育研究, 2017(31): 247-248.

      [5] 李曉東, 魏惠茹, 董振華. 項(xiàng)目驅(qū)動教學(xué)法在計算機(jī)程序設(shè)計語言課中的探索[J]. 軟件, 2015, 36(4): 107-109.

      [6] 李建伏, 沈中林, 衡紅軍. 案例教學(xué)法在面向?qū)ο蟪绦蛟O(shè)計課程中的應(yīng)用[J]. 軟件, 2015, 36(3): 48-51.

      [7] 劉偉. C#設(shè)計模式[M]. 北京: 清華大學(xué)出版社, 2013.

      [8] 王曉麗, 徐敏, 李芳巍, 等. 比較教學(xué)法在醫(yī)學(xué)院校計算機(jī)基礎(chǔ)課程中的應(yīng)用[J]. 軟件, 2018, 39(7): 48-51.

      [9] 康蘇明, 張杰, 張景安. 基于云模型的高校課堂教學(xué)質(zhì)量評價模型及方法研究[J]. 軟件, 2015, 36(4): 50-54.

      [10] 石黎, 孫志梅. 教學(xué)質(zhì)量評價的BP神經(jīng)網(wǎng)絡(luò)模型[J]. 軟件, 2015, 36(3): 19-21.

      猜你喜歡
      面向?qū)ο蟪绦蛟O(shè)計教學(xué)方法
      初中英語寫作教學(xué)方法初探
      甘肅教育(2020年2期)2020-09-11 08:01:42
      教學(xué)方法與知識類型的適宜
      基于MOOC的編譯原理分階段課程教學(xué)研究
      CDIO理念下《面向?qū)ο蟪绦蛟O(shè)計》教學(xué)改革研究
      科技視界(2016年16期)2016-06-29 21:58:51
      獨(dú)立學(xué)院面向?qū)ο蟪绦蛟O(shè)計教學(xué)模式的探討與實(shí)踐
      考試周刊(2016年43期)2016-06-18 17:32:22
      軟件工程專業(yè)面向?qū)ο蟪绦蛟O(shè)計教學(xué)改革研究
      科技視界(2016年4期)2016-02-22 12:31:42
      “面向?qū)ο蟪绦蛟O(shè)計”工程實(shí)踐教學(xué)方法改革
      基于卓越工程師教育培養(yǎng)計劃的《面向?qū)ο蟪绦蛟O(shè)計》課程教學(xué)改革研究與實(shí)踐
      實(shí)用型中醫(yī)人才培養(yǎng)中慕課教學(xué)方法的探討
      文言文教學(xué)方法實(shí)踐初探
      永平县| 临潭县| 象州县| 博客| 大荔县| 通山县| 镇安县| 兴隆县| 南昌市| 山阳县| 渝北区| 遵义县| 胶南市| 白银市| 永嘉县| 武威市| 东明县| 唐河县| 莱芜市| 盐边县| 蓝山县| 拉孜县| 新巴尔虎右旗| 米易县| 易门县| 台前县| 宁津县| 郧西县| 宣恩县| 两当县| 手游| 永年县| 花莲市| 饶阳县| 若尔盖县| 阳东县| 西充县| 铅山县| 波密县| 广丰县| 杨浦区|