文章編號:1672-5913(2008)06-0081-02
摘要:本文以大學(xué)本科計算機科學(xué)與技術(shù)專業(yè)學(xué)生為對象,總結(jié)分析了“面向?qū)ο蟪绦蛟O(shè)計與C++”課程教學(xué)及實驗環(huán)節(jié)中存在的問題,并提出一些解決方法和建議。
關(guān)鍵詞:面向?qū)ο蠹夹g(shù);C++;教學(xué);學(xué)習(xí)方法
中圖分類號:G642
文獻(xiàn)標(biāo)識碼:B
“面向?qū)ο蟪绦蛟O(shè)計與C++”課程不僅是高校計算機科學(xué)與技術(shù)專業(yè)大學(xué)生學(xué)習(xí)C++的一門必修課,而且在一些非計算機專業(yè)中也常作為選修課,還受到許多計算機專業(yè)人士及程序設(shè)計人員的青睞。但是,由于課程的抽象性、復(fù)雜性,加之學(xué)習(xí)方法的問題,使得一些學(xué)生感覺非常吃力。本文根據(jù)筆者親身教學(xué)經(jīng)驗和講授過程中出現(xiàn)的問題,討論相應(yīng)的解決方法和學(xué)習(xí)建議,希望能起到拋磚引玉的作用。
1復(fù)習(xí)不到位
該課程一般在大學(xué)二年級開設(shè),因此學(xué)生的學(xué)習(xí)態(tài)度都比較端正、積極。在課堂上能夠集中精力,認(rèn)真聽課,并參與互動。但是在課下工作不到位,主要表現(xiàn)是前導(dǎo)課程的知識遺忘和新講授內(nèi)容復(fù)習(xí)的不夠及時。
我們知道,C++中的基礎(chǔ)知識中很大一部分源于其前導(dǎo)課程C語言。C的語法在C++中是兼容的,C++是更高級的支持面向?qū)ο蠹夹g(shù)的C,很多知識點都是相同,如語句的基本結(jié)構(gòu)、各種類型的指針等。可能由于隔了一個學(xué)期,記憶不夠扎實,加上新內(nèi)容沒有復(fù)習(xí)到位,導(dǎo)致接受更多的新知識時,理解困難。學(xué)習(xí)的過程應(yīng)該是發(fā)揮主觀能動性,加工研磨現(xiàn)有知識并為已所用的過程。
俗話說“溫故而知新”,課程的基礎(chǔ)知識務(wù)必應(yīng)該做到及時記憶,盡可能多地理解消化。因為很多時候,一些知識點可能需要反復(fù)理解才能慢慢吃透。例如,對于多態(tài)性的認(rèn)識、類型兼容規(guī)則的理解和運用等。
2抽象問題能力較差
“面向?qū)ο蟪绦蛟O(shè)計與C++”課程中的主要概念之一就是“類”,因此需要掌握的基本技能之一就是依據(jù)所要解決的問題,按照客觀事物的特點進(jìn)行數(shù)據(jù)抽象和功能抽象,如圖1。
圖1 面向?qū)ο蟪绦蛟O(shè)計中對類進(jìn)行抽象的過程
教學(xué)過程中發(fā)現(xiàn)大部分學(xué)生可以做到合理規(guī)劃,但個別細(xì)節(jié)部分考慮不周,甚至有誤。例如,設(shè)計“矩形類”中計算面積的成員函數(shù)時,形式參數(shù)的確定問題。仔細(xì)考慮,不難判斷出該函數(shù)不需要從外界獲得信息,只要從內(nèi)部獲得私有數(shù)據(jù)成員長和寬進(jìn)行計算即可。但個別學(xué)生所設(shè)計的成員函數(shù)需要從外界獲得長和寬,顯然不合理,一則破壞了類的封裝性,二則無法保護(hù)數(shù)據(jù)。類似這樣的問題,應(yīng)從勤于思考,循序漸進(jìn),提煉問題本質(zhì),培養(yǎng)抽象能力方面著手解決。
3復(fù)雜程序的組織思路不清晰
根據(jù)教學(xué)進(jìn)度安排,課程伊始就會從軟件工程的角度介紹面向?qū)ο蟮姆治?OOA)、面向?qū)ο蟮脑O(shè)計(OOD)、面向?qū)ο蟮木幊?OOP)、面向?qū)ο蟮臏y試(OOT)和面向?qū)ο蟮木S護(hù)(OOSM)等軟件開發(fā)過程的五個階段。
可能由于教材例題以及習(xí)題比較簡單,所以在上機實驗時大部分學(xué)生是直接進(jìn)入了OOP階段,對著計算機屏幕編程。而一旦遇到復(fù)雜問題就無所適從,不知如何下手。解決方法是進(jìn)行詳細(xì)的OOA和OOD,充分利用UML進(jìn)行設(shè)計,OOP階段只按照OOA階段中制定好的設(shè)計步驟編寫代碼。UML與程序設(shè)計語言無關(guān),不但可用于表示C++中的類和類間的關(guān)系,而且適用于以面向?qū)ο蠹夹g(shù)來描述任何類型的系統(tǒng)。通過課程學(xué)習(xí),應(yīng)當(dāng)會用UML分析類和類間關(guān)系,并掌握繪制UML圖的一種專業(yè)軟件,如Visio 2003、Rational Rose、或SkyDesigner等。
4程序調(diào)試能力弱
性能良好的程序和軟件不可能一蹴而就,沒有錯誤,因此調(diào)試是程序員最基本的技能之一。按照出錯原因,可將之分為兩類:一類是程序編譯錯誤,此時可根據(jù)output窗口提示的出錯位置和出錯原因改正,并且每更正一處錯誤就重新編譯一次;另一類是程序邏輯錯誤,這種錯誤需要通過認(rèn)真分析,先定位錯誤,再改正之。在Visual C++ 6.0環(huán)境下,解決方法是利用Debug窗口中提供的工具,功能分別包括:重新開始、中止程序、中斷執(zhí)行、應(yīng)用更改;進(jìn)入下一語句、跳入、跳過、跳出、執(zhí)行到光標(biāo)處;快速觀察變量;觀察變量、觀察寄存器、觀察內(nèi)存、觀察堆棧和匯編等。
需要注意的是,在第二類錯誤的調(diào)試過程中,程序員應(yīng)該比計算機清楚某一時刻程序的運行狀態(tài),做到事先就心中有數(shù),然后有順序地逐步檢驗,才能定位錯誤、解決錯誤。
5不規(guī)范的編程習(xí)慣
典型的表現(xiàn)之一是所編寫的程序格式混亂,沒有縮進(jìn)或亂縮進(jìn)。正確的縮進(jìn)方法應(yīng)該是“Tab”鍵的形式,這樣做出來的縮進(jìn)位置是固定不變的,不能用空格代替。在Visual C++ 6.0環(huán)境下,還可借助智能縮進(jìn)工具,方法是選中需要縮進(jìn)部分,然后在主菜單“Edit”中選擇“Advanced”,點擊“Format Selection”或者快捷鍵“Alt+F8”。嚴(yán)格規(guī)范的程序代碼層次清晰,一目了然,可以降低代碼出錯率,例如能夠有效避免括號不配對等低級問題,也便于后期的程序維護(hù)與修改工作。
另一個典型表現(xiàn)是程序沒有注釋或者注釋全是廢棄的代碼。雖然在編譯和執(zhí)行時注釋會被忽略,注釋本身不會增加可執(zhí)行文件的大小,但是注釋的目的是方便代碼的閱讀和代碼維護(hù)。因此,一定要按照統(tǒng)一的規(guī)范來書寫足夠的注釋,尤其在相對復(fù)雜的程序設(shè)計問題和大型項目研發(fā)中注釋及說明文檔更加必不可少。現(xiàn)行的代碼規(guī)范要求注釋量應(yīng)占到程序代碼比例的20%左右,即100行程序中包含20行注釋。注釋可以書寫在代碼中的任意位置,但是一般寫在代碼的開始處或者結(jié)束處。Visual C++ 6.0中,正確的注釋方法是以“//”為起始的行注釋和“/*….*/”為起止符的多行注釋。最后,修改程序代碼時,一定要更新注釋,同時建議記錄相應(yīng)的修改日期和程序修改人。
參考文獻(xiàn)
[1] 鄭莉.C++語言程序設(shè)計[M]. 北京:清華大學(xué)出版社.