摘要:本文針對當前《軟件設計模式》課程教學中存在的問題,提出一種教學設計方法,并給出了一個教學案例,最后對提出的教學設計方法進行了分析。
關鍵詞:《軟件設計模式》;教學設計;教學案例
中圖分類號:G642.41 文獻標志碼:A 文章編號:1674-9324(2013)04-0207-02
《軟件設計模式》是一套多數人知曉的、經過分類編目的、被反復使用的代碼設計經驗的總結。學生感覺這門課程學習起來比較困難。市場上也有一部分教材以生活中的例子或典故為主導,授課時容易只注重細節,而很難上升到一定高度,最終學生只會簡單應用,不會分析,更不會進行合理的選擇。本文主要針對我校學生特點及當前教學中存在的問題,總結出一個相對合理的教學方法來提高教學效果。
一、教學過程設計
本課程在講授時采用教材為《Head First設計模式》,參考教材為《實用軟件設計模式教程》、《Java與模式》、《大話設計模式》等。《軟件設計模式》課程只有30(22+8)學時,要對本課程中各個具體的設計模式都一一介紹是不現實,也是不可能的。在制定教學大綱時,充分考慮到了學時、辦學定位、學生特點等方面,選取了其中12個設計模式作為課堂教學的內容。選取標準主要為:①在以后工作中常用的模式。②在模式分類中具有典型代表的模式。結合傳統的教學方法,在講授本課程時使用了以下教學過程設計。
1.給出場景。即提出一個與本次課程要講授的設計模式相關的設計問題。這一步選取場景時要注意,此場景必須是學生們比較感興趣的、熟悉的,且學生能夠依據此場景給出一個合理的設計方案。
2.場景分析。引導學生思考,給出此場景的設計方案,針對其中存在的問題,依據設計原則進行一步一步的“優化”,最后得出良好的設計方案。
3.講授該設計模式中體現的設計原則。由于每個設計模式中體現的設計原則不同,并且同一個設計原則會在不同的設計模式中體現,所以此處的講解關鍵在于設計原則的內涵及其使用。
4.引出欲講授的設計模式的定義、意圖、結構圖、適用場景、優缺點、效果分析等,并用代碼演示第一步提出的場景。
5.課堂練習。針對剛才的講解,再給出1~3個不同的場景,讓學生當堂給出其設計方案。
6.布置作業。此作業為課外作業,要求學生給出完整的設計及代碼。
二、教學案例
觀察者模式(又稱發布/訂閱模式)是軟件設計模式的一種。觀察者模式定義了對象間的一對多的依賴關系,當一方的對象改變狀態時,所有的依賴者都會被通知并自動被更新。此種模式通常被用來實現事件處理系統。下面以該設計模式的教學為例,闡述前面的教學過程設計。
1.提出場景——報紙訂閱系統。報社出版報紙,客戶可隨時向報社訂閱或取消訂閱報紙,即只要報社在運營,就會一直有人(或單位)向它們訂閱或取消訂閱報紙。當報社有新報紙時,就會給處于訂閱狀態的客戶送去。如果你取消了訂閱,則將收不到新的報紙。
2.場景分析。引導學生一起分析得出,該場景中主要涉及到的“角色”有:報社、報紙、客戶(包括人或單位)。行為方式有:(報社)出版(報紙)、(客戶)訂閱(報紙)、(客戶)取消訂閱(報紙)。根據課堂提問及學生上課反饋情況給出其初始設計方案,如圖1所示:
在初始設計方案的基礎上,引導學生進一步分析,當報社有新的報紙出現時,會送到客戶手中,說明客戶是受到報社的影響的;并且客戶向報社訂閱或取消訂閱報紙,其數據應放在報社方,即報社方要清楚當有報紙出版時,應發送給誰。為使此設計方案更有彈性,即當出現新的客戶向報社訂閱報紙或客戶欲向新的報社申請訂閱時,我們不影響到對方且不用修改代碼,這就是說要“針對抽象編程”,如何完善已有的設計方案?也就是說我們要給報社及客戶提供一個“抽象”概念。具體見圖2:
3.總結模式要點。觀察者定義了對象之間一對多的關系,主題用一個共同的接口來更新觀察者,觀察者和被觀察者之間用松耦合方式結合,可觀察者不知道觀察者的細節,只知道觀察者實現了觀察者接口。使用此模式,可以從可觀察者推或者拉數據,有多個觀察者時,不可以依賴特定的通知次序。
4.體現的設計原則。觀察者設計模式中出現體現的設計原則中“針對抽象編程”、“多用組合,少用繼承”、“里氏替換原則”、“為交互對象之間的松耦合而努力”等。在課堂上對前面未講過的設計原則再進行詳述。
5.課堂練習。氣象站(教材上的例子):關鍵是抽象出主題和觀察者;圖形顯示系統。
6.作業布置——班會通知。設計模式:班長臨時通知大家一件事,輔導員有事,班會取消。當大家聽到這個消息的時候,不再去教室開會,而是各忙各的事。
三、教學分析
從學生提交的作業、課下學生反饋及期末考核等多方面來看,本課程的教學設計基本上能達到預期的目標。但存在問題有:學生水平參差不齊,有一部分學生并沒有完全理解設計模式的精髓,只會簡單地去“套用”。如觀察者模式中,個別學生并沒有完全明白主題和觀察者之間的關系,即觀察者的狀態是隨著主題狀態的改變而改變的。所以作業中有的同學只讓“班長”充當觀察者,而有的同學僅讓“班長”充當主題,這都是不正確的。作業中的“班長”具有雙重身份,充當“輔導員”的觀察者,而又是班內其他同學的“主題”。
參考文獻:
[1]徐宏喆,侯迪.實用軟件設計模式教程[M].北京:清華大學出版社,2009.
[2]黃洪.PBL的改進及在“軟件設計模式”課程教學中的應用研究[J].計算機教育,2008,(8).
作者簡介:李勇軍(1983-),女,河南駐馬店人,助教,碩士,主要研究方向為服務計算、服務組合等;余雨萍(1982-),男,河南駐馬店人,助教,碩士,主要研究方向網絡安全、可視化等。