陳純毅
(長春理工大學計算機科學技術學院,長春 130022)
作為計算機科學與技術和軟件工程專業的核心課程,軟件開發實踐課在長春理工大學計算機科學技術學院已經開設多年。從專業課程體系上看,軟件開發實踐課是學生在學完面向對象程序設計、數據結構與算法、操作系統、數據庫原理、軟件工程等先修課程后,學習的一門綜合性實踐課程,其目的是鍛煉學生從事實際軟件設計與開發工作的能力[1],是本科階段理論課程學習與實際軟件項目開發工作之間的一個重要銜接,在消除大學軟件專業課程教育與軟件企業實際需求之間的脫節方面起到了積極作用[2-3]。由于當前本科軟件類專業課程設置的一些限制,多數專業基礎課的實驗過于理論化和單一化,僅是為了加深學生對理論課內容的理解而設置,普遍缺乏綜合性和實際性,造成多數本科二三年級學生缺乏實際軟件設計與開發經驗。因此,軟件開發實踐課程對于多數學生來說存在一定的技術門檻,學生必須具備一定的軟件設計與開發綜合能力,才能學好本課程。
針對上述情況,為了提高實驗題目的綜合性和真實性,軟件開發實踐題目按所涉及的技術來分類。學生可以根據自己的興趣和對某種軟件開發技術的熟悉程度,選擇合適的題目。整門實驗課程要求學生完成4個綜合性實驗題目。考慮到當前學院本科教學的實際情況、軟件開發技術的發展情況以及軟件企業對軟件人才的需求情況,本課程按Web應用項目和Windows桌面應用項目為主線來設計實驗題目。鑒于當前流行的Web應用開發技術包括ASP.Net、JSP、PHP等,在設計 Web應用類題目時不限制具體開發語言。Web應用項目離不開數據庫,當前常用的數據庫管理系統有 Access、SQL Server、MySQL、Oracle 等。從滿足學生多樣性需求的角度出發,在設計Web應用類題目時也不限定具體使用什么數據庫管理系統。當前用于Windows桌面應用程序開發的工具有Visual C++、Visual C#、Java等。在進行Windows桌面應用程序開發時,通常都會采用某種軟件開發框架,例如Visual C++中經常使用的MFC框架。因此,要求學生能夠熟練地使用某種軟件開發框架進行編程,這在實驗課開始之前,需要學生提前查閱相關技術參考書。
目前我院本科生在一年級已開設面向對象程序設計課程,因此對面向對象程序設計已經有一定深度的認識。面向對象是當前軟件設計和開發的一種主流思想,也是軟件開發實踐課程中用到的核心思想。本科學生不可能僅從書本上就能深刻地理解面向對象思想,只有通過實際軟件開發項目的鍛煉,才能熟練地掌握面向對象分析與設計方法。雖然當前的軟件工程課程通常會介紹瀑布過程、統一過程、敏捷過程等不同的軟件工程過程,但是由于本科學生缺乏實際軟件開發項目經驗,因此對這些軟件工程過程的理解不可能非常深刻。從某種意義上說,加深學生對軟件工程思想的認識,使他們能熟練地掌握和運用軟件工程方法,是軟件開發實踐課程的一項首要任務。

圖1 軟件開發實踐課程的組成及目標
圖1示出了軟件開發實踐課程的組成及目標。軟件開發實踐題目由Web應用類題目和Windows桌面應用類題目組成。為了給學生提供自由選擇的可能,Web應用類實驗題目和Windows桌面應用類題目分別設計5個,且盡量設計學生比較熟悉的題目。5個Web應用類題目如下:(1)在線課程輔導系統設計與開發;(2)求職招聘系統設計與開發;(3)學生課程管理系統設計與開發;(4)網上論壇管理系統設計與開發;(5)網頁版電子郵箱系統設計與開發。5個Windows桌面應用類題目如下:(1)時鐘顯示控件設計與開發;(2)圖書出租店管理系統設計與開發;(3)個人電子資料管理器設計與開發;(4)個人工作日程薄設計與開發;(5)二維圖形繪制軟件設計與開發。為了讓學生體驗團隊化開發模式,在實驗中將學生分組,每組包括4名學生。軟件開發實踐課程要求每組學生分別從Web應用類題目和Windows桌面應用類題目中選擇兩個題目(總共4個題目),4名學生分別作為一個題目的組長。在一個實驗題目的設計與開發過程中,相應的組長負責進度安排,并協調各個組員的工作。每個實驗題目結束時,每個小組要撰寫實驗項目開發文檔,制作幻燈片簡要地講解設計思路和開發體會,并回答教師的提問。
軟件開發實踐課程的目標是,通過完成實驗題目,使每個學生熟練地掌握面向對象分析與設計方法,深刻理解軟件工程過程的實質,為今后進入軟件企業從事實際項目開發打基礎。
下面以時鐘顯示控件設計與開發為例,簡要介紹軟件開發實踐題目的具體內容和要求。
掌握Windows圖形化程序設計原理與技術,深入理解Windows二維繪圖API接口的調用機制和屏幕邏輯坐標系與理論數學坐標系的差異,加深學生對面向對象中的封裝和重用思想的認識,培養學生的可重用軟件設計能力。
使用MFC框架,設計一個Windows系統時鐘顯示類,將該類綁定到一個Windows窗口控件,可在控件上顯示一個時鐘;時鐘通過時針、分針和秒針實時地顯示當前系統時間,如圖2所示。

