程序設計方法概述_第1頁
程序設計方法概述_第2頁
程序設計方法概述_第3頁
程序設計方法概述_第4頁
程序設計方法概述_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

江西師范大學·計算機信息工程學院·計算機科學系《面向對象程序設計》課程組huazhizhang@面向對象程序設計目錄第1章程序設計語言概述第2章程序設計語言的基本成分第3章程序設計方法概述第4章面向對象語言基礎第5章類的管理及常用工具類第6章異常處理和斷言第7章線程第8章GUI編程基礎和applet第9章I/O流第10章網絡通信第11章泛型與集合框架2/363.1問題規(guī)模對程序設計方法的影響3.2結構化程序設計方法3.3面向對象程序設計方法3.4兩種方法的簡單評述第3章程序設計方法概述理解并掌握大程序開發(fā)的特點、難點和關注點;掌握SP核心思想、實施步驟及方法的優(yōu)缺點;掌握OOP的來龍去脈、核心思想,并結合大程序開發(fā)的關注點,理解面向對象的基本概念。本章重點3/36問題規(guī)模的演化(決定了程序規(guī)模和復雜性)最初:面向科學計算,規(guī)模小、需求明確60-70年代:簡單管理應用,如財務信息管理。這一階段,問題開始顯現。如程序的質量差、完工時間不可預期、完工后難于維護,且生產率較低。人們將上述問題稱作軟件危機。各種程序設計方法涌現。90年代:從單機/局域網模式基于互聯(lián)網模式,任務由簡單數據處理決策支持。因同期程序設計科學的發(fā)展滯后于應用的發(fā)展,軟件危機依舊存在3.1問題規(guī)模對程序設計方法的影響開發(fā)冒泡排序之類的程序很容易,綜合性業(yè)務管理系統(tǒng)卻比較困難。后者無難解算法,難在何處?這得從程序開發(fā)步驟說起。4/36說明:大程序:代碼量10萬行以上,用戶給出需求;小程序:代碼量小于10萬行,自己決定需求。程序的開發(fā)步驟(大/小程序均適合)3.1問題規(guī)模對程序設計方法的影響定義需求規(guī)約設計求解模型實現模型問題規(guī)模對程序開發(fā)的影響,或者說開發(fā)大程序和小程序的差別,主要體現在這三大步驟中。另外還需考慮人員溝通和軟件維護。5/36問題規(guī)模對小程序開發(fā)的影響需求規(guī)約簡單,易于精確定義;設計求解模型(即算法)的開發(fā)是重點;開發(fā)時關注算法的正確性和精巧性。算法完成后,編碼/測試(即實現模型)很簡單;人員溝通協(xié)作:無(個人獨立完成整個過程)后期維護:即使有,因程序規(guī)模小而變得簡單。3.1問題規(guī)模對程序設計方法的影響對面向實際應用的小軟件的開發(fā)而言,也是如此。6/36問題規(guī)模對大程序開發(fā)的影響難于定義穩(wěn)定、精確的需求規(guī)約;難于搭建合理的求解模型;編碼測試很困難;人員溝通協(xié)作很復雜;維護貫穿整個生命周期,使用初期維護頻繁。3.1問題規(guī)模對程序設計方法的影響復雜系統(tǒng)的求解模型的搭建原本就比較困難,加上需求動態(tài)變化,使得求解模型要經常修改,甚至推倒重來。正如蓋房子,房子的基本目的和用途都不清楚,結果……。大程序涉及領域廣、人員多,如雙方領導、管理人員、開發(fā)人員(需求、設計、編碼、測試)、終端用戶、風險評估員等,相互間溝通問題大,牽涉很多非技術因素,影響開發(fā)質量。需求難定義:規(guī)模大、涉獵廣、理不清;外行開發(fā)系統(tǒng)讓內行使用;開發(fā)期間用戶無法對設計進行驗證。需求在設計、開發(fā)、甚至在軟件使用的過程中,被逐步的“開發(fā)”出來。調試難度隨代碼量增大而呈現幾何級數增加,涉及子程序正確、子程序/模塊間協(xié)調正確,而且往往解決了舊錯,又引入了新問題。需求將在設計過程中“開發(fā)”出來,使用初期錯誤涌現,維護將貫穿整個開發(fā)、使用過程。并且維護不僅將破壞已有的設計,更可能會引入許多新的錯誤。7/36大程序開發(fā)現狀:缺乏成熟理論支持,確保系統(tǒng)正確是一種夢想;目前希望在某些關鍵行為上不出錯;對求解模型,不求完全不變,但求有較規(guī)范的設計方法,模型要易于維護和擴充。3.1問題規(guī)模對程序設計方法的影響大程序開發(fā)應注重什么?8/36大程序開發(fā)的側重點可靠性:在特定時間、特定環(huán)境、做特定操作不失敗的可能性。即系統(tǒng)“核心模塊”不會發(fā)生“特定類型”錯誤??芍赜眯裕簩σ延心K/子程序,無需修改或僅需少量修改就可拿到別處使用的難易程度;可維護性:實施各類維護活動的難易程度。3.1問題規(guī)模對程序設計方法的影響可重用性高,可減少工作量(需求、設計、編碼測試、維護),降低錯誤。因為重用模塊經過多次復用,存在錯誤的可能性遠比新開發(fā)程序低,可靠性更容易保證。維護包括糾錯、增/刪/改功能、換環(huán)境、系統(tǒng)重構等,貫穿整個軟件生命周期。可維護性好,可大幅降低維護難度,減少因維護而引入的各類錯誤。對提高可維護性的重視,怎么說都不為過!軟件工程的核心,就是為了提高軟件的可維護性。以PC機架構設計為例解釋上述側重點。總體上,大程序重在如何處理復雜性,設計出結構合理、易于維護的系統(tǒng)處理框架。9/36兩種經典的程序設計方法概述發(fā)展至今,產生許多程序設計方法,其中結構化程序設計和面向對象程序設計最為經典。二者思想萌芽幾乎同時出現于1968年左右。但結構化方法率先被業(yè)界接受,并占據主導地位。隨著程序規(guī)模擴大,結構化方法在可重用性、可維護性方面遇到困難。人們發(fā)現OO方法的部分思想有助于解決;加之對游戲、GUI程序,結構化方法難于奏效。于是OO逐漸被重視,并迅速走出實驗室,得以發(fā)展和流行。3.1問題規(guī)模對程序設計方法的影響10/36方法起源核心思想實例剖析方法的優(yōu)缺點3.2結構化程序設計方法11/36起源:60年代末關于goto語句的爭論當時軟件危機癥狀明顯:質量差、低產出、難維護。Dijkstra、Wirth等人力主廢棄goto,并提出一些結構化設計的方法和原則,以及語言支持;后Knuth將討論引到“好程序”的標準上,讓人們逐步認識到結構的重要性;爭論結束時,用結構化思想進行程序設計的模式基本為業(yè)界接受。后經Yourdon、Constantine、DeMarco等人不斷豐富和完善,結構化程序設計成為20世紀七、八十年代使用最廣泛的程序設計方法。3.2結構化程序設計方法E.W.DijkstraN.Wirth12/36核心思想以功能為核心的,系統(tǒng)是功能模塊的組裝?!敖Y構化”是指可組合、可分解,即系統(tǒng)(或大模塊)由若干子模塊組成,各模塊獨立性較強。設計策略:自頂向下逐步求精3.2結構化程序設計方法結合PC機構造,解釋結構化設計思想及其優(yōu)點。所謂結構化程序設計,就是這樣一種編程方法:用自頂向下逐步求精策略指導開發(fā)過程;程序由若干模塊(或構件)組裝而成;構成模塊的每一子程序只能包含順序、分支、選擇等三種結構,且每種結構只允許單入口和單出口?!吨袊嬎銠C百科全書(第二版)》輸入數據輸出數據結構化就是功能可組合、可拆解。系統(tǒng)……功能1功能n13/36實例剖析實例1(問題需求):1、能夠記錄圖書的明細信息及分類信息(包括圖書本身的書名、作者、出版單位、出版年份、是否英文、原版等等,以及圖書的分類號、關鍵字等等);2、能記錄讀者具體情況,查詢讀者借閱信息;3、能夠查閱當前圖書在庫及借出情況;4、能設置讀者借閱期限到或者某種條件拒絕借閱的處理;5、特殊情況的處理;6、打印各類相關報表,制作各種統(tǒng)計圖表……。3.2結構化程序設計方法14/36實例剖析解決方案3.2結構化程序設計方法……圖書資料管理系統(tǒng)信息維護數據檢索報表處理特殊處理圖書信息增刪改讀者信息增刪改員工信息增刪改管理權限增刪改15/36方案剖析簡單易用。以功能為核心搭建系統(tǒng)框架,目標明確,方法簡單,易于學習,易于實現。策略有效。自頂向下逐步求精思想貫穿分解過程,系統(tǒng)結構為層次狀。分解過程即實現過程。模塊化。信息封裝于模塊,各模塊相互獨立。3.2結構化程序設計方法結構化方法究竟存在什么問題呢?16/36實例2(在實例1基礎上推廣)將系統(tǒng)推廣至校圖書館及各院系,并聯(lián)網共享即師生可跨院借閱;一些院系有特殊需求:地理系:有地圖管理,地圖管理涉及地形、地貌、天氣、資源分布、衛(wèi)星圖等不同地圖和關鍵字音樂系:樂譜、器械管理化學系:化學制劑和器械管理……3.2結構化程序設計方法17/36實例-2解決方案策略:在原有基礎上,為不同用戶做個性修改后分發(fā),設計方案與前類似。存在問題有錯難改如:發(fā)現原系統(tǒng)一處算法設計缺陷,而不同用戶已對此算法可能做了調整,必須逐個處理,很難做雷同修改。模塊獨立性受數據結構制約模塊以功能為核心構建,功能本質上是對數據的處理。數據的結構若需要變動,很多模塊都將受影響。3.2結構化程序設計方法即難維護、難重用,可靠性難保障。18/36優(yōu)勢特色以功能為核心構建系統(tǒng),目標明確,易于理解,措施(即自頂向下逐步求精)簡單有效;存在問題以功能為核心構建軟件系統(tǒng),問題多;用戶和開發(fā)人員之間存在語義鴻溝。3.2結構化程序設計方法以功能為核心,可以很好的踐行功能抽象策略:1、信息封裝在模塊中,便于在較高層面上分析和設計;2、層次/模塊獨立,設計時無需考慮其它層/模塊。1、功能易變(不精確、漏、變),系統(tǒng)結構的穩(wěn)定性較差。2、模塊獨立性受限。(數據局部于模塊、需要全局變量)3、功能/模塊與具體需求聯(lián)系密切,限制模塊重用性??蛻裘枋龅男枨蟛痪_,涉及開發(fā)人員難懂的領域術語;開發(fā)人員使用的專業(yè)框圖/術語的描述,用戶難理解。這樣在軟件交付使用前,用戶很難對需求轉換的有效性和合理性進行確認。19/36方法學視角將系統(tǒng)是做一個給定輸入產生特定輸出功能體。核心思想以功能為核心構建系統(tǒng),功能可組合、可拆解主要策略自頂向下逐步求精存在問題以功能為核心構建軟件系統(tǒng),問題多多;用戶和開發(fā)人員之間存在語義鴻溝。3.2結構化程序設計方法·小結20/36方法起源核心思想基本概念實例剖析3.3面向對象程序設計方法21/36面向對象方法的起源40~50年代,運籌學流行:雷達選址、水雷布陣60年代,挪威的Dahl幫助Nygaard用計算機求解運籌學問題,并發(fā)布Simula-62,67年正式發(fā)布。1972年,Alan.Kay研制世界上首個圖形用戶界面的計算機系統(tǒng)Alto。發(fā)布語言SmallTalk72,GUI界面的推廣使得OOP日漸受到重視。Smalltalk-80及其支撐環(huán)境(84年作為產品公開)的推出,使得面向對象程序設計進入實用階段。之后,伴隨C++、Eiffel興起,OO方法開始走紅。3.3面向對象程序設計方法O.J.DahlK.NygaardAlan.Kay22/36面向對象方法的發(fā)展90年代,OO研究從語言轉到軟件開發(fā)方法方面,提出了一系列面向對象的開發(fā)方法和技術,如:B.Henderson-Sellers和J.M.Edwards提出OO生存周期的噴泉模型及OO系統(tǒng)開發(fā)的七點框架方法OO方法G.Booch提出的面向對象開發(fā)方法學P.Coad和E.Yourdon提出的OO分析和OO設計J.Rumbaugh等提出的OMT方法學J.Rumbaugh、G.Booch和I.Jacobson等人又提出基于UML的統(tǒng)一方法3.3面向對象程序設計方法23/36核心思想軟件就是現實世界的仿真(或模擬)?!,F實世界系統(tǒng)=一組客觀對象+對象間交互面向對象系統(tǒng)=一組對象+對象間的消息傳遞實現:客觀對象≈計算機對象、消息傳遞≈對象間協(xié)作設計重點抽象出對象;基于對象模擬客觀世界的運作。3.3面向對象程序設計方法小型圖書管理系統(tǒng)的模擬……(好處:系統(tǒng)穩(wěn)定性更高。日后功能可能變,但對象依舊,變得是對象間的交互。)24/36類和對象對象是現實對象的模擬,類是對象的描述模型。對象/類中包含屬性和行為。屬性:對象的數據成員;方法:描述對象的動作對象間交互:也稱對象間發(fā)送消息,就是一個對象調用另一對象的方法,已更改對象的狀態(tài)。對象狀態(tài):對象中所有屬性的值。程序執(zhí)行的目的就是通過交互來更改對象的狀態(tài)。3.3.3基本概念--類和對象25/36面向對象程序設計語言,要盡可能地把類、對象設計的簡單、安全、易用、易于拓展。轎車類{

屬性:顏色、排氣量、車重、里程、…

行為:啟動()、加速()、轉向()、……}包含哪些屬性、行為,由系統(tǒng)的功能需求、可擴展性來決定。classTV{

privateintvolume,channel;publicvoidsetCH(intn){channel=n;}}class遙控器{privateTVt;public遙控器(TVtt){t=tt;};

publicvoidsendCH(intch){

t.setCH(ch);}}TVt=newTV();遙控器rc=new遙控器(t);//建立關聯(lián)

