版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象方法學第一頁,共七十頁,2022年,8月28日討論軟件?軟件危機?軟件工程?你開發(fā)軟件采用的方法?第二頁,共七十頁,2022年,8月28日軟件危機軟件定義:一個軟件必須由一個完整的配置組成。
軟件是程序、數(shù)據(jù)及相關文檔的完整集合。第三頁,共七十頁,2022年,8月28日軟件開發(fā)的高成本與低質量的矛盾稱為軟件危機。軟件危機第四頁,共七十頁,2022年,8月28日
軟件開發(fā)和維護過程中遇到一系列嚴重的問題(1)對軟件開發(fā)成本和進度估計不準確。
經(jīng)費預算經(jīng)常突破,完成時間一再拖延。(2)開發(fā)的軟件不能滿足用戶要求。
開發(fā)初期對用戶的要求了解不夠明確,未能得到明確表達。開發(fā)工作開始后,軟件人員和用戶又未能及時交換意見,使得一些問題不能及時解決,導致開發(fā)的軟件不能滿足用戶的要求,使開發(fā)失敗。(3)軟件產(chǎn)品質量靠不住。(4)
軟件可維護性差。
開發(fā)過程沒有統(tǒng)一的、公認的規(guī)范,軟件開發(fā)人員按各自的風格工作,各行其事。開發(fā)過程無完整、規(guī)范的文檔,發(fā)現(xiàn)問題后進行雜亂無章的修改。程序結構不好,運行時發(fā)現(xiàn)錯誤也很難修改,導致維護性差。第五頁,共七十頁,2022年,8月28日(5)開發(fā)的軟件可靠性差。由于在開發(fā)過程中,沒有確保軟件質量的體系和措施,在軟件測試時,又沒有嚴格的、充分的、完全的測試,提交給用戶的軟件質量差,在運行中暴露出大量的問題。這種不可靠的軟件,輕者會影響系統(tǒng)正常工作,重者會發(fā)生事故,造成生命財產(chǎn)的重大損失。(6)軟件沒有適當?shù)奈臋n材料(7)傳統(tǒng)的軟件開發(fā)速度遠遠跟不上應用速度。
第六頁,共七十頁,2022年,8月28日與軟件本身的特點有關和軟件開發(fā)與維護的方法不正確有關。
產(chǎn)生軟件危機的原因第七頁,共七十頁,2022年,8月28日缺乏“可見性”管理和控制軟件開發(fā)過程相當困難軟件較難維護。規(guī)模龐大為了在預定時間內開發(fā)出規(guī)模龐大的軟件,必須由許多人分工合作,然而,如何保證每個人完成的工作合在一起確實能構成一個高質量的大型軟件系統(tǒng),不僅涉及許多技術問題,更重要的是必須有嚴格而科學的管理。(1)與軟件本身的特點有關第八頁,共七十頁,2022年,8月28日忽視軟件需求分析的重要性
(2)與軟件開發(fā)與維護的方法不正確有關輕視維護軟件已經(jīng)完成之后進行的維護是極端艱巨復雜的工作,需要花費很大代價。統(tǒng)計數(shù)據(jù)表明,實際上用于軟件維護的費用占軟件總費用的55%~70%。
作好軟件定義時期的工作,是降低軟件成本提高軟件質量的關鍵。第九頁,共七十頁,2022年,8月28日
克服軟件危機的途徑用現(xiàn)代工程的概念、原理、技術和方法進行軟件開發(fā)、管理和維護。組織管理措施軟件開發(fā)不是某種個體勞動的神秘技巧,而應該是一種組織良好、管理嚴密、各類人員協(xié)同配合、共同完成的工程項目。技術措施(方法和工具)在軟件開發(fā)的每個階段都有許多繁瑣重復的工作需要做,在適當?shù)能浖ぞ咻o助下,開發(fā)人員可以把這類工作做得既快又好。第十頁,共七十頁,2022年,8月28日《系統(tǒng)工程》
系統(tǒng)建模第十一頁,共七十頁,2022年,8月28日
系統(tǒng)模型的定義系統(tǒng)模型是一個系統(tǒng)某一方面本質屬性的描述,它以某種確定的形式(例如文字、符號、圖表、實物、數(shù)學公式等)提供關于該系統(tǒng)的知識。系統(tǒng)模型一般不是系統(tǒng)對象本身,而是現(xiàn)實系統(tǒng)的描述、模仿或抽象。系統(tǒng)是復雜的,系統(tǒng)的屬性也是多方面的。對于大多數(shù)研究目的而言,沒有必要考慮系統(tǒng)的全部屬性,因此,系統(tǒng)模型只是系統(tǒng)某一方面本質屬性的描述,本質屬性的選取完全取決系統(tǒng)工程研究的目的第十二頁,共七十頁,2022年,8月28日根據(jù)不同的研究目的,同一個系統(tǒng)可以建立不同的系統(tǒng)模型。例如,城市經(jīng)濟模型,可以用一、二、三產(chǎn)業(yè)表示,也可以用各個行政管理部門來表示。同一種模型可以代表多個系統(tǒng)。例如,y=kx(k是為常量),幾何上:代表一條通過原點的直線;代數(shù)上:表示比例關系;設k=π,x代表直徑,則y表示圓周長;設k表示彈簧剛度,x表示伸長量,則y表示彈簧力大??;當k=a表示加速度,x=m表示質量,則y表示物體所受外力大小等等。第十三頁,共七十頁,2022年,8月28日
系統(tǒng)模型與原型系統(tǒng)模型反映實際系統(tǒng)的主要特征,但它又高于實際系統(tǒng)而具有同類問題的共性。因此一個適用的系統(tǒng)模型應該具有如下三個特征:(1)它是現(xiàn)實系統(tǒng)的抽象或模仿;(2)它是由反映系統(tǒng)本質或特征的主要因素構成的;(3)它集中體現(xiàn)了這些主要因素之間的關系。第十四頁,共七十頁,2022年,8月28日
系統(tǒng)模型與原型給對象實體以必要的簡化,用適當?shù)谋憩F(xiàn)形式或規(guī)則把它的主要特征描繪出來,這樣得到的模仿品稱為模型,對象實體稱為原型。模型也有結構,模型結構與原型結構是不同的兩碼事,但兩者又有直接或間接的聯(lián)系。原型中必須考慮的結構問題都應在模型中有所反映,能以模型的語言描述出來。第十五頁,共七十頁,2022年,8月28日
系統(tǒng)模型與原型數(shù)學模型是抽象模型,不能要求它直接反映系統(tǒng)原型的結構,但必定與原型結構有內在聯(lián)系,原型中的結構問題在模型中用數(shù)學語言描述,能用數(shù)學方法分析和解決。例如,原型的結構穩(wěn)定與否可以轉化為模型中數(shù)學結構的穩(wěn)定與否。構造模型是為了研究原型,通過模型研究能夠把握原型的主要特性。模型又是對原型的簡化,應當壓縮一切可以壓縮的信息力求經(jīng)濟性好,便于操作。沒有簡化不成其為模型,同原型比較未能顯著簡化的模仿品不是好模型。第十六頁,共七十頁,2022年,8月28日
系統(tǒng)模型的分類實體模型即系統(tǒng)本身,當系統(tǒng)的大小剛好適合研究而又不存在危險時,就可以把系統(tǒng)本身作為模型。實體模型包括抽樣模型,例如標準件的生產(chǎn)檢驗是從總體中抽取一定數(shù)量的樣本進行的,樣本就是實體模型。相似模型根據(jù)相似原理,利用一種系統(tǒng)去代替另一種系統(tǒng)。例如用電路系統(tǒng)代替機械系統(tǒng)、熱力學系統(tǒng)進行研究,則電路系統(tǒng)就是后二者的相似模型。第十七頁,共七十頁,2022年,8月28日
系統(tǒng)模型的分類比例模型是放大或縮小的系統(tǒng),使之適合于研究。文字模型如技術報告、說明書等。在物理模型和數(shù)學模型都很難建立時,有時不得不用它來描述研究結果。網(wǎng)絡模型用網(wǎng)絡圖來描述系統(tǒng)的組成元素以及元素之間的相互關系(包括邏輯關系與數(shù)學關系)第十八頁,共七十頁,2022年,8月28日
系統(tǒng)模型的分類圖表模型用圖像和表格描述的模型,它們可以互相轉化,這里說的圖像是指坐標系中的曲線、曲面和點等幾何圖形。邏輯模型表示邏輯關系的模型,如方框圖、程序單等。數(shù)學模型用數(shù)學方程式表示的模型。計算機模型用計算機設計語言描寫的模型。第十九頁,共七十頁,2022年,8月28日
數(shù)學模型所謂系統(tǒng)的數(shù)學模型,指的是描述元素之間、子系統(tǒng)之間、層次之間相互作用以及系統(tǒng)與環(huán)境相互作用的數(shù)學表達式。原則上講,現(xiàn)代數(shù)學所提供的一切數(shù)學表達形式,包括幾何圖形、代數(shù)結構、拓撲結構、序結構、分析表達式等,均可以作為一定系統(tǒng)的數(shù)學模型。大量的數(shù)學模型是定量分析系統(tǒng)的工具。用數(shù)學形式表示的輸出對輸入的響應關系,就是廣泛使用的一種定量分析模型第二十頁,共七十頁,2022年,8月28日
數(shù)學模型技術科學層次的系統(tǒng)理論和系統(tǒng)工程,都主要使用數(shù)學模型作為定量分析工具,以便給出設計、操作系統(tǒng)所必須的定量結論。數(shù)學模型同樣可以作為定性描述系統(tǒng)的工具,對于描述系統(tǒng)演化現(xiàn)象來說,人們關心的主要是系統(tǒng)定性性質的改變與否,定性分析是更基本的。定量描述系統(tǒng)的數(shù)學模型必須以正確認識系統(tǒng)的定性性質為前提。描述系統(tǒng)的特征量的選擇建立在建模者對系統(tǒng)行為特性的定性認識基礎上。第二十一頁,共七十頁,2022年,8月28日
數(shù)學模型優(yōu)點定量分析的基礎在自然科學和工程技術領域里,數(shù)量不準將招致質量低劣,在社會科學領域里,沒有定量分析會使人心中無數(shù),造成決策失誤,引起不必要的混亂。因此,采用數(shù)學模型進行定量分析已成為當代自然科學和社會科學進一步發(fā)展的共同要求。第二十二頁,共七十頁,2022年,8月28日
數(shù)學模型優(yōu)點系統(tǒng)預測和決策的工具
可以利用系統(tǒng)已有的數(shù)據(jù)建立預測模型,用來預測系統(tǒng)的未來狀態(tài),為正確決策提供依據(jù)。靈活性好它可變性好、適應性強、分析問題速度快,省時省錢,而且便于使用計算機,因此,它是所有模型中使用最廣泛的一種。我們通常所說的系統(tǒng)建模,大多數(shù)情況下都是指建立系統(tǒng)的數(shù)學模型。第二十三頁,共七十頁,2022年,8月28日
計算機模型用計算機程序定義的模型。首先明確構成系統(tǒng)的“構件”,把它們之間的相互關聯(lián)方式提煉成若干簡單的行為規(guī)則,并以計算機程序表示出來,以便通過在計算機上的數(shù)值計算來模仿系統(tǒng)運行演化,觀察如何通過對構件執(zhí)行這些簡單規(guī)則而涌現(xiàn)出系統(tǒng)的整體性質,預測系統(tǒng)的未來走向。所有數(shù)學模型都可以轉化為基于計算機的模型,通過計算來研究系統(tǒng)。許多無法建立數(shù)學模型的系統(tǒng),如復雜的物理過程,特別是生物、社會和行為過程,也可能建立基于計算機的模型。第二十四頁,共七十頁,2022年,8月28日
計算機模型用數(shù)學表達式定義的傳統(tǒng)模型,求解和處理往往需用復雜艱深的理論和技巧,費時費力,可行性常常較差,所得結果有時無法用實驗檢驗。用計算機程序定義的模型,可以做到既嚴格,又可行,能夠在計算機上研究和預測系統(tǒng),通過計算實驗來檢驗結果。對于那些無法用真實的實驗來檢驗的復雜系統(tǒng),計算實驗是唯一可用的實驗檢驗手段。計算實驗是一種新興的實驗形式,它為研究復雜巨系統(tǒng)提供了唯一普遍可用的實驗手段。第二十五頁,共七十頁,2022年,8月28日
系統(tǒng)建模方法1系統(tǒng)模型的要求
2建模的原則第二十六頁,共七十頁,2022年,8月28日1系統(tǒng)模型的要求真實性要求建立的模型能夠很好地反映系統(tǒng)的客觀實際,應把系統(tǒng)本質特征和關系反映進去,而把非本質的東西去掉,但又不影響反映本質的真實程度。也就是說,系統(tǒng)模型應有足夠的精度,以保證它的真實性。精度要求不僅與研究對象有關,而且與所處的時間、狀態(tài)和條件有關。因此,為滿足真實性要求,對同一對象在不同情況下可以提出不同的精度要求。第二十七頁,共七十頁,2022年,8月28日1系統(tǒng)模型的要求簡明性在滿足真實性要求的基礎上,應盡量使系統(tǒng)模型簡單明了,以節(jié)約建模的費用和時間。這也就是說,如果一個簡單的模型已能使實際問題得到滿意的解答,就沒有必要去建一個復雜的模型,因為建造一個復雜的模型并求解是要付出很高代價的,其次模型過于復雜難以滿足快速決策的需要。第二十八頁,共七十頁,2022年,8月28日1系統(tǒng)模型的要求現(xiàn)實性在建立某些系統(tǒng)的模型時,如果已有某種標準化模型可供借鑒,則應盡量采用標準化模型,或者對標準化模型加以某些修改,使之適合對象系統(tǒng),不追求另起爐灶。其次,在建立模型時,要考慮數(shù)據(jù)采集的可能性和今后的發(fā)展方向,使建立的模型具有現(xiàn)實可操性和發(fā)展?jié)摿?。第二十九頁,共七十頁?022年,8月28日2建模的原則抓住主要矛盾模型只應包括與研究目的有關的方面,而不是對象系統(tǒng)的所有方面。例如,對—個空運指揮調度系統(tǒng)的研究,建模只需考慮飛機的飛行航向而無需考慮其飛行姿態(tài)。清晰明了一個大型復雜系統(tǒng)是由許多聯(lián)系密切的子系統(tǒng)組成的,因此對應的系統(tǒng)模型也是由許多子模型(或模塊)組成的。在子模型與子模型之間,除了保留研究目的所必要的信息聯(lián)系外,其它的耦合關系要盡可能減少,以保證模型結構盡可能清晰明了。第三十頁,共七十頁,2022年,8月28日2建模的原則精度要求適當建立系統(tǒng)模型,應該視研究目的和使用環(huán)境不同,選擇適當?shù)木鹊燃?,以保證模型切題、實用,而又不致花費太多。例如,一個受外力F作用下的物體M,其動力學系統(tǒng)的數(shù)學模型,在不同使用環(huán)境下有不同精度等級,應該適當選擇。第三十一頁,共七十頁,2022年,8月28日2建模的原則當物體的運動速度v足夠小時,可以忽略空氣阻力的影響,其符合精度要求的數(shù)學模型為當速度v提高到必須考慮空氣阻力的影響時,則其符合精度要求的數(shù)學模型為當物體的運動速度接近于光速3×108m/s時,按相對論原理,此時M將不是常數(shù),因此其符合精度要求的數(shù)學模型為第三十二頁,共七十頁,2022年,8月28日2建模的原則盡量使用標準模型在建立一個實際系統(tǒng)的模型時,應該首先大量調閱模型庫中的標準模型,如果其中某些可供借鑒,不妨先試用一下。如能滿足要求,就應該使用標準模型,或者盡可能向標準模型靠攏。這樣有利于比較分析,有利于節(jié)省費用和時間第三十三頁,共七十頁,2022年,8月28日3建模的主要方法推理法對于內部結構和特性已經(jīng)清楚的系統(tǒng),即所謂的“白箱”系統(tǒng)(例如大多數(shù)的工程系統(tǒng)),可以利用已知的定律和定理,經(jīng)過一定的分析和推理,得到系統(tǒng)模型。實驗法對于那些內部結構和特性不清楚或不很清楚的系統(tǒng),即所謂的“黑箱”或“灰箱”系統(tǒng),如果允許進行實驗性觀察,則可以通過實驗方法測量其輸入和輸出,然后按照一定的辨識方法,得到系統(tǒng)模型。第三十四頁,共七十頁,2022年,8月28日3建模的主要方法統(tǒng)計分析法對于那些屬于“黑箱”,但又不允許直接進行實驗觀察的系統(tǒng)(例如非工程系統(tǒng)多數(shù)屬于此類),可以采用數(shù)據(jù)收集和統(tǒng)計分析的方法來建造系統(tǒng)模型。第三十五頁,共七十頁,2022年,8月28日3建模的主要方法類似法即建造原系統(tǒng)的類似模型。有的系統(tǒng),其結構和性質雖然已經(jīng)清楚,但其模型的數(shù)量描述和求解卻不好辦,這時如果有另一種系統(tǒng)其結構和性質與之相同,因而建造出的模型也類似,但是該模型的建立及處理要簡單得多,把后一種系統(tǒng)的模型看成是原系統(tǒng)的類似模型。利用類似模型,按對應關系就可以很方便地求得原系統(tǒng)的模型。例如很多機械系統(tǒng)、氣動力學系統(tǒng)、水力學系統(tǒng)、熱力學系統(tǒng)與電路系統(tǒng)之間某些現(xiàn)象彼此類似,特別是通過微分方程描述的動力學方程基本一致,因此可以利用成熟的電路系統(tǒng)來構造上述系統(tǒng)的類似模型第三十六頁,共七十頁,2022年,8月28日3建模的主要方法混合法大部分系統(tǒng)模型的建造往往是上述幾種方法綜合運用的結果真正解決系統(tǒng)建模問題還必須充分開發(fā)人的創(chuàng)造力,綜合運用各種科學知識,針對不同的系統(tǒng)對象,或者建造新模型,或者巧妙地利用已有的模型,或者改造已有的模型,這樣才能創(chuàng)造出更加適用的系統(tǒng)模型。因此,有人把建造系統(tǒng)模型看成是一種藝術,這說明建造系統(tǒng)模型確實需要充分發(fā)揮人的創(chuàng)造性,而不可能有現(xiàn)成的模式可以照搬第三十七頁,共七十頁,2022年,8月28日軟件生命周期-傳統(tǒng)方法軟件生命周期是指一個軟件項目被提出并著手實施開始,到該軟件報廢或停止使用為止。經(jīng)歷三個時期
.軟件定義
.軟件開發(fā)
.運行維護(也稱為軟件維護)第三十八頁,共七十頁,2022年,8月28日軟件生命周期各階段的基本任務1.問題定義2.可行性研究3.需求分析4.總體設計5.詳細設計6.編碼和單元測試7.綜合測試8.運行與維護
軟件生命周期由軟件定義、軟件開發(fā)和運行維護(也稱為軟件維護)3個時期組成,每個時期又進一步劃分成若干個階段。第三十九頁,共七十頁,2022年,8月28日1.問題定義回答:“要解決的問題是什么?”
通過調研,寫出關于問題性質、工程目標和工程規(guī)模的書面報告,并得到客戶的確認。2.可行性研究回答:“對于上一個階段所確定的問題有行得通的解決辦法嗎?”
研究并論證軟件系統(tǒng)的可行性,對方案進行選擇并形成可行性分析報告。第四十頁,共七十頁,2022年,8月28日3.需求分析這個階段的任務主要是確定目標系統(tǒng)必須具備哪些功能。建立邏輯模型
必須準確完整地體現(xiàn)用戶的要求。數(shù)據(jù)模型(實體-聯(lián)系圖)功能模型(數(shù)據(jù)流圖)行為模型(狀態(tài)轉換圖)書寫規(guī)格說明書用正式文檔準確地記錄對目標系統(tǒng)的需求。第四十一頁,共七十頁,2022年,8月28日4.總體設計(概要設計)
回答“概括地說,應該怎樣實現(xiàn)目標系統(tǒng)?”
軟件設計的一條基本原理就是,程序應該模塊化,也就是說,一個程序應該由若干個規(guī)模適中的模塊按合理的層次結構組織而成。因此,總體設計的另一項主要任務就是設計程序的體系結構,也就是確定程序由哪些模塊組成以及模塊間的關系。建立軟件系統(tǒng)的總體結構定義功能模塊的接口設計全局數(shù)據(jù)庫或數(shù)據(jù)結構規(guī)定設計約束編制概要設計文檔第四十二頁,共七十頁,2022年,8月28日5.詳細設計(模塊設計)
把解法具體化,回答“應該怎樣具體地實現(xiàn)這個系統(tǒng)呢?”模塊詳細設計
模塊的詳細功能、算法、數(shù)據(jù)結構、模塊間的接口等設計,擬定模塊測試方案。編制模塊的詳細規(guī)格說明
匯總模塊詳細設計的結果,形成模塊詳細規(guī)格說明書。第四十三頁,共七十頁,2022年,8月28日6.編碼和單元測試寫出正確的容易理解、容易維護的程序模塊。編碼根據(jù)模塊詳細規(guī)格說明書,把詳細設計的結果翻譯成用選定的語言書寫的程序。單元測試對模塊程序進行測試,驗證模塊功能及接口與詳細設計文檔的一致性,并形成單元測試報告。第四十四頁,共七十頁,2022年,8月28日7.綜合測試通過各種類型的測試(及相應的調試)使軟件達到預定的要求。集成測試根據(jù)設計的軟件結構,把經(jīng)過單元測試檢驗的模塊按某種選定的策略裝配起來,在裝配過程中對程序進行必要的測試。驗收測試按照規(guī)格說明書的規(guī)定,由用戶對目標系統(tǒng)進行驗收?,F(xiàn)場測試或平行運行平行運行就是同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結果。用正式的文檔資料把測試計劃、詳細測試方案以及實際測試結果保存下來,作為軟件配置的一個組成部分。第四十五頁,共七十頁,2022年,8月28日8.軟件維護維護階段的關鍵任務是,通過各種必要的維護活動使系統(tǒng)持久地滿足用戶的需要。改正性維護診斷和改正在使用過程中發(fā)現(xiàn)的軟件錯誤;適應性維護修改軟件以適應環(huán)境的變化;完善性維護根據(jù)用戶的要求改進或擴充軟件使它更完善;預防性維護修改軟件為將來的維護活動預先做準備。每一項維護活動都應該經(jīng)過提出維護要求(或報告問題),分析維護要求,提出維護方案,審批維護方案,確定維護計劃,修改軟件設計,修改程序,測試程序,復查驗收等一系列步驟。第四十六頁,共七十頁,2022年,8月28日傳統(tǒng)的生命周期方法學傳統(tǒng)方法學的本質是在具體的軟件開發(fā)工作開始之前,通過需求分析預先定義軟件需求,然后一個階段接著一個階段有條不紊地開發(fā)用戶所要求的軟件,實現(xiàn)預先定義的軟件需求。生命周期方法學是一個巨大的進步,對實現(xiàn)軟件開發(fā)工程化曾經(jīng)起了重要的促進作用,部分地緩解了軟件危機。第四十七頁,共七十頁,2022年,8月28日結構化程序設計思想的提出背景回首計算機的發(fā)展歷程,人們發(fā)現(xiàn)計算機軟件的發(fā)展速度始終滯后于計算機硬件的發(fā)展,它已經(jīng)成為制約計算機產(chǎn)業(yè)整體發(fā)展的瓶頸。究其原因可能有很多方面,但下面兩點不容忽視。軟件產(chǎn)業(yè)的個體化受限于程序設計語言結構化程序設計方法學第四十八頁,共七十頁,2022年,8月28日結構化程序設計方法自頂向下、逐步求精的開發(fā)方法模塊化的組織方式結構化的語句結構第四十九頁,共七十頁,2022年,8月28日自頂向下、逐步求精將編寫程序看成是一個逐步演化的過程。所謂自頂向下是指將分析問題的過程劃分成若干個層次,每一個新的層次都是上一個層次的細化,即步步深入,逐層細分。第五十頁,共七十頁,2022年,8月28日模塊化將整個系統(tǒng)分解成若干個模塊,每個模塊實現(xiàn)特定的功能,最終的系統(tǒng)將由這些模塊組裝而成。模塊之間通過接口傳遞信息,力求模塊具有良好的獨立性。第五十一頁,共七十頁,2022年,8月28日語句結構化ABTAB順序結構分支結構YN第五十二頁,共七十頁,2022年,8月28日結構化程序設計的特點程序設計=數(shù)據(jù)結構+算法程序內容=過程+過程調用第五十三頁,共七十頁,2022年,8月28日結構化程序設計的基本過程軟件開發(fā)的基本過程:需求分析系統(tǒng)設計系統(tǒng)實現(xiàn)系統(tǒng)測試系統(tǒng)維護當結構化思想貫穿于每個過程時,其基本過程:分解和組裝第五十四頁,共七十頁,2022年,8月28日MM1M2M3M4Mn……M31M32M33分解過程組裝過程一個結構化程序設計的例子第五十五頁,共七十頁,2022年,8月28日一個結構化程序設計的例子第五十六頁,共七十頁,2022年,8月28日問題創(chuàng)建一個程序顯示給定日期的月歷。
既程序提示用戶輸入年和月,然后顯示該月的日歷。第五十七頁,共七十頁,2022年,8月28日思考1把問題分解為兩個子問題:讀取用戶輸入(readInput)和打印日歷(printMonth)
在這一步,我們思考的是怎樣分解子問題而不是用什么方法輸入數(shù)據(jù)和打印日歷,可以畫一個結構圖把問題的分解表達出來。打印日歷系統(tǒng)readInput子系統(tǒng)printMonth子系統(tǒng)第五十八頁,共七十頁,2022年,8月28日思考2
要打印一個月的日歷,應當知道這個月的第一天是星期幾以及該月有幾天,有了這些信息就可以打印日歷的標題和主體了。因此,打印月歷問題進一步可以分解成四個子問題:得到第一天對應的星期(getStartDay),求得這個月的天數(shù)(getNumOfDaysInMonth),打印標題(printMonthTitle),打印月歷主體(printMonthBody)。打印日歷系統(tǒng)readInput子系統(tǒng)printMonth子系統(tǒng)getStartDaygetNumOfDaysInMonthprintMonthTitleprintMonthBody第五十九頁,共七十頁,2022年,8月28日思考3怎樣知道一個月的第一天是星期幾呢?有幾種方法可以求得(如使用java中的Date和Calendar類)。我們采用另外一種方法:假設知道1800年1月1日是星期三(startDay1800=3),計算1800年1月1日和該月第一天相差的總天數(shù)(totalNumOfDays),該月第一天的星期就是(totalNumOfDays+startDay1800)%7。想要計算1800年1月1日和月歷第一天之間的總天數(shù),需要求出1800年到該年的天數(shù),并求出在該年中日歷前的天數(shù)。這兩個數(shù)相加就是totalNumOfDays。為了計算這個天數(shù)還需要知道一年和一個月的天數(shù)。算法:第六十頁,共七十頁,2022年,8月28日一月、三月、五月、七月、八月、十月和十二月各31天四月、六月、九月和十一月各30天二月通常有28天,但是在閏年有29天,因此一年通常有365天,閏年366天。利用下面的條件可以判定某年是否為閏年:
if((year%400==0)||((year%4==0)&&(year%100!=0)))returntrue;elsereturnfalse。我們把判斷是否是潤年的工作也放在一個子問題中解決(isLeapYear)。把計算總天數(shù)的工作放在子問題getTotalNumOfDays中。第六十一頁,共七十頁,2022年,8月28日完整的結構化分打印日歷系統(tǒng)readInput子系統(tǒng)printMonth子系統(tǒng)getStartDaygetNumOfDaysInMonthprintMonthTitleprintMonthBodygetTotalNumOfDaysisLeapYear第六十二頁,共七十頁,2022年,8月28日實驗:月歷系統(tǒng)主要方法實現(xiàn)打印日歷子程序staticvoidprintMonth(intyear,intmonth){//獲得該月的第一天是星期幾
intstartDay=getStartDay(year,month);//獲得該月共多少天
intnumOfDaysInMonth=getNumOfDaysInMonth(year,month);//打印月歷的表頭
printMonthTitle(year,month);//打印月歷的表體
printMonthBody(startDay,numOfDaysInMonth);}第六十三頁,共七十頁,2022年,8月28日staticintgetStartDay(intyear,intmonth){intstartDay1800=3;//先計算從1800/1/1到該月之前的總天數(shù)
longtotalNumOfDays=getTotalNumOfDays(year,month);//計算該月第一天的星期并返回該值
return(int)((totalNumOfDays+startDay1800)%7);}第六十四頁,共七十頁,2022年,8月28日計算總天數(shù)staticlonggetTotalNumOfDays(intyear,intmonth){longtotal=0;for(inti=1800;i<year;i++)//從1800到該年的前一年的每年循環(huán)
if(isLeapYear(i))total=total+366;//如果是閏年,則天數(shù)是366elsetotal=total+365;//否則是365for(inti=1;i<month;i++)//該年第1個月到該月的前一個月循環(huán)
total=total+getNumOfDaysInMonth(year,i);//計算每個月的天數(shù)并加到total中returntotal;//計算結果返回}第六十五頁,共七十頁,2022年,8月28日計算某月的天數(shù)staticintgetNumOfDaysInMonth(intyear,intmonth){if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//大月情況
return31;if(month==4||month==6||month==9||month==11)//小月情況
return30;if(month==2)//閏月情況
if(isLeapYear(year))return29;elsereturn28;return0;}第六十六頁,共七十頁,2022年,8月28日判斷是否是閏月的程序staticbooleanisLeapYear(intyear){if((year%400==0)||((year%4==0)&&(year%100!=0)))returntrue;returnfalse;}第六十七頁,共七十頁,2022年,8月28日打印月歷體的程序staticvoidprintMonthBody(intstartDay,intnumOfDaysInMonth){int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋁合金供應鏈合作協(xié)議
- 醫(yī)療器械銷售代表聘用協(xié)議
- 環(huán)衛(wèi)工程塔吊司機聘用協(xié)議
- 醫(yī)師雇傭合同延長期
- 專業(yè)房產(chǎn)中介合同模版
- 森林公園房產(chǎn)買賣合同樣本
- 商業(yè)裝修防火封堵施工協(xié)議
- 港口木地板安裝合同
- 交通樞紐租賃合同格式
- 生態(tài)外墻綠化施工協(xié)議
- 中南運控課設-四輥可逆冷軋機的卷取機直流調速系統(tǒng)設計
- 江蘇省蘇州市2023-2024學年高二上學期1月期末物理試卷(解析版)
- 2024-2025學年五年級科學上冊第三單元《計量時間》測試卷(教科版)
- 大學生國家安全教育智慧樹知到期末考試答案章節(jié)答案2024年
- 歐美電影文化智慧樹知到期末考試答案章節(jié)答案2024年上海工程技術大學
- 2024年遼寧盤錦市政建設集團招聘筆試參考題庫含答案解析
- 佛山批發(fā)市場匯總
- WordA4信紙(A4橫條直接打印版)
- (精選)甲醇一書一簽Word版
- 國標-墜落防護+帶柔性導軌的自鎖器
- 4 上海市中環(huán)線工程設計案例
評論
0/150
提交評論