尹梓名 周雷 鄭建立
摘 ?要: “面向?qū)ο蟪绦蛟O(shè)計(jì)”是高校計(jì)算機(jī)類專業(yè)的核心課程,其中有關(guān)面向?qū)ο蟮睦^承、多態(tài)、反射等概念一直是授課講解時(shí)的難題,缺乏能將這些概念應(yīng)用并向?qū)W生解釋清楚的案例。本文基于“知識(shí)降維”思想,將軟件設(shè)計(jì)模式這門課中的部分通俗易懂的內(nèi)容經(jīng)過(guò)簡(jiǎn)化后引入“面向?qū)ο蟪绦蛟O(shè)計(jì)”的課程中,解決了講解面向?qū)ο蟾拍钊狈Π咐?,學(xué)生不易理解部分抽象概念等問(wèn)題,同時(shí)加深了學(xué)生對(duì)于這些概念的理解,取得了較好的課堂效果。
關(guān)鍵詞: 面向?qū)ο蟪绦蛟O(shè)計(jì);軟件設(shè)計(jì)模式;教學(xué)方法
中圖分類號(hào): TP311 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.08.049
本文著錄格式:尹梓名,周雷,鄭建立. 以“軟件設(shè)計(jì)模式”促進(jìn)“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程教學(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ì)”一直是高校計(jì)算機(jī)相關(guān)專業(yè)的專業(yè)基礎(chǔ)課[1],是學(xué)生學(xué)習(xí)其他多門計(jì)算機(jī)課程的基礎(chǔ),所以是計(jì)算機(jī)教學(xué)課程的重中之重[2]。但是在面向?qū)ο蟮慕虒W(xué)過(guò)程中,如何讓學(xué)生從“面向過(guò)程”的編程思維轉(zhuǎn)變?yōu)椤懊嫦驅(qū)ο蟆钡木幊趟季S,并快速地樹(shù)立“面向?qū)ο蟆钡木幊趟枷胍恢笔沁@門課程的教學(xué)難點(diǎn)。筆者在高校中同時(shí)兼任“面向?qū)ο蟪绦蛟O(shè)計(jì)”和“軟件設(shè)計(jì)模式”這兩門課的教學(xué)工作,在教學(xué)過(guò)程中發(fā)現(xiàn),如果把二者的授課內(nèi)容穿插結(jié)合起來(lái),既有助于學(xué)生對(duì)于“面向?qū)ο蟆本幊趟枷氲睦斫?,也有助于學(xué)生對(duì)于面向?qū)ο蟪绦蛟O(shè)計(jì)這門課中部分核心概念的理解[3]。但是,一般認(rèn)為“軟件設(shè)計(jì)模式”是“面向?qū)ο蟪绦蛟O(shè)計(jì)”的后續(xù)課程,是面向?qū)ο笏枷氲母呒?jí)應(yīng)用[4]。如果不經(jīng)修改直接把“軟件設(shè)計(jì)模式”課程中的部分例子挪到“面向?qū)ο蟪绦蛟O(shè)計(jì)”的課堂,反而不利于學(xué)生理解,加深學(xué)生的困惑,不會(huì)起到非常好的教學(xué)效果。所以本文基于一種“知識(shí)降維”思想,即將“軟件設(shè)計(jì)模式”中的知識(shí)充分簡(jiǎn)化后,結(jié)合實(shí)際例子[5],再放到“面向?qū)ο蟪绦蛟O(shè)計(jì)”的課堂進(jìn)行講解,會(huì)使學(xué)生從中受益。
1 ?課程定位及教學(xué)目標(biāo)
1.1 ?面向?qū)ο蟪绦蛟O(shè)計(jì)
“面向?qū)ο蟪绦蛟O(shè)計(jì)”是計(jì)算機(jī)相關(guān)專業(yè)本科生的一門專業(yè)基礎(chǔ)課。該課程主要講授面向?qū)ο蟪绦蛟O(shè)計(jì)的思想和方法,使學(xué)生深刻理解和領(lǐng)會(huì)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的基本概念、基本語(yǔ)法以及面向?qū)ο蟪绦蛟O(shè)計(jì)的精髓:抽象、封裝、繼承、多態(tài)及模板等,使學(xué)生養(yǎng)成面向?qū)ο蟮木幊趟季S習(xí)慣。在此基礎(chǔ)上,通過(guò)大量的程序?qū)嵗?,使學(xué)生熟練運(yùn)用面向?qū)ο蟪绦蛟O(shè)計(jì)的方法分析和求解實(shí)際設(shè)計(jì)問(wèn)題,使學(xué)生充分掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的精髓。該課的前修課程是C語(yǔ)言或者有其他程序設(shè)計(jì)語(yǔ)言 基礎(chǔ)[6]。
1.2 ?軟件設(shè)計(jì)模式
“軟件設(shè)計(jì)模式”是計(jì)算機(jī)相關(guān)專業(yè)本科生的一門專業(yè)選修課。該課程是一門具有較強(qiáng)理論性和實(shí)踐性的軟件設(shè)計(jì)和開(kāi)發(fā)類課程。主要學(xué)習(xí)軟件設(shè)計(jì)模式基礎(chǔ)知識(shí)、UML類圖、面向?qū)ο笤O(shè)計(jì)原則、常用的創(chuàng)建型設(shè)計(jì)模式、結(jié)構(gòu)型設(shè)計(jì)模式和行為型設(shè)計(jì)模式。本課程要求學(xué)生掌握常用軟件設(shè)計(jì)模式的動(dòng)機(jī)、定義、結(jié)構(gòu)、實(shí)現(xiàn)、使用效果以及應(yīng)用實(shí)例,能夠?qū)⑺鶎W(xué)知識(shí)應(yīng)用到實(shí)際軟件項(xiàng)目設(shè)計(jì)與開(kāi)發(fā)中,進(jìn)一步培養(yǎng)學(xué)生的工程實(shí)踐能力和專業(yè)技術(shù)水平,為今后從事相關(guān)工作奠定基礎(chǔ)[7]。
本課程面向的學(xué)生是前期已經(jīng)學(xué)習(xí)過(guò)“面向?qū)ο蟪绦蛟O(shè)計(jì)”,并具有一定的項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),但對(duì)面向?qū)ο蟮木幊趟枷胝J(rèn)識(shí)較膚淺,對(duì)設(shè)計(jì)模式還沒(méi)有概念。通過(guò)本門課的學(xué)習(xí),使學(xué)生對(duì)軟件架構(gòu)方法和面向?qū)ο笥幸粋€(gè)深入的了解,通過(guò)程序的不斷重構(gòu)和演變,把設(shè)計(jì)模式的學(xué)習(xí)門檻降低,使學(xué)生初步掌握程序的設(shè)計(jì)模式[8]。
2 ?面向?qū)ο蠛驮O(shè)計(jì)模式課程之間的關(guān)系
經(jīng)過(guò)多年的教學(xué)實(shí)踐,筆者深刻地體會(huì)到“面向?qū)ο蟪绦蛟O(shè)計(jì)”和“軟件設(shè)計(jì)模式”是兩門關(guān)系極為密切的課程,就好比是武俠小說(shuō)中“九陰真經(jīng)”的上卷和下卷,必須同時(shí)修煉才能達(dá)到良好的效果?!懊嫦?qū)ο蟪绦蛟O(shè)計(jì)”這門課是“軟件設(shè)計(jì)模式”的基礎(chǔ),而“軟件設(shè)計(jì)模式”是“面向?qū)ο蟪绦蛟O(shè)計(jì)”的升華。一般學(xué)校的計(jì)算機(jī)專業(yè)在設(shè)置課程的時(shí)候都會(huì)把這兩門課設(shè)為不同的課程,建議學(xué)生選課時(shí)兩門課都選,如果只選擇其中一門課則不會(huì)達(dá)到良好的學(xué)習(xí)效果。如果只學(xué)習(xí)面向?qū)ο蠖鴽](méi)有學(xué)習(xí)設(shè)計(jì)模式,則無(wú)法深刻理解面向?qū)ο筮@種編程方法的好處,最突出的問(wèn)題就是不理解抽象類和接口這些多態(tài)技術(shù)的意義,學(xué)生在學(xué)習(xí)中最突出的疑問(wèn)就是“既然已經(jīng)有了普通類,為什么一定要使用抽象類?”一旦解決這個(gè)疑惑,將極大有助于他們對(duì)于面向?qū)ο笏枷氲睦斫?。而這個(gè)問(wèn)題的最好的答案就在設(shè)計(jì)模式中。非常多的設(shè)計(jì)模式都能體現(xiàn)出使用抽象類編程的好處。反過(guò)來(lái),如果只學(xué)習(xí)設(shè)計(jì)模式而沒(méi)有學(xué)習(xí)面向?qū)ο?,由于缺乏面向?qū)ο蟮木幊袒A(chǔ)和思維訓(xùn)練,很難去深刻理解利用設(shè)計(jì)模式編程的妙處,需要付出極大的努力才能完全掌握。兩門課的關(guān)系可以歸納為“面向?qū)ο?,入門根基;設(shè)計(jì)模式,登峰造極”。
3 ?以“軟件設(shè)計(jì)模式”促進(jìn)“面向?qū)ο蟪绦蛟O(shè)計(jì)”課程教學(xué)案例
本文為了說(shuō)明如何以“軟件設(shè)計(jì)模式”促進(jìn)面向?qū)ο蟮恼n程教學(xué),選取了三個(gè)案例。這三個(gè)案例分別對(duì)應(yīng)“面向?qū)ο蟪绦蛟O(shè)計(jì)”教學(xué)中比較難以講解的三個(gè)問(wèn)題:一是繼承,二是反射,三是多態(tài)。
3.1 ?案例1——設(shè)計(jì)模式促進(jìn)學(xué)生對(duì)于繼承的理解
繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中的基本概念,與封裝和多態(tài)合稱面向?qū)ο蟮娜蠡咎卣?。一個(gè)類從另一個(gè)類派生出來(lái)時(shí),稱之為派生類或子類,被派生的類稱為基類或父類。派生類從基類那里繼承特性,從一個(gè)基類派生出來(lái)的多層類形成了類的層次結(jié)構(gòu)。繼承的優(yōu)點(diǎn):1、提高代碼的復(fù)用性;2、提高代碼的可擴(kuò)展性。
如何向?qū)W生講解“繼承”這個(gè)概念,是“面向?qū)ο蟪绦蛟O(shè)計(jì)”這門課要解決的重要問(wèn)題之一。對(duì)于初次接觸面向?qū)ο蟮膶W(xué)生來(lái)說(shuō),這是比較難以理解的概念。根據(jù)面向?qū)ο筮@門課的課程安排,“繼承”一般是在“類和對(duì)象”這兩個(gè)概念之后講解,而學(xué)生在初步接受了“類”這個(gè)概念后,會(huì)本能地認(rèn)為“需要用到哪個(gè)功能就將這個(gè)功能設(shè)計(jì)成一個(gè)或幾個(gè)類”,不理解繼承的功用。究其原因,這是因?yàn)閷W(xué)生接觸到的軟件設(shè)計(jì)題目都比較初級(jí),還未接觸到復(fù)雜的需要用到繼承的題目。因此,從“知識(shí)降維”的角度,需要在課堂上講解一個(gè)實(shí)例,對(duì)比使用繼承和不使用繼承二者的區(qū)別,就可以說(shuō)明使用繼承的妙處。
在設(shè)計(jì)模式中,幾乎每一種模式都會(huì)用到類和類之間的繼承,考慮到學(xué)生剛接觸類和對(duì)象這些概念,對(duì)于面向?qū)ο蟮脑O(shè)計(jì)方式還處于較為粗淺的階段,所以選擇較為簡(jiǎn)單的一種模式——簡(jiǎn)單工廠模式來(lái)進(jìn)行講解比較合適。經(jīng)簡(jiǎn)化后的講解案例如下:
“某公司要編寫圖像編輯器軟件,可以解析并顯示各種格式類型的圖像,包括BMP,JPEG,PNG等,該公司設(shè)計(jì)人員希望設(shè)計(jì)一個(gè)靈活易用的圖像編輯器,通過(guò)設(shè)置不同的參數(shù)即可顯示不同格式的圖像,而且可以較為方便地對(duì)圖像編輯器進(jìn)行擴(kuò)展,以便能夠在將來(lái)增加一些新類型的圖像?!?/p>
本題目對(duì)于初學(xué)的學(xué)生來(lái)說(shuō),如果不使用繼承,而是用到什么功能就設(shè)計(jì)什么類,會(huì)設(shè)計(jì)成如圖1所示。
從圖中可以看出,客戶端(Client)要與三種圖像格式類打交道,每個(gè)類中都維護(hù)了描述圖像基本
信息的字段,如圖像的高(Height),圖像的寬(Width),圖像的分辨率(Resolution)等。本文只是舉例,如果在實(shí)際工程項(xiàng)目中,需要處理的圖像基本信息會(huì)更多。這部分字段在各個(gè)類中無(wú)疑是冗余的。如果某部分代碼有問(wèn)題,就需要在所有的圖像類中都進(jìn)行修改,這會(huì)增加代碼修改不徹底的風(fēng)險(xiǎn)。利用簡(jiǎn)單工廠模式,可以將該案例題目設(shè)計(jì)成如下形式:
如圖2所示,Image是簡(jiǎn)單工廠模式的抽象產(chǎn)品類,ImageFactory是簡(jiǎn)單工廠模式的工廠類,BMP,JPEG,PNG是簡(jiǎn)單工廠模式的具體產(chǎn)品類,是Image這個(gè)抽象類的子類,分別對(duì)應(yīng)三種圖像格式。如果要求圖像編輯器再增加解析GIF格式的圖像,只需要將GIF類繼承抽象的Image類,由于在Image類中已經(jīng)有圖像的基本信息字段,這些字段同樣可以用在GIF圖像的解析過(guò)程中,所以不必再在GIF類中定義,簡(jiǎn)化了代碼。
從這個(gè)例子中可以看出,將跟圖像相關(guān)的各種圖像格式共有的類成員放到抽象類中,在子類中不需要將同樣的代碼書寫多次;同時(shí)將對(duì)于不同格式圖像的解碼方法Decode設(shè)置成抽象方法,在不同的子類中予以不同的實(shí)現(xiàn),這體現(xiàn)了類之間繼承的好處——代碼復(fù)用與便于擴(kuò)展。
3.2 ?案例2——設(shè)計(jì)模式促進(jìn)學(xué)生對(duì)于反射的理解
反射是面向?qū)ο蟪绦蛟O(shè)計(jì)這門課比較難以理解的概念,通過(guò)反射可以在運(yùn)行時(shí)獲得每一個(gè)類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、時(shí)間和構(gòu)造函數(shù)等,還可與獲得每個(gè)成員的名稱、限定符和參數(shù)等。有個(gè)反射,編程人員即可對(duì)每一個(gè)類型了如指掌。如果獲得了構(gòu)造函數(shù)的信息,可以直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類型在編譯時(shí)還不知道。
學(xué)生在學(xué)習(xí)反射時(shí)總是摸不清這個(gè)技術(shù)的優(yōu)勢(shì),因?yàn)檫@部分知識(shí)相對(duì)獨(dú)立,與前面的類和對(duì)象的知識(shí)是一種逆向關(guān)系。如果單從面向?qū)ο筮@門課很難舉出一個(gè)例子來(lái)說(shuō)明。如果結(jié)合設(shè)計(jì)模式這門課中的內(nèi)容,就非常容易說(shuō)明這個(gè)知識(shí)點(diǎn)的優(yōu)勢(shì)了。
在多種設(shè)計(jì)模式中,如果不用反射技術(shù),就難以完全符合開(kāi)閉原則,比如工廠方法模式,抽象工廠模式,適配器模式等。本文以工廠方法模式為例,說(shuō)明在程序中使用反射的必要性。
圖3為工廠方法模式的UML圖。按照設(shè)計(jì),客戶端只需要和同為接口的抽象工廠類和抽象產(chǎn)品類打交道就可以。但是在實(shí)際運(yùn)用中,如果不使用反射機(jī)制,客戶端無(wú)法避免和具體工廠類打交道,這就造成當(dāng)需要再增加一種產(chǎn)品時(shí),就需要修改客戶端的代碼,這并不符合面向?qū)ο笤O(shè)計(jì)原則中的開(kāi)閉原則(對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉)。運(yùn)用設(shè)計(jì)模式的初衷就是讓上層客戶端只跟抽象層打交道而不和具體實(shí)現(xiàn)類打交道,這樣才能使程序具備良好的擴(kuò)展性。所以為了使工廠方法模式完全符合開(kāi)閉原則,需要使用反射技術(shù)??蛻舳送ㄟ^(guò)配置文件讀取需要實(shí)例化的具體產(chǎn)品類名,然后通過(guò)反射技術(shù)生成這個(gè)類的對(duì)象,并將這個(gè)對(duì)象賦值給抽象工廠類的對(duì)象引用變量。以上即可實(shí)現(xiàn)工廠方法模式,又完全符合開(kāi)閉原則。這個(gè)例子就可以說(shuō)明反射機(jī)制的優(yōu)勢(shì)以及必要性。
3.3 ?案例3——設(shè)計(jì)模式促進(jìn)學(xué)生對(duì)于多態(tài)的理解
筆者曾經(jīng)在面向?qū)ο蟪绦蛟O(shè)計(jì)這門課中做過(guò)不記名投票,寫出這門課比較難以理解的知識(shí)點(diǎn),共有50人參與,每人最多寫2個(gè),共計(jì)90個(gè),歸納起來(lái)投票結(jié)果如下:
從圖4的統(tǒng)計(jì)數(shù)據(jù)可以看出,投票數(shù)量最多的三個(gè)分別是抽象類和抽象方法、虛函數(shù)、接口。這三個(gè)概念都是在程序多態(tài)設(shè)計(jì)中要用到的,所以可以看出,學(xué)生對(duì)于多態(tài)的概念的理解還是不到位,多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)中的重點(diǎn),同時(shí)也是面向?qū)ο蟪绦蛟O(shè)計(jì)這門課最難理解的難點(diǎn)之一,需要教師在授課中花大力氣去進(jìn)行概念講解、總結(jié)歸納與課堂練習(xí)。
多態(tài)是實(shí)現(xiàn)各種設(shè)計(jì)模式的核心手段之一。為了符合面向?qū)ο笤O(shè)計(jì)的開(kāi)閉原則,很多種設(shè)計(jì)模式都分成相對(duì)穩(wěn)定的抽象層和具備不同實(shí)現(xiàn)的實(shí)現(xiàn)層,這就實(shí)現(xiàn)了多態(tài)。抽象類和接口是設(shè)計(jì)模式實(shí)現(xiàn)多態(tài)的兩種最常用的手段。設(shè)計(jì)模式中的關(guān)于抽象類和接口的用法和例題非常適合在面向?qū)ο蟪绦蛟O(shè)計(jì)的課堂上給學(xué)生講解,用以加深其對(duì)這兩個(gè)概念的理解。為了簡(jiǎn)化理解,降低同學(xué)們的學(xué)習(xí)負(fù)擔(dān),基于“知識(shí)降維”的思想,還是以設(shè)計(jì)模式中的簡(jiǎn)單工廠模式為例。如果不用抽象類,如圖1所示,如果客戶要求增加圖像編輯器可以打開(kāi)的圖像類型,那么必須修改上層客戶端的代碼。而在實(shí)際中上層和下層往往是不同團(tuán)隊(duì)在負(fù)責(zé),下層稍有修改,上層就要跟著修改,然后經(jīng)過(guò)測(cè)試,發(fā)布等流程。這樣設(shè)計(jì)程序,程序維護(hù)起來(lái)非常麻煩。
而采取圖2的簡(jiǎn)單工廠模式,在客戶端和具體的三個(gè)圖像類BMP,JPEG,PNG之間加入一個(gè)抽象類Image,就可以使得程序的擴(kuò)展相對(duì)容易。本文仍然以再增加解析GIF格式的圖像為例,由于圖像解析所需的字段已經(jīng)定義在了抽象基類Image中,在GIF類中只需要重寫GIF格式圖像解析的Decode方法即可。增加GIF類后,雖然增加了解析GIF圖像的功能,但是對(duì)于上層客戶端來(lái)說(shuō),代碼無(wú)需任何改動(dòng)。因?yàn)榭蛻舳耸轻槍?duì)抽象層來(lái)編程的,而抽象層是穩(wěn)定的。本例可以說(shuō)明使用抽象類的必要性。
4 ?總結(jié)
面向?qū)ο蟮某绦蛟O(shè)計(jì)對(duì)于接觸計(jì)算機(jī)編程事件不太長(zhǎng)的學(xué)生來(lái)說(shuō),很多概念有些難以理解。對(duì)于授課教師來(lái)說(shuō),缺乏能說(shuō)明面向?qū)ο蟪绦蛟O(shè)計(jì)這門課中一些概念的例子。本文認(rèn)為這些例子恰恰存在于軟件設(shè)計(jì)模式這門課中。可以借助設(shè)計(jì)模式的部分例子,經(jīng)簡(jiǎn)化后,去講解面向?qū)ο笳n程中的一些概念,將起到事半功倍的效果,加深學(xué)生的理解。未來(lái)本研究還會(huì)運(yùn)用一些教學(xué)質(zhì)量評(píng)價(jià)模型去評(píng)價(jià)本教學(xué)方法帶來(lái)的效果[9-10]。
參考文獻(xiàn)
[1] 陳晶. 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)核心課程考核方式改革的研究[J]. 軟件, 2018, 39(11): 33-35.
[2] 江紅, 余青松. C#程序設(shè)計(jì)教程(第2版)[M]. 北京: 清華大學(xué)出版社, 2014.
[3] 錢誠(chéng), 徐煜明. 面向?qū)ο蟪绦蛟O(shè)計(jì)課程案例法教學(xué)探討[J]. 電子世界, 2018(22): 100.
[4] 戴華, 楊志和. 軟件設(shè)計(jì)模式課程的教學(xué)模式改革探討[J]. 課程教育研究, 2017(31): 247-248.
[5] 李曉東, 魏惠茹, 董振華. 項(xiàng)目驅(qū)動(dòng)教學(xué)法在計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言課中的探索[J]. 軟件, 2015, 36(4): 107-109.
[6] 李建伏, 沈中林, 衡紅軍. 案例教學(xué)法在面向?qū)ο蟪绦蛟O(shè)計(jì)課程中的應(yīng)用[J]. 軟件, 2015, 36(3): 48-51.
[7] 劉偉. C#設(shè)計(jì)模式[M]. 北京: 清華大學(xué)出版社, 2013.
[8] 王曉麗, 徐敏, 李芳巍, 等. 比較教學(xué)法在醫(yī)學(xué)院校計(jì)算機(jī)基礎(chǔ)課程中的應(yīng)用[J]. 軟件, 2018, 39(7): 48-51.
[9] 康蘇明, 張杰, 張景安. 基于云模型的高校課堂教學(xué)質(zhì)量評(píng)價(jià)模型及方法研究[J]. 軟件, 2015, 36(4): 50-54.
[10] 石黎, 孫志梅. 教學(xué)質(zhì)量評(píng)價(jià)的BP神經(jīng)網(wǎng)絡(luò)模型[J]. 軟件, 2015, 36(3): 19-21.