課程資源軟件構(gòu)造1基礎(chǔ)_第1頁(yè)
課程資源軟件構(gòu)造1基礎(chǔ)_第2頁(yè)
課程資源軟件構(gòu)造1基礎(chǔ)_第3頁(yè)
課程資源軟件構(gòu)造1基礎(chǔ)_第4頁(yè)
課程資源軟件構(gòu)造1基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件構(gòu)造

SoftwareConstruction

主講教師:潘敏學(xué)馮桂煥2017年秋季以下為廣告……手寫(xiě)信息的采集手寫(xiě)信息的處理手繪五線譜創(chuàng)作系統(tǒng)其他基于深度學(xué)習(xí)的草圖識(shí)別筆記系統(tǒng)眼動(dòng)信息的應(yīng)用眼動(dòng)信息獲取眼動(dòng)數(shù)據(jù)對(duì)交互有哪些輔助?不同字幕形式的評(píng)估眼動(dòng)交互的問(wèn)題眼動(dòng)交互的觸覺(jué)反饋課程描述課程名稱:軟件構(gòu)造英文名稱:SoftwareConstruction時(shí)間分配及學(xué)分課堂教學(xué)(36課時(shí))+課后作業(yè)與閱讀(36課時(shí))3學(xué)分什么是軟件構(gòu)造?為什么要構(gòu)造?程序員編寫(xiě)代碼的用戶是誰(shuí)?即為誰(shuí)編寫(xiě)?軟件的首要技術(shù)使命是什么?課程簡(jiǎn)介目的又可稱為軟件代碼開(kāi)發(fā)技術(shù),旨在培養(yǎng)良好的編碼習(xí)慣和編碼技巧課程內(nèi)容軟件構(gòu)造的一般原則模塊設(shè)計(jì)、代碼重用、類設(shè)計(jì)等軟件構(gòu)造的常用技巧契約式設(shè)計(jì)、防御式編程、異常處理、配置式編程、基于狀態(tài)轉(zhuǎn)移和基于表的軟件設(shè)計(jì)、基于語(yǔ)法分析的設(shè)計(jì)等軟件構(gòu)造的形式化方法規(guī)范說(shuō)明語(yǔ)言及其應(yīng)用、形式化構(gòu)造工具軟件構(gòu)造工作的執(zhí)行要點(diǎn)編碼及其規(guī)范、工具使用、單元測(cè)試技巧、性能優(yōu)化等教材與參考資料

教材參考書(shū)參考書(shū)參考書(shū)軟件構(gòu)造課程相關(guān)網(wǎng)站/~pammann/619-sched.htmlhttp://www.site.uottawa.ca/~bochmann/SEG2106/index.html.au/webcms//course/index.phtml?cid=1492http://sewiki.iai.uni-bonn.de/teaching/lectures/oosc/2008/schedule課程考核出勤、日常練習(xí)(10%~20%)閉卷考試(50%~60%)實(shí)踐項(xiàng)目(30%~40%)分析簡(jiǎn)單的代碼段,找出問(wèn)題并加以改正;按照指定的編碼規(guī)范,分析簡(jiǎn)單的代碼段,找出不規(guī)范的地方并加以改正;分析簡(jiǎn)單的代碼段,進(jìn)行優(yōu)化處理;為簡(jiǎn)單的需求建立形式化描述。思考我到底要從這門(mén)課中學(xué)到什么?與《軟件工程》的關(guān)系與《程序設(shè)計(jì)語(yǔ)言》(如C++、Java等)的區(qū)別與《數(shù)據(jù)結(jié)構(gòu)和算法》的區(qū)別與《軟件系統(tǒng)的設(shè)計(jì)與體系結(jié)構(gòu)》的區(qū)別與你能夠想到的其它課程的區(qū)別我的聯(lián)系方式辦公室鼓樓校區(qū)費(fèi)彝民樓926室辦公電話83621360轉(zhuǎn)936學(xué)校郵箱fenggh@TSS課程模塊課程框架PartI:構(gòu)造技術(shù)軟件構(gòu)造基礎(chǔ)模塊化設(shè)計(jì)軟件復(fù)用抽象數(shù)據(jù)類型類的設(shè)計(jì)和使用合約編程錯(cuò)誤處理分布式程序構(gòu)造單元測(cè)試重構(gòu)極限編程PartII:構(gòu)造管理構(gòu)造管理構(gòu)造標(biāo)準(zhǔn)構(gòu)造環(huán)境和工具PartIII:

