張曉峰
摘 要: Windows程序設(shè)計(jì)使得復(fù)雜的軟件開(kāi)發(fā)過(guò)程變得簡(jiǎn)便,但是由于API、MFC等復(fù)雜內(nèi)容的引入,使得該課程的學(xué)習(xí)過(guò)程充滿艱辛,難以獲得滿意的教學(xué)效果。隨著該課程的廣泛開(kāi)展,基于對(duì)該課程教學(xué)模式的深入思考和多年教學(xué)經(jīng)驗(yàn),分析了該課程教學(xué)過(guò)程中存在的問(wèn)題,充分認(rèn)識(shí)到程序整體結(jié)構(gòu)對(duì)于Windows程序設(shè)計(jì)的重要性,提出了“先搭結(jié)構(gòu),再添磚瓦”的教學(xué)模式,并設(shè)計(jì)了一套與之相對(duì)應(yīng)的實(shí)驗(yàn)。
關(guān)鍵詞: Windows程序設(shè)計(jì); API; MFC; 程序框架
中圖分類(lèi)號(hào):G42 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):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程序設(shè)計(jì)是一種實(shí)用的面向?qū)ο蟪绦蛟O(shè)計(jì)方法,該方法主要使用API(Application Programming Interface,應(yīng)用程序編程接口)、MFC(Microsoft Foundation Classes,微軟基礎(chǔ)類(lèi)庫(kù))等實(shí)現(xiàn),是程序設(shè)計(jì)的高級(jí)形式。近幾年來(lái),為了讓學(xué)生更好地接觸流行的程序設(shè)計(jì)方式,畢業(yè)后更好地適應(yīng)角色融入工作中,很多學(xué)校開(kāi)設(shè)了Windows程序設(shè)計(jì)課程。由于該課程涉及的知識(shí)面廣,包含內(nèi)容的關(guān)系錯(cuò)綜復(fù)雜,實(shí)際獲得的教學(xué)效果并不理想。一些研究[1-3]分析了Windows程序設(shè)計(jì)課程的特點(diǎn),提出了相應(yīng)的教學(xué)方案。但是這些方法的使用往往得到只見(jiàn)樹(shù)木不見(jiàn)森林的結(jié)果。本文分析和研究了Windows程序設(shè)計(jì)課程教學(xué)過(guò)程中遇到的問(wèn)題,提出了合理的解決方案,并設(shè)計(jì)了一套與之相對(duì)應(yīng)的實(shí)驗(yàn)。所提出的方法在近幾年的教學(xué)實(shí)踐中獲得了較好的效果。
1 課程的難點(diǎn)
本課程涉及一種實(shí)用的程序編寫(xiě)技術(shù),它和Windows操作系統(tǒng)有著密切的聯(lián)系,通過(guò)Windows編程技術(shù),既能夠編寫(xiě)出涉及底層的軟件,也可以實(shí)現(xiàn)功能強(qiáng)大的具有Windows窗口界面的程序。然而正是由于其強(qiáng)大的功能,使得初學(xué)者無(wú)所適從。以下簡(jiǎn)要分析本課程的難點(diǎn)。
⑴ 面向過(guò)程到面向?qū)ο蟮霓D(zhuǎn)變
學(xué)生在接觸本課程之前,一般都學(xué)習(xí)過(guò)諸如C或者C++這類(lèi)程序設(shè)計(jì)語(yǔ)言。然而那些課程中編寫(xiě)的程序主要是面向過(guò)程的,程序之間的調(diào)用、跳轉(zhuǎn)清晰明了。會(huì)有人說(shuō)C++是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,課程中主要涉及的是控制臺(tái)程序,用C++來(lái)講解面向過(guò)程的程序結(jié)構(gòu)和思想,對(duì)于面向?qū)ο蟮闹v解僅停留在類(lèi)、對(duì)象等概念上,學(xué)生很難形成面向?qū)ο蟮纳羁陶J(rèn)識(shí)。
到了Windows程序設(shè)計(jì)部分,面向?qū)ο缶蜕婕暗匠绦虻姆椒矫婷?。?duì)象、類(lèi)和方法使得整個(gè)程序形成一個(gè)復(fù)雜的關(guān)系網(wǎng),與原先的程序開(kāi)發(fā)思想形成了鮮明的對(duì)比。
⑵ 消息驅(qū)動(dòng)機(jī)制
傳統(tǒng)的編程方式主要是過(guò)程式的結(jié)構(gòu),從一個(gè)部分到另一個(gè)部分一目了然。比如在程序中運(yùn)行一個(gè)函數(shù),必須有代碼顯式調(diào)用該函數(shù)。因此,僅僅讀程序就可以獲得程序完整的流程。
但是消息驅(qū)動(dòng)機(jī)制改變了傳統(tǒng)的結(jié)構(gòu)。在這種驅(qū)動(dòng)機(jī)制下,程序的流向與當(dāng)前獲得的消息有關(guān),這樣,每次運(yùn)行程序時(shí)的消息不同會(huì)造成不同的運(yùn)行結(jié)果。消息的種類(lèi)有好多種,其中最常用的是用戶(hù)的鼠標(biāo)、鍵盤(pán)交互動(dòng)作。因此想要更好地掌握Windows程序的設(shè)計(jì)的結(jié)構(gòu),理解消息驅(qū)動(dòng)機(jī)制是必不可少的。
⑶ API和MFC開(kāi)發(fā)的區(qū)別和聯(lián)系
API和MFC是實(shí)現(xiàn)Windows程序設(shè)計(jì)的兩種基本途徑。兩者都能實(shí)現(xiàn)具體的編程目的,都是基于消息驅(qū)動(dòng)的,但在實(shí)現(xiàn)過(guò)程中有較大的區(qū)別。
API開(kāi)發(fā)方式?jīng)]有對(duì)程序進(jìn)行過(guò)多封裝,功能的實(shí)現(xiàn)都必須調(diào)用相應(yīng)的API函數(shù)實(shí)現(xiàn),樣樣事都需要親力親為,優(yōu)點(diǎn)是開(kāi)發(fā)人員對(duì)設(shè)計(jì)程序的實(shí)現(xiàn)有清晰的認(rèn)識(shí)。而MFC則封裝了較多的內(nèi)容,優(yōu)點(diǎn)是使開(kāi)發(fā)者集中精力在具體實(shí)現(xiàn)上,而不是糾結(jié)于界面設(shè)計(jì)、消息處理的細(xì)節(jié),缺點(diǎn)則是初學(xué)者不了解程序的流向,不能有效掌控整個(gè)程序。
⑷ 對(duì)Windows程序設(shè)計(jì)的結(jié)構(gòu)理解不夠
由于Windows程序設(shè)計(jì)是基于消息驅(qū)動(dòng)的,編程的時(shí)候需要考慮的是如何調(diào)用消息處理程序。API比較簡(jiǎn)單,一般就是處理窗口的消息。而MFC將這些內(nèi)容封裝起來(lái),很難直接看到內(nèi)部的結(jié)構(gòu)。
⑸ API數(shù)量龐大,難以記憶
功能強(qiáng)大帶來(lái)的副作用就是需要更多的函數(shù)實(shí)現(xiàn)具體功能。Windows中的API函數(shù)多達(dá)數(shù)千個(gè),隨著Windows的發(fā)展,數(shù)量還在不斷增加,這給初學(xué)者造成了較大的負(fù)擔(dān)。如何分門(mén)別類(lèi)記憶這些API函數(shù),是Windows程序設(shè)計(jì)中必須面對(duì)的問(wèn)題。
2 解決方案
Windows程序設(shè)計(jì)課程中遇到的問(wèn)題并不是孤立的,它們之間緊密聯(lián)系。對(duì)這些問(wèn)題進(jìn)行深入分析研究,本文提出這樣的教學(xué)模式:先掌握程序的框架結(jié)構(gòu),然后再考慮細(xì)節(jié)的“磚瓦”。先導(dǎo)課程中有相關(guān)程序設(shè)計(jì)語(yǔ)言課程已訓(xùn)練過(guò)學(xué)生的編程思想,本課程主要希望教會(huì)學(xué)生借助Windows程序設(shè)計(jì)工具開(kāi)發(fā)結(jié)構(gòu)復(fù)雜和功能強(qiáng)大的Windows程序,因此程序整體結(jié)構(gòu)在本課程中具有意義。
面向?qū)ο蟮乃枷氩荒軆H靠講解對(duì)象和類(lèi)的概念,應(yīng)該放到具體程序中講解,比如程序的主體中的對(duì)象和類(lèi)。而MFC中更是充滿了類(lèi)的概念,從整個(gè)框架到小的控件都是類(lèi)的具體對(duì)象。當(dāng)學(xué)生知道了這些部分都是對(duì)象的時(shí)候,他們會(huì)恍然大悟。這些類(lèi)的具體方法也會(huì)隨著教學(xué)的深入而不斷被提到。
對(duì)構(gòu)架的理解可以通過(guò)分析一個(gè)樣板程序獲得,并且在隨后的課程中逐漸加深理解。API創(chuàng)建程序的結(jié)構(gòu)比較清晰,一般是創(chuàng)建窗體后進(jìn)入消息循環(huán)。MFC創(chuàng)建的程序主要有三類(lèi):對(duì)話框、單文檔和多文檔,這三類(lèi)的結(jié)構(gòu)略有區(qū)別?!拔臋n/視圖”結(jié)構(gòu)是MFC程序的基本結(jié)構(gòu),它將數(shù)據(jù)和顯示分開(kāi),使程序開(kāi)發(fā)更容易。但是只會(huì)往這種結(jié)構(gòu)中填寫(xiě)程序,則會(huì)在文件是如何打開(kāi)、保存,以及送到屏幕顯示等具體問(wèn)題上迷惘,因此需要從基本結(jié)構(gòu)入手,深入剖析其程序的消息響應(yīng)機(jī)制。
解決了程序的框架問(wèn)題,接下來(lái)需要進(jìn)一步訓(xùn)練學(xué)生的面向過(guò)程的程序思想,即如何實(shí)現(xiàn)一個(gè)個(gè)程序塊的功能。這些功能塊構(gòu)建了程序需要的“磚塊”,填入之前設(shè)計(jì)的結(jié)構(gòu)中就形成了完整的程序。構(gòu)建“磚塊”就會(huì)用到相應(yīng)的API函數(shù),這時(shí)不能一下子將所有API拋給學(xué)生。API太多,結(jié)構(gòu)也比較復(fù)雜。適宜采用的方法是讓學(xué)生掌握部分常用的API函數(shù),然后拓展范圍,教會(huì)他們使用MSDN查找具有相應(yīng)功能的API函數(shù)。
3 實(shí)驗(yàn)設(shè)計(jì)
作為一門(mén)實(shí)踐性的課程,光靠理論是不能夠讓學(xué)生掌握課程的基本內(nèi)容的,良好的實(shí)驗(yàn)設(shè)計(jì)可以使學(xué)生將書(shū)本知識(shí)轉(zhuǎn)化為自己的技術(shù)。經(jīng)過(guò)這些整理,設(shè)計(jì)的實(shí)驗(yàn)包含以下幾個(gè)部分。
⑴ Windows應(yīng)用程序的框架
該實(shí)驗(yàn)主要用于熟悉使用API編寫(xiě)Windows應(yīng)用程序的框架,首先實(shí)現(xiàn)單窗口程序及其消息處理,并在此基礎(chǔ)上添加其他窗體、對(duì)話框,及其消息處理函數(shù)。通過(guò)API掌握數(shù)據(jù)的流向。
⑵ Windows應(yīng)用程序?qū)Ω鞣N消息的響應(yīng)
這部分的消息主要包括:鼠標(biāo)、鍵盤(pán)、菜單等。主要掌握各種常見(jiàn)的消息處理,以及這些消息處理中使用的API函數(shù)。
⑶ Windows應(yīng)用程序的圖形和文字輸出
這部分主要訓(xùn)練學(xué)生使用API函數(shù)實(shí)現(xiàn)輸出功能。
⑷ MFC創(chuàng)建程序的框架
這部分內(nèi)容包括使用MFC創(chuàng)建單文檔、多文檔和對(duì)話框程序,文檔打開(kāi)、保存,消息傳遞。要著重理解MFC程序的“文檔/視圖”框架。
⑸ MFC創(chuàng)建菜單
菜單中的消息響應(yīng)機(jī)制是這部分的重點(diǎn),需要掌握手動(dòng)添加菜單及其相應(yīng)函數(shù)。
⑹ MFC程序中其他控件的使用
如果前面已經(jīng)掌握了MFC程序的框架,這部分就是在添磚加瓦。每個(gè)部分相對(duì)獨(dú)立,學(xué)習(xí)的難度不大。
其實(shí)驗(yàn)的安排與書(shū)本順序恰恰相反,它遵循了從整體到局部的理念。通過(guò)這些實(shí)驗(yàn),可以讓學(xué)生充分掌握Windows程序設(shè)計(jì)的框架,同時(shí)掌握每個(gè)細(xì)節(jié)的編寫(xiě)方法,實(shí)現(xiàn)對(duì)Windows程序的全面掌控。
4 結(jié)束語(yǔ)
本文針對(duì)Windows程序設(shè)計(jì)課程內(nèi)容繁多、結(jié)構(gòu)復(fù)雜的特點(diǎn),分析了課程的難點(diǎn),提出了從結(jié)構(gòu)入手,逐步了解各個(gè)細(xì)節(jié)的學(xué)習(xí)方法,并配合該方法提出了一套實(shí)驗(yàn)方案。在近些年的教學(xué)實(shí)踐中,這些方法取得了較好的教學(xué)效果。
參考文獻(xiàn):
[1] 何軍.面向?qū)ο笏枷朐赪indows程序設(shè)計(jì)課程中的教學(xué)研究[J].福建
電腦,2013.8:186-187
[2] 劉智,張金榮,王森.深入淺出講解“Windows程序設(shè)計(jì)—Visual C++”
課程[J].計(jì)算機(jī)時(shí)代,2012.9:57-59
[3] 虞芬,鄒睿娟.以學(xué)生為中心,培養(yǎng)學(xué)習(xí)能力—《Windows程序設(shè)
計(jì)》課程的教學(xué)改革與實(shí)踐[J].九江職業(yè)技術(shù)學(xué)院學(xué)報(bào),2011.2:
46-48