張曉峰
摘 要: Windows程序設計使得復雜的軟件開發過程變得簡便,但是由于API、MFC等復雜內容的引入,使得該課程的學習過程充滿艱辛,難以獲得滿意的教學效果。隨著該課程的廣泛開展,基于對該課程教學模式的深入思考和多年教學經驗,分析了該課程教學過程中存在的問題,充分認識到程序整體結構對于Windows程序設計的重要性,提出了“先搭結構,再添磚瓦”的教學模式,并設計了一套與之相對應的實驗。
關鍵詞: Windows程序設計; API; MFC; 程序框架
中圖分類號:G42 文獻標志碼:A 文章編號:1006-8228(2014)11-57-02
New idea of Windows programming course
Zhang Xiaofeng
(School of Computer Science and Technology, Nantong University, Nantong, Jiangsu 226019, China)
Abstract: Using Windows programming, the complex software development becomes easy. But the course of Windows programming is hard to obtain a satisfactory teaching effectiveness. Since the introduction of API, MFC and so on, the study of Windows programming is difficult. With the development of this course, it is necessary to take a deep considering of this course. In this paper, the problems of this course are analyzed according to years of teaching experience. A new teaching mode, which suggests the framework is more important, is proposed. A suit of corresponding experiments are designed.
Key words: Windows programming; API; MFC; framework of programming
0 引言
Windows程序設計是一種實用的面向對象程序設計方法,該方法主要使用API(Application Programming Interface,應用程序編程接口)、MFC(Microsoft Foundation Classes,微軟基礎類庫)等實現,是程序設計的高級形式。近幾年來,為了讓學生更好地接觸流行的程序設計方式,畢業后更好地適應角色融入工作中,很多學校開設了Windows程序設計課程。由于該課程涉及的知識面廣,包含內容的關系錯綜復雜,實際獲得的教學效果并不理想。一些研究[1-3]分析了Windows程序設計課程的特點,提出了相應的教學方案。但是這些方法的使用往往得到只見樹木不見森林的結果。本文分析和研究了Windows程序設計課程教學過程中遇到的問題,提出了合理的解決方案,并設計了一套與之相對應的實驗。所提出的方法在近幾年的教學實踐中獲得了較好的效果。
1 課程的難點
本課程涉及一種實用的程序編寫技術,它和Windows操作系統有著密切的聯系,通過Windows編程技術,既能夠編寫出涉及底層的軟件,也可以實現功能強大的具有Windows窗口界面的程序。然而正是由于其強大的功能,使得初學者無所適從。以下簡要分析本課程的難點。
⑴ 面向過程到面向對象的轉變
學生在接觸本課程之前,一般都學習過諸如C或者C++這類程序設計語言。然而那些課程中編寫的程序主要是面向過程的,程序之間的調用、跳轉清晰明了。會有人說C++是一個面向對象的語言,課程中主要涉及的是控制臺程序,用C++來講解面向過程的程序結構和思想,對于面向對象的講解僅停留在類、對象等概念上,學生很難形成面向對象的深刻認識。
到了Windows程序設計部分,面向對象就涉及到程序的方方面面。對象、類和方法使得整個程序形成一個復雜的關系網,與原先的程序開發思想形成了鮮明的對比。
⑵ 消息驅動機制
傳統的編程方式主要是過程式的結構,從一個部分到另一個部分一目了然。比如在程序中運行一個函數,必須有代碼顯式調用該函數。因此,僅僅讀程序就可以獲得程序完整的流程。
但是消息驅動機制改變了傳統的結構。在這種驅動機制下,程序的流向與當前獲得的消息有關,這樣,每次運行程序時的消息不同會造成不同的運行結果。消息的種類有好多種,其中最常用的是用戶的鼠標、鍵盤交互動作。因此想要更好地掌握Windows程序的設計的結構,理解消息驅動機制是必不可少的。
⑶ API和MFC開發的區別和聯系
API和MFC是實現Windows程序設計的兩種基本途徑。兩者都能實現具體的編程目的,都是基于消息驅動的,但在實現過程中有較大的區別。
API開發方式沒有對程序進行過多封裝,功能的實現都必須調用相應的API函數實現,樣樣事都需要親力親為,優點是開發人員對設計程序的實現有清晰的認識。而MFC則封裝了較多的內容,優點是使開發者集中精力在具體實現上,而不是糾結于界面設計、消息處理的細節,缺點則是初學者不了解程序的流向,不能有效掌控整個程序。
⑷ 對Windows程序設計的結構理解不夠
由于Windows程序設計是基于消息驅動的,編程的時候需要考慮的是如何調用消息處理程序。API比較簡單,一般就是處理窗口的消息。而MFC將這些內容封裝起來,很難直接看到內部的結構。
⑸ API數量龐大,難以記憶
功能強大帶來的副作用就是需要更多的函數實現具體功能。Windows中的API函數多達數千個,隨著Windows的發展,數量還在不斷增加,這給初學者造成了較大的負擔。如何分門別類記憶這些API函數,是Windows程序設計中必須面對的問題。
2 解決方案
Windows程序設計課程中遇到的問題并不是孤立的,它們之間緊密聯系。對這些問題進行深入分析研究,本文提出這樣的教學模式:先掌握程序的框架結構,然后再考慮細節的“磚瓦”。先導課程中有相關程序設計語言課程已訓練過學生的編程思想,本課程主要希望教會學生借助Windows程序設計工具開發結構復雜和功能強大的Windows程序,因此程序整體結構在本課程中具有意義。
面向對象的思想不能僅靠講解對象和類的概念,應該放到具體程序中講解,比如程序的主體中的對象和類。而MFC中更是充滿了類的概念,從整個框架到小的控件都是類的具體對象。當學生知道了這些部分都是對象的時候,他們會恍然大悟。這些類的具體方法也會隨著教學的深入而不斷被提到。
對構架的理解可以通過分析一個樣板程序獲得,并且在隨后的課程中逐漸加深理解。API創建程序的結構比較清晰,一般是創建窗體后進入消息循環。MFC創建的程序主要有三類:對話框、單文檔和多文檔,這三類的結構略有區別。“文檔/視圖”結構是MFC程序的基本結構,它將數據和顯示分開,使程序開發更容易。但是只會往這種結構中填寫程序,則會在文件是如何打開、保存,以及送到屏幕顯示等具體問題上迷惘,因此需要從基本結構入手,深入剖析其程序的消息響應機制。
解決了程序的框架問題,接下來需要進一步訓練學生的面向過程的程序思想,即如何實現一個個程序塊的功能。這些功能塊構建了程序需要的“磚塊”,填入之前設計的結構中就形成了完整的程序。構建“磚塊”就會用到相應的API函數,這時不能一下子將所有API拋給學生。API太多,結構也比較復雜。適宜采用的方法是讓學生掌握部分常用的API函數,然后拓展范圍,教會他們使用MSDN查找具有相應功能的API函數。
3 實驗設計
作為一門實踐性的課程,光靠理論是不能夠讓學生掌握課程的基本內容的,良好的實驗設計可以使學生將書本知識轉化為自己的技術。經過這些整理,設計的實驗包含以下幾個部分。
⑴ Windows應用程序的框架
該實驗主要用于熟悉使用API編寫Windows應用程序的框架,首先實現單窗口程序及其消息處理,并在此基礎上添加其他窗體、對話框,及其消息處理函數。通過API掌握數據的流向。
⑵ Windows應用程序對各種消息的響應
這部分的消息主要包括:鼠標、鍵盤、菜單等。主要掌握各種常見的消息處理,以及這些消息處理中使用的API函數。
⑶ Windows應用程序的圖形和文字輸出
這部分主要訓練學生使用API函數實現輸出功能。
⑷ MFC創建程序的框架
這部分內容包括使用MFC創建單文檔、多文檔和對話框程序,文檔打開、保存,消息傳遞。要著重理解MFC程序的“文檔/視圖”框架。
⑸ MFC創建菜單
菜單中的消息響應機制是這部分的重點,需要掌握手動添加菜單及其相應函數。
⑹ MFC程序中其他控件的使用
如果前面已經掌握了MFC程序的框架,這部分就是在添磚加瓦。每個部分相對獨立,學習的難度不大。
其實驗的安排與書本順序恰恰相反,它遵循了從整體到局部的理念。通過這些實驗,可以讓學生充分掌握Windows程序設計的框架,同時掌握每個細節的編寫方法,實現對Windows程序的全面掌控。
4 結束語
本文針對Windows程序設計課程內容繁多、結構復雜的特點,分析了課程的難點,提出了從結構入手,逐步了解各個細節的學習方法,并配合該方法提出了一套實驗方案。在近些年的教學實踐中,這些方法取得了較好的教學效果。
參考文獻:
[1] 何軍.面向對象思想在Windows程序設計課程中的教學研究[J].福建
電腦,2013.8:186-187
[2] 劉智,張金榮,王森.深入淺出講解“Windows程序設計—Visual C++”
課程[J].計算機時代,2012.9:57-59
[3] 虞芬,鄒睿娟.以學生為中心,培養學習能力—《Windows程序設
計》課程的教學改革與實踐[J].九江職業技術學院學報,2011.2:
46-48