形式化構(gòu)造方法形式語(yǔ)言基礎(chǔ)規(guī)范說(shuō)明語(yǔ)言與方法規(guī)范說(shuō)明語(yǔ)言的應(yīng)用形式化構(gòu)造工具PartI:構(gòu)造技術(shù)軟件構(gòu)造基礎(chǔ)軟件構(gòu)造的概念軟件構(gòu)造的重要性軟件構(gòu)造的常用技術(shù)常用軟件隱喻基本概念什么是軟件構(gòu)造軟件構(gòu)造是編碼和調(diào)試部分的詳細(xì)設(shè)計(jì)和單元測(cè)試測(cè)試和調(diào)試的區(qū)別測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤調(diào)試是為了改正錯(cuò)誤軟件開(kāi)發(fā)包括:

問(wèn)題定義需求分析實(shí)現(xiàn)計(jì)劃總體設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼實(shí)現(xiàn)系統(tǒng)集成單元測(cè)試系統(tǒng)測(cè)試校正性的維護(hù)功能強(qiáng)化軟件構(gòu)造≠編碼實(shí)現(xiàn)SoftwareConstruction哪些活動(dòng)不屬于軟件構(gòu)造?需求分析架構(gòu)設(shè)計(jì)用戶界面設(shè)計(jì)系統(tǒng)測(cè)試系統(tǒng)維護(hù)項(xiàng)目管理軟件構(gòu)造的重要性構(gòu)造活動(dòng)是開(kāi)發(fā)軟件的重要組成部分構(gòu)造活動(dòng)占整個(gè)開(kāi)發(fā)活動(dòng)總時(shí)間的30%-40%構(gòu)造活動(dòng)在開(kāi)發(fā)軟件中處于樞紐地位需求分析與架構(gòu)設(shè)計(jì)——構(gòu)造——系統(tǒng)測(cè)試把主要精力集中于構(gòu)造活動(dòng),可以極大地提高程序員的生產(chǎn)效率不同程序員的生產(chǎn)率差異在10到20倍創(chuàng)建活動(dòng)的產(chǎn)品,源代碼,往往是軟件的唯一精確描述需求規(guī)格說(shuō)明和設(shè)計(jì)文檔可能過(guò)時(shí),但源碼不會(huì)構(gòu)造活動(dòng)是唯一一項(xiàng)必不可少的工作常用技術(shù)抽象數(shù)據(jù)類型類的設(shè)計(jì)和使用軟件復(fù)用契約編程防御式編程異常處理配置式編程基于狀態(tài)轉(zhuǎn)移和基于表的軟件設(shè)計(jì)基于語(yǔ)法分析的設(shè)計(jì)單元測(cè)試重構(gòu)常用軟件隱喻(Metaphors)隱喻可以幫助開(kāi)發(fā)人員借助類比的力量加深對(duì)編程的理解計(jì)算機(jī)科學(xué)和軟件工程領(lǐng)域的隱喻有哪些?常見(jiàn)的軟件隱喻軟件書(shū)寫(xiě):寫(xiě)代碼(WritingCode)軟件播種:生成系統(tǒng)(GrowingaSystem)軟件珍珠培植法:系統(tǒng)積累(SystemAccretion)軟件創(chuàng)建:建造軟件(buildingsoftware)實(shí)用軟件技術(shù):智能工具箱(TheIntellectualToolbox)復(fù)合隱喻(CombingMetaphors)隱喻writingacasualletterGrowingaSystemBuilding

ScienceArt軟件構(gòu)造的前期準(zhǔn)備工作學(xué)習(xí)內(nèi)容什么是軟件構(gòu)造的前期準(zhǔn)備工作前期準(zhǔn)備工作的重要意義軟件構(gòu)造的前期準(zhǔn)備工作有哪些學(xué)習(xí)目標(biāo)明確進(jìn)入軟件構(gòu)造階段的先決條件(即邊界)掌握軟件構(gòu)造前期準(zhǔn)備工作的具體內(nèi)容能夠靈活使用相應(yīng)的Checklist進(jìn)行核對(duì)軟件構(gòu)造的前期準(zhǔn)備工作是復(fù)查性的活動(dòng)明確前導(dǎo)性的工作結(jié)果有哪些重新審視前導(dǎo)性工作是否完成明確前導(dǎo)性工作完成的程度如何準(zhǔn)備工作的中心目標(biāo)是降低風(fēng)險(xiǎn)糟糕的需求分析糟糕的項(xiàng)目計(jì)劃前期準(zhǔn)備工作的意義開(kāi)始軟件構(gòu)造之前進(jìn)行準(zhǔn)備工作的論據(jù)從邏輯性的角度從與其它事物類比的角度從以往數(shù)據(jù)的角度在開(kāi)始實(shí)現(xiàn)一個(gè)系統(tǒng)之前,你必須十分清楚:

