2018-05-24

第七章 高級(jí)結(jié)構(gòu)設(shè)計(jì)

1.軟件設(shè)計(jì)引論
2.結(jié)構(gòu)化設(shè)計(jì)
3.面向?qū)ο?br> 4.對(duì)目前流行的設(shè)計(jì)方法的評(píng)論
5.往返設(shè)計(jì)疚察,小結(jié)

軟件設(shè)計(jì)引論

大型和小型項(xiàng)目設(shè)計(jì)

大型:軟件結(jié)構(gòu)設(shè)計(jì)伦乔、高層次模塊設(shè)計(jì)君编、實(shí)現(xiàn)細(xì)節(jié)設(shè)計(jì)
小型:設(shè)計(jì)(用程序語言編程)

設(shè)計(jì)的層次

zz.png

劃分成子系統(tǒng)黄橘、劃分成模塊蒙秒、劃分成子程序桑李、子程序內(nèi)部的設(shè)計(jì)

  1. 劃分成子系統(tǒng):子系統(tǒng)(數(shù)據(jù)庫接口麻昼、用戶接口奠支、命令解釋程序、報(bào)告格式程序等)抚芦,將系統(tǒng)劃分為幾個(gè)主要要素倍谜,并定義這些要素間的接口(主要針對(duì)耗時(shí)在幾天以上的大項(xiàng)目)
  2. 劃分成模塊:識(shí)別系統(tǒng)中所有的模塊,子系統(tǒng)可能仍較復(fù)雜叉抡,難以直接翻譯成代碼尔崔,那么我們還需要將子系統(tǒng)劃分為幾個(gè)模塊如:數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)恢復(fù)褥民、問題解釋等季春,如分解出來的模塊還是太復(fù)雜,再進(jìn)行劃分即可
  3. 劃分成子程序:把每個(gè)模塊劃分成各種功能消返,一旦一個(gè)子程序被識(shí)別出來载弄,那么就同時(shí)規(guī)定它的功能(這一步并不一定需要被正式的進(jìn)行耘拇,但起碼是要在心中進(jìn)行)
  4. 子程序內(nèi)部的設(shè)計(jì):在子程序的層次上設(shè)計(jì),包括設(shè)計(jì)單個(gè)子程序中的詳細(xì)功能宇攻。這步包括編寫PDL惫叛,在參考書中尋找算法,在子程序中組織代碼段落逞刷,編寫程序語言代碼等活動(dòng)(這一步在任何項(xiàng)目中都要進(jìn)行嘉涌,如果缺少了這一層次的工作,任何程序都不可能產(chǎn)生)

創(chuàng)建中的設(shè)計(jì)工作

內(nèi)部子程序設(shè)計(jì)夸浅、劃分成子程序仑最、劃分成模塊、劃分成子系統(tǒng)

結(jié)構(gòu)化設(shè)計(jì)

1. 系統(tǒng)組織
2. 開發(fā)設(shè)計(jì)的策略
3. 評(píng)估設(shè)計(jì)準(zhǔn)則
4. 關(guān)于問題的明確說明
5. 表達(dá)設(shè)計(jì)的圖形和語言工具

選擇需進(jìn)行模塊化的要素

1.png

自頂向下分解

把程序分解為子程序的一種流行方法帆喇,也稱為逐步求精警医,從關(guān)于程序功能的粗略說明出發(fā),逐步推到程序要做的每一項(xiàng)特定的工作番枚。
此方法設(shè)計(jì)原則:1.設(shè)計(jì)高層次2.避免特定語言細(xì)節(jié)3.暫時(shí)不指出下一層次的設(shè)計(jì)細(xì)節(jié)(與信息隱含類似)4.正規(guī)化每個(gè)層次5.檢驗(yàn)每個(gè)層次6.轉(zhuǎn)移到下一層次法严,進(jìn)行信的求精工作。

自底向上合成

在每設(shè)計(jì)一個(gè)程序時(shí)葫笼,可以問自己“這個(gè)系統(tǒng)需要做什么深啤?”,從而可以識(shí)別出系統(tǒng)需要具備的較低層次的功能路星,就像修房一樣溯街,從低到高,設(shè)計(jì)出某些低層次的功能洋丐,再從事較高層次設(shè)計(jì)可能會(huì)有把握一些了
此方法設(shè)計(jì)原則:1.問自己關(guān)于系統(tǒng)需要做什么2.利用這些問題設(shè)計(jì)出低層次功能3.識(shí)別出這些低層次功能呈昔,將其組合到一起4.向上一個(gè)層次進(jìn)行同樣的工作

自頂向下是從一般到特殊,自底向上是從一般到特殊

面向?qū)ο?/h1>

關(guān)鍵思想

