徐 翔
[摘要]C++程序設計是計算機專業(yè)的核心課程,目前在教學過程中普遍存在重“語法”,輕“設計”的現(xiàn)象。給出一種新的教學方法,通過采用故事演繹,結(jié)合UML進行面向?qū)ο蠓治?,以及案例教學的方式引導學生提高實際的編程能力,達到較好的效果。
[關鍵詞]C++ 面向?qū)ο?UML
中圖分類號:G42文獻標識碼:A文章編號:1671-7597(2009)0120155-02
一、引言
C++是一門面向?qū)ο蟮某绦蛟O計語言,在講授C++程序設計的過程中,應該注重面向?qū)ο笏枷氲墓噍?。但是,在實際的教學過程中教師往往將重心放在講授一些語法和語句結(jié)構上,對學生面向?qū)ο蟮南到y(tǒng)分析和設計能力的培養(yǎng)沒有落到實處,最終導致學生學習完C++后,仍然只知道C++語言本身的一些語法,對于老師提出的諸如“如何找類?”、“每個類的屬性和行為應該有哪些?”等問題仍然無從回答。沒有真正掌握面向?qū)ο蟮乃枷敕椒?,更談不上解決實際問題,同時也嚴重影響了后續(xù)課程的學習。因此,有必要對該課程的教學內(nèi)容和教學方法進行改革。
二、教學改革探討
(一)以故事演繹的方式建立面向?qū)ο蟮氖澜缬^
傳統(tǒng)的教學方法都是直接介紹C++語言對類、繼承和多態(tài)的語法實現(xiàn)和編寫規(guī)則,但是卻忽略了對學生進行面向?qū)ο笫澜缬^的建立,導致很多學生學完了課程后,雖然掌握了類的編寫語法,但仍然不明白應該何時去使用類去構建系統(tǒng),到底應該構建哪些類,最終導致去解決實際問題時,雖然表面上使用了面向?qū)ο蟮恼Z言和面向?qū)ο蟮墓ぞ?,但其實還是假對象。這種現(xiàn)象非常普遍,他們中的對象絕大多數(shù)不過是對傳統(tǒng)程序的一個簡單包裝,卻根本沒有考慮到面向?qū)ο蟮哪康模撼橄?、繼承、高效率、可靠性、靈活性、更好的體系結(jié)構、更快的客戶響應等問題。因此,在學習具體面向?qū)ο缶幊讨?,讓學生建立起面向?qū)ο蟮氖澜缬^尤為重要。
因此在教學內(nèi)容的安排上,我們不急于向?qū)W生講授C++的相關語法,而是首先通過采用一些通俗簡單的生活事例來演繹對各種面向?qū)ο蟮幕靖拍畹恼J識。比如我們會舉例“某位同學考上了研究生”,然后引導大家對他考上研究生的過程進行故事演繹,通過從以下幾個不同的角度培養(yǎng)學生去看待故事中的事物:
角度一:故事里有什么事物?
角度二:每個事物看上去是什么樣的?
角度三:每個事物能做什么?
角度四:這些事物之間有什么關系?
角度五:這些事物最終是如何完成目標的?
學生完成了對問題的討論后,也就自然了解了找對象的過程,以及對象的屬性和方法。同時也了解了對象之間是如何通過分工合作,相互發(fā)消息完成最終目標的。在輕松愉快的環(huán)境中讓學生樹立起面向?qū)ο蟮氖澜缬^。提高了學習面向?qū)ο缶幊痰臒岢馈?/p>
(二)結(jié)合UML進行面向?qū)ο蠓治鲈O計能力的培養(yǎng)
為了培養(yǎng)學生面向?qū)ο蟮姆治鰡栴}和解決問題的基本能力,我們在教學內(nèi)容上還設置了“面向?qū)ο蟮南到y(tǒng)分析和設計基礎”部分,該部分主要從系統(tǒng)分析和設計的角度出發(fā)解釋面向?qū)ο蟮南到y(tǒng)設計的基本過程,使學生了解面向?qū)ο蟮幕靖拍?,培養(yǎng)學生采用面向?qū)ο蟮乃季S去思考問題、分析問題的能力。
在這個階段我們設計了一個“超市銷售系統(tǒng)”的教學案例,通過對案例的分析,培養(yǎng)學生如何從需求說明書中通過詞匯分析獲取類的參考列表,如何獲取在類的參考列表的基礎上,根據(jù)實際的系統(tǒng)需求完善類的層次結(jié)構等等。
在這個階段借助UML建模工具Rational Rose,以圖形化的方式描述整個系統(tǒng)的類之間的關系。UML是標準的建模語言,它內(nèi)容豐富,功能強大,在通過大約為期兩個星期的面向?qū)ο蟮南到y(tǒng)分析訓練之后,學生基本上能完成對該系統(tǒng)的類模型和時序模型的建立,達到了預期的效果。
以“超市銷售系統(tǒng)”的教學案例為例,具體實施過程如下:
1.提出需求
為某超市開發(fā)一款銷售系統(tǒng),完成日常銷售業(yè)務?;疽笕缦拢?/p>
編寫一個函數(shù)實現(xiàn)客戶購買商品找零的過程模擬。其中每種商品有一個標價,但是客戶在購買時除了按標價付費外,還必須支付額外的稅費,而且不同類型的商品計算稅費的方式不同,具體描述如下:
衣服:稅費=0.01*標價。
食品:稅費=0.03*標價。
電器:如果標價>1000,稅費=50元。否則,稅費=0.05*標價。
其次,客戶分不同的等級,每種等級的打折策略不同,具體描述如下:
鉆石會員:購買總費用>1000,返現(xiàn)300;否則打75折。
金卡會員:購買總費用>1000,返現(xiàn)200;否則打85折。
銀卡會員:打95折。
2.引導學生完成類的設計
在完成了面向?qū)ο蟮姆治龊驮O計后,給出系統(tǒng)中現(xiàn)有類的實現(xiàn),學生在老師的引導下,都能寫出諸如“衣服”、“食品”、“電器”、“鉆石會員”、“金卡會員”和“銀卡會員”等類。并給出每個類的相關屬性和方法的定義。(見圖1)
3.構建類的繼承體系
在完成了類的定義后,引導學生發(fā)現(xiàn)類之間的共性,從而將這種共性抽象到一個共同的基類中,并完成整個系統(tǒng)的繼承體系的構建。完成這一部后,學生已經(jīng)能感覺到這種抽象繼承所帶來的好處了。(見圖2、圖3)
4.編寫通用的交易函數(shù)
系統(tǒng)最終的目的是要寫一個函數(shù)實現(xiàn)客戶購買商品并完成找零的過程模擬,同時老師在這一階段提出更高的要求,希望這個函數(shù)足夠通用,不會因為新增的商品和新的會員類型而發(fā)生修改。此時,將多態(tài)所帶來的隱藏具體實現(xiàn),解決相似性問題的好處講解給學生聽,并通過繼承和虛函數(shù)給出實現(xiàn)形式,讓學生在實踐中明白什么叫做“同一接口,多種方法”。以及多態(tài)性所帶來的簡化程序設計邏輯,增強程序的可讀性與可維護性。(見圖4)
5.最終實現(xiàn)代碼
通過對上述教學案例的演繹,真正讓學生明白了面向?qū)ο蟮膹姶笏?,也激發(fā)了學生對編程的熱愛,為今后用面向?qū)ο蟮姆椒ń鉀Q實際問題打下了堅實的基礎。實踐證明,通過這樣的改革實踐,效果是很明顯的。
三、總結(jié)
面向?qū)ο蠹夹g的基礎是封裝,面向?qū)ο蟮暮诵氖嵌鄳B(tài),而多態(tài)是接口和實現(xiàn)分離的更高級升華,使得在運行時可以動態(tài)根據(jù)條件來選擇隱藏在接口后面的實現(xiàn),面向?qū)ο蟮谋憩F(xiàn)形式是類和繼承。面向?qū)ο蟮闹饕繕耸鞘瓜到y(tǒng)對象化,良好的對象化的結(jié)果,就是系統(tǒng)的各部分更加清晰化,耦合度大大降低。通過讓學生徹底了解C++語言和面向?qū)ο蟮年P系及其特點,才能理順面向?qū)ο蟪绦蛟O計的思路。
本文探討了在教學中通過如何樹立學生面向?qū)ο蟮氖澜缬^,培養(yǎng)學生面向?qū)ο蟮姆治鲈O計能力,讓學生掌握如何運用C++語言完成面向?qū)ο蟮某绦蛟O計等方面的教學改革實踐。除上述討論的問題以外,在《C++面向?qū)ο蟪绦蛟O計》課程教學過程中還會遇到很多的問題。這只有通過不斷的分析、探索和研究才能找出更好的解決方案。
參考文獻:
[1]劉宗田主編,C++編程思想[M].北京:機械工業(yè)出版社,2005.
[2]錢能,c++程序設計教程[M].北京:清華大學出版社,2004.
[3]張迎新,面向?qū)ο蟪绦蛟O計課程的研究[J].北京工商大學學報(自然科學版),2003,(4).
作者簡介:
徐翔,男,湖北仙桃人,碩士,講師,主要研究方向:軟件工程。