這個(gè)系統(tǒng)應(yīng)該做什么,以及它該如何做到這些!進(jìn)行有效編程的要領(lǐng)之一:準(zhǔn)備工作很重要。從管理的角度來(lái)看,做好計(jì)劃意味著可以確定項(xiàng)目所需的時(shí)間、人數(shù)和計(jì)算機(jī)臺(tái)數(shù)。從技術(shù)角度來(lái)看,做好計(jì)劃意味著可以明確你要構(gòu)造的到底是什么。從邏輯的角度講,準(zhǔn)備工作的時(shí)間“物有所值”中國(guó)有句古話:“磨刀不誤砍柴工”與其它事物類比與建筑的構(gòu)造類比在著手構(gòu)造一座大廈之前對(duì)設(shè)計(jì)圖紙的審核工作是必不可少的軟件食物鏈(注意:這就是一個(gè)隱喻)水蝽青魚(yú)鮭魚(yú)海鷗問(wèn)題需求架構(gòu)編碼從以往數(shù)據(jù)的角度發(fā)現(xiàn)錯(cuò)誤的時(shí)間要盡可能接近引入該錯(cuò)誤的時(shí)間缺陷在軟件食物鏈中的時(shí)間越長(zhǎng),造成的損害越嚴(yán)重惠普、IBM、休斯頓飛機(jī)公司以及TRW等的經(jīng)驗(yàn):

在構(gòu)造活動(dòng)開(kāi)始之前清除一個(gè)錯(cuò)誤的返工成本僅為開(kāi)發(fā)過(guò)程最后階段做同樣事情的1/10或1/100!修復(fù)缺陷的成本隨著“從引入缺陷到檢測(cè)該缺陷之間的時(shí)間”變長(zhǎng)而急劇增加2009.3前期準(zhǔn)備工作的內(nèi)容前期準(zhǔn)備工作并非一成不變構(gòu)造活動(dòng)的準(zhǔn)備工作要根據(jù)項(xiàng)目特點(diǎn)調(diào)整具體細(xì)節(jié)隨項(xiàng)目的不同會(huì)有很大變化構(gòu)造開(kāi)始前的準(zhǔn)備工作有哪些辨明軟件項(xiàng)目的類型明確問(wèn)題定義明確需求規(guī)約明確軟件架構(gòu)的各組成部分眾多的軟件項(xiàng)目種類在軟件開(kāi)發(fā)領(lǐng)域中有無(wú)數(shù)種不同的項(xiàng)目大量的需求收集和描述技術(shù)各種各樣的設(shè)計(jì)方法數(shù)不勝數(shù)的編程語(yǔ)言大量的測(cè)試手段CaperJones(SoftwareProductivityResearch):