rc.sendCH(9);//發(fā)消息遙控器向電視機發(fā)消息改變頻道遙控器向電視機發(fā)消息,更改電視機頻道;實現機制為遙控器調用電視機更改狀態(tài)的方法。在OO方法中,封裝有兩層含義:打包,將組成對象的各零件包成一個整體;隱藏,隱藏對象的細節(jié)。封裝的優(yōu)點隱藏細節(jié),可簡化認知;只能借助對象使用接口來操控對象必須遵循設計者既定的操作條件;接口不變情況下,細節(jié)改變不影響使用。3.3.3基本概念--封裝即讓操作對象更簡單、更安全、更易于維護和重用。例如:電視機、遙控器26/36含義子類擁有父類的全部屬性和行為。作用重用:子類在父類的基礎上構造;分散類復雜性:把類的家族特征分散于類層次結構,避免單個類的設計過于復雜;借助繼承關系建立家族體系,為多態(tài)奠定基礎。3.3.3基本概念--繼承狗咬人了咬的效果完全不同27/36含義:同一名稱在不同環(huán)境下有不同含義,如:行為多態(tài):某方法有多種方法體可供選用;如:狗擁有嗅的行為:

嗅(主人氣味)、嗅(老虎氣味)、……我有一只名為“毛頭”的寵物狗,毛頭.咬()值多態(tài):某變量可賦予不同類型的對象。動物

