
摘要:本文針對計算機軟件工程專業本科生開設“設計模式”課程的必要性和可行性進行分析,并且對課程的具體內容和學時分配做了詳盡的論述,旨在進一步完善本科軟件工程專業的課程體系,提高畢業生的就業競爭力。
關鍵詞:軟件工程;設計模式;課程體系
設計模式/軟件設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結[1]。GOF的《設計模式——可復用面向對象軟件的基礎》一書將設計模式提升到了理論的高度,并將之規范化。隨著計算機軟件工程技術和面向對象技術的發展,設計模式已經成為軟件設計人員必須掌握的思想和技術。可以說只有設計模式才能真正實現代碼編制的工程化,才能真正實現代碼的重用性和可維護性。
1必要性分析
計算機專業在經歷了一輪火熱的發展后,隨著社會需求的相對減少,以及計算機人才市場的逐漸飽和,計算機專業的畢業生在就業市場上不再那么炙手可熱,就業的競爭也越來越激烈。
計算機專業培養的本科生畢業生,大體可以分為兩種類型:一種是計算機相關理論基礎扎實、研究能力較強、在一定程度上了解某一方向的科學前沿,具有良好的綜合素質的創新型人才,此類型學生大都選擇繼續深造或者去一些科研院所進行研究工作。另外一種是了解和掌握計算機軟件和硬件開發設計的理論基礎,具有較強的計算機軟硬件設計和開發能力的應用型人才,此類型學生在畢業后大多選擇就業,去一些國內大、中型企業,從事軟件或硬件的開發設計或管理工作。計算機專業的畢業生在就業市場上的競爭越來越激烈,如何持續不斷地提高我們畢業生的就業能力,得到用人單位的認可,無疑對我們本科教學的課程體系設置提出了更高的要求。
由于計算機技術的發展十分迅速,社會上用人單位對畢業生的需求也在不斷地變化。畢業生,尤其是面向各種企業的應用型人才,除了要掌握基本概念、基礎理論外,還應該能跟得上計算機技術發展的步伐,了解和掌握一些最新的技術,以在就業的競爭中占得優勢。
對于軟件工程方向的本科生,除了計算機專業的基礎課外,還開設了“軟件工程”、“面向對象程序設計”、“人機界面設計”和“數據庫”等課程。雖然我們針對軟件工程方向的學生已經開設了“面向對象程序設計”這門課,但該門課重點講授面向對象設計的一些基本概念,比如類、對象、繼承等等,而對于如何將這些基本概念應用到設計過程中,進而設計出具有合理結構的軟件,在教學中并未充分說明。通過對一些軟件企業的了解,我們發現企業在聘用應屆畢業生后,會專門做關于設計模式方面的培訓,以滿足企業軟件開發的需要。如果在我校課程體系中能夠增設“設計模式”這樣一門課程,一方面會使課程體系更為完善、更能適應當前計算機技術的發展,另一方面可以培養出具有先進設計思想和能力的學生,滿足用人單位的需求,從而使得我校的畢業生在就業市場上占得先機。因此面向計算機軟件工程專業的學生開設“設計模式”這樣一門課顯得非常必要。
2可行性分析
設計模式主要以面向對象的思想來講述在軟件設計過程中被多次使用、且被實踐證明非常有效的、有助于實現代碼的重用和維護的一些固定程式,而且設計模式主要是為軟件工程服務,因此對于開設該門課程所針對的對象,應該滿足以下幾個條件:
(1) 學習過“面向對象程序設計”。通過該門課程的學習,學生應該掌握面向對象的基本概念和基本思想,比如類、對象、接口、抽象類、繼承、重載、多態等等。
(2) 熟練掌握一門面向對象的程序設計語言。在講述設計模式時,必然會以具體的例子來說明,而這些例子要用某種語言來實現,甚至有些例子直接就是某種面向對象設計語言的類庫中使用的模式。當前比較流行的面向對象程序設計語言有Java,C#等。
(3) 掌握“軟件工程”對軟件設計的基本要求,如可靠性、可維護性、擴展性等等。
(4) 能夠熟練使用統一建模語言UML。在講授設計模式的過程中,會借助于類圖、時序圖等一些設計圖來表示模式,所以掌握UML圖也是必須的。
從以上分析得出,“設計模式”需要以上4門課程作為先修課程。針對軟件工程專業的學生,前3個條件有專門的課程進行講授。即:大二下學期開設“面向對象程序設計”,并使用典型的面向對象程序設計語言Java進行講授。大三下學期開設了“軟件工程”課程。只有第4個條件——統一建模語言UML,在當前的課程體系中沒有體現,由于在“設計模式”中涉及到的UML內容不是特別多,沒有必要將UML單獨作為一門課程開設,而且設計模式和UML的聯系比較緊密,因此可以把UML的內容和設計模式合并在一起作為一門課程來講述。
由上可見,在當前的課程體系下,針對軟件工程專業的本科生,在大四上學期增加開設“設計模式”這樣一門課是完全可行的。
3教學環節設計
計算機學科是一個實踐性比較強的學科,“設計模式”也不例外。因此在“設計模式”的教學中應該以理論和實踐相結合的方式進行,整個“設計模式”課程的教學過程分為理論教學和實踐教學兩個環節,并且根據具體的教學內容確定總的教學時數為32學時,其中理論環節24學時,實踐環節8學時。
3.1理論教學環節設計
“設計模式”的理論教學內容包括UML的基本內容和GOF提出的23種基本設計模式,另外補充講解一些屬于23種基本設計模式以外,但在實際開發過程中常用的模式,比如模型-視圖-控制器(MVC)模式等。23種基本設計模式又可分為創建模式、結構模式和行為模式三大類[2]。在對這23種模式的講解過程中,對于一些看上去相似但實質上不同的模式應該清楚地說明幾種模式之間的區別,以及各種模式各自適用的場合。具體的內容和學時分配如下:
(1) 統一建模語言UML(6學時)。這部分的主要內容包括UML中涉及到的一些基本概念,如類、實例、多態、繼承、泛化、依賴等等,以及UML中的一些圖形表示的畫法。UML中的圖總體上可以分為兩類:結構圖和行為圖。結構圖主要有類圖、對象圖、構件圖和實施圖,而行為圖包括用例圖、順序圖、協作圖、狀態圖、活動圖。通過這部分內容的學習,應該讓學生掌握面對現實問題時如何對現實世界中的實體進行抽象,并且捕捉實體之間的關系和交互,然后用UML圖表現出來。
(2)“設計模式”的要素和原則(2學時)。這部分主要講解設計模式要遵循的幾個基本原則,包括開閉原則、里氏代換原則、依賴倒轉原則和迪米特法則等[3]。
(3) 創建模式(3學時)。創建模式總共有5種,分別為單例模式,抽象工廠模式,建造者模式、工廠方法模式和原型模式。講解時要讓學生能夠了解抽象工廠和工廠方法模式,建造者模式和抽象工廠模式,原型模式與工廠方法模式之間的區別。
(4) 結構模式(4學時)。結構模式總共有7種,分別為適配器模式、橋接模式、組合模式、裝飾模式、門面模式、享元模式和代理模式。重點區別適配器模式和橋接模式、組合模式和裝飾模式、適配器模式和裝飾模式、享元模式與代理模式。
(5) 行為模式(7學時)。行為模式總共有11種,分別為職責鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模版方法和訪問者模式。重點區別職責鏈與命令模式、解釋器和迭代器模式、中介者模式和觀察者模式、狀態模式和策略模式、策略模式和模板方法模式。
(6) 其他非標準模式(2學時)。除了以上23種基本的設計模式外,還有一些模式在實際應用中經常使用到,比如MVC模式。嚴格地來講MVC不屬于設計模式,而屬于框架模式,但由于在軟件開發過程中經常應用到,所以也應該讓學生掌握。
3.2實踐教學環節設計
實踐環節主要是為了讓學生鞏固和應用理論教學環節中所學到的知識。這一環節分為4個單元,每個單元2學時,總共8個學時。每個單元出一個題目讓學生使用一種設計模式來設計,然后用UML圖表現出來,最后編寫程序實現,為培養學生的創新能力,全部為設計型實驗。其中實驗1~3分別讓學生使用創建模式、結構模式和行為模式中的一種進行設計和實現。實驗4為綜合實驗,對于給定的題目,綜合運用理論教學中講過各種模式進行設計,最后編程序解決該問題。
“設計模式”課程的所有教學內容和學時分配如表1所示。
4結語
“設計模式”課程主要是針對軟件工程專業的本科生,是“面向對象程序設計”課程的擴展。教學目標是讓軟件工程專業的學生掌握在實際的軟件設計過程中常用的一些模式,提高學生的軟件設計能力,從而提高學生的就業競爭力,滿足軟件企業的需求。另外增加這樣一門課程,使我們當前的課程體系更加完善,更能適應當前計算機人才培養的需求,尤其是面向企業的應用型人才的培養。當然具體的效果如何,還需要實踐的檢驗。
參考文獻:
[1] 合作編輯者. 百度百科:設計模式[2009-03-23]. http://baike.baidu.com/view/66964.htm.
[2] Erich Gamma, Richard Helm. 設計模式——可復用面向對象軟件的基礎[M]. 馬曉星,譯. 北京:機械工業出版社,2000.
[3] 閻宏. Java與模式[M]. 北京:電子工業出版社,2002.
Exploration on Teaching Design Pattern Course
ZHANG Li-jun
(Dept. of Computer Dcience, Northwestern Polytechnical University, Xi’an 710072, Chian)
Abstract:We analyze the necessity and feasibility on teaching design pattern course to Software Engineering students in this paper. And the course content and the distribution of class hours are described in detail, aimed at improving the undergraduate curriculum system for specialty in software engineering and the employment competitiveness of graduates.
Key words:Software Engineering; design pattern; curriculum system
(編輯:白杰)