他和同事在20年研究和開(kāi)發(fā)中見(jiàn)過(guò)不止700編程語(yǔ)言、40種需求收集方法、50種軟件設(shè)計(jì)方法、30種測(cè)試方法!辨明軟件項(xiàng)目的類型最常見(jiàn)的三種類型商業(yè)系統(tǒng)(BusinessSystems)使命攸關(guān)的系統(tǒng)(Mission-CriticalSystems)性命攸關(guān)的系統(tǒng)(EmbeddedLife-CriticalSystems)不同類型的項(xiàng)目?jī)A向于不同的開(kāi)發(fā)方式商業(yè)系統(tǒng)傾向于使用高度迭代的開(kāi)發(fā)方式性命攸關(guān)的系統(tǒng)往往要求更加序列式的方法典型應(yīng)用生命周期模型序列式開(kāi)發(fā)和迭代式開(kāi)發(fā)序列式開(kāi)發(fā)使用瀑布式模型進(jìn)行開(kāi)發(fā)適用于需求相對(duì)穩(wěn)定的情況迭代式開(kāi)發(fā)整個(gè)開(kāi)發(fā)工作被組織為一系列的迭代過(guò)程。每一次迭代都包括了需求分析、設(shè)計(jì)、實(shí)現(xiàn)與測(cè)試。適用于需求容易變化的情況如何選擇序列式或迭代式開(kāi)發(fā)方法傾向于序列式開(kāi)發(fā)的情況需求相當(dāng)穩(wěn)定設(shè)計(jì)相對(duì)簡(jiǎn)單、容易后期改變需求、設(shè)計(jì)和編碼的代價(jià)非常高傾向于迭代式開(kāi)發(fā)的情況需求相對(duì)不穩(wěn)定,或需要不斷加深理解設(shè)計(jì)復(fù)雜,具有挑戰(zhàn)性后期改變需求、設(shè)計(jì)和編碼的代價(jià)比較低Check問(wèn)題定義問(wèn)題定義(ProblemDefinition)問(wèn)題定義:項(xiàng)目要解決的問(wèn)題是什么明確的問(wèn)題定義是第一項(xiàng)先決條件在開(kāi)始軟件構(gòu)造之前首先要check是否已經(jīng)對(duì)系統(tǒng)要解決的問(wèn)題做出了明確的陳述。問(wèn)題定義也稱為產(chǎn)品設(shè)想(ProductVision)任務(wù)陳述(MissionStatement)產(chǎn)品定義(ProductDefinition)問(wèn)題定義是整個(gè)開(kāi)發(fā)的基礎(chǔ)問(wèn)題定義決定了項(xiàng)目的方向關(guān)于問(wèn)題定義的注意點(diǎn)問(wèn)題定義并不涉及任何可能的解決方案一個(gè)好的定義:Wecan'tkeepupwithordersfortheChina一個(gè)不好的定義:Weneedtooptimizeourautomateddata-entrysystemtokeepupwithordersfortheChina問(wèn)題定義應(yīng)該用客戶容易理解的語(yǔ)言編寫(xiě)問(wèn)題定義應(yīng)該從客戶的角度編寫(xiě)Check需求定義需求定義(RequirementDefinition)需求定義詳細(xì)規(guī)定了軟件系統(tǒng)應(yīng)該做什么明確的需求定義是另一項(xiàng)先決條件在開(kāi)始軟件構(gòu)造之前要check是否已經(jīng)充分詳盡地描述了系統(tǒng)所要做的事情。需求定義也稱為軟件需求(SoftwareRequirement)功能規(guī)約(FunctionSpecification)核對(duì)表1:功能需求功能需求規(guī)定開(kāi)發(fā)人員必須在產(chǎn)品中實(shí)現(xiàn)的軟件功能,用戶利用這些功能來(lái)完成任務(wù),滿足業(yè)務(wù)需求。是否詳細(xì)定義了系統(tǒng)的全部輸入輸入的來(lái)源、精度、取值范圍、出現(xiàn)頻率等是否詳細(xì)定義了系統(tǒng)的全部輸出輸入的目的地、精度、取值范圍、出現(xiàn)頻率等是否詳細(xì)定義了所有輸出格式Web頁(yè)面、報(bào)表、磁盤(pán)文件核對(duì)表1:功能需求(續(xù))是否詳細(xì)定義了所有硬件及軟件的外部接口

外部接口指該軟件實(shí)體與外部硬件對(duì)接以及其它軟件交互部分的接口是否詳細(xì)定義了全部外部通信接口握手協(xié)議、糾錯(cuò)協(xié)議、通信協(xié)議等是否列出了用戶想要做的全部事情是否詳細(xì)定義了每個(gè)任務(wù)所用及得到的數(shù)據(jù)軟件構(gòu)造核對(duì)表2:非功能需求(QoS需求)非功能需求指軟件產(chǎn)品在功能以外的服務(wù)質(zhì)量(QualityofService,QoS)方面的需求是否為必要操作定義了期望的相應(yīng)時(shí)間在實(shí)時(shí)系統(tǒng)中是響應(yīng)時(shí)間必要的是否詳細(xì)定義了其它與計(jì)時(shí)有關(guān)的考慮處理時(shí)間、數(shù)據(jù)傳輸率、系統(tǒng)吞吐量是否詳細(xì)定義了安全級(jí)別核對(duì)表2:非功能需求(QoS需求)(續(xù))是否詳細(xì)定義了可靠性包括軟件失靈的后果、需要保護(hù)的重要信息、錯(cuò)誤檢測(cè)以及恢復(fù)策略是否詳細(xì)定義了內(nèi)存、硬盤(pán)的使用要求是否詳細(xì)定義了系統(tǒng)的可維護(hù)性功能的變更、操作環(huán)境的變更和接口的變更是否包括對(duì)“成功”、“失敗”的定義需求其它方面的核對(duì)表需求的質(zhì)量需求定義自身所表現(xiàn)出來(lái)的質(zhì)量需求的清晰性、一致性、可測(cè)試性等需求的完備性

