摘要:《面向對象工程》是計算機專業的核心課程,旨在培養學生采用面向對象的思想與工程化的建模技術解決復雜軟件開發問題的能力。本文針對這一要求,從教學內容的選取、師資隊伍要求、教學方法、建模工具與項目實踐設計等方面進行了探討并基于實踐效果提出了建議。
關鍵詞:面向對象;課程體系;面向對象建模
中圖分類號:G642 文獻標志碼:A 文章編號:1674-9324(2013)08-0051-03
面向對象工程包括面向對象的需求建模、面向對象的系統分析、面向對象的解決方案建模、軟件架構設計和面向對象的實施等內容,旨在培養學生采用工程化的建模與開發方法解決復雜軟件開發的能力[1],該課程的教學要求學生已經具有軟件結構化分析與設計、面向對象程序設計等課程的基礎知識。盡管面向對象的理論方法基本穩定并趨于完善成熟,但隨著新技術的不斷發展和企業應用的不斷更新,課程的教學內容、教學案例、建模工具、實施方法需要適應企業級開發平臺及先進的開發工具,如果課程僅僅圍繞面向對象的建?;驀@UML工具介紹,會使教學偏離面向對象工程的核心,很難完成培養學生具有很強的知識理論和實踐動手能力這一教學目標。在本課程多年的教學實踐中,我們對師資培養、教學內容、教學方法、建模工具與項目實踐設計等方面做了一些研究和探索,并取得了良好的效果。本文就這些實踐探索與結論予以總結。
一、明確課程目的
在軟件工程領域,存在兩套軟件分析與設計的工程化方法:面向功能的軟件工程化方法與面向對象的工程化方法。所謂面向功能的軟件工程方法即結構化分析與設計方法、它以數據流為主線,分析系統的數據產生、處理邏輯、存儲,把整個系統看成是由處理功能組成。每個功能又稱為函數,一個函數實現對一個輸入數據價格處理并返回函數結果,如果每個功能都能正確實現,整個系統就能完成其設計的功能。而面向對象的工程方法是把整個問題域采用對象的觀點進行描述,它認為整個現實世界是由對象組成的,因而問題域也是由對象組成的,對象本身包含數據與對數據的處理方法,對象間可以通過接口進行交互[2]。圖1給出了一個簡化的樣本計算領域問題,該問題可以按照左邊箭頭示意抽象成函數處理。右邊的箭頭所示的抽象是按照對象的方法進行的抽象??梢钥闯?,面向函數的抽象與面向對象的抽象是用不同的抽象方法對相同的問題進行建模,進而構造解決方案并求解。這兩種方法都有大量的成功案例,各有千秋。盡管如此,面向對象工程方法是目前軟件開發的主流方法,它是軟件工程人才必須掌握的基礎知識和必備的能力。其原因有兩個:第一個原因是面向對象的工程方法從問題域描述、抽象,到問題域解決方案構建與實現,均采用對象的觀點,整個工程化過程非常流暢[3]。在這點上,面向功能的結構化分析與設計存在不足,例如,當問題域建模完成、需求描述清楚之后,總體的解決方案構建需要設計人員的創造力,同一個問題,不同的設計人員會給出差異很大的解決方案。第二個原因是當前流行的系統實現平臺都是基于面向對象的技術,如Java、C#、C++等。
《面向對象工程》致力于培養計算機各專業研究生問題分析能力和工程應用能力。通過學習該課程,學生能夠利用UML建模方法進行系統需求分析與設計,掌握企業級開發平臺、設計模式、構件技術、項目開發流程及文檔書寫能力。
二、根據學生水平,優化教學內容
我校開設的面向對象工程課程是面向計算機科學與技術、軟件工程、計算機技術三個碩士培養方向的一門核心課程。由于這三個專業的學生的學業背景與專業不同,導致對課程教學的接受與理解存在較大差異。有些學生已經學習過面向對象的分析與設計,有的學生學習過UML建模語言,也有部分學生既沒學過軟件工程,甚至連面向對象的程序設計也沒學習過。由于學生知識層次存在較大的差異,這就給課程的組織提出了動態調整與適應的要求。面向對象工程課程的理論性和實踐性要求較高,對授課教師是一個很大的挑戰。授課教師一定要對面向對象技術有深刻的理解,還要有較強的實際項目開發經驗、工程管理與實施技術背景,這樣才能使教學做到理論結合實際,通過指導學生完成實踐項目,讓學生認識到課程的重要性,從而產生強烈的學習興趣。面向對象工程本身是一個實踐性很強的課程,而部分同學卻反映課程的理論性很強,內容抽象。這說明課程的講授方法存在問題,理論知識傳授過程中某些知識點的講授過細,導致學生只看到細節,無法切實讓學生清晰地領會教學內容的脈絡。針對這一問題,在實際授課中,設計了具體的軟件開發項目,通過項目驅動學習。教師代表項目的甲方,學生是項目的開發者屬于乙方。由甲方提出項目目標與基本需求,乙方采用面向對象工程的方法、建模工具建模分析,構造解決方案與軟件架構并予以實施[4,5]。由于部分同學沒有學習過軟件工程、面向對象程序設計,對軟件的生命周期、軟件的開發過程、軟件體系架構與實施基礎設施缺乏了解,在面向對象工程的教學中,認為同學們基本掌握了這些內容,而不作為課程的重點進行講授。為了使這部分同學能夠聽懂課堂教學,需要教師能夠根據課堂反饋,用最少的時間給學生補上這部分知識,使課堂教學能夠順利地進行。
三、加強實踐,改革教學結構
1.課程實踐體系結構的搭建。本課程教學的關鍵在于軟件項目工程化開發中用到的面向對象的需求分析(OOA)、面向對象的設計、面向對象的實現方法與建模技術應用。在軟件項目的工程化方面,培養學生使用面向對象的技術,設計開發實際項目的能力。課程以具體的實踐項目需求為導向,把面向對象的技術融入到項目的開發過程中,這是該課程教學的核心。為此我們首先需要搭建能夠承載本課程知識點的實踐體系。在搭建項目實踐體系的過程中,我們詳細篩選了一個軟件項目規模適中的實際項目,把面向對象的各知識點、分析設計方法、建模工具應用到該實際項目中。在分析與設計的各個階段,將面向對象設計文檔和課程的各個UML圖的使用進行對接,把各個知識點通過項目實施串聯成線,形成了完備的課程實踐體系網,學生在這樣的實踐體系中能更準確、更清晰地理解實踐要點及理論要點,并重現了真實的分析與設計過程,達到了良好的教學效果[6]。為了促進UML建模工具的學習,課程引進了企業級的Enterprise Architecture建模工具,使繁瑣的建模過程變得簡單,也培養了學生適應企業開發設計環境的能力。
2.課程知識體系結構。面向對象工程涉及知識點較廣,存在著學生先期準備知識不完備性以及課程知識點之間的銜接不連續的問題,這些斷層導致學生知識的理解模糊以及對知識的掌握找不到切入點。因此有必要對知識體系結構進行改革和完善。面向對象工程要求學生具備良好的抽象能力,要求學生能夠利用抽象方法將軟件需求轉化為分析結果,并用UML建模語言進行描述。在需求分析階段,還要考慮軟件的質量需求,包括軟件可靠性、安全性、操作友好性、可擴展性、可維護性、可移植性等。在分析模型的基礎上,需要構建軟件的解決方案,如軟件架構的確定、問題域分析模型向設計模型的轉化、數據的存儲類設計、用戶界面類的設計等[7]。需求分析與基于分析結果給出的最優化設計方案是開發出高量軟件系統的關鍵。當前,學生在設計與優化方面存在明顯的知識不足。對此,在課程的整個知識體系中,有必要將軟件結構化分析與設計、軟件開發過程、軟件質量與軟件復用等內容根據課程內容的需要,穿插在本課程中。
3.課程核心內容。根據課程實踐性強、技術發展迅速的特點,我們對教學內容不斷更新,保證教學內容的先進性,反映本學科領域的最新發展成果,利用案例教學,合理安排課程的教學內容。①面向對象方法概論,講述面向對象方法的基本概念、主要思想、特點、優勢,面向對象的語言產生,面向對象分析與設計的演進,面向對象的工程。②面向對象的分析,通過研究問題域和用戶需求,發現問題域中與系統責任有關的對象、對象特征和相互關系,建立問題域模型,產生符合用戶需求的面向對象分析模型OOA。介紹UML在面向對象分析中的應用。③面向對象的設計,在OOA基礎上,運用面向對象的概念與原則,按照具體的實現條件進行系統設計,產生一個可實現的面向對象設計(OOD)模型。在進行設計時,除需要細化OOA模型外,還要給出用戶界面類的設計、數據存取設計、網絡通信類設計等。④軟件體系結構,軟件一定運行于某個體系架構下,分析C/S、B/S、SOA等體系結構的適用場景與特點,通過案例給出不同的應用所應采取的架構。
四、基于項目驅動的教學
課程采用理論教學與課外實踐項目驅動相結合的方式,將一個實際項目貫穿于課程學習的整個過程,將該課程理論教學與設定的軟件開發項目結合起來,使學生邊學習邊實踐。具體要求如下。
1.項目組劃分。一個項目組由4~5名學生組成,小組成員承擔項目組的不同角色,成員之間有合作和分工,按照企業項目的開發方式進行規劃。
2.選擇合適的項目。本課程已經開發了適合課程教學的實踐項目,項目的需求與目標已經明確提出,需求細節需要學生與教師交流,形成需求分析報告。根據學生掌握理論知識與應用技能的程度不同,適當開放設計文檔,以便同學學習。
3.技術要求。要求學生能夠按照軟件開發過程的原則,制定開發計劃,正確使用面向對象的建模工具,進行分析與設計。加深學生對面向對象技術的理解以及系統質量的評價標準[8]。
面向對象工程教學從2004年開始,已經開設了八屆。對于本課程教學已經從單純的理論教學,逐步轉向理論與實踐項目相結合的方式。提出以面向對象工程技術與軟件項目開發實踐相結合的方式。把軟件工程中過程管理方法與OOA/OOD結合起來,并采用Enterprise Architecture建模工具完成具體的開發項目。
參考文獻:
[1]Hafedh Mili,Ali Mili etc.Reuse-Based Software Engineering:Technology,Organization and Controls[M].北京:電子工業出版社,2003.
[2][美]巴拉赫,蘭寶.UML面向對象建模與設計(第2版)[M].車皓陽,楊眉,譯.北京:人民郵電出版社,2006.
[3][美]沙赫.軟件工程:面向對象和傳統的方法(原書第8版)[M].鄧迎春,等.譯.北京:機械工業出版社,2012.
[4]Dale Skrien.面向對象設計原理與模式[M].騰靈靈,仲婷,譯.北京:清華大學出版社,2009.4.
[5]Object-Oriented Methods Principles & Practice(3E),Ian Grahan.面向對象的方法與實踐[M].袁兆山,等.譯.北京:械工業出版社,2003.
[6]邵維忠,楊芙清.面向對象的系統分析[M].北京:清華大學出版社,2006.
[7]刁成嘉.UML系統建模與分析設計[M].北京:機械工業出版社,2007.
[8]趙逢禹,曹春萍,等.軟件協同設計[M].北京:清華工業出版社,2011.