摘 ?要: 面向對象分析與設計課程理論性比較強,內容設計上也比較繁雜,容易在教學中失去重點,針對教學中培養面向對象思維難點進行分析,闡明引導學生理解面向對象設計的目的和用途的重要性,并使用層層遞進方法解決為何學的問題;圍繞面向對象設計的目的,闡述面向對象的基本特征與設計原則和模式的內在關聯,進一步明確面向對象設計的本質。
關鍵詞: 面向對象分析與設計課程;面向對象思維;面向對象分析與設計
中圖分類號: TP311 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.05.017
本文著錄格式:郭惠芳. 以面向對象思維為主線的教學設計研究[J]. 軟件,2019,40(5):9092
【Abstract】: The course of object-oriented analysis and design is relatively theoretical and complex in content design, which is easy to lose its focus in teaching. This paper analyses the difficulties in training object-oriented thinking in teaching, clarifies the importance of guiding students to understand the purpose and purpose of object-oriented design, and uses the progressive method to solve the problem of why to learn; expounds the purpose of object-oriented design around the purpose of object-oriented design. This paper describes the basic characteristics of object-oriented design and the inherent relationship between design principles and patterns, and further clarifies the essence of object-oriented design.
【Key words】: Object-oriented analysis and design curriculum; Object-oriented thinking; Object-oriented analysis and design
0 ?引言
有些概念是屬于人人都知道,甚至人人都在用,卻并不深知,面向對象就是其中之一。有不少學生畢業幾年后,與我反映,用了多年的面向對象語言,卻并未真正進行過面向對象的設計。自己也是在工作多年后,在不斷的摸索中慢慢對面向對象思想有所認識。
1 ?面向對象語言的普及
“面向對象程序設計”課程是計科和軟件專業的專業基礎課,這類課程著重于講解面向對象程序設計語言的語法、數據結構及算法,學生之前也掌握了Java語言/C++語言,但在實踐項目中卻很難有效使用面向對象的設計方法[1]。
學習了“面向對象分析與設計”課程后,這種情況有所改善,大部分學生明白了使用一門面向對象語言進行程序設計與面向對象的設計是兩碼事,面向對象它是一種思維方式,也是一項程序設計技術。它的基本思路是利用對象各司其職、相互協作完成每項工作,設計中有一系列原則和方法來保證系統各部分的低耦合、高內聚性,以得到一個維護成本低、靈活性和可擴展性好的系統。但就多數年輕的軟件從業者的反映看,真正的面向對象的設計還遠未達到[2]。
2 ?解決為什么要學的問題
2.1 ?直觀的引入
在面向對象分析與設計課程中常說的一句話就是,面向對象的設計思想是最接近人的思維,符合人類對現實世界的認知,這個世界是由人組成的,每個人又各司其職,需要別人協助時,可以借用另一個人或團體來完成。那么每個人就是一個對象,每一種角色就是一個類。各自獨立又相互協作完成一個系統的運轉。這個道理是挺好理解的,但這個道理好像還不足以說服學生從編寫面向過程的思路改變為面向對象。[3-4]
那么在軟件設計時如何才能盡力減少這種軟件維護的成本呢?抽象是一種行之有效的方法,是人類掌握復雜事物,設計復雜事物的基本方法。如何講讓“抽象”的概念不那么抽象呢?
2.2 ?抽象的層次
1)面向過程中的算法抽象
抽象這個概念離我們并不遙遠,大家熟知的數據結構其實也是一種抽象,它是一種比算法抽象更底層的抽象。比如一個數組,一個二叉樹,它們都是代表一種數據集合的抽象,解決特定問題時它們使用起來更為方便而已。[5-7]
2)面向對象的抽象
由于學生此時一般已學習過Java或C++語言,可以直接用代碼來實現上述的對象,并在主程序中使用這些對象,使學生直觀理解,在更大范圍內進行抽象的好處。將事物的數據及行為進行封裝,并對相似的事物的行為進行抽象,這樣使用一個復雜系統會更加簡便。
2.3 ?軟件的靈活性
從許多事例中我們得到一個結論,一個軟件系統只要它在使用,就會有需求變化,因為這個世界在不斷變化之中,需求變更是不可避免的,識別并定義那些系統中相對穩對的部分,并在構建軟件系統時將這部分抽象出來。在面向對象的設計中給出了多種分離抽象與具體實現的手段,讓系統的其它部分建立在相對穩定的抽象(接口)之上,而具體實現可以在以后被新的需求所替代[8-9]。
3 ?面向對象思維的具體體現
3.1 ?理解面向對象的基本特征
面向對象的基本特征一般說法是三個:封裝、繼承和多態,還有說法是四個:封裝、繼承、抽象和多態。
1)封裝,這個特征是所有面向對象系統中都會使用到的,但封裝得合適與否,就大不相同了。封裝的作用我們前面提到一個就是方便共享,將數據與其行為進行封裝,使用時比使用一堆函數要方便;但封裝得合適與否的標準卻并不是一句話能講清楚的,我們只能說合適的封裝是需要一個過程的,伴隨著系統分析與設計過程,需要經過反復的重構,最終才能得到一個合適封裝的系統。
2)繼承,這個特征是面向對象中代碼重用的重要手段之一,通過繼承父類的非私有成員,子類獲得了在父類中已定義好的大部分功能,初學者比較喜歡用這個特征,但這個特征最容易被過度使用,隨著我們后面學習面向對象設計原則中舉的一些例子,會讓學生理解有些繼承不如組合這種特征靈活。
3)多態,這個特征一直是一些學生的難點,多態是指父對象中的同一個行為能在其多個子對象中有不同的表現。這是為什么呢?為啥需要有這個多種表現呢?這些問題都是影響學生理解這一概念的難點所在。
3.2 ?面向對象設計原則與模式
面向對象的設計原則講五個足夠了,它的核心就是開閉原則,而里氏替換、依賴倒置等原則都是為開閉原則提供具體的手段。使用案例講清楚每個原則的含義,讓學生理解它的用途,真正運用這些原則需要一個循序漸進的過程,在后面的設計模式中可以再舉些例子加強對原則的理解,因為面向對象的設計模式無一不是對原則的不同詮釋。
4 ?實際系統設計中貫徹面向對象思維
在面向對象分析與設計課程中,我們是這么安排:
單元一 面向對象的基本概念。在此單元中解決為什么要學面向對象,面向對象設計的目的是什么。有了目標,有了基本的面向對象的思維,在實際系統設計中如何使用就不會沒有方向。
單元二 統一建模語言概述。此單元概要地介紹UML這種建模語言的概貌,以及發展歷程。為下面系統的分析與設計做準備。
單元三 面向對象的分析。此單元著重介紹在需求分析階段,如何適當使用UML中的用例模型、分析類圖及輔助模型進行需求分析及表示。
單元四 面向對象的設計。此單元著重介紹在系統設計過程中如何由分析類圖細化至設計類圖,以及各類職責及類間的協作進一步劃分和確定。
單元五 面向對象設計模式簡介。此單元著重介紹幾個常用的設計模式,用實例說明其適用場合及作用方式。
在這個部分我們引導學生理解模型是為系統的分析與設計服務的,它是面向對象思想的一種體現,一種表達而已。面向對象的設計圍繞需求,運用面向對象的思想進行設計、用適當的模型表達出來就可以,并不是模型設計的越復雜越好或UML模型越漂亮越好[10]。
5 ?結語
面向對象更多的是一種思維模式,它是軟件工程專業人員必備的素養,也是計算機相關專業應該有的訓練內容。我認為讓學生學會使用工具進行面向對象分析與設計固然重要,但更重要的
是面向對象設計本身,面向對象設計的初心以及如何達成這樣的目的。在當前新工科專業人才培養思路的引領下,想要培養復合型人才,推動原始創新發展,打牢理論基礎是根本,使學生從只會使用工具,轉換到有意識地掌握軟件工程思想方法以及思維模式。
參考文獻
[1] 譚火彬, 林廣艷. 培養軟件工程思想的面向對象程序設計課程改革與實踐[J]. 《計算機教育》2018(8): 53-58.
[2] 高歌在羊城. 循序漸進地培養面向對象的思維方式[EB/OL]. https://www.cnblogs.com/georgeguo/p/3904256.html.
[3] 高賢君, 楊元維, 李功權. 面向計算思維的Web程序設計教學思考[J]. 電腦知識與技術, 2018, 14(21): 141-143.
[4] 王麗影, 石秋香, 王順才. 應用型大學背景下《面向對象程序設計(C#)》課程教學設計探究[J]. 辦公自動化, 2019, 24(04): 33-34+47.
[5] 闞運奇. “面向對象程序設計”教學方法研究[J]. 無線互聯科技, 2018, 15(23): 151-152.
[6] 孟瑤. 面向對象程序設計課程微課設計研究[J]. 信息與電腦(理論版), 2018(22): 230-232+235.
[7] 錢誠, 徐煜明. 面向對象程序設計課程案例法教學探討[J]. 電子世界, 2018(22): 100.
[8] 孫勇, 徐建輝. 定位于實踐的面向對象程序設計課程教學探索[J]. 教育現代化, 2018, 5(40): 271-274.
[9] 譚火彬, 林廣艷. 培養軟件工程思想的面向對象程序設計課程改革與實踐[J]. 計算機教育, 2018(08): 53-58.
[10] wengxuan_kanon. 真的理解面向對象思維[EB/OL]. https: //blog.csdn.net/kanonlemon/article/details/70052522.