需求是否可以覆蓋問(wèn)題定義所描述的信息是否不包含不能實(shí)現(xiàn)的需求穩(wěn)定需求的神話需求變更的主要來(lái)源開(kāi)發(fā)過(guò)程幫助客戶更好的理解自己的需求認(rèn)識(shí)到需求變更的必要性,并采取措施使得變更的負(fù)面影響最小化IBM等研究發(fā)現(xiàn):平均項(xiàng)目開(kāi)發(fā)過(guò)程中,需求會(huì)有25%的變化;

需求變更導(dǎo)致的返工占到返工總量的75%到85%。Check軟件架構(gòu)軟件架構(gòu)(SoftwareArchitecture)軟件設(shè)計(jì)的高層部分,用于支撐更加細(xì)節(jié)的設(shè)計(jì)的框架明確的架構(gòu)設(shè)計(jì)也是構(gòu)造的先決條件在開(kāi)始軟件構(gòu)造之前要check是否已經(jīng)在整個(gè)系統(tǒng)范圍內(nèi)定義了相應(yīng)的框架結(jié)構(gòu)。架構(gòu)也稱為系統(tǒng)架構(gòu)(SystemArchitecture)頂層設(shè)計(jì)(Top-levelDesign)軟件架構(gòu)軟件架構(gòu)是構(gòu)建計(jì)算機(jī)軟件實(shí)踐的基礎(chǔ)軟件架構(gòu)定義了一張用于描述整個(gè)系統(tǒng)各個(gè)方面的草圖是一個(gè)軟件系統(tǒng)從整體到部分的最高層次的劃分建造一個(gè)系統(tǒng)所作出的最高層次的、以后難以更改的,商業(yè)的和技術(shù)的決定軟件架構(gòu)的兩個(gè)要素:元件劃分和設(shè)計(jì)決定一個(gè)邏輯架構(gòu)的例子一個(gè)物理架構(gòu)的例子花費(fèi)在前期準(zhǔn)備上的時(shí)間依項(xiàng)目的需要而變化在完成需求之后,估計(jì)余下部分需要的時(shí)間是明智的!一般說(shuō)來(lái):一個(gè)運(yùn)作良好的項(xiàng)目會(huì)在需求、架構(gòu)以及其他前期計(jì)劃方面投入10%~20%的工作量和20%~30%的時(shí)間(不包括詳細(xì)設(shè)計(jì))關(guān)鍵的構(gòu)造決策選擇適當(dāng)?shù)木幊陶Z(yǔ)言編程語(yǔ)言會(huì)影響程序員的思維制定編程規(guī)范來(lái)使構(gòu)造工作更為專注Programmingintoalanguage先確定需表達(dá)的思想,然后考慮如何用語(yǔ)言提供的工具來(lái)表達(dá)選擇主要構(gòu)造方法編碼、團(tuán)隊(duì)工作、質(zhì)量保證、工具Sub-PartI:構(gòu)造中的設(shè)計(jì)設(shè)計(jì)中的挑戰(zhàn)關(guān)鍵設(shè)計(jì)概念啟發(fā)式方法設(shè)計(jì)實(shí)踐設(shè)計(jì)和構(gòu)造設(shè)計(jì)是軟件構(gòu)造的一個(gè)活動(dòng)嗎?設(shè)計(jì)是把需求分析和編碼調(diào)試連在一起的活動(dòng)小規(guī)模項(xiàng)目中,很多活動(dòng)都屬于構(gòu)造大項(xiàng)目中,架構(gòu)大多只解決系統(tǒng)層問(wèn)題哪些活動(dòng)屬于設(shè)計(jì)?用偽碼寫(xiě)出一個(gè)類接口編碼前畫(huà)出類的關(guān)系圖關(guān)于設(shè)計(jì)模式的選取設(shè)計(jì)是一個(gè)龐大的話題!設(shè)計(jì)中的挑戰(zhàn)設(shè)計(jì)是險(xiǎn)惡的(wicked)問(wèn)題只有通過(guò)解決或部分解決才能明確設(shè)計(jì)是了無(wú)章法的過(guò)程會(huì)犯很多錯(cuò)誤,難以判斷何時(shí)設(shè)計(jì)“足夠好”設(shè)計(jì)需要取舍和調(diào)整順序設(shè)計(jì)會(huì)受到很多限制設(shè)計(jì)是不確定的設(shè)計(jì)是一個(gè)啟發(fā)式過(guò)程管理復(fù)雜度是軟件的首要技術(shù)使命,是軟件開(kāi)發(fā)中最為重要的技術(shù)話題FredBrooks《沒(méi)有銀彈:軟件工程中本質(zhì)性與偶然性》,1987項(xiàng)目失敗的主要原因需求、規(guī)劃和管理技術(shù)因素:復(fù)雜度失控

