

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、2024年4月3日星期三,第1頁,第3章 軟件系統(tǒng)開發(fā)方法,3.1 軟件開發(fā)生命周期3.2 軟件開發(fā)模型3.3 傳統(tǒng)軟件開發(fā)方法3.4 面向?qū)ο筌浖_發(fā)方法3.5 RUP統(tǒng)一軟件開發(fā)過程3.6 敏捷軟件開發(fā)技術,2024年4月3日星期三,第2頁,,在軟件開發(fā)的早期,人們常用的軟件開發(fā)方法是邊寫邊改法。這種開發(fā)方法在應用開發(fā)中最為快捷,但由于其開發(fā)的隨意性,因而也最為低效。同時,使用該方法的項目常常因為管理失控而終結?;谶@種情
2、況,業(yè)界人士借鑒其它工程領域的方法,提出了許多有規(guī)則可言的軟件系統(tǒng)開發(fā)方法。最著名的當數(shù)“瀑布式”方法了,即把軟件開發(fā)過程分解成這樣一些階段:制定開發(fā)計劃、需求分析和定義、系統(tǒng)設計、編碼實現(xiàn)、測試驗證。然而,在軟件開發(fā)實踐中完全遵循這種過程取得成功的案例并不多。其原因主要在于這種方法有一個前提條件,那就是系統(tǒng)需求必須明確、不變。但在現(xiàn)實應用中,這幾乎是不可能的。需求通常模糊不清,并且在系統(tǒng)開發(fā)期間隨時都有可能發(fā)生變化。因此軟件開發(fā)要求采
3、用的方法過程也必須能適應這種變化,這就出現(xiàn)了其它一些軟件開發(fā)方法,如原型法、敏捷方法等。,2024年4月3日星期三,第3頁,3.1 軟件開發(fā)生命周期,正如任何事物一樣,軟件也有其孕育、誕生、成長、成熟以及衰亡的生命過程,一般稱其為“軟件生命周期”。,2024年4月3日星期三,第4頁,3.1 軟件開發(fā)生命周期,根據(jù)這一思想,可以得到軟件生命周期的六個階段:制定計劃需求分析和定義設計編碼測試運行及維護。,2024年4月3日星期三
4、,第5頁,3.1 軟件開發(fā)生命周期,(1) 制定計劃(Planning)團隊人員:分析人員、領域?qū)<壹坝脩舻?。這個階段的任務是確定待開發(fā)軟件系統(tǒng)的總體目標,給出軟件系統(tǒng)的功能、性能及接口等方面的要求。由團隊人員協(xié)作,共同研究完成該項軟件開發(fā)任務的技術、經(jīng)濟、社會可行性,探討解決問題的各種可能方案,并對現(xiàn)有可利用資源、成本、可取得的效益、開發(fā)進度等做出估計,制定出完成該項開發(fā)任務的實施計劃,并編寫可行性研究報告。,2024年4月3日星
5、期三,第6頁,3.1 軟件開發(fā)生命周期,(2) 需求分析和定義(Requirement Analysis and Definition)團隊人員:分析人員、測試人員、領域?qū)<壹坝脩舻?。該階段對于待開發(fā)軟件項目獲取的用戶需求進行分析,并給出詳細定義。這個階段團隊人員必須協(xié)同工作,讓軟件開發(fā)人員充分理解用戶的各項需求,并確定哪些需求是可以滿足的,哪些需求在現(xiàn)有技術下是不能滿足的,對能滿足的需求加以確切的描述。然后,編寫出軟件需求規(guī)格說明
6、書(SRS)或系統(tǒng)功能說明書,以及初步的系統(tǒng)用戶手冊、測試用例等。為了團隊人員之間能很好地溝通,從這個階段開始通常會采用一些標準的建模語言(如:統(tǒng)一建模語言,Unified Modeling Language,簡稱UML)對系統(tǒng)建模。,2024年4月3日星期三,第7頁,3.1 軟件開發(fā)生命周期,(3) 軟件設計(Software Design)團隊人員:架構設計人員、軟件設計人員、數(shù)據(jù)庫設計員、用戶界面設計員、封裝體設計員和集成人員、
7、測試人員等。這個階段通常分為兩部分:概要設計和詳細設計。在軟件設計階段,軟件開發(fā)人員把已經(jīng)經(jīng)過用戶和領域?qū)<掖_認的各項需求轉換成相應的軟件體系結構。結構中的每一成份都是意義明確的子系統(tǒng)、模塊或用例,每個部分都和某些需求相對應,進行所謂的概要設計。然后對每個模塊或用例要完成的工作采用合適的技術進行具體的描述,如畫出模塊的程序流程圖或描述類的屬性、操作等,為源程序的編寫工作打下基礎,即所謂的詳細設計。,2024年4月3日星期三,第8頁,
8、3.1 軟件開發(fā)生命周期,(4) 編碼(Coding)團隊人員:編程人員、測試人員等。將詳細設計階段所描述的模塊程序流程圖或類的設計轉換為計算機能處理的程序代碼,即使用特定的程序設計語言表示的源程序。目前,通常使用高級程序設計語言編寫程序,如C語言、Java語言等。,2024年4月3日星期三,第9頁,3.1 軟件開發(fā)生命周期,(5) 軟件測試(Software Testing)團隊人員:測試人員、開發(fā)人員、用戶等。測試是保證軟件
9、質(zhì)量的重要手段,其主要目的是通過軟件測試暴露出軟件中隱藏的錯誤和缺陷。軟件測試的主要方式是在設計測試用例的基礎上檢驗軟件的各個組成部分。軟件測試一般包括單元測試、集成測試、系統(tǒng)測試、驗收測試等幾個階段。首先進行單元測試,查找各模塊或類在功能和結構上存在的問題并加以修改,這個過程會反復進行;其次進行集成測試,驗證各軟件單元集成后形成的模塊能否達到概要設計規(guī)格說明中各模塊的設計目標;然后進行系統(tǒng)測試,目的是對最終軟件系統(tǒng)進行全面的測試,確保
10、最終軟件系統(tǒng)滿足產(chǎn)品需求并且遵循系統(tǒng)設計;最后進行確認測試,以檢查已實現(xiàn)的軟件是否滿足了需求規(guī)格說明書中確定的各種需求,包括功能需求和性能需求,決定已開發(fā)的軟件能否交付用戶使用。,2024年4月3日星期三,第10頁,3.1 軟件開發(fā)生命周期,(6) 運行/維護(Running/Maintenance)團隊人員:系統(tǒng)支持人員等。已交付的軟件投入正式使用,軟件便進入運行階段。軟件在運行過程中可能會因為發(fā)現(xiàn)了軟件中存在的錯誤需要修改;或為
11、了適應變化了的軟件工作環(huán)境,需做一些變更;或為了增強軟件的功能需做變更等。這就稱為軟件維護。,2024年4月3日星期三,第11頁,3.2 軟件開發(fā)模型,從上節(jié)的內(nèi)容中我們知道,一個軟件的生命周期包含了若干個活動,那么,這些活動應該如何組織呢?不同的組織方式可能會產(chǎn)生很大差別的結果。實際上,與其它工程項目中安排各道工序類似,為了反應軟件開發(fā)生命周期內(nèi)的各種活動應如何組織,各活動之間應如何銜接,需要用軟件開發(fā)模型做出直觀的圖示來表達。,2
12、024年4月3日星期三,第12頁,3.2 軟件開發(fā)模型,軟件開發(fā)模型是從軟件項目需求定義到軟件經(jīng)使用后被廢棄為止,跨越整個軟件生命周期的系統(tǒng)開發(fā)、運作和維護的全部過程、活動和任務的結構框架,它給出了軟件開發(fā)活動各個階段之間的關系。每種軟件生命周期模型代表一種軟件開發(fā)與管理的組織過程。,2024年4月3日星期三,第13頁,3.2 軟件開發(fā)模型,迄今為止,出現(xiàn)了多種軟件開發(fā)模型。如:瀑布模型螺旋模型演化模型噴泉模型智能模型增量模
13、型原型化模型,2024年4月3日星期三,第14頁,3.2.1 瀑布模型,瀑布模型將軟件生命周期劃分為制定開發(fā)計劃、需求分析和定義、軟件設計、程序編寫、軟件測試和運行維護等六個基本活動,并且規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。,2024年4月3日星期三,第15頁,3.2.1 瀑布模型,,瀑布模型是最早出現(xiàn)的軟件開發(fā)模型,在軟件工程中占有十分重要的地位,它提供了軟件開發(fā)的基本框架。瀑布模型規(guī)定了各項軟件工程活動
14、,其核心思想是按工序?qū)栴}化簡,將功能的實現(xiàn)與設計分開,便于分工協(xié)作,即采用結構化的分析與設計方法將邏輯實現(xiàn)與物理實現(xiàn)分開。,,2024年4月3日星期三,第16頁,3.2.1 瀑布模型,瀑布模型每項開發(fā)活動均應具有下述特征:(1) 從上一項活動接收本項活動的工作對象,作為本項活動的輸入;(2) 利用這一輸入實施本項活動應完成的任務;(3) 給出本項活動的工作成果,作為輸出傳遞給下一項活動;(4) 對本項活動實施的工作進行評審。若
15、得到確認,則繼續(xù)下一項活動;否則,返回到前項活動,或更前一項活動進行返工。,,2024年4月3日星期三,第17頁,3.2.1 瀑布模型,瀑布模型中軟件維護的特點:(1) 維護的具體要求是在軟件投入使用以后提出來的,經(jīng)過評價,確定需求變更的必要性,才進行維護工作。(2) 維護中對軟件的變更仍然要經(jīng)歷軟件生命周期在開發(fā)中已經(jīng)歷過的各項活動。,2024年4月3日星期三,第18頁,3.2.1 瀑布模型,瀑布模型的優(yōu)點:(1) 為軟件項目提
16、供了按階段劃分的檢查點,強調(diào)開發(fā)的階段性。(2) 強調(diào)早期計劃及需求調(diào)查。(3) 強調(diào)產(chǎn)品測試和階段評審。(4) 強調(diào)文檔的重要性。,2024年4月3日星期三,第19頁,3.2.1 瀑布模型,瀑布模型的缺點:(1) 在項目各個階段之間極少有反饋,往往會將早期的錯誤引入到后期各個階段。(2) 依賴于早期進行的唯一一次需求調(diào)查,用戶參與較少,不能適應需求的變化。(3) 只有在項目生命周期的后期才能看到結果,可能與用戶的需求出現(xiàn)很
17、大的偏差,使風險推遲到項目開發(fā)的后期階段才顯露出來,因而失去及早糾正的機會。(4) 通過過多的強制完成日期和里程碑來跟蹤各個項目階段,靈活性較差。,2024年4月3日星期三,第20頁,3.2.1 瀑布模型,瀑布模型缺乏靈活性,無法通過開發(fā)活動來理清本來不夠明確的需求,這將可能導致直到軟件開發(fā)完成時才發(fā)現(xiàn)所開發(fā)的軟件并非用戶所需要的,此時必將付出高額的代價才能糾正出現(xiàn)的偏差。瀑布模型一般適用于功能、性能明確、完整、無重大變化的軟件系統(tǒng)
18、的開發(fā)。如操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件的開發(fā)。當用戶需求不明確或經(jīng)常變更時,不宜采用瀑布模型,可以考慮其它的架構來進行項目管理,如:演化模型等。,2024年4月3日星期三,第21頁,3.2.2 演化模型,演化模型主要針對事先不能完整定義需求的軟件開發(fā)。用戶可以給出待開發(fā)系統(tǒng)的核心需求,并且當看到核心需求實現(xiàn)后,能夠有效地提出反饋,以支持系統(tǒng)的最終設計和實現(xiàn)。,2024年4月3日星期三,第22頁,3.2.2 演化模型,該模型可以表示為:
19、第一次迭代(需求→設計→編碼→測試→集成)→反饋→第二次迭代(需求→設計→編碼→測試→集成)→反饋→......,,2024年4月3日星期三,第23頁,3.2.2 演化模型,,2024年4月3日星期三,第24頁,3.2.2 演化模型,演化模型的主要優(yōu)點:(1) 用戶能在開發(fā)過程中而不是開發(fā)接近尾聲時看到自己所需要的軟件產(chǎn)品。對發(fā)現(xiàn)的問題能夠提早解決。(2) 在一定程度上減少了軟件開發(fā)活動的盲目性。如果在某次迭代中,其需求沒有滿足用
20、戶的要求,軟件開發(fā)人員可根據(jù)用戶的反饋信息在下一次迭代中予以修正。(3) 將系統(tǒng)中難度較大、風險較高的部分安排在早期的迭代中,可增加項目的成功率。,2024年4月3日星期三,第25頁,3.2.2 演化模型,演化模型的缺點(1) 由于項目需求在開發(fā)初期不可能完全弄清楚,這樣會給系統(tǒng)總體設計帶來很大的困難,并影響系統(tǒng)設計的完整性。(2) 如果在開發(fā)過程中缺乏嚴格的過程管理,演化模型很可能退化為邊寫邊改模式。(3) 如果沒有一定的約束
21、條件,可能永遠無法得到一個最終的軟件產(chǎn)品。,2024年4月3日星期三,第26頁,3.2.2 演化模型,采用演化模型的軟件開發(fā)過程,實際上是從最初的原型逐步演化成最終軟件產(chǎn)品的過程。在整個演化過程中,不斷修正缺陷,以開發(fā)出最終滿足用戶需要的軟件產(chǎn)品。演化模型特別適用于用戶需求不夠明確的軟件開發(fā)項目,但不適宜用于大而復雜的系統(tǒng)。,2024年4月3日星期三,第27頁,3.2.3 螺旋模型,對于復雜的大型軟件系統(tǒng),開發(fā)一個原型往往很難達到要求
22、,顯然用單一的演化模型很難開發(fā)出這樣的軟件系統(tǒng)。那么,究竟要使用什么樣的模型才適合用來開發(fā)大型而復雜的軟件系統(tǒng)呢?答案就是螺旋模型。,2024年4月3日星期三,第28頁,3.2.3 螺旋模型,螺旋模型沿著螺線旋轉,在笛卡爾坐標的四個象限上分別表達了每個迭代周期的四個階段,從左象限按順時針方向依次為:,,,2024年4月3日星期三,第29頁,3.2.3 螺旋模型,(1) 制定計劃確定該階段的軟件目標,選定為完成這些目標的實施方案,設定這
23、些方案的約束條件。(2) 風險分析分析所選方案,識別并努力消除各種潛在的風險,通常用構建原型的方法來消除風險。如果不能消除風險,則停止開發(fā)工作或降低軟件項目規(guī)模。如果成功地消除了所有風險,則轉向下一個階段。(3) 實施工程實施軟件開發(fā)。這個階段相當于一個純粹的瀑布模型。(4) 用戶評估由用戶評價開發(fā)工作,提出修改建議。,2024年4月3日星期三,第30頁,3.2.3 螺旋模型,螺旋模型將瀑布模型和演化模型結合起來,吸取了兩者
24、的優(yōu)點,并加入了兩種模型都忽略了的風險分析,彌補了兩種模型的不足。,2024年4月3日星期三,第31頁,3.2.3 螺旋模型,軟件風險是任何軟件開發(fā)項目中普遍存在的實際問題,項目規(guī)模越大,問題越復雜,資源、成本、進度等因素的不確定性就越大,承擔該項目所冒的風險也就越大。軟件風險可能在不同程度上損害軟件的開發(fā)過程和軟件產(chǎn)品的質(zhì)量。因此,在軟件開發(fā)過程中必須及時對風險進行識別、分析,采取應有的措施,以消除或較少風險的損害。,2024年4月3
25、日星期三,第32頁,3.2.3 螺旋模型,在螺旋模型中,沿著螺線由內(nèi)向外每旋轉一圈,也就是每完成一次迭代過程,軟件開發(fā)就前進一個層次,開發(fā)出一個更加完善的軟件版本。在每一圈螺線上,風險分析作為開發(fā)是否能夠繼續(xù)下去的判斷點。假如風險太大,開發(fā)人員和用戶無法承受,開發(fā)項目有可能被終止。但多數(shù)情況下沿螺線的活動會繼續(xù)下去,并由內(nèi)向外逐步延伸,最終得到用戶所期望的系統(tǒng)。,2024年4月3日星期三,第33頁,3.2.3 螺旋模型,螺旋模型的優(yōu)點:
26、(1) 設計上的靈活性,可以保證在項目的各個階段進行變更。(2) 以小的分段來構建大型系統(tǒng),使資源、成本和進度的估計變得更加簡單容易。(3) 用戶始終參與到每個階段的開發(fā)中,保證了項目的正確性與可控性。,2024年4月3日星期三,第34頁,3.2.3 螺旋模型,螺旋模型的缺點:(1) 采用螺旋模型需要具有豐富的風險評估經(jīng)驗和專門知識,在風險較大的項目開發(fā)中,如果未能及時識別出潛在的風險,或者消除風險的能力不足,都會造成極其重大的
27、損失。(2) 過多的迭代次數(shù)會增加軟件開發(fā)成本,延遲交付使用的時間。,2024年4月3日星期三,第35頁,3.2.3 螺旋模型,螺旋模型支持需求不明確,特別是大型軟件系統(tǒng)的開發(fā),并支持面向規(guī)格說明、面向過程、面向?qū)ο蟮榷喾N軟件開發(fā)方法。由于螺旋模型是以風險分析驅(qū)動的,一旦在開發(fā)過程中風險過大就要停止繼續(xù)開發(fā),因此,螺旋模型比較適合應用于產(chǎn)品研發(fā)或機構內(nèi)部大型的復雜系統(tǒng)的開發(fā),而不適合用于合同項目的開發(fā)。如果要將螺旋模型作為合同項目的開
28、發(fā)模型,則必須在簽訂合同之前考慮清楚所有的開發(fā)風險,否則,在開發(fā)過程中如果由于風險過大而中途停止開發(fā),就會賠償經(jīng)濟損失或者承擔法律責任。,2024年4月3日星期三,第36頁,3.2.4 增量模型,采用瀑布模型或演化模型開發(fā)項目時,目標都是一次性就把一個滿足所有需求的產(chǎn)品提交給用戶。然而,增量模型則與之不同,它分批地逐步向用戶提交可操作的產(chǎn)品。,2024年4月3日星期三,第37頁,3.2.4 增量模型,增量模型融合了瀑布模型的基本成分和快
29、速原型模型的迭代特征。該模型采用隨著日程的進展而交錯進行的線性序列,每一個線性序列產(chǎn)生軟件的一個可發(fā)布的“增量”。當使用增量模型時,第1個增量往往是核心產(chǎn)品,即第1個增量實現(xiàn)了基本的需求,但很多補充的特征還沒有發(fā)布??蛻魧γ恳粋€增量的使用和評估都作為下一個增量發(fā)布的新特征和功能,這個過程在每一個增量發(fā)布后不斷重復,直到產(chǎn)生了最終的完善產(chǎn)品。增量模型強調(diào)每一個增量均發(fā)布一個可操作的產(chǎn)品。,2024年4月3日星期三,第38頁,3.2.4
30、 增量模型,,2024年4月3日星期三,第39頁,3.2.4 增量模型,增量模型的優(yōu)點:(1) 人員分配靈活,剛開始不用投入大量人力資源,可以避免不必要的浪費。(2) 重要功能被首先交付,可以獲得最多的測試,保證軟件產(chǎn)品的質(zhì)量。(3) 早期發(fā)布的可操作產(chǎn)品可以作為原型為后期增量開發(fā)提供需求。(4) 在較短時間內(nèi)向用戶提交部分工作的產(chǎn)品,可以讓用戶對開發(fā)項目和開發(fā)團隊有信心。(5) 用戶能看到所開發(fā)軟件的中間版本,可以使最終產(chǎn)品
31、不至于偏離用戶的需求。(6) 可以將技術難度大的部分作為早期的增量,能夠有效地管理與控制技術風險。,2024年4月3日星期三,第40頁,3.2.4 增量模型,增量模型的缺點:(1) 在開發(fā)過程中,需求的變化是不可避免的。如果不能有效地控制并管理好需求的變更,增量模型很容易退化為邊寫邊改模式,從而使軟件過程的控制失去整體性。(2) 由于各個增量逐漸并入已有的結構,所以加入的增量部分不能破壞已構造好的系統(tǒng)部分,這需要軟件具備開放式的體
32、系結構,對開發(fā)團隊的技術要求更高。(3) 難以對所有增量進行有效的集成。,2024年4月3日星期三,第41頁,3.2.4 增量模型,增量模型與原型模型、演化模型一樣,本質(zhì)上是迭代的,都能應用在需求不明確、需求變化大的軟件項目的開發(fā)中,但與其它迭代式的模型不一樣的是,增量模型強調(diào)每一個增量均發(fā)布一個可操作產(chǎn)品。早期的增量是最終產(chǎn)品的“可拆卸”版本。用戶可對每一個可操作產(chǎn)品進行評估,能很好地滿足用戶需求,大大提高了項目的成功率。,2024
33、年4月3日星期三,第42頁,3.3 傳統(tǒng)軟件開發(fā)方法,在傳統(tǒng)的軟件開發(fā)過程中,最重要的是明確和分解系統(tǒng)功能。這種方法看起來很符合人們處理事務的流程,是實現(xiàn)預期目標的最直接的途徑。然而,一旦系統(tǒng)的需求發(fā)生變化,這種基于功能分解的系統(tǒng)將會需要大量的修改工作。隨著計算機技術、網(wǎng)絡技術的不斷發(fā)展,計算機應用范圍不斷擴大,軟件系統(tǒng)的規(guī)模也變得越來越龐大。基于傳統(tǒng)生命周期的結構化軟件開發(fā)方法逐漸暴露出了它自身的一些缺點:難以理解和維護、可重用性差等
34、。這些缺點是由什么原因引起的?,2024年4月3日星期三,第43頁,3.3 傳統(tǒng)軟件開發(fā)方法,在結構化軟件開發(fā)(傳統(tǒng)的面向過程的軟件開發(fā)方法)的整個過程中,重點放在了操作上。這些操作是通過函數(shù)、模塊或一條簡單的指令來執(zhí)行的。在整個開發(fā)過程中,過程化程序設計方法完全將程序中的一個非常重要的方面——數(shù)據(jù),與操作分離開來,使得數(shù)據(jù)可以被所有函數(shù)或過程完全訪問。,,2024年4月3日星期三,第44頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)軟件開發(fā)方法
35、遵循軟件生命周期,整個開發(fā)過程包括可行性研究、需求分析、總體設計、詳細設計、編碼、測試和維護等六個階段。,2024年4月3日星期三,第45頁,3.3 傳統(tǒng)軟件開發(fā)方法,結構化方法是傳統(tǒng)軟件開發(fā)方法的一個很好的例子,包括結構化分析、結構化設計、結構化編程和結構化測試等。,2024年4月3日星期三,第46頁,3.3 傳統(tǒng)軟件開發(fā)方法,結構化分析的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典,用來表達和理解問題的數(shù)據(jù)域和功能域。數(shù)據(jù)域包括數(shù)據(jù)流、數(shù)據(jù)內(nèi)容和數(shù)據(jù)結
36、構,而功能域則反映這三個方面的控制信息。通常將一個復雜問題按功能進行分解并逐層細化。,2024年4月3日星期三,第47頁,3.3 傳統(tǒng)軟件開發(fā)方法,結構化設計的基本思想是模塊化思想。將數(shù)據(jù)流圖進一步細化到每一個子功能都清晰易懂,每個模塊完成一個子功能,每層模塊合成一個高一級的功能??傮w設計階段包括數(shù)據(jù)庫結構設計、用戶界面設計、功能模塊結構設計等。詳細設計是根據(jù)每個模塊的功能設計實現(xiàn)算法以及實現(xiàn)這些算法的邏輯控制流程。詳細設計的表示工具有
37、程序流程圖、PAD圖、N-S圖、判定表和判定樹、偽碼和PDL等。,2024年4月3日星期三,第48頁,3.3 傳統(tǒng)軟件開發(fā)方法,編程是指把軟件設計的結果轉換為用某種程序設計語言所表示的程序代碼。結構化的程序設計語言,例如,F(xiàn)ortran、Pascal、C等,是通過把程序劃分成函數(shù)和功能模塊來控制整個程序的執(zhí)行流程的。,2024年4月3日星期三,第49頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)軟件開發(fā)方法有以下四個特點:(1) 以模塊作為基本的
38、構造單元。使得編程與現(xiàn)實世界之間存在理解鴻溝。(2) 自頂向下逐步細分功能。系統(tǒng)重用性很差。(3) 不同模塊之間的信息傳遞通過函數(shù)的調(diào)用來完成。其控制信息傳遞效率極其低下。(4) 堅持嚴格的階段性評審。雖然能夠保證軟件質(zhì)量,但整個開發(fā)過程缺少應有的靈活性。,2024年4月3日星期三,第50頁,3.3 傳統(tǒng)軟件開發(fā)方法,當函數(shù)與被函數(shù)調(diào)用的數(shù)據(jù)分離時,數(shù)據(jù)被破壞的可能性極大。另外,當數(shù)據(jù)和函數(shù)相互獨立時,總存在著用錯誤的數(shù)據(jù)調(diào)用正確
39、的程序模塊或用正確的數(shù)據(jù)調(diào)用了錯誤的程序模塊的可能性。所以,需要有一種方法來約束所有函數(shù)對數(shù)據(jù)的訪問,即將這些數(shù)據(jù)有效地隱藏起來,這就是面向?qū)ο蟮男畔㈦[藏思想。,2024年4月3日星期三,第51頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)的面向過程的結構化開發(fā)方法的另一個問題是它不能很好地表示現(xiàn)實世界。這些現(xiàn)實世界中的事物可直接映射到面向?qū)ο蟮慕饪臻g,用面向?qū)ο蟮能浖_發(fā)方法能很好地解決現(xiàn)實世界的問題。,2024年4月3日星期三,第52頁,3.
40、3 傳統(tǒng)軟件開發(fā)方法,為了提高系統(tǒng)的可理解性、可維護性和可重用性,并能很好地表示現(xiàn)實世界,開發(fā)軟件項目時,最好采用面向?qū)ο筌浖_發(fā)技術。,2024年4月3日星期三,第53頁,3.4 面向?qū)ο筌浖_發(fā)技術,“對象”一詞在現(xiàn)實生活中經(jīng)常會遇到,它表示現(xiàn)實世界中的某個具體的事物,例如,一臺計算機?,F(xiàn)實世界中的事物包含了物質(zhì)和意識兩大部分,物質(zhì)表達的是具體的事物,而意識則描述了某一個抽象的概念,是對客觀存在的事物的一種概括。對象的概念源于用
41、計算機程序?qū)ΜF(xiàn)實世界的復雜事物進行建模的過程。,2024年4月3日星期三,第54頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-1:對象對象是指現(xiàn)實世界中各種各樣的實體。它既可以是具體的能觸及的事物,如一個人、一棟大樓、一架飛機,甚至一個地球等;也可以是無法觸及的抽象事物,如一項計劃、一次約會、一場演出等。一個對象既可以非常簡單,又可以非常復雜,復雜的對象往往可以由若干個簡單的對象組合而成。,2024年4月3日星期三,第55頁,3.4.1
42、 面向?qū)ο蟮幕靖拍?對象定義了狀態(tài)和行為。對象的狀態(tài)用數(shù)據(jù)值來表示,而對象的行為則用來改變對象的狀態(tài)。在面向?qū)ο蟮南到y(tǒng)中,對象是基本的運行實體。,2024年4月3日星期三,第56頁,3.4.1 面向?qū)ο蟮幕靖拍?所有這些對象,除去它們都是現(xiàn)實世界中所存在的事物之外,它們都還具有各自不同的特征:(1) 有一個名字用來區(qū)別于其它對象。例如:張三、李四等。,2024年4月3日星期三,第57頁,3.4.1 面向?qū)ο蟮幕靖拍?(2) 有一
43、個狀態(tài)用來描述對象的某些特征。例如:對象張三的狀態(tài):姓名:張三性別:男身高:179cm體重:71kg,2024年4月3日星期三,第58頁,3.4.1 面向?qū)ο蟮幕靖拍?(3) 有一組操作,每一個操作決定對象的一種功能或行為。對象的操作可分為兩類:一類是自身所承受的操作,使用setter、getter作為操作名;一類是施加于其它對象的操作。例如:對象張三的操作(可完成的功能):回答姓名回答性別回答身高回答體重打電話
44、踢足球駕車,,,屬于對象自身所承受的操作,屬于施加于其它對象的操作,2024年4月3日星期三,第59頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-2:類類是對一組客觀對象的抽象,它將該組對象所具有的共同特征(包括結構特征和行為特征)集中起來,以說明該組對象的性質(zhì)和能力。例如:“人”這個詞就是抽象了所有人(單個的人,如張三、李四等,這些都是對象)的共同之處。,2024年4月3日星期三,第60頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)?/p>
45、象編程中,通常把類定義為抽象數(shù)據(jù)類型,而對象是類的類型變量。當定義了一個類以后,就可以生成任意多個屬于這個類的對象,這個過程叫做實例化。例如,用Java語言定義一個類Car為:public class Car { ……}這時可生成任意多個屬于Car類的對象:Car car1 = new Car();Car car2 = new Car();,2024年4月3日星期三,第61頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-3:
46、類與對象的關系組成類的對象均為該類的實例。類與對象之間的關系就是抽象與具體的關系。例如,張三是一個學生,學生是一個類,而張三作為一個具體的對象,是學生類的一個實例。類是多個實例的綜合抽象,而實例又是類的個體事物。,2024年4月3日星期三,第62頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)ο缶幊讨?,定義一個類就定義了這個類的一系列屬性與操作,對于同一個類的不同實例之間,必定具有如下特點:(1) 相同的屬性集合;(2) 相同的操作集
47、合;(3) 不同的對象名。,2024年4月3日星期三,第63頁,3.4.1 面向?qū)ο蟮幕靖拍?相同的屬性集合與操作集合用于標識這些對象屬于同一個類,用不同的對象名來區(qū)別不同的對象。,2024年4月3日星期三,第64頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-4:面向?qū)ο竺嫦驅(qū)ο螅∣bject-Oriented,簡稱OO)是指人們按照自然的思維方式認識客觀世界,采用基于對象(實體)的概念建立模型,模擬客觀世界,從而用來分析、設計和實
48、現(xiàn)軟件的方法。把軟件組織成一系列離散的、合并了數(shù)據(jù)結構和行為的對象集。,2024年4月3日星期三,第65頁,3.4.1 面向?qū)ο蟮幕靖拍?面向?qū)ο笫钱斍坝嬎銠C界關注的重點,它是90年代主流軟件開發(fā)方法。通過面向?qū)ο蟮睦砟钍褂嬎銠C軟件系統(tǒng)能與現(xiàn)實世界中的系統(tǒng)一一對應。面向?qū)ο蟮母拍詈蛻靡殉搅顺绦蛟O計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、分布式系統(tǒng)、人工智能等領域。,2024年4月3日星期三,第66頁,3.4.1 面向?qū)ο蟮幕?/p>
49、概念,采用面向?qū)ο蠹夹g開發(fā)軟件的方法,稱為面向?qū)ο筌浖_發(fā)方法。面向?qū)ο蠓椒ň哂幸韵聨讉€特性:(1) 對象唯一性每個對象都有唯一的標識(如同人們的身份證號碼),通過這個標識,可以找到相應的對象。在對象的整個生命周期(從對象的創(chuàng)建到對象的消亡)中,它的標識都不會改變。不同的對象(即使其它屬性完全相同,例如兩個完全一樣的球)必須具有不同的標識。(2) 封裝性具有一致的數(shù)據(jù)結構(屬性)和行為(操作)的對象抽象成類。(3) 繼承性子
50、類自動共享父類的數(shù)據(jù)結構和行為的機制,這是類之間的一種關系。繼承性是面向?qū)ο蟪绦蛟O計語言不同于其它程序設計語言最重要的特點,是其它語言所沒有的。(4) 多態(tài)性它是面向?qū)ο笙到y(tǒng)中的又一個重要特性。多態(tài)性描述的是同一個消息可以根據(jù)發(fā)送消息對象的不同采用多種不同的行為方式。即是指相同的操作或函數(shù)可作用于多種類型的對象上并獲得不同的結果。不同的對象,收到同一消息可以產(chǎn)生不同的結果,這種現(xiàn)象就稱為多態(tài)性。,2024年4月3日星期三,第67頁,
51、3.4.1 面向?qū)ο蟮幕靖拍?概念3-5:封裝及面向?qū)ο笙到y(tǒng)的封裝性封裝也叫做信息隱藏。從字面上理解,封裝就是將某事物包裝起來,使外界不了解其實際內(nèi)容。從軟件開發(fā)的角度,封裝是指將一個數(shù)據(jù)和與這個數(shù)據(jù)有關的各種操作放在一起,形成一個能動的實體——對象,使用者不必知道對象的內(nèi)部結構,只需根據(jù)對象提供的外部接口訪問對象。從使用者的角度看,這些對象就像一個“黑盒子”,其內(nèi)部數(shù)據(jù)和行為是被隱藏起來、看不見的。面向?qū)ο笙到y(tǒng)的封裝性是一種信息
52、隱藏技術,它隱藏了某一方法的具體執(zhí)行步驟,取而代之的是通過消息傳遞機制傳遞消息給它。,2024年4月3日星期三,第68頁,3.4.1 面向?qū)ο蟮幕靖拍?封裝的意義在于保護或者防止數(shù)據(jù)或者程序代碼被我們無意中破壞,以提高系統(tǒng)的安全性。既然封裝了對象,那么,怎樣才能訪問對象呢?答案是通過對象提供的公共消息接口來訪問對象。下面是一個用Java語言所定義的類:,2024年4月3日星期三,第69頁,3.4.1 面向?qū)ο蟮幕靖拍?public
53、class Employee { private String name; private int age; private float salary; private String rank; private void calculateSalary(float subtract) { salary = salary – subtract; } protected int getA
54、ge() { return age; } public void setSalary(float salary) { this.salary = salary; } public float getSalary() { return salary; } ……},2024年4月3日星期三,第70頁,3.4.1 面向?qū)ο蟮幕靖拍?在上面所定義的職員(Employee
55、)類中,包含的數(shù)據(jù)有職員姓名(name)、年齡(age)、工資(salary)、職位(rank)。這些數(shù)據(jù)被定義為私有數(shù)據(jù)(用private定義),就被隱藏起來,對于外部對象來說就不可以直接訪問了。它所包含的成員方法或成員函數(shù)(操作)有三種類型的可見性:,2024年4月3日星期三,第71頁,3.4.1 面向?qū)ο蟮幕靖拍?(1) 私有的用private關鍵字標識,如:calculateSalary,這樣的成員方法或函數(shù)不向外部公開,只
56、供對象內(nèi)部自己使用。(2) 受保護的用protected關鍵字標識,如:getAge,這樣的成員方法或函數(shù)只向部分外界公開,只對派生類對象提供服務。(3) 公有的用public關鍵字標識,如:getSalary等,這樣的成員方法或函數(shù)向所有的外界公開,它可以響應外界對象的請求。,2024年4月3日星期三,第72頁,3.4.1 面向?qū)ο蟮幕靖拍?定義為公有的成員方法或函數(shù),才是對象提供的公共消息接口。外部對象只有通過這些公共接口
57、才能訪問到對象的內(nèi)部數(shù)據(jù),這就是所謂的信息隱藏技術。,2024年4月3日星期三,第73頁,3.4.1 面向?qū)ο蟮幕靖拍?根據(jù)對封裝的定義可以看出,封裝應該具有下面幾個條件:(1) 具有一個清晰的邊界。對象所有的私有數(shù)據(jù)、成員方法或函數(shù)的實現(xiàn)細節(jié)都被固定在這個邊界內(nèi)。(2) 具有一個接口。這個接口描述了對象之間的交互作用,它就是消息。(3) 對象內(nèi)部的實現(xiàn)代碼受到封裝體的保護,其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。,202
58、4年4月3日星期三,第74頁,3.4.1 面向?qū)ο蟮幕靖拍?面向?qū)ο笙到y(tǒng)中的封裝以對象為單位,即主要是指對象的封裝,該對象的特性是由它所屬的類說明來描述,也就是說在類的定義中實現(xiàn)封裝。被封裝的對象通常被稱為抽象數(shù)據(jù)類型。封裝性提高了對象內(nèi)部數(shù)據(jù)的安全性。,2024年4月3日星期三,第75頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-6:繼承及面向?qū)ο笙到y(tǒng)的繼承性繼承是指一個類能夠從另一個類那里獲得一些特性。在這個過程中,超類把它的特性
59、賦給了子類。面向?qū)ο笙到y(tǒng)的繼承性是對具有層次關系的類的屬性和操作進行共享的一種方式。在面向?qū)ο笙到y(tǒng)中,若沒有引入繼承的概念,所有的類就會變成一盤各自為政、彼此獨立的散沙,軟件重用級別較低,每次軟件開發(fā)就只能從“零”開始。,2024年4月3日星期三,第76頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承是面向?qū)ο筌浖夹g中的一個概念。如果一個類A繼承自另一個類B,就把這個A稱為B的“子類”或“派生類”,而把B稱為A的“父類”或“超類”或“基類”
60、。例如,在通常的信息管理應用系統(tǒng)中,都會涉及到用戶權限管理,常常會有“一般用戶”和“系統(tǒng)管理員”兩種角色,而“一般用戶”和“系統(tǒng)管理員”都是“用戶”,所以,“一般用戶”類和“系統(tǒng)管理員”類都可以繼承自“用戶”類。在這里,“一般用戶”類和“系統(tǒng)管理員”類都是“用戶”類的子類,而“用戶”類則是“一般用戶”類和“系統(tǒng)管理員”類的父類。,2024年4月3日星期三,第77頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承可以使得子類具有父類的各種屬性和方法
61、,而不需要再次編寫相同的代碼。在子類繼承父類時,既可以重新定義子類的某些屬性和方法,也可以重寫某些方法,來覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。,2024年4月3日星期三,第78頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承有兩個方面的作用:①避免代碼冗余,提高可理解性和可維護性;②繼承是從老對象生成新對象的一種代碼重用機制,使系統(tǒng)更具靈活性和適應性,它使得解釋多態(tài)性成為可能。,2024年4月3日星期三,第79頁,3.4.1
62、 面向?qū)ο蟮幕靖拍?繼承有單繼承和多繼承之分。,,,單繼承,多繼承,2024年4月3日星期三,第80頁,3.4.1 面向?qū)ο蟮幕靖拍?多重繼承的引入,使面向?qū)ο笙到y(tǒng)大大增加了模擬現(xiàn)實世界的能力,但是系統(tǒng)結構變得非常復雜,增加了系統(tǒng)的理解與維護難度。在面向?qū)ο蟪绦蛟O計語言中,C++支持多繼承,而Java語言只支持單繼承,不支持多繼承。,2024年4月3日星期三,第81頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)ο箝_發(fā)中,繼承性不僅作
63、用在對操作的繼承,還作用在對數(shù)據(jù)的繼承,也就是說,既具有結構特性的繼承性,又具有行為特性的繼承性。子類是否可以訪問父類的所有成員變量和成員方法(或成員函數(shù))?在前面介紹封裝性時談到,定義類的數(shù)據(jù)成員與方法成員有三種訪問域(三種可見性),即公有訪問域(public)、受保護訪問域(protected)、私有訪問域(private)。父類的成員若定義為受保護訪問域和公有訪問域,子類是可以訪問的;若父類成員定義為私有訪問域,子類則無權訪問。
64、,2024年4月3日星期三,第82頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-7:重載及面向?qū)ο笙到y(tǒng)的多態(tài)性一個類中的操作具有相同的名稱和不同的參數(shù),這樣的操作被稱為“重載”。面向?qū)ο笙到y(tǒng)的多態(tài)性是指,當不同的對象收到相同的消息時產(chǎn)生不同的動作。常用在功能相同但參數(shù)的數(shù)據(jù)類型有微小差別的操作中。,2024年4月3日星期三,第83頁,3.4.1 面向?qū)ο蟮幕靖拍?操作名、參數(shù)及其類型和操作的返回類型合在一起稱為操作的簽名(注:這里的操
65、作就是方法或函數(shù))。一個類中的所有操作都必須具有唯一的簽名,即是說一個類中不能存在兩個相同簽名的操作。具有相同名稱和參數(shù)但是返回類型不同的操作不能稱為重載,因為在調(diào)用操作時并沒有描述操作的返回類型,被調(diào)用的對象不能分辨出僅僅是返回類型不同的兩個操作,因此這樣的操作具有歧義性,是無效的。,2024年4月3日星期三,第84頁,3.4.2 面向?qū)ο蟮拈_發(fā),傳統(tǒng)的軟件開發(fā)生命周期包含了六個階段:制定計劃、需求分析和定義、設計、編碼、測試、運行
66、與維護,面向?qū)ο蟮拈_發(fā)和傳統(tǒng)的軟件開發(fā)方法不同,它是一種基于現(xiàn)實世界抽象的新的軟件開發(fā)方法。那么,面向?qū)ο蟮能浖_發(fā)中,軟件生命周期又可分為哪幾個階段?各個階段主要完成哪些任務?,2024年4月3日星期三,第85頁,3.4.2 面向?qū)ο蟮拈_發(fā),在面向?qū)ο蟮能浖_發(fā)中,軟件生命周期可分為以下幾個階段:(1) 系統(tǒng)分析階段在這個階段,需要建立一個反映現(xiàn)實客觀世界情形的模型。為了建立這個模型,需要分析員和需求人員共同明確現(xiàn)實世界中的問題
67、。這個模型應該解決系統(tǒng)必須做什么,而不是怎么做的問題。分析之后將得到分析模型:對象模型、動態(tài)模型和功能模型。(2) 系統(tǒng)設計階段這個階段需要給出怎樣解決問題的決策。包括將系統(tǒng)劃分成子系統(tǒng)和子系統(tǒng)軟硬件如何配置,確定系統(tǒng)的整體框架結構。,2024年4月3日星期三,第86頁,3.4.2 面向?qū)ο蟮拈_發(fā),(3) 對象設計階段該階段將應用領域的概念轉換為計算機軟件領域的概念。在系統(tǒng)分析階段所定義的問題,在這個階段來確定解決問題的方法。將分
68、析模型的邏輯結構映射到一個程序的物理組織,得到設計模型。(4) 實現(xiàn)階段在這個階段,將在對象設計階段開發(fā)的類轉換成用特定的程序設計語言編寫的代碼或數(shù)據(jù)庫。(5) 測試階段傳統(tǒng)軟件開發(fā)的測試通常經(jīng)過單元測試、集成測試、系統(tǒng)測試三個環(huán)節(jié)。由于面向?qū)ο笥衅渥陨淼奶攸c,參考面向?qū)ο筌浖_發(fā)模式,面向?qū)ο箝_發(fā)測試包括面向?qū)ο蠓治龅臏y試、面向?qū)ο笤O計的測試、面向?qū)ο缶幊痰臏y試、面向?qū)ο髥卧獪y試、面向?qū)ο蠹蓽y試和面向?qū)ο笙到y(tǒng)測試。,2024
69、年4月3日星期三,第87頁,3.4.2 面向?qū)ο蟮拈_發(fā),面向?qū)ο箝_發(fā)同樣包含了傳統(tǒng)軟件開發(fā)的幾個階段:分析、設計、編碼、測試等,但面向?qū)ο箝_發(fā)是用“面向?qū)ο蟆钡挠^點去認識客觀世界,用“面向?qū)ο蟆钡姆椒ㄈツM客觀世界,所以,在分析階段主要分析現(xiàn)實世界中的對象以及對象與對象之間的關系,在設計階段除了對整個系統(tǒng)的架構設計外,主要針對對象(或類)以及對象(或類)與對象(或類)之間的關系進行設計,在編碼階段使用面向?qū)ο缶幊陶Z言實現(xiàn)類的各項功能,而
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件系統(tǒng)開發(fā)合同
- 軟件系統(tǒng)開發(fā)合同
- it軟件系統(tǒng)開發(fā)方案
- 軟件系統(tǒng)開發(fā)合同 標準
- 軟件系統(tǒng)開發(fā)服務合同
- 軟件系統(tǒng)開發(fā)技術答案
- 軟件系統(tǒng)開發(fā)合同范本
- 軟件系統(tǒng)開發(fā)和管理規(guī)范
- 軟件系統(tǒng)開發(fā)合同(標準模板)
- 艦船結構強度分析方法研究與軟件系統(tǒng)開發(fā).pdf
- 軟件系統(tǒng)開發(fā)委托合同
- 軟件自動化測試方法研究及系統(tǒng)開發(fā).pdf
- 基于MDA的軟件安全子系統(tǒng)開發(fā)方法的研究.pdf
- 基于軟件體系結構的MIS系統(tǒng)開發(fā)方法研究.pdf
- 信息系統(tǒng)開發(fā)方法
- 軟件系統(tǒng)開發(fā)及服務合同模板
- 網(wǎng)站項目軟件系統(tǒng)開發(fā)服務合同
- 軟件系統(tǒng)開發(fā)及服務合同模板
- 船體結構產(chǎn)品模型建模方法研究及軟件系統(tǒng)開發(fā).pdf
- 圖像隱寫分析軟件系統(tǒng)開發(fā).pdf
評論
0/150
提交評論