面向?qū)ο笫墙⒃谝幌轮鲝埳系模阂粋€(gè)程序模型越是真實(shí)地反映了實(shí)際問題友绝, 那么堤尾,由此產(chǎn)生出的程序質(zhì)量越好,在多數(shù)情況下迁客,關(guān)于項(xiàng)目的數(shù)據(jù)定義要比功能穩(wěn)定得多郭宝, 因此應(yīng)象面向?qū)ο笤O(shè)計(jì)一樣,根據(jù)數(shù)據(jù)來進(jìn)行設(shè)計(jì)掷漱,這可以使設(shè)計(jì)更穩(wěn)定粘室。

抽象

抽象所帶來的主要好處是可以忽略掉無關(guān)緊要的細(xì)枝末節(jié)問題,而專注于重要的特性卜范。
用房屋來舉例:房屋是木材衔统、釘子、玻璃、磚和水泥等的抽象锦爵,是把它們組織起來的一種方法舱殿。

封裝

封裝是對(duì)抽象不存在地方的補(bǔ)充。
繼續(xù)用房屋比擬來說明問題:封裝是一個(gè)使你可以看到房屋的外表但不能走進(jìn)去的辦法棉浸。

模塊化

面向?qū)ο笤O(shè)計(jì)中的模塊與結(jié)構(gòu)化設(shè)計(jì)中模塊的含義是一致的怀薛。相聯(lián)系的數(shù)據(jù)和功能被放 入模塊刺彩,在理想情況下迷郑,模塊是高度內(nèi)聚而又松散耦合的

層次結(jié)構(gòu)和繼承性

在設(shè)計(jì)軟件系統(tǒng)時(shí),你經(jīng)炒淳螅可以發(fā)現(xiàn)兩個(gè)之間非常相似嗡害,其差別非常小的對(duì)象。定義這種對(duì)象間的共同和不同點(diǎn)稱為“繼承性”繼承策略的好處是它與抽象的概念是一致的畦攘,抽象在不同層次的細(xì)節(jié)上與對(duì)象打交道霸妹。在面向?qū)ο缶幊讨校^承性簡(jiǎn)化了編程知押,因?yàn)槟阒灰獙懸粋€(gè)通用子程序來處理對(duì)象間的共 同特性叹螟,再編寫幾個(gè)專用子程序去處理它們間的不同特性就可以了。

對(duì)象與類

在面向?qū)ο笤O(shè)計(jì)中台盯,最后一個(gè)關(guān)鍵概念是對(duì)象與類罢绽。對(duì)象是程序在運(yùn)行時(shí)其中的任何一個(gè) 實(shí)體,而類則是當(dāng)你看程序清單時(shí)存在的一個(gè)靜態(tài)實(shí)體静盅。對(duì)象是在程序運(yùn)行時(shí)具有特定值和屬 性的動(dòng)態(tài)實(shí)體良价。

面向?qū)ο笤O(shè)計(jì)的步驟

  1. 識(shí)別對(duì)象及其屬性,它往往是數(shù)據(jù)
  2. 確定對(duì)每個(gè)對(duì)象可以做些什么
  3. 確定每一個(gè)對(duì)象可以對(duì)其它對(duì)象做些什么
  4. 確定每個(gè)對(duì)象對(duì)其它對(duì)象來說是可見的部分——哪一部分是開放的蒿叠,哪一部分是專用 的
  5. 確定每個(gè)對(duì)象的公共接口

對(duì)目前流行設(shè)計(jì)方法的評(píng)論

結(jié)構(gòu)化設(shè)計(jì)和面向?qū)ο笤O(shè)計(jì)——你會(huì)發(fā)現(xiàn)每 種方法都包括兩個(gè)主要部分:
把一個(gè)系統(tǒng)分解成子系統(tǒng)的準(zhǔn)則 解釋分解的圖形式語言符號(hào)
有些方法還包括第三個(gè)要素 防止你使用其它方法的規(guī)定

一個(gè)好的系統(tǒng)分解的確是很有價(jià)值的明垢,但并不是說一旦確立了好的結(jié)構(gòu),設(shè)計(jì)就可以停止 了市咽。在確認(rèn)出子程序的模塊之后痊银,還有許多設(shè)計(jì)工作要做。

何時(shí)使用結(jié)構(gòu)化設(shè)計(jì)\信息隱蔽\面向?qū)ο笤O(shè)計(jì)

結(jié)構(gòu)化設(shè)計(jì)主要是一種把程序分解成子程序的方法施绎。它強(qiáng)調(diào)功能但不強(qiáng)調(diào)數(shù)據(jù)溯革。
結(jié)構(gòu)化設(shè)計(jì)并沒有把子程序組成一個(gè)協(xié)同工作子程序組的概念,也沒有子程序內(nèi)部設(shè)計(jì)的 概念粘姜,除非這個(gè)子程序的內(nèi)部會(huì)影響到整個(gè)系統(tǒng)鬓照。因此,結(jié)構(gòu)化設(shè)計(jì)非常適用于具有許多互不 作用的獨(dú)立功能的系統(tǒng)孤紧。同時(shí)豺裆,它也適于那些只有幾百行代碼的小型程序,因?yàn)檫@些程序過于 簡(jiǎn)單,沒有建立類臭猜、對(duì)象和屬性的必要躺酒。