“沒(méi)有誰(shuí)的大腦能容下一個(gè)現(xiàn)代的計(jì)算機(jī)程序”——Dijkstra把任何人在同一時(shí)間需要處理的本質(zhì)(essential)復(fù)雜度的量減到最少;不讓偶然(accidental)的復(fù)雜度無(wú)謂地快速增長(zhǎng)管理復(fù)雜度是軟件開(kāi)發(fā)中最為重要的技術(shù)目標(biāo)!高質(zhì)量設(shè)計(jì)的理想特征最小復(fù)雜度:簡(jiǎn)單、容易理解易于維護(hù)松散耦合可擴(kuò)展性可重用性高扇入、低扇出可移植性精簡(jiǎn)性:沒(méi)有多余代碼層次性:能在任意層次上觀察系統(tǒng)標(biāo)準(zhǔn)技術(shù)設(shè)計(jì)的層次軟件系統(tǒng)分解為子系統(tǒng)或包分解為類分解為類中的數(shù)據(jù)和子程序子程序內(nèi)部第二層:子系統(tǒng)或包層定義清楚允許各子系統(tǒng)如何使用其他子系統(tǒng)即不同子系統(tǒng)之間的通信規(guī)則子系統(tǒng)通信舉例如何做?最簡(jiǎn)單讓一個(gè)子系統(tǒng)去調(diào)另一個(gè)子系統(tǒng)中的子程序稍復(fù)雜一個(gè)子系統(tǒng)包含另一個(gè)子系統(tǒng)的類最復(fù)雜一個(gè)子系統(tǒng)的類繼承自另一個(gè)子系統(tǒng)的類常見(jiàn)的子系統(tǒng)業(yè)務(wù)規(guī)則和法律、規(guī)則、政策等相關(guān)的內(nèi)容,如學(xué)分績(jī)計(jì)算用戶界面界面演化不會(huì)破壞程序的其余部分?jǐn)?shù)據(jù)庫(kù)訪問(wèn)程序的絕大部分可以不關(guān)心底層結(jié)構(gòu)的處理細(xì)節(jié)對(duì)系統(tǒng)的依賴性和運(yùn)行平臺(tái)相關(guān)內(nèi)容第三層:類層次對(duì)子系統(tǒng)進(jìn)行分解,確保分解出的細(xì)節(jié)能夠用單個(gè)類實(shí)現(xiàn),并明確類的接口當(dāng)定義類時(shí),也同時(shí)定義了這些類與系統(tǒng)其余部分打交道的細(xì)節(jié)類與對(duì)象類:在程序源碼中存在的靜態(tài)事物對(duì)象:程序運(yùn)行期間實(shí)際存在的具體實(shí)體如Student類,和LiLei,HanMeimei等對(duì)象第四層:子程序?qū)影衙總€(gè)類細(xì)分為子程序類層次定義了對(duì)外接口這里細(xì)化出類的私有子程序也可能會(huì)對(duì)接口進(jìn)行修改通常由程序員個(gè)人完成第五層:子程序內(nèi)部設(shè)計(jì)為每個(gè)子程序布置詳細(xì)功能通常由負(fù)責(zé)該子程序的開(kāi)發(fā)人員完成編寫(xiě)偽碼、選擇算法、組織代碼塊、編寫(xiě)代碼包括子程序內(nèi)部的設(shè)計(jì)設(shè)計(jì)的啟發(fā)式方法軟件設(shè)計(jì)是非確定性的啟發(fā)式方法就是不斷“試錯(cuò)”的過(guò)程銘記軟件的首要技術(shù)使命管理復(fù)雜度是軟件開(kāi)發(fā)中最為重要的技術(shù)目標(biāo)!啟發(fā)式設(shè)計(jì)1:找出現(xiàn)實(shí)中的對(duì)象軟件設(shè)計(jì)首選且最流行的方法面向?qū)ο笤O(shè)計(jì)方法步驟:非順序、可重復(fù)辨識(shí)對(duì)象及其屬性(method&data)確定可對(duì)各個(gè)對(duì)象進(jìn)行的操作確定對(duì)象能對(duì)其他對(duì)象進(jìn)行的操作區(qū)分哪些部分對(duì)其他對(duì)象可見(jiàn)(publicorprivate)確定公開(kāi)接口(publicinterface)基于時(shí)間的計(jì)費(fèi)系統(tǒng)舉例啟發(fā)式設(shè)計(jì)2:形成一致的抽象目的:忽略細(xì)節(jié),在不同層次處理不同細(xì)節(jié)基類、接口都是抽象的例子優(yōu)秀程序員要在子程序接口、類接口、包接口層次上進(jìn)行抽象啟發(fā)式設(shè)計(jì)3:封裝實(shí)現(xiàn)細(xì)節(jié)抽象:從較高層次看待對(duì)象封裝:填補(bǔ)了抽象留下的空白除此之外,不能看到其他細(xì)節(jié)管理復(fù)雜度:能看到的就是全部啟發(fā)式設(shè)計(jì)4:繼承對(duì)大同小異的對(duì)象,定義對(duì)象之間的相同點(diǎn)和不同點(diǎn)如中學(xué)生、大學(xué)生繼承的好處能夠輔佐抽象的概念簡(jiǎn)化編程基本子程序處理基類屬性的事項(xiàng),另外一些子程序處理依賴特定子類的特定操作面向?qū)ο缶幊讨凶顝?qiáng)大的工具之一,需謹(jǐn)慎使用!啟發(fā)式設(shè)計(jì)4:信息隱藏結(jié)構(gòu)化設(shè)計(jì)和面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)結(jié)構(gòu)化設(shè)計(jì):黑盒子面向?qū)ο笤O(shè)計(jì):封裝、模塊化“開(kāi)發(fā)人員把一個(gè)地方的設(shè)計(jì)和實(shí)現(xiàn)隱藏起來(lái),使程序的其他部分看不到”是減少重復(fù)工作的強(qiáng)大技術(shù)對(duì)類而言:類的接口應(yīng)盡可能少地暴露其內(nèi)部工作機(jī)制

