国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

分析和設(shè)計(jì)

2019-11-18 12:09:44
字體:
供稿:網(wǎng)友

  面向?qū)ο蟮姆妒绞撬伎汲绦蛟O(shè)計(jì)時(shí)一種新的、而且全然不同的方式,許多人最開始都會在如何構(gòu)造一個(gè)項(xiàng)目上皺起了眉頭。事實(shí)上,我們可以作出一個(gè)“好”的設(shè)計(jì),它能充分利用OOP提供的所有優(yōu)點(diǎn)。
  有關(guān)OOP分析與設(shè)計(jì)的書籍大多數(shù)都不盡如人意。其中的大多數(shù)書都充斥著莫名其妙的話語、笨拙的筆調(diào)以及許多聽起來似乎很重要的聲明(見注釋)。我認(rèn)為這種書最好壓縮到一章左右的空間,至多寫成一本非常薄的書。具有諷剌意味的是,那些非凡專注于復(fù)雜事物治理的人往往在寫一些淺顯、明白的書上面大費(fèi)周章!假如不能說得簡單和直接,一定沒多少人喜歡看這方面的內(nèi)容。究竟,OOP的全部宗旨就是讓軟件開發(fā)的過程變得更加輕易。盡管這可能影響了那些喜歡解決復(fù)雜問題的人的生計(jì),但為什么不從一開始就把事情弄得簡單些呢?因此,希望我能從開始就為大家打下一個(gè)良好的基礎(chǔ),盡可能用幾個(gè)段落來說清楚分析與設(shè)計(jì)的問題。
  [注釋]:最好的入門書仍然是Grady Booch的《Object-Oriented Design withapplications,第2版本》,Wiely & Sons于1996年出版。這本書講得很有深度,而且通俗易懂,盡管他的記號方法對大多數(shù)設(shè)計(jì)來說都顯得不必要地復(fù)雜。
  1 不要迷失
  在整個(gè)開發(fā)過程中,最重要的事情就是:不要將自己迷失!但事實(shí)上這種事情很輕易發(fā)生。大多數(shù)方法都設(shè)計(jì)用來解決最大范圍內(nèi)的問題。當(dāng)然,也存在一些非凡困難的項(xiàng)目,需要作者付出更為艱辛的努力,或者付出更大的代價(jià)。但是,大多數(shù)項(xiàng)目都是比較“常規(guī)”的,所以一般都能作出成功的分析與設(shè)計(jì),而且只需用到推薦的一小部分方法。但無論多么有限,某些形式的處理總是有益的,這可使整個(gè)項(xiàng)目的開發(fā)更加輕易,總比直接了當(dāng)開始編碼好!
  也就是說,假如你正在考察一種非凡的方法,其中包含了大量細(xì)節(jié),并推薦了許多步驟和文檔,那么仍然很難正確判定自己該在何時(shí)停止。時(shí)刻提醒自己注重以下幾個(gè)問題:
  (1) 對象是什么?(怎樣將自己的項(xiàng)目分割成一系列單獨(dú)的組件?)
  (2) 它們的接口是什么?(需要將什么消息發(fā)給每一個(gè)對象?)
  在確定了對象和它們的接口后,便可著手編寫一個(gè)程序。出于對多方面原因的考慮,可能還需要比這更多的說明及文檔,但要求把握的資料絕對不能比這還少。
  整個(gè)過程可劃分為四個(gè)階段,階段0剛剛開始采用某些形式的結(jié)構(gòu)。
  2 階段0:擬出一個(gè)計(jì)劃
  第一步是決定在后面的過程中采取哪些步驟。這聽起來似乎很簡單(事實(shí)上,我們這兒說的一切都似乎很簡單),但很常見的一種情況是:有些人甚至沒有進(jìn)入階段1,便忙忙慌慌地開始編寫代碼。假如你的計(jì)劃本來就是“直接開始開始編碼”,那樣做當(dāng)然也無可非議(若對自己要解決的問題已有很透徹的理解,便可考慮那樣做)。但最低程度也應(yīng)同意自己該有個(gè)計(jì)劃。
  在這個(gè)階段,可能要決定一些必要的附加處理結(jié)構(gòu)。但非常不幸,有些程序員寫程序時(shí)喜歡隨心所欲,他們認(rèn)為“該完成的時(shí)候自然會完成”。這樣做剛開始可能不會有什么問題,但我覺得假如能在整個(gè)過程中設(shè)置幾個(gè)標(biāo)志,或者“路標(biāo)”,將更有益于你集中注重力。這恐怕比單純地為了“完成工作”而工作好得多。至少,在達(dá)到了一個(gè)又一個(gè)的目標(biāo),經(jīng)過了一個(gè)接一個(gè)的路標(biāo)以后,可對自己的進(jìn)度有清楚的把握,干勁也會相應(yīng)地提高,不會產(chǎn)生“路遙漫漫無期”的感覺。
  座我剛開始學(xué)習(xí)故事結(jié)構(gòu)起(我想有一天能寫本小說出來),就一直堅(jiān)持這種做法,感覺就象簡單地讓文字“流”到紙上。在我寫與計(jì)算機(jī)有關(guān)的東西時(shí),發(fā)現(xiàn)結(jié)構(gòu)要比小說簡單得多,所以不需要考慮太多這方面的問題。但我仍然制訂了整個(gè)寫作的結(jié)構(gòu),使自己對要寫什么做到心中有數(shù)。因此,即使你的計(jì)劃就是直接開始寫程序,仍然需要經(jīng)歷以下的階段,同時(shí)向自己提出一些特定的問題。
  3 階段1:要制作什么?
  在上一代程序設(shè)計(jì)中(即“過程化或程序化設(shè)計(jì)”),這個(gè)階段稱為“建立需求分析和系統(tǒng)規(guī)格”。當(dāng)然,那些操作今天已經(jīng)不再需要了,或者至少改換了形式。大量令人頭痛的文檔資料已成為歷史。但當(dāng)時(shí)的初衷是好的。需求分析的意思是“建立一系列規(guī)則,根據(jù)它判定任務(wù)什么時(shí)候完成,以及客戶怎樣才能滿足”。系統(tǒng)規(guī)格則表示“這里是一些具體的說明,讓你知道程序需要做什么(而不是怎樣做)才能滿足要求”。需求分析實(shí)際就是你和客戶之間的一份合約(即使客戶就在本公司內(nèi)部工作,或者是其他對象及系統(tǒng))。系統(tǒng)規(guī)格是對所面臨問題的最高級別的一種揭示,我們依據(jù)它判定任務(wù)是否完成,以及需要花多長的時(shí)間。由于這些都需要取得參與者的一致同意,所以我建議盡可能地簡化它們——最好采用列表和基本圖表的形式——以節(jié)省時(shí)間??赡苓€會面臨另一些限制,需要把它們擴(kuò)充成為更大的文檔。
  我們非凡要注重將重點(diǎn)放在這一階段的核心問題上,不要糾纏于細(xì)枝末節(jié)。這個(gè)核心問題就是:決定采用什么系統(tǒng)。對這個(gè)問題,最有價(jià)值的工具就是一個(gè)名為“使用條件”的集合。對那些采用“假如……,系統(tǒng)該怎樣做?”形式的問題,這便是最有說服力的回答。例如,“假如客戶需要提取一張現(xiàn)金支票,但當(dāng)時(shí)又沒有這么多的現(xiàn)金儲備,那么自動取款機(jī)該怎樣反應(yīng)?”對這個(gè)問題,“使用條件”可以指示自動取款機(jī)在那種“條件”下的正確操作。
  應(yīng)盡可能總結(jié)出自己系統(tǒng)的一套完整的“使用條件”或者“應(yīng)用場合”。一旦完成這個(gè)工作,就相當(dāng)于摸清了想讓系統(tǒng)完成的核心任務(wù)。由于將重點(diǎn)放在“使用條件”上,一個(gè)很好的效果就是它們總能讓你放精力放在最要害的東西上,并防止自己分心于對完成任務(wù)關(guān)系不大的其他事情上面。也就是說,只要把握了一套完整的“使用條件”,就可以對自己的系統(tǒng)作出清楚的描述,并轉(zhuǎn)移到下一個(gè)階段。在這一階段,也有可能無法完全把握系統(tǒng)日后的各種應(yīng)用場合,但這也沒有關(guān)系。只要肯花時(shí)間,所有問題都會自然而然暴露出來。不要過份在意系統(tǒng)規(guī)格的“完美”,否則也輕易產(chǎn)生挫敗感和焦燥情緒。
  在這一階段,最好用幾個(gè)簡單的段落對自己的系統(tǒng)作出描述,然后圍繞它們再進(jìn)行擴(kuò)充,添加一些“名詞”和“動詞”。“名詞”自然成為對象,而“動詞”自然成為要整合到對象接口中的“方法”。只要親自試著做一做,就會發(fā)現(xiàn)這是多么有用的一個(gè)工具;有些時(shí)候,它能幫助你完成絕大多數(shù)的工作。
  盡管仍處在初級階段,但這時(shí)的一些日程安排也可能會非常管用。我們現(xiàn)在對自己要構(gòu)建的東西應(yīng)該有了一個(gè)較全面的熟悉,所以可能已經(jīng)感覺到了它大概會花多長的時(shí)間來完成。此時(shí)要考慮多方面的因素:假如估計(jì)出一個(gè)較長的日程,那么公司也許決定不再繼續(xù)下去;或者一名主管已經(jīng)估算出了這個(gè)項(xiàng)目要花多長的時(shí)間,并會試著影響你的估計(jì)。但無論如何,最好從一開始就草擬出一份“老實(shí)”的時(shí)間表,以后再進(jìn)行一些暫時(shí)難以作出的決策。目前有許多技術(shù)可幫助我們計(jì)算出準(zhǔn)確的日程安排(就象那些猜測股票市場起落的技術(shù)),但通常最好的方法還是依靠自己的經(jīng)驗(yàn)和直覺(不要忘記,直覺也要建立在經(jīng)驗(yàn)上)。感覺一下大概需要花多長的時(shí)間,然后將這個(gè)時(shí)間加倍,再加上10%。你的感覺可能是正確的;“也許”能在那個(gè)時(shí)間里完成。但“加倍”使那個(gè)時(shí)間更加充裕,“10%”的時(shí)間則用于進(jìn)行最后的推敲和深化。但同時(shí)也要對此向上級主管作出適當(dāng)?shù)慕忉?,無論對方有什么抱怨和修改,只要明確地告訴他們:這樣的一個(gè)日程安排,只是我的一個(gè)估計(jì)!
  4 階段2:如何構(gòu)建?
  在這一階段,必須拿出一套設(shè)計(jì)方案,并解釋其中包含的各類對象在外觀上是什么樣子,以及相互間是如何溝通的。此時(shí)可考慮采用一種非凡的圖表工具:“統(tǒng)一建模語言”(UML)。請到http://www.rational.com去下載一份UML規(guī)格書。作為第1階段中的描述工具,UML也是很有幫助的。此外,還可用它在第2階段中處理一些圖表(如流程圖)。當(dāng)然并非一定要使用UML,但它對你會很有幫助,非凡是在希望描繪一張?jiān)敱M的圖表,讓許多人在一起研究的時(shí)候。除UML外,還可選擇對對象以及它們的接口進(jìn)行文字化描述(就象我在《Thinking in C++》里說的那樣,但這種方法非常原始,發(fā)揮的作用亦較有限。
  我曾有一次非常成功的咨詢經(jīng)歷,那時(shí)涉及到一小組人的初始設(shè)計(jì)。他們以前還沒有構(gòu)建過OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))項(xiàng)目,將對象畫在白板上面。我們談到各對象相互間該如何溝通(通信),并刪除了其中的一部分,以及替換了另一部分對象。這個(gè)小組(他們知道這個(gè)項(xiàng)目的目的是什么)實(shí)際上已經(jīng)制訂出了設(shè)計(jì)方案;他們自己“擁有”了設(shè)計(jì),而不是讓設(shè)計(jì)自然而然地顯露出來。我在那里做的事情就是對設(shè)計(jì)進(jìn)行指導(dǎo),提出一些適當(dāng)?shù)膯栴},嘗試作出一些假設(shè),并從小組中得到反饋,以便修改那些假設(shè)。這個(gè)過程中最美妙的事情就是整個(gè)小組并不是通過學(xué)習(xí)一些抽象的例子來進(jìn)行面向?qū)ο蟮脑O(shè)計(jì),而是通過實(shí)踐一個(gè)真正的設(shè)計(jì)來把握OOP的竅門,而那個(gè)設(shè)計(jì)正是他們當(dāng)時(shí)手上的工作!
  作出了對對象以及它們的接口的說明后,就完成了第2階段的工作。當(dāng)然,這些工作可能并不完全。有些工作可能要等到進(jìn)入階段3才能得知。但這已經(jīng)足夠了。我們真正需要關(guān)心的是最終找出所有的對象。能早些發(fā)現(xiàn)當(dāng)然好,但OOP提供了足夠完美的結(jié)構(gòu),以后再找出它們也不遲。
  5 階段3:開始創(chuàng)建
  你可能是程序員,現(xiàn)在進(jìn)入的正是你可能最感愛好的階段。由于手頭上有一個(gè)計(jì)劃——無論它有多么簡要,而且在正式編碼前把握了正確的設(shè)計(jì)結(jié)構(gòu),所以會發(fā)現(xiàn)接下去的工作比一開始就埋頭寫程序要簡單得多。而這正是我們想達(dá)到的目的。讓代碼做到我們想做的事情,這是所有程序項(xiàng)目最終的目標(biāo)。但切不要急功冒進(jìn),否則只有得不償失。根據(jù)我的經(jīng)驗(yàn),最后先拿出一套較為全面的方案,使其盡可能設(shè)想周全,能滿足盡可能多的要求。給我的感覺,編程更象一門藝術(shù),不能只是作為技術(shù)活來看待。所有付出最終都會得到回報(bào)。作為真正的程序員,這并非可有可無的一種素質(zhì)。全面的

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大新县| 福鼎市| 安龙县| 平乐县| 青冈县| 漯河市| 清镇市| 丰台区| 五常市| 海伦市| 龙泉市| 漳浦县| 二连浩特市| 寿宁县| 普定县| 谢通门县| 叙永县| 黑水县| 涞源县| 卢氏县| 东宁县| 兴隆县| 阿拉善右旗| 轮台县| 宝应县| 肇东市| 睢宁县| 平阳县| 绥阳县| 雅安市| 古田县| 东宁县| 南部县| 深水埗区| 新丰县| 连城县| 瑞昌市| 威信县| 利津县| 河间市| 湖口县|