文章編號:1672-5913(2008)06-0081-02
摘要:本文以大學本科計算機科學與技術專業學生為對象,總結分析了“面向對象程序設計與C++”課程教學及實驗環節中存在的問題,并提出一些解決方法和建議。
關鍵詞:面向對象技術;C++;教學;學習方法
中圖分類號:G642
文獻標識碼:B
“面向對象程序設計與C++”課程不僅是高校計算機科學與技術專業大學生學習C++的一門必修課,而且在一些非計算機專業中也常作為選修課,還受到許多計算機專業人士及程序設計人員的青睞。但是,由于課程的抽象性、復雜性,加之學習方法的問題,使得一些學生感覺非常吃力。本文根據筆者親身教學經驗和講授過程中出現的問題,討論相應的解決方法和學習建議,希望能起到拋磚引玉的作用。
1復習不到位
該課程一般在大學二年級開設,因此學生的學習態度都比較端正、積極。在課堂上能夠集中精力,認真聽課,并參與互動。但是在課下工作不到位,主要表現是前導課程的知識遺忘和新講授內容復習的不夠及時。
我們知道,C++中的基礎知識中很大一部分源于其前導課程C語言。C的語法在C++中是兼容的,C++是更高級的支持面向對象技術的C,很多知識點都是相同,如語句的基本結構、各種類型的指針等。可能由于隔了一個學期,記憶不夠扎實,加上新內容沒有復習到位,導致接受更多的新知識時,理解困難。學習的過程應該是發揮主觀能動性,加工研磨現有知識并為已所用的過程。
俗話說“溫故而知新”,課程的基礎知識務必應該做到及時記憶,盡可能多地理解消化。因為很多時候,一些知識點可能需要反復理解才能慢慢吃透。例如,對于多態性的認識、類型兼容規則的理解和運用等。
2抽象問題能力較差
“面向對象程序設計與C++”課程中的主要概念之一就是“類”,因此需要掌握的基本技能之一就是依據所要解決的問題,按照客觀事物的特點進行數據抽象和功能抽象,如圖1。

圖1 面向對象程序設計中對類進行抽象的過程
教學過程中發現大部分學生可以做到合理規劃,但個別細節部分考慮不周,甚至有誤。例如,設計“矩形類”中計算面積的成員函數時,形式參數的確定問題。仔細考慮,不難判斷出該函數不需要從外界獲得信息,只要從內部獲得私有數據成員長和寬進行計算即可。但個別學生所設計的成員函數需要從外界獲得長和寬,顯然不合理,一則破壞了類的封裝性,二則無法保護數據。類似這樣的問題,應從勤于思考,循序漸進,提煉問題本質,培養抽象能力方面著手解決。
3復雜程序的組織思路不清晰
根據教學進度安排,課程伊始就會從軟件工程的角度介紹面向對象的分析(OOA)、面向對象的設計(OOD)、面向對象的編程(OOP)、面向對象的測試(OOT)和面向對象的維護(OOSM)等軟件開發過程的五個階段。
可能由于教材例題以及習題比較簡單,所以在上機實驗時大部分學生是直接進入了OOP階段,對著計算機屏幕編程。而一旦遇到復雜問題就無所適從,不知如何下手。解決方法是進行詳細的OOA和OOD,充分利用UML進行設計,OOP階段只按照OOA階段中制定好的設計步驟編寫代碼。UML與程序設計語言無關,不但可用于表示C++中的類和類間的關系,而且適用于以面向對象技術來描述任何類型的系統。通過課程學習,應當會用UML分析類和類間關系,并掌握繪制UML圖的一種專業軟件,如Visio 2003、Rational Rose、或SkyDesigner等。
4程序調試能力弱
性能良好的程序和軟件不可能一蹴而就,沒有錯誤,因此調試是程序員最基本的技能之一。按照出錯原因,可將之分為兩類:一類是程序編譯錯誤,此時可根據output窗口提示的出錯位置和出錯原因改正,并且每更正一處錯誤就重新編譯一次;另一類是程序邏輯錯誤,這種錯誤需要通過認真分析,先定位錯誤,再改正之。在Visual C++ 6.0環境下,解決方法是利用Debug窗口中提供的工具,功能分別包括:重新開始、中止程序、中斷執行、應用更改;進入下一語句、跳入、跳過、跳出、執行到光標處;快速觀察變量;觀察變量、觀察寄存器、觀察內存、觀察堆棧和匯編等。
需要注意的是,在第二類錯誤的調試過程中,程序員應該比計算機清楚某一時刻程序的運行狀態,做到事先就心中有數,然后有順序地逐步檢驗,才能定位錯誤、解決錯誤。
5不規范的編程習慣
典型的表現之一是所編寫的程序格式混亂,沒有縮進或亂縮進。正確的縮進方法應該是“Tab”鍵的形式,這樣做出來的縮進位置是固定不變的,不能用空格代替。在Visual C++ 6.0環境下,還可借助智能縮進工具,方法是選中需要縮進部分,然后在主菜單“Edit”中選擇“Advanced”,點擊“Format Selection”或者快捷鍵“Alt+F8”。嚴格規范的程序代碼層次清晰,一目了然,可以降低代碼出錯率,例如能夠有效避免括號不配對等低級問題,也便于后期的程序維護與修改工作。
另一個典型表現是程序沒有注釋或者注釋全是廢棄的代碼。雖然在編譯和執行時注釋會被忽略,注釋本身不會增加可執行文件的大小,但是注釋的目的是方便代碼的閱讀和代碼維護。因此,一定要按照統一的規范來書寫足夠的注釋,尤其在相對復雜的程序設計問題和大型項目研發中注釋及說明文檔更加必不可少。現行的代碼規范要求注釋量應占到程序代碼比例的20%左右,即100行程序中包含20行注釋。注釋可以書寫在代碼中的任意位置,但是一般寫在代碼的開始處或者結束處。Visual C++ 6.0中,正確的注釋方法是以“//”為起始的行注釋和“/*….*/”為起止符的多行注釋。最后,修改程序代碼時,一定要更新注釋,同時建議記錄相應的修改日期和程序修改人。
參考文獻
[1] 鄭莉.C++語言程序設計[M]. 北京:清華大學出版社.