d=new貓();d=new狗();

3.3.3基本概念--多態(tài)重載:編譯時根據方法的參數來決定執(zhí)行哪一方法體。重寫/覆蓋:運行時根據名稱綁定的對象來決定執(zhí)行哪一方法體。多態(tài)賦予對象在不同環(huán)境下的自適應能力,使程序更簡潔易懂,通用性也得到增強。多態(tài)特性,特別是動態(tài)綁定的多態(tài)特性,是面向對象方法最吸引人的核心特色!28/36含義:只描述關心的屬性/行為,例如:功能抽象,如子程序;數據類型,如數據抽象;從一組對象抽象出類,如具體圖書圖書類;從一組相似類中抽象出層次結構(即類家族結構),如犬科-狗-藏獒從不同類中抽象出共性(即接口)如:飛機、飛鳥、飛人、會飛的子彈會飛的將相關但不同的含義用同一名稱表示,如狗.嗅()……3.3.3基本概念--抽象在這些概念和機制的支持下,OO中的類、對象,就如同int那樣具有高度的易用性、安全性和可重用性。29/36實例剖析實例1(問題需求):1、能夠記錄圖書的明細信息及分類信息(包括圖書本身的書名、作者、出版單位、出版年份、是否英文、原版等等,以及圖書的分類號、關鍵字等等);2、能記錄讀者具體情況,查詢讀者借閱信息;3、能夠查閱當前圖書在庫及借出情況;4、能設置讀者借閱期限到或者某種條件拒絕借閱的處理;5、特殊情況的處理;6、打印各類相關報表,制作各種統(tǒng)計圖表……。3.3.4實例剖析30/36實例-1解決方案用例、對象模型、功能模型、動態(tài)模型、……3.3.4實例剖析管理員管理讀者管理圖書管理書目登記借/還書管理報表……登陸查詢?yōu)g覽注冊用戶系統(tǒng)用例圖specifyCriteria():LendItemForm:LendItemControl:Title:BorrowInfo:Loan:Itemsearch()selectTitle()selectItem()lend()search(criteria)getItem(title)lend(item)match(criteria)getItems()isAllowed(item)setStatus()[如果允許借此書]create(borrower,item)管理員借書用例基本流的順序圖相關類功能的說明LendItemForm:借書界面LendItemControl:管理員登記借書Title:圖書資料基本信息Borrowerinfo:讀者基本信息Loan:讀者借書記錄Item:書目分類信息LendItemFormspecifyCriteria()search()selectTitle()selectItem()lend()……LendItemControlsearch(criteria)getItem()lend(item)……Titlematch(criteria)getItems()……ItemsetStatus()……BorrowerInfoisAllowed(item)……Loancreate(borrower,item)……系統(tǒng)相關類的行為匹配疑問:用面向對象開發(fā)似乎并不比結構化開發(fā)更簡單,甚至還更復雜。確實如此!31/36實例2(在實例1基礎上推廣)將系統(tǒng)推廣至校圖書館及各院系,并聯(lián)網共享即師生可跨院借閱;一些院系有特殊需求:地理系:有地圖管理,地圖管理涉及地形、地貌、天氣、資源分布、衛(wèi)星圖等不同地圖和關鍵字音樂系:樂譜、器械管理化學系:化學制劑和器械管理……3.3.4實例剖析32/36實例-2解決方案——所得設計方案與前類似派生新類,解決部分功能(地圖、樂譜等)構造新類(化學制劑、器械),加入系統(tǒng);設計特點分析繼承/派生是簡單易用的重用機制;新增內容對系統(tǒng)原有結構影響很小;類/對象易被用戶理解,且開發(fā)過程中對象的語義不變,內容逐步豐富,便于用戶驗證設計;系統(tǒng)的可擴充、易維護、易重用,可靠性較高3.3.4實例剖析注意:OO中程序員和用戶間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論