圖2 時鐘控件的顯示結果
Microsoft Visual Studio 2008、Windows 2000/XP/Vista操作系統。
如圖2所示,時鐘的繪制實際上可歸結為畫圓和畫直線段兩種操作。時鐘的表盤可通過畫圓實現,時鐘的刻度線、時針、分針和秒針都可通過畫直線段來實現。使用MFC中CDC類的Ellipse成員函數可實現畫圓,使用MFC中CDC類的MoveTo和LineTo兩個成員函數可實現畫直線段。
將時鐘表盤等分成60份,根據表盤圓周上的各等分點、表盤圓心,以及刻度線的長度可以確定每條秒/分針刻度線的起點和終點。同理,可以確定每條時針刻度線的起點和終點。
為了使時鐘顯示控件能實時地顯示系統時間,控件需要每隔一秒鐘讀取一次系統時間,獲取當前的時、分、秒數據,計算時針、分針、秒針的指向角度,進而確定時針、分針、秒針直線段的起點和終點,并進行重新繪制。系統時間可以通過GetLocalTime系統函數獲取。此外,通常的理論數學坐標系如圖3(a)所示,然而MFC中的繪圖類使用的屏幕邏輯坐標系如圖3(b)所示。因此,在計算出時針、分針、秒針直線段的起點和終點之后,還需要進行適當的坐標變換才能作為參數調用直線段繪制函數。

圖3 理論數學坐標系和屏幕邏輯坐標系的差異
為了提高時鐘顯示控件使用的靈活性,時鐘的實際顯示大小需要根據窗口控件的大小來確定。這可以通過調用CWnd類的GetClientRect函數獲取窗口控件客戶區大小來實現。為了充分利用窗口控件的顯示空間,可以將時鐘表盤的中心放設置在窗口控件客戶區的中心位置處。
時鐘顯示控件設計與開發實驗的具體實施步驟如下:
1.創建一個基于對話框的Visual C++工程,并在工程中添加時鐘顯示控件類,該類的基類為CStatic;
2.編寫繪制時鐘的函數,該函數首先獲取當前系統時間,再據此繪制表盤、刻度線、時針、分針、秒針;
3.為時鐘控件類添加WM_PAINT消息處理函數,在該消息處理函數中繪制時鐘;
4.定義一個時間觸發器,每隔一秒觸發一次WM_TIMER消息,并為時鐘顯示控件添加WM_TIMER消息處理函數,在該消息處理函數中重新繪制時鐘。
5.在主對話框資源上放置一個靜態控件,并為該靜態控件添加、關聯一個時鐘顯示控件類型的變量。
根據以上原理及步驟可以很容易地實現基本的時鐘顯示控件。對于能力比較強的學生,可以在此基礎上進一步優化該控件的設計。例如,如果在同一個對話框中同時放置多個時鐘顯示控件,如何提高控件的繪制效率。學生通過不斷優化控件的設計和實現,可以進一步加深對Windows桌面應用程序設計與開發的理解,提高他們的編程能力。
軟件開發實踐課程是學生在學完多門前期課程后,進行的綜合性程序設計與開發實踐鍛煉,對于提高學生的動手能力,彌補現行本科軟件類專業課程設置偏重理論教學、實踐環節薄弱的不足,有至關重要的作用。通過設計綜合性實驗題目,并模擬團隊化開發模式,一方面可以鍛煉學生綜合運用各種所學知識的能力,另一方面也可以使學生切身體會到軟件工程過程在實際項目開發中的應用,加深對軟件工程過程的理解。學生的實驗程序檢查結果表明,這種實驗教學模式對學生實踐能力的培養效果明顯。
[1]趙池龍,姜義平,張建.軟件工程實踐教程[M].北京:電子工業出版社,2009.
[2]鄭耿忠,劉秋梅.軟件工程專業實踐教學體系構建探索[J].電腦知識 與 技術,2009,27(5):7690-7691,7697.
[3]林丕源,劉才興,張明武,等.軟件工程專業的實踐教學改革初探[J].實驗室研究與探索,2007,26(12):238-240,247.