信息隱藏舉例一個(gè)程序,程序中的所有對(duì)象通過(guò)名為id的成員變量來(lái)保存唯一的ID如何實(shí)現(xiàn)對(duì)ID的分配和控制?設(shè)計(jì)一ID定義為整數(shù)全局變量g_maxIdId=++g_maxId問(wèn)題:想保留部分ID怎么辦?希望使用非連續(xù)ID如何?怎樣確保ID值不會(huì)超過(guò)預(yù)期的最大范圍?改進(jìn)隱藏創(chuàng)建新ID的方法優(yōu)點(diǎn):修改取值范圍只對(duì)NewId子程序進(jìn)行Id=NewId();隱藏ID類型C++中可使用typedef將ID定義為IdTypeQ:如果要將ID修改為字符串呢?隱藏設(shè)計(jì)決策對(duì)于減少“改動(dòng)所影響的代碼量”而言是至關(guān)重要的!隱藏什么?復(fù)雜度只在特別關(guān)注的時(shí)候去應(yīng)付它變化源變化發(fā)生時(shí),將影響限制在局部范圍包括復(fù)雜的數(shù)據(jù)類型、文件結(jié)構(gòu)、布爾判斷等養(yǎng)成詢問(wèn)“我該隱藏些什么”的習(xí)慣!不要由于慣用某些技術(shù)而導(dǎo)致心理障礙信息隱藏同樣有助于設(shè)計(jì)類的公開(kāi)接口啟發(fā)式設(shè)計(jì)5:找出容易變化的區(qū)域目標(biāo):把不穩(wěn)定的區(qū)域隔離出來(lái),把變

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論