2.png

無論什么問題領(lǐng)域,都應(yīng)該盡量采用信息隱蔽蔑歌。使用它沒有任何危險(xiǎn)羹应。不論是設(shè)計(jì)子程序、模塊次屠,還是對(duì)象程序园匹,它都是很有 效的,因此你盡可以放心使用它劫灶。

面向?qū)ο笤O(shè)計(jì)與結(jié)構(gòu)化設(shè)計(jì)的主要區(qū)別是:面向?qū)ο笤O(shè)計(jì)在較高抽象層次上要比結(jié)構(gòu)化設(shè)計(jì)有效裸违。面向?qū)ο笤O(shè)計(jì)主要是設(shè)計(jì)模塊數(shù)據(jù)和對(duì)數(shù)據(jù)操作的集合。它非常適于從最頂層分解系統(tǒng)本昏。面向?qū)ο笤O(shè)計(jì)適合于任何客觀世界中的對(duì)象供汛。這類系統(tǒng)的例子包括高度交互化的窗口、對(duì) 話框涌穆、按鈕等程序怔昨;面向?qū)ο蟮臄?shù)據(jù)庫;需要對(duì)隨機(jī)事件做出反應(yīng)的事件驅(qū)動(dòng)系統(tǒng)等等宿稀。

往返設(shè)計(jì)趁舀,小結(jié)

你可能會(huì)有這樣的體驗(yàn):當(dāng)你編寫程序快結(jié)束時(shí),你非常希望能有機(jī)會(huì)再重新編寫一次原叮, 因?yàn)樵诰帉戇^程中你對(duì)問題又有了更深的理解赫编。這對(duì)設(shè)計(jì)也是同樣適用的,只不過在設(shè)計(jì)中這 個(gè)循環(huán)的周期更短奋隶,帶來的好處也更大擂送,因此,你完全可以在設(shè)計(jì)過程中進(jìn)行幾次往返唯欣。

在用不同的設(shè)計(jì)方法對(duì)各種設(shè)計(jì)方案進(jìn)行嘗試的進(jìn)程中嘹吨,將從高層次的總體上和低層次的 細(xì)節(jié)上對(duì)問題進(jìn)行觀察。在從事高層次問題時(shí)獲得的總體印象將會(huì)對(duì)你在低層次細(xì)節(jié)中的工作 有很大幫助境氢;同時(shí)蟀拷,在從事低層次問題時(shí)所獲得的細(xì)節(jié)將為你對(duì)高層次的總體理解和作出總體 設(shè)計(jì)決定奠定下良好的基礎(chǔ)。這種在高層次和低層次之間往返思維過程是非常有益的萍聊,由此而 產(chǎn)生的結(jié)構(gòu)问芬,將比單純自頂向下或自底向上產(chǎn)生的結(jié)構(gòu)要穩(wěn)定得多。

設(shè)計(jì)是一個(gè)非常復(fù)雜的過程寿桨,也是一個(gè)啟發(fā)的過程

設(shè)計(jì)是一個(gè)啟發(fā)的過程此衅。 固執(zhí)地堅(jiān)持某一種方法只會(huì)抑制創(chuàng)造力强戴,從而產(chǎn)生低質(zhì)量的 程序。堅(jiān)持設(shè)計(jì)方法上有一些不屈不撓的精神是有益的挡鞍,因?yàn)檫@可以迫使你對(duì)這種方法 進(jìn)行充分理解骑歹。但是,一定要確信你是在不屈不撓而不是頑固不化墨微。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末道媚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子翘县,更是在濱河造成了極大的恐慌最域,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼蹦,死亡現(xiàn)場(chǎng)離奇詭異羡宙,居然都是意外死亡狸剃,警方通過查閱死者的電腦和手機(jī)掐隐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钞馁,“玉大人虑省,你說我怎么就攤上這事∩耍” “怎么了探颈?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)训措。 經(jīng)常有香客問我伪节,道長(zhǎng),這世上最難降的妖魔是什么绩鸣? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任怀大,我火速辦了婚禮,結(jié)果婚禮上呀闻,老公的妹妹穿的比我還像新娘化借。我一直安慰自己,他們只是感情好捡多,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布蓖康。 她就那樣靜靜地躺著,像睡著了一般垒手。 火紅的嫁衣襯著肌膚如雪蒜焊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天科贬,我揣著相機(jī)與錄音泳梆,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸭丛,可吹牛的內(nèi)容都是我干的竞穷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鳞溉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瘾带!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熟菲,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤看政,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抄罕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體允蚣,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年呆贿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚷兔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡做入,死狀恐怖冒晰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竟块,我是刑警寧澤壶运,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站浪秘,受9級(jí)特大地震影響蒋情,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耸携,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一棵癣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧违帆,春花似錦浙巫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尝胆,卻和暖如春丧裁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背含衔。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工煎娇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留二庵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓缓呛,卻偏偏與公主長(zhǎng)得像催享,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哟绊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容