源起
軟件發(fā)展歷程
機(jī)器語(yǔ)言
直接使用二進(jìn)制碼 0 和 1 來(lái)表示機(jī)器可以識(shí)別的指令和數(shù)據(jù)
開(kāi)發(fā)難度大/可讀性差/可維護(hù)性差
匯編語(yǔ)言
用助記符代替機(jī)器指令的操作碼翁狐,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替指令或操作數(shù)的地址
面向機(jī)器懈涛,不同CPU的匯編指令和結(jié)構(gòu)是不同的
高級(jí)語(yǔ)言
Fortran兼都、LISP、Cobol
機(jī)器無(wú)關(guān)性粪糙,關(guān)注具體的問(wèn)題和業(yè)務(wù)
結(jié)構(gòu)化程序設(shè)計(jì)
第一次軟件危機(jī)
軟件質(zhì)量低下菩混、項(xiàng)目無(wú)法如期完成、項(xiàng)目嚴(yán)重超支等蒸苇,因?yàn)檐浖鴮?dǎo)致的重大事故時(shí)有發(fā)生
- 1963,美國(guó)的水手一號(hào)火箭發(fā)射失敗事故
- <<人月神話>> IBM的System/360 的操作系統(tǒng)開(kāi)發(fā)
結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)的主要特點(diǎn)是拋棄goto語(yǔ)句吮旅,采取“自頂向下溪烤、逐步細(xì)化、模塊化”的指導(dǎo)思想
本質(zhì)上還是一種面向過(guò)程的設(shè)計(jì)思想鸟辅,將軟件的復(fù)雜度控制在一定范圍
- 1968氛什,Edsger Dijkstra發(fā)表《GOTO 有害論》論文
- 第一個(gè)結(jié)構(gòu)化的程序語(yǔ)言 Pascal 也在此時(shí)誕生,并迅速流行起來(lái)
面向?qū)ο?/h3>
第二次軟件危機(jī)
軟件的“擴(kuò)展”變得非常復(fù)雜
根本原因還是在于軟件生產(chǎn)力遠(yuǎn)遠(yuǎn)跟不上硬件和業(yè)務(wù)的發(fā)展
面向?qū)ο?/h4>
- 1967匪凉,Simula語(yǔ)言
- 20世紀(jì)80年代以后,新的面向?qū)ο笳Z(yǔ)言捺檬,C++再层、Java、C#
- 面向?qū)ο笾皇且环N新的軟件方法,不是銀彈
軟件架構(gòu)
問(wèn)題域
- 系統(tǒng)規(guī)模龐大聂受,耦合嚴(yán)重蒿秦,邏輯復(fù)雜,開(kāi)發(fā)效率低蛋济,維護(hù)性差棍鳖,可擴(kuò)展性差
軟件架構(gòu)發(fā)展
“模塊”“對(duì)象”“組件”本質(zhì)上都是對(duì)達(dá)到一定規(guī)模的軟件進(jìn)行拆分,差別只是在于隨著 軟件的復(fù)雜度不斷增加碗旅,拆分的粒度越來(lái)越粗渡处,拆分的層次越來(lái)越高
- 20世紀(jì)60年代第一次軟件危機(jī)引出了“結(jié)構(gòu)化編程”,創(chuàng)造了“模塊”概念
- 20世紀(jì)80年代第二次軟件危機(jī)引出了“面向?qū)ο缶幊獭彼畋伲瑒?chuàng)造了“對(duì)象”概念
- 20世紀(jì)90年代医瘫,“軟件架構(gòu)”開(kāi)始流行,創(chuàng)造了“組件”概念
架構(gòu)基礎(chǔ)
基本概念
系統(tǒng)與子系統(tǒng)
- 系統(tǒng):泛指由一群由關(guān)聯(lián)的個(gè)體組成旧困,根據(jù)某種規(guī)則運(yùn)作醇份,能完成個(gè)別元件不能單獨(dú)完成的工作的群體
- 子系統(tǒng):由一群有關(guān)聯(lián)的個(gè)體所組成的系統(tǒng),多半是更大系統(tǒng)中的一部分
軟件模塊與組件
- 模塊:一套一只而互相緊密關(guān)聯(lián)的軟件組織吼具,程序+數(shù)據(jù)結(jié)構(gòu)
- 組件:自包含的僚纷、可編程的、可重用的拗盒、與語(yǔ)言無(wú)關(guān)的軟件單元畔濒,可用于組裝應(yīng)用程序
模塊和組件都是系統(tǒng)的組成部分,從不同的角度拆分系統(tǒng)
- “模塊”從邏輯的角度來(lái)拆分系統(tǒng)锣咒;“組件”從物理的角度來(lái)拆分系統(tǒng)
- 劃分模塊的主要目的是職責(zé)分離;劃分組件的主要目的是單元復(fù)用
軟件框架與架構(gòu)
- 軟件框架: 通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范侵状,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品
- 軟件架構(gòu):軟件系統(tǒng)的頂層結(jié)構(gòu)
架構(gòu)設(shè)計(jì)目的
設(shè)計(jì)誤區(qū)
- 為架構(gòu)設(shè)計(jì)而設(shè)計(jì)毅整,一定要做架構(gòu)設(shè)計(jì)
- 架構(gòu)設(shè)計(jì)盲目追求高性能趣兄、高可用、可擴(kuò)展
設(shè)計(jì)目的
解決軟件系統(tǒng)復(fù)雜度帶來(lái)的問(wèn)題