版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟛粌H是一些具體的軟件開發(fā)技術(shù)與策略,而且是一整套關(guān)于如何看待軟件系統(tǒng)
與現(xiàn)實(shí)世界的關(guān)系,以什么觀點(diǎn)來研究問題并進(jìn)行求解,以及如何進(jìn)行系統(tǒng)構(gòu)造的軟件方法
學(xué)。面向?qū)ο蠹夹g(shù)在計(jì)算機(jī)學(xué)科產(chǎn)生了巨大的影響,在產(chǎn)業(yè)界有著廣泛應(yīng)用。它已經(jīng)滲透到
計(jì)算機(jī)科學(xué)技術(shù)的幾乎每一個(gè)分支領(lǐng)域,如編程語言、系統(tǒng)分析與設(shè)計(jì)、數(shù)據(jù)庫、人機(jī)界面、
,知識工程、操作系統(tǒng)、計(jì)算機(jī)體系結(jié)構(gòu)等等。此外,新興的基于構(gòu)件開發(fā)、面向服務(wù)計(jì)算、
Agent和面向方面開發(fā)等技術(shù)也以面向?qū)ο蠹夹g(shù)作為基礎(chǔ)。
當(dāng)我們提到對象導(dǎo)向的時(shí)候,它不僅指一種程序設(shè)計(jì)方法。它更多意義上是一種程序開
發(fā)方式。在這一方面,我們必須了解更多關(guān)于對象導(dǎo)向系統(tǒng)分析和對象導(dǎo)向設(shè)計(jì)(Object
OrientedDesign,簡稱OOD)方面的知識。
對象導(dǎo)向程序設(shè)計(jì)Object-OrientedProgramming,縮寫:OOP.指一種程序設(shè)計(jì)范型,
同時(shí)也是一種程序開發(fā)的方法論。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,
以提高軟件的重用性、靈活性和擴(kuò)展性。
軟件是客觀世界中問題空間與解空間的具體描述,追求表達(dá)能力強(qiáng)、更符合人類思維模
式具有易構(gòu)造性和易演化性的計(jì)算模型
軟件工程應(yīng)用計(jì)算機(jī)科學(xué)理論和技術(shù)以及工程管理原則和方法,按預(yù)算和進(jìn)度,實(shí)現(xiàn)滿
足用戶要求的軟件產(chǎn)品的定義、開發(fā)、發(fā)布和維護(hù)的工程或以之為研究對象的學(xué)科。
計(jì)算機(jī)軟件一般指計(jì)算機(jī)系統(tǒng)中的程序及文檔,程序是以計(jì)算機(jī)語言表達(dá)的軟件系統(tǒng),
文檔是以人類語言表達(dá)的軟件系統(tǒng),二者互相配合共同構(gòu)成了完整的軟件系統(tǒng)。軟件是系統(tǒng)
邏輯的體現(xiàn)必須依附于一定的載體例如:紙張、軟盤、硬盤、光盤等,人類抽象的經(jīng)驗(yàn)、知
識正逐步由軟件予以精確地體現(xiàn)。
軟件發(fā)展現(xiàn)狀
(1)已經(jīng)存在大量正在運(yùn)行的軟件:金融、電信、航空航天等
(2)軟件的應(yīng)用范圍不斷擴(kuò)大:商務(wù)、交通、家電等,“無處不在的軟件”
(3)軟件的規(guī)模與復(fù)雜性持續(xù)增加,越來越多的知識正在由軟件進(jìn)行顯式表達(dá)
(4)出現(xiàn)了大量與軟件相關(guān)的標(biāo)準(zhǔn)
(5)軟件危機(jī)仍然存在(軟件脫節(jié))1968-2009
軟件發(fā)展特點(diǎn)
(1)軟件應(yīng)用范圍將繼續(xù)擴(kuò)大,成為信息社會的物理設(shè)施
(2)遺留軟件將繼續(xù)發(fā)揮作用
(3)軟件的可靠性與安全性日趨重要
(4)網(wǎng)絡(luò)化軟件將是發(fā)展重點(diǎn)
(5)工業(yè)化生產(chǎn)是必由之路
軟件開發(fā)的特點(diǎn):
軟件開發(fā)是典型的知識密集型活動、復(fù)雜度高、開發(fā)周期長、可靠性保證難。隨著軟件
應(yīng)用范圍的快速擴(kuò)大以及軟件運(yùn)行平臺從單機(jī)向網(wǎng)絡(luò)的轉(zhuǎn)變,軟件的規(guī)模越來越大,復(fù)雜度
越來越高,軟件開發(fā)的高、長、難愈益突出。
網(wǎng)絡(luò)環(huán)境給應(yīng)用系統(tǒng)帶來的挑戰(zhàn):通信問題異構(gòu)問題定位問題可靠性問題安全問
題管理問題維護(hù)問題等等
軟件的本質(zhì)特性:構(gòu)造性演化性
其它特點(diǎn):知識密集邏輯產(chǎn)物
軟件是典型的知識產(chǎn)品,是客觀世界中問題空間與解空間的具體描述。(1)軟件是有
結(jié)構(gòu)的。傳統(tǒng)的軟件開發(fā)是個(gè)體作坊式的主要解決功能問題,較少考慮結(jié)構(gòu)問題,造成軟件
復(fù)雜度高、維護(hù)難度大、可靠性差。軟件構(gòu)件技術(shù)集中體現(xiàn)了軟件的構(gòu)造性。隨著軟件規(guī)模
及復(fù)雜性的增加,W法+數(shù)據(jù)結(jié)構(gòu)的描述方式逐漸變得不足。人們需要從整體上、從體系
結(jié)構(gòu)高度把握軟件構(gòu)件+構(gòu)件之間的關(guān)系,是軟件體系結(jié)構(gòu)的具體內(nèi)容。
(2)客觀世界不斷發(fā)展,不斷發(fā)生變化。軟件系統(tǒng)不可能一成不變,新需求、新技術(shù)
不斷出現(xiàn),軟件系統(tǒng)要不斷升級、不斷演化。
軟件構(gòu)件技術(shù)有力地支持軟件的演化性,軟件的演化涉及軟件系統(tǒng)在功能、性能、易用
性等方面的改進(jìn),對于大型軟件系統(tǒng)的維護(hù)(演化)工作,占據(jù)開發(fā)單位總開銷的50-75%。
目前“打補(bǔ)丁”(patched)式的“演化”方式,限制了軟件的演化能力。基于構(gòu)件技術(shù)開發(fā)
軟件。采用構(gòu)件的集成組裝方式生成軟件易描述、易配置、易演化,提高了軟件的演化能力。
網(wǎng)絡(luò)環(huán)境下軟件技術(shù)有什么樣的特點(diǎn)?
傳統(tǒng)開發(fā)方法中存在的問題
在二十世紀(jì)六十年代
?軟件系統(tǒng)都是較小且相對簡單的?所用的編程語言也都是十分簡單的語言?時(shí)興個(gè)人英
雄注意,即崇尚程序員的個(gè)人技能?代碼是面條式的,特別是代碼中含有GOTO語句。
隨著軟件復(fù)雜性的增長,代碼是很難維護(hù)的。高層次語言的引入有助于解決一些與復(fù)雜
性有關(guān)的問題,但這些語言并不是充分的。那時(shí),無開發(fā)方法而言。
結(jié)構(gòu)化分析設(shè)計(jì)方法:
二十世紀(jì)七十年代,發(fā)明了結(jié)構(gòu)化分析設(shè)計(jì)方法:功能分解,使用功能作為構(gòu)造塊。
功能分解法(functiondecomposition):功能分解=功能+子功能+功能接口。以系
統(tǒng)需要提供的功能為中心來組織系統(tǒng)。首先定義各種功能,然后把功能分解為子功能,同時(shí)
定義功能之間的接口。對較大的子功能進(jìn)一步分解,直到可給出明確的定義。根據(jù)功能/子
功能的需要設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)。
工作過程:一層層地進(jìn)行功能分解。
得到的系統(tǒng)模型:由模塊及其接口構(gòu)成。
優(yōu)點(diǎn):
?當(dāng)時(shí)的計(jì)算機(jī)應(yīng)用還不是很普及,只是特定的用戶按自己的需要,對軟件系統(tǒng)做出了
功能性的要求,有據(jù)可尋。?在相當(dāng)大的程度上,解決了以前存在的問題。特別是與模塊化
編程結(jié)合使用,效率更高。?刪除GOTO語句,使得軟件能得到有效的維護(hù)。?適用于功能穩(wěn)
定的應(yīng)用領(lǐng)域,如某些科學(xué)計(jì)算。?直接地反映用戶的需求,所以工作很容易開始。
缺點(diǎn):
?開頭容易,結(jié)束難。?結(jié)構(gòu)化分析和設(shè)計(jì)僅處理功能,對處理數(shù)據(jù)基本上沒什么幫助。
?對于眾多的領(lǐng)域而言,其功能是易變的,如企業(yè)管理和商業(yè)管理。對需求變化的適應(yīng)能力
很差??不能直接地映射問題域,很難檢驗(yàn)分析結(jié)果的正確性。?局部的錯(cuò)誤和局部的修改很
容易產(chǎn)生全局性的影響。?對于大型、復(fù)雜的軟件,由于其中內(nèi)在的高偶合、低內(nèi)聚,特別
是當(dāng)時(shí)團(tuán)體開發(fā)的開發(fā)管理方法的不足,70年代出現(xiàn)了軟件危機(jī):對系統(tǒng)的維護(hù)。?使用結(jié)
構(gòu)化的方法、4GL、CASE工具、原型技術(shù)和代碼生成器來解決這些問題但不成功。
數(shù)據(jù)流法又稱結(jié)構(gòu)化分析:
數(shù)據(jù)流法=數(shù)據(jù)流+數(shù)據(jù)處理(加工)+數(shù)據(jù)存儲+端點(diǎn)+處理說明+數(shù)據(jù)字典
基本策略是跟蹤數(shù)據(jù)流,即研究問題域中數(shù)據(jù)如何流動以及在各個(gè)環(huán)節(jié)上進(jìn)行何種處
理,從而發(fā)現(xiàn)數(shù)據(jù)流和加工。問題域被映射為數(shù)據(jù)流圖(DFD),并用處理說明和數(shù)據(jù)字典
進(jìn)行詳細(xì)說明。
優(yōu)點(diǎn):有嚴(yán)格的法則,較強(qiáng)調(diào)研究問題域。?大系統(tǒng)數(shù)據(jù)流和加工的數(shù)量太多,引起分
析文檔的膨脹。?仍然是間接映射;?系統(tǒng)復(fù)雜時(shí),難以檢驗(yàn)分析的正確性。?對需求變化的
適應(yīng)能力較弱。?設(shè)計(jì)與表示法不一致,其轉(zhuǎn)換規(guī)則也不嚴(yán)格。
從歷史上看,人們使用函數(shù)、模塊和抽象數(shù)據(jù)類型,直到現(xiàn)在使用對象,作為系統(tǒng)的構(gòu)
造塊。
2
函數(shù)與過程:允許程序員在一處組織重復(fù)的任務(wù)?提供了將實(shí)現(xiàn)的信息隱藏的能力:只
需知道接口,不需要知道實(shí)現(xiàn)的確切細(xì)節(jié),就可使用函數(shù)或過程。?提供的這種機(jī)制不嚴(yán)格。
模塊:模塊是一種對產(chǎn)生和管理名稱空間有用的抽象機(jī)制?模塊為程序員提供將名字空
間的可見性和名稱的機(jī)制劃分為公有和私有兩部分的能力(名稱空間是?種管理程序元素,
如函數(shù)、屬性和類名)。?公有的部分對外來說都是可訪問的,而只能在模塊內(nèi)訪問私有部
分。
?變量(數(shù)據(jù))、函數(shù)、過程和類型都可以被定義為模塊的任何一部分。
使用模塊的要求:模塊的設(shè)計(jì)者必須為預(yù)期的用戶提供正確使用該模塊所需要的信息,
并且不附加其他的信息。模塊的設(shè)計(jì)者必須為實(shí)現(xiàn)者提供完成(編碼)該模塊所必需的信息,
并且不附加其他的信息。
優(yōu)點(diǎn):它將稱為模塊的系統(tǒng)的一部分從系統(tǒng)的所有的其他部分中隔離出來。?解決了信
息隱臧問題?增加了軟件的可維護(hù)性,因?yàn)榉庋b使得代碼可被修改或擴(kuò)展,并且在修改錯(cuò)誤
的時(shí)候不會有引起不必要或非故意的副面效應(yīng)的風(fēng)險(xiǎn)。
缺點(diǎn):?不能實(shí)例化,實(shí)例化是使得數(shù)據(jù)區(qū)有多個(gè)拷貝的能力。
抽象數(shù)據(jù)類型:
?抽象數(shù)據(jù)類型是一種程序員定義的數(shù)據(jù)類型,可以按與編程語言預(yù)定義的數(shù)據(jù)類型相
似的方式操作它。?抽象數(shù)據(jù)類型對應(yīng)一組(或許幾乎是無限集合)合法數(shù)據(jù)值和在其之上
操作的一組函數(shù)。?程序員可以通過將合法值賦予變量的方式,產(chǎn)生這種抽象數(shù)據(jù)類型的實(shí)
例。?保護(hù)(隱藏)與類型相關(guān)的實(shí)例數(shù)據(jù),并且將對數(shù)據(jù)的訪問限制在程序員定義的函數(shù)
內(nèi)。?產(chǎn)生程序員定義的類型的(無限)實(shí)例如Ada和CLU在關(guān)系上不完善,對00發(fā)展產(chǎn)生
重要影響。
基于數(shù)據(jù)的方法:
實(shí)體-關(guān)系圖:用實(shí)體的數(shù)據(jù)集合作為構(gòu)造塊,以數(shù)據(jù)結(jié)構(gòu)為中心。?結(jié)構(gòu)化的方法實(shí)際
匕幫助開發(fā)者處理數(shù)據(jù),但數(shù)據(jù)建模方法卻不能幫助開發(fā)者管理功能。
實(shí)體關(guān)系法:跟蹤數(shù)據(jù)流,從而發(fā)現(xiàn)數(shù)據(jù)流和加工。?強(qiáng)調(diào)對信息實(shí)體建模,而不是對
象建模。?對象只有屬性,而無服務(wù)。?父類與子類之間也只有屬性繼承。?沒采用消息通訊。
信息建模法(informationmodeling)
信息建模=實(shí)體(對象)+屬性+關(guān)系+父類型/子類型+關(guān)聯(lián)對象
由實(shí)體-關(guān)系法(E-R方法)發(fā)展而來。
與數(shù)據(jù)庫設(shè)計(jì)有很深的淵源。核心概念是實(shí)體和關(guān)系。實(shí)體描述問題域的事物,含有屬
性;關(guān)系描述事物之間在數(shù)據(jù)方面的聯(lián)系,也可以帶有屬性。發(fā)展之后的方法也把實(shí)體稱作
對象,并使用了類型和子類型的概念,作為實(shí)體(對象)的抽象描述。
有限狀態(tài)機(jī)方法
?它基于現(xiàn)實(shí)的行為視圖,狀態(tài)是這類系統(tǒng)的構(gòu)造塊,并且所操作的數(shù)據(jù)是獨(dú)立于狀態(tài)
的。?基于系統(tǒng)狀態(tài)的處理。?這一方法學(xué)沒有體現(xiàn)數(shù)據(jù)管理。
基于規(guī)則的系統(tǒng)
?計(jì)算機(jī)是執(zhí)行一套規(guī)則的推理機(jī)(if—then語句)。?基于人工智能系統(tǒng)?基于規(guī)則的
系統(tǒng)并沒有幫助我們處理數(shù)據(jù),也不支持過程概念?如prolog,list語言
上述方法都僅基于一個(gè)角度看待系統(tǒng),對系統(tǒng)的其它視圖建模方面的能力都很弱。但對
00產(chǎn)生都做出了一定的貢獻(xiàn).
UML是一種面向?qū)ο蟮慕UZ言,在軟件產(chǎn)業(yè)界獲得了很大的支持。
從程序設(shè)計(jì)方法的角度看,面向?qū)ο笫且环N新的程序設(shè)計(jì)范型(paradigm),其基本思想
是使用對象、類、繼承、封裝、聚合、關(guān)聯(lián)、消息、多態(tài)性等基本概念來進(jìn)行程序設(shè)計(jì)。
3
面向?qū)ο蠓椒ㄊ且环N運(yùn)用對象、類、繼承、封裝、聚合、關(guān)聯(lián)、消息、多態(tài)性等概念來
構(gòu)造系統(tǒng)的軟件開發(fā)方法。
面向?qū)ο蟮幕舅枷?/p>
(1)從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來建立軟件系統(tǒng),強(qiáng)調(diào)直接以問題域(現(xiàn)實(shí)世
界)中的事物為中心來思考問題、認(rèn)識問題,并根據(jù)這些事物的本質(zhì)特征,把它們抽象地表
示為系統(tǒng)中的對象,作為系統(tǒng)的基本構(gòu)成單位。這可以使系統(tǒng)直接映射問題域,保持問題域
中事物及其相互關(guān)系的本來面貌(2)充分運(yùn)用人類日常的思維方法強(qiáng)調(diào)運(yùn)用人類在日常的
邏輯思維中經(jīng)常采用的思想方法與原則,例如抽象、分類、繼承、聚合、封裝、關(guān)聯(lián)等等。
這使得軟件開發(fā)者能更有效地思考問題,并以其他人也能看得懂的方式把自己的認(rèn)識表達(dá)出
來。
(3)具有相同屬性和服務(wù)的對象屬于一個(gè)類,這樣的對象是類的一個(gè)實(shí)例。
(4)類可有層次結(jié)構(gòu),即類可有子類,其中子類繼承父類的屬性和服務(wù),而且根據(jù)需
要,子類還可以有自己的屬性和服務(wù)。
(5)類具有封閉性,把內(nèi)部的屬性和服務(wù)隱藏起來,只有公共的服務(wù)對外是可見的。
例如,家庭財(cái)產(chǎn)的管理就具有封裝性。對象之間只可通過消息來請求其它對象的服務(wù),或提
供自己
的服務(wù)。
面向?qū)ο蠓椒ǖ某橄笮?/p>
00方法可采用自頂向下的方式進(jìn)行抽象。既先定義類的名稱、責(zé)任和接口。其他的內(nèi)
容以后再考慮。例題:自動售貨機(jī)。名稱:自動售貨機(jī);責(zé)任:收錢、發(fā)貨:接口:收錢口、
選擇按鈕、發(fā)貨口。機(jī)器的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)以后再考慮。
抽象的益處之':有限的接口方便用戶使用,而且很少發(fā)生變化。之二:復(fù)用:接口穩(wěn)
定,修改只在類的內(nèi)部進(jìn)行。
面向?qū)ο蟮能浖こ谭椒ǎ簡栴}域一-00A--00D--OOP--00T--計(jì)算機(jī)。
面向?qū)ο蟪绦蛟O(shè)計(jì)的本質(zhì):把數(shù)據(jù)和處理數(shù)據(jù)的過程作為一個(gè)整體,即對象。
程序*對象,關(guān)系〉對象=(算法)+(數(shù)據(jù)結(jié)構(gòu))
面向?qū)ο笾械幕靖拍睿?/p>
對象:
對象是現(xiàn)實(shí)世界中某個(gè)實(shí)際存在的事物,它可以是有形的(比如一輛汽車),也可以是
無形的(比如一項(xiàng)計(jì)劃)。對象是構(gòu)成世界的一個(gè)獨(dú)立單位。它具有自己的靜態(tài)特征和動態(tài)
特征。
對象是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,它是構(gòu)成系統(tǒng)的一個(gè)基本單位。一個(gè)對象
由一組屬性和對這組屬性進(jìn)行操作的一組服務(wù)構(gòu)成。
對象由“對象標(biāo)識--屬性--服務(wù)”。屬性是用來描述對象狀態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng)。服
務(wù)是用來描述對象動態(tài)特征的一個(gè)操作序列。對象標(biāo)識就是對象的名字,有“外部標(biāo)識”和
“內(nèi)部標(biāo)識”之分。
類是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽
象描述,其內(nèi)部包括屬性和服務(wù)兩個(gè)主要部分。類的作用是用來創(chuàng)建對象,對象是類的一個(gè)
實(shí)例。
抽象與分類:忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找
出事物的共性,叫做抽象;把具有共同性質(zhì)的事物劃分為一類,得出一個(gè)抽象的概念,叫做
分類。
4
不同程度的抽象可得到不同層次的分類,較多地忽略事物之間的差別得到較一般的類。
較多地注意事物之間的差別得到較特殊的類。
如果類A具有類B的屬性和服務(wù),而且具有自己特有的某些屬性或服務(wù),則A叫做B的特殊
類,B叫做A的一般類。
另一定義:如果類A的全部對象都是類B的對象,而且類B中存在不屬于類A的對象,則A
是B的特殊類,B是A的般類。
繼承:特殊類擁有其一般類的屬性與服務(wù),稱作特殊類對一般類的繼承。
一般類與特殊類之間的關(guān)系叫泛化關(guān)系(繼承關(guān)系),簡稱泛化。繼承簡化了人們對事
物的認(rèn)識和描述,非常有益于軟件復(fù)用,是00技術(shù)提高軟件開發(fā)效率的重要原因之一。
子類自動共享父類的attributes和methods,而不必重復(fù)定義。
消息:
對象通過它對外提供的服務(wù)在系統(tǒng)中發(fā)揮作用。當(dāng)系統(tǒng)中的其他對象或其他系統(tǒng)成分
(在不要求完全對象化的語言中,允許有不屬于任何對象的成分,例如C++程序中的main函
數(shù))請求這個(gè)對象,執(zhí)行某個(gè)服務(wù)時(shí),該對象就響應(yīng)這個(gè)請求,完成該服務(wù)。在00方法中,
把向?qū)ο蟀l(fā)出的服務(wù)請求稱為消息。目前在大部分面向?qū)ο蟮木幊陶Z言中,消息其實(shí)就是函
數(shù)(或過程)調(diào)用。但是,函數(shù)調(diào)用只是實(shí)現(xiàn)消息的方式之一,上述理解只適合于順序系統(tǒng)。
一個(gè)(較復(fù)雜的)對象由其他若干(較簡單的)對象作為其構(gòu)成部分,稱較復(fù)雜的對象
為聚集,稱較簡單的對象為成分,稱這種關(guān)系為聚合。聚合刻畫了現(xiàn)實(shí)事物之間的構(gòu)成關(guān)系。
如:
類之間的靜態(tài)聯(lián)系稱作關(guān)聯(lián)。在實(shí)例化后,由類產(chǎn)生對象,由關(guān)聯(lián)產(chǎn)生連接對象的鏈。
鏈?zhǔn)顷P(guān)聯(lián)的實(shí)例。關(guān)聯(lián)的表示符號也稱作實(shí)例連接。
永久對象:可以在程序運(yùn)行后繼續(xù)保存的對象
主動對象:至少有一個(gè)服務(wù)不需要接收消息就能主動執(zhí)行的對象。描述具有主動行為的
事物,描述并發(fā)執(zhí)行的任務(wù)。
面向?qū)ο笾械幕驹瓌t:
(1)抽象
過程抽象:任何一個(gè)完成確定功能的操作序列,其使用者都可把它看作一個(gè)單一的實(shí)體,
盡管實(shí)際上它可能是由一系列更低級的操作完成的。
數(shù)據(jù)抽象:根據(jù)施加于數(shù)據(jù)之上的操作來定義數(shù)據(jù)類型,并限定數(shù)據(jù)的值只能由這些操
作來修改和觀察。
(2)封裝:
封裝:把對象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。
只是向外部提供接口。由封裝機(jī)制保證:數(shù)據(jù)不能被對象的使用者直接訪問。只允許通過山
對象提供的方法或代碼訪問數(shù)據(jù)。
封裝的重要意義:
使對象能夠集中而完整地描述并對應(yīng)?個(gè)具體事物。體現(xiàn)了事物的相對獨(dú)立性,使對象
5
外部不能隨意存取對象的內(nèi)部數(shù)據(jù),避免了外部錯(cuò)誤對它的“交插感染”。對象的內(nèi)部的修
改對外部的影響很小,減少了修改引起的“波動效應(yīng)”。公開靜態(tài)的、不變的服務(wù),而把動
態(tài)的、易變的服務(wù)隱藏起來。
封裝帶來的問題:編程的麻煩執(zhí)行效率的損失解決辦法:不強(qiáng)調(diào)嚴(yán)格封裝,實(shí)行可
見性控制。
(3)信息隱蔽
包含屬性(數(shù)據(jù))的對象定義其什么服務(wù)(函數(shù))可被其他對象訪問。實(shí)際上,其他的
對象
對被請求的對象怎樣提供服務(wù)(方法/代碼)沒有感知.?對象的服務(wù)定義其他的對象怎
樣獲得對其方法的訪問。每一個(gè)對象將愿意提供給所有對象的公共服務(wù)公開化。它也提供僅
局限于特定對象的其它的服務(wù)(受保護(hù)的和私有的)。
(4)委托
借助消息傳遞,工作可從一個(gè)對象(客戶)傳遞到另一個(gè)對象(代理),因?yàn)閺目蛻舻?/p>
觀點(diǎn),代理具有客戶所需要的服務(wù)。工作連續(xù)地傳遞,直到到達(dá)了既有數(shù)據(jù)又有方法(代碼)
能完成這項(xiàng)工作的對象。
(5)消息通信
即要求對象之間只能通過消息進(jìn)行通訊,而不允許在對象之外直接地存取對象內(nèi)部的屬
性。
?消息傳遞機(jī)制與函數(shù)調(diào)用機(jī)制的區(qū)別
第一,在消息傳遞機(jī)制中,每個(gè)消息被發(fā)送給指定的接收者(對象)。在命令式編程
范型中,函數(shù)調(diào)用機(jī)制沒有指定的接收者。這一區(qū)別支持封裝。
第二,消息的解釋(用來完成服務(wù)請求的方法或操作/代碼集)依賴接收者,并且因接
收者的不同而異。這一區(qū)別對于支持信息隱藏和多態(tài)(重載)是必要的。
第三,在面向?qū)ο蟮姆缎椭?,通常在運(yùn)行時(shí)才能知道給定消息的特定的接收者。這樣,
在消息(服務(wù)請求/函數(shù)調(diào)用)和用來完成對行為的請求的方法(代碼片段)之間存在后期
連接。命令式編程范型中的函數(shù)調(diào)用與代碼片段之間存在的是早期連接(編譯或連接時(shí))。
(6)分類
?把具有相同屬性和服務(wù)的對象劃分為?類,用類作為這些對象的抽象描述。
?分類幫助我們組織我們所生活的復(fù)雜世界。我們可以對在一個(gè)特殊分類中的對象做一
些假設(shè)。如果一個(gè)對象是分類(類)的一個(gè)實(shí)例,它將符合該分類的總體模式。
類/對象
所有的對象都是類的實(shí)例。實(shí)例能夠在運(yùn)行時(shí)被產(chǎn)生(初始化)或銷毀(刪除)。
?對象怎樣提供服務(wù)由該對象為其實(shí)例的類所決定。這樣,同一個(gè)類的所有對象在響應(yīng)
特定的服務(wù)請求(功能調(diào)用)時(shí)使用相同的方法。
(7)泛化
?無多態(tài)性的泛化?類可以由層次繼承結(jié)構(gòu)所組織。在該結(jié)構(gòu)中,子類將從位于層次結(jié)
構(gòu)高層的父類中繼承屬性、關(guān)系和方法。抽象的父類是指僅用來產(chǎn)生子類的超類。這樣,抽
象類就沒有直接的實(shí)例。
有多態(tài)的泛化.可以使用層次繼承結(jié)構(gòu)組織類,子類可以繼承位于層次結(jié)構(gòu)的高層的父
類的屬性、關(guān)系和方法。然而,子類可以產(chǎn)生它自己的方法來代替其任何超類的方法。
多態(tài)是指同一個(gè)命名可具有不同的語義。00方法中,常指在一般類中定義的屬性或服務(wù)
被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。
對于子類,可用不同的方法替代實(shí)現(xiàn)父類的服務(wù)的方法。用途:把具有共同基類的對
象組成一組,并對它們進(jìn)行一致的處理。例如,多邊形下的三角形、長方形、正多邊形。
6
(8)關(guān)系
向客戶提供服務(wù)的對象之間的協(xié)作通常由關(guān)聯(lián)關(guān)系捕獲,在技術(shù)上把其稱為鏈。
還有在課程的后面的部分,我們將討論的聚合關(guān)系和依賴等關(guān)系。
(9)行為
行為分析是我們用來考察一個(gè)對象(類)是怎樣提供它的服務(wù)(也就是方法)的過程。
從分析的視點(diǎn),有兩種類型的行為:
-靜態(tài)的
-動態(tài)的
在靜態(tài)行為中,方法內(nèi)的操作(代碼)不被任何外部或內(nèi)部的事件(動作)所影響。
在行為中發(fā)生這些變化的原因可能是由于對象存在很多不同的狀態(tài)。隨后,對象根據(jù)它
的狀態(tài)做出反映。使用命令式編程技術(shù)不能很好地處理這種類型的行為。使用另外的一種稱
為有限狀態(tài)機(jī)的機(jī)制會更好地捕獲這樣的方法。
例子:航班定票系統(tǒng)中的定票過程對象“機(jī)票”的狀態(tài):預(yù)定、等待、確認(rèn)、取消、
使用、歸檔。
(10)粒度控制
引入包(package)或主題(subject)的概念,使模型具有大小不同的粒度層次,以利于
控制復(fù)雜性。
UML(統(tǒng)一建模語言):UnifiedModelingLanguage
面向?qū)ο蠓治?00A)是對現(xiàn)實(shí)世界對象實(shí)體和概念建立用戶可理解的、準(zhǔn)確和簡明的問
題模型的過程。
面向?qū)ο笤O(shè)計(jì)(00D)是按對象的協(xié)作集合組織解決方案的階段,每個(gè)對象實(shí)體代表類的
一個(gè)實(shí)例,類的所有成員通過繼承關(guān)系組織在一起。
面向?qū)ο缶幊?OOP)是使用一種支持面向?qū)ο蠓椒ǖ恼Z言實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)的過程。上
面兩個(gè)階段共同提供了面向?qū)ο缶幊痰目蚣?。典型的支持OOP的語言是C++和Java及C#。
在00A中,構(gòu)建與現(xiàn)實(shí)世界原型相對應(yīng)的問題模型。此外,非編程人員也應(yīng)能夠理解系
統(tǒng)的定義。換句話說,面向?qū)ο蟮姆治鲋貜?qiáng)調(diào)從現(xiàn)實(shí)世界原型角度表述問題。
00D方法要求在設(shè)計(jì)中要映射現(xiàn)實(shí)世界中指定問題域中的對象和實(shí)體,例如:顧客、汽
車和銷售人員等。這就需要設(shè)計(jì)要盡可能地接近現(xiàn)實(shí)世界,即以最自然的方式表述實(shí)體。所
以面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn)即為能夠構(gòu)建與現(xiàn)實(shí)世界相對應(yīng)的問題模型,并保持他們的結(jié)構(gòu)、關(guān)
系和行為模式。
系統(tǒng)建模有助于實(shí)現(xiàn)如下目的:模型有助于按系統(tǒng)本身或者按需要對系統(tǒng)進(jìn)行可視化、
模型有助于確定系統(tǒng)的結(jié)構(gòu)和行為、模型為開發(fā)者構(gòu)建系統(tǒng)提供模板、模型記錄開發(fā)者所
做的決策,以備將來使用。
模型的演變經(jīng)歷了以下階段:?GradyBooch的Booch建模方法,JamesRumbaugh的對
象建技術(shù)一OMT,IvarJacobson的OOSE方法?Hewlett-Packard的Fusion方法?Coad和
Yordon的00Aand00D?
人們越來越發(fā)現(xiàn)非常有必要建立構(gòu)建對象模型的通用和標(biāo)準(zhǔn)方法。要求用一套標(biāo)準(zhǔn)的符
號和示圖清晰地表達(dá)設(shè)計(jì)決策。為了這個(gè)目標(biāo),JamesRumbaugh,GradyBooch和Ivar
Jacobson做了開創(chuàng)性的努力,并提供了一整套示圖、符號表示法。
統(tǒng)一建模語言UML(UnifiedModelingLanguage):UML是一種建模語言,它主要組成
是一些用面向?qū)ο蠓椒ū磉_(dá)系統(tǒng)設(shè)計(jì)的圖形符號。它是一種用于對軟件密集性系統(tǒng)進(jìn)行可視
化、具體化、結(jié)構(gòu)化和文檔化的建模語言。
UML用來建立用戶、分析人員、設(shè)計(jì)者和軟件開發(fā)人員之間的輕松對話.
7
軟件開發(fā)生命期(SDLC):是指由分析人員、設(shè)計(jì)人員和使用者為了開發(fā)并實(shí)現(xiàn)一個(gè)信
息系統(tǒng)所進(jìn)行的系列操作。這些操作在兒個(gè)不同的階段中執(zhí)行。
分析人員:研究客戶/用戶的需求,并定義問題域。
設(shè)計(jì)者:依據(jù)數(shù)據(jù)庫結(jié)構(gòu)、界面、表單和報(bào)表設(shè)計(jì)系統(tǒng)。確定所開發(fā)系統(tǒng)的軟硬件配置。
使用者:正在開發(fā)的系統(tǒng)的使用者.
SDLC的階段:?初步調(diào)查(可行性研究)?需求分析,系統(tǒng)設(shè)計(jì)?軟件構(gòu)建(編碼)?系
統(tǒng)測試?系統(tǒng)實(shí)現(xiàn)?系統(tǒng)維護(hù)
UML與SDLC各階段的對應(yīng)關(guān)系
初步調(diào)查:UML通過使用案例描述用戶的需求。每個(gè)使用案例使用文本詳細(xì)描述用戶的
具體需求。UML通過使用案例示圖描述系統(tǒng)內(nèi)部的相互關(guān)系和動態(tài)交互。
分析:在此階段中,要對問題域進(jìn)行抽象,理解其內(nèi)部的運(yùn)行機(jī)制。類表達(dá)了現(xiàn)實(shí)世界
的對象,并描述他們的存在和相互關(guān)系。分析過程中只考慮問題域中的類。
設(shè)計(jì):在設(shè)計(jì)階段,對分析階段的成果提出技術(shù)上的解決方案。對類進(jìn)行細(xì)化,以提供
技術(shù)框架,例如,用戶界面、面向?qū)ο髷?shù)據(jù)庫的永久對象、和本系統(tǒng)或其他系統(tǒng)的接口。本
階段最后生成一個(gè)系統(tǒng)構(gòu)建的詳細(xì)說明文檔?
構(gòu)建(編碼):本階段中把設(shè)計(jì)模型轉(zhuǎn)換為真正的代碼。程序員使用在設(shè)計(jì)階段生成的
不同的UML示圖理解和開發(fā)代碼
測試:UML有許多不同的示圖支持軟件測試。單元測試使用類示圖和類規(guī)范。集成測試
使用集成示圖和協(xié)作示圖,系統(tǒng)測試通過使用案例圖驗(yàn)證系統(tǒng)是否能執(zhí)行用戶要求的操作
用例之間的關(guān)系:泛化、擴(kuò)展、包含。
用例泛化關(guān)系:將特定用例抽象為更?般的用例,子用例繼承父用例的屬性、操作以及
行為順序,可以增加自己的屬性和操作?子用例與父用例有相同的業(yè)務(wù)目的。
如:
用例的擴(kuò)展:一種依賴關(guān)系,客戶用例依賴于基用例?客戶用例向基用例(擴(kuò)展點(diǎn))插
入額外的動作序列來增加增量行為。比如查看清單是購物的擴(kuò)展,透支是取款的擴(kuò)展等。
在開發(fā)過程中常發(fā)現(xiàn)要開發(fā)的新用例所需的部分功能已有其它的用例提供?這種情況
下將的用例定義為已存在的用例和附加功能之和?這樣的用例可看作是舊的用例的擴(kuò)展。
兩個(gè)用例之間的擴(kuò)展關(guān)系,代表基用例可以隱式地包含另一個(gè)用例作為其行為的一部
分,包含的位置間接地由另一個(gè)用例(擴(kuò)展用例)確定?;美梢元?dú)立于擴(kuò)展用例單獨(dú)存
在。
當(dāng)一個(gè)用例有多個(gè)子流程時(shí),可以用擴(kuò)展關(guān)系對其進(jìn)行擴(kuò)展,使得此基用例的不同子流
程能在不同的情形下以擴(kuò)展用例的形式被激活
UML把包含關(guān)系和擴(kuò)展關(guān)系表示為依賴關(guān)系的構(gòu)造型,而在某些工具(如visio)中,它
們被表現(xiàn)為泛化關(guān)系的構(gòu)造型。
在任何一種圖形表示中,箭頭所指的模型元素分別代表被包含的用例或被擴(kuò)展用例(基
用例),而包含關(guān)系和擴(kuò)展關(guān)系的構(gòu)造型標(biāo)記分別是〈〈include〉〉和〈〈extend〉〉
包含(使用)關(guān)系:
8
當(dāng)許多用例有一個(gè)共同的操作,可只建一個(gè)用例模型并為其他的用例使用,這樣的關(guān)系
叫做包含關(guān)系。“取款”用例使用“口令驗(yàn)證”和“打印回執(zhí)”用例。
用例的包含:在客戶用例的控制下,對提供者用例在客戶用例的交互順序中的行為順序
的包含。如
include意思是包含、用到,可理解為與"使用”相同.“使用關(guān)系”形狀中的箭頭指向
被使用的UseCase。
位于兩個(gè)用例之間的包含關(guān)系意味著基用例顯式地在其指定位置將另一個(gè)用例包含進(jìn)
來,使其成為自己的行為的一部分。包含關(guān)系可用于提取共用的用例。在具有包含關(guān)系的兩
個(gè)用例中,被包含的那個(gè)用例不能單獨(dú)存在,它只能以實(shí)例的形式存在于包含它的用例之中。
組合(Package)關(guān)系:
當(dāng)許多用例具有類似的功能或者以同樣的方式相互聯(lián)系,就將他們歸在一起。?UML的
程序包表示了用例的組合。
如何通過Actor捕獲UserCase?
用例圖:主要用于對系統(tǒng)、子系統(tǒng)或類的行為進(jìn)行建模。
益處:
?通過表示在語境中參與者如何與系統(tǒng)交互,使得系統(tǒng)、子系統(tǒng)和類對于用戶和開發(fā)者
易于探討和理解。?易于對需求規(guī)范化?有利于進(jìn)行00A?有助于發(fā)現(xiàn)主動對象?對系統(tǒng)測試來
說,產(chǎn)生測試用例。
系統(tǒng)邊界:一個(gè)系統(tǒng)所包含的所有系統(tǒng)成分與系統(tǒng)以外各種事物的分界線。
系統(tǒng):是由“用戶”使用的軟件,以及所有與其相關(guān)的硬件?指被開發(fā)的計(jì)算機(jī)軟硬件
系統(tǒng),不是指現(xiàn)實(shí)世界的系統(tǒng)。
系統(tǒng)成分:在00A和00D中定義,在編程時(shí)加以實(shí)現(xiàn)的系統(tǒng)元素——對象
系統(tǒng)邊界
?定義:系統(tǒng)邊界:一個(gè)系統(tǒng)所包含的所有系統(tǒng)成分與系統(tǒng)以外各種事物的分界線。
?系統(tǒng)是指被開發(fā)的計(jì)算機(jī)軟硬系統(tǒng),而不是泛指問題域的全部事物所構(gòu)成的現(xiàn)實(shí)系統(tǒng)。
問題域中的某些事物(如使用系統(tǒng)的人員)將被看成是位于系統(tǒng)邊界之外,作為參與者處理。
9
?如果在其中使用一個(gè)原來已經(jīng)存在的系統(tǒng)(即這樣的系統(tǒng)此時(shí)不需要再開發(fā)),這樣
的系統(tǒng)就應(yīng)該放在正開發(fā)的系統(tǒng)之外,把它看作是一個(gè)外系統(tǒng)。如果個(gè)大系統(tǒng)在任務(wù)分解
時(shí),被劃分成幾個(gè)子系統(tǒng),則每個(gè)子系統(tǒng)的開發(fā)者都可以把其他子系統(tǒng)看作是外系統(tǒng),系統(tǒng)
邊界以內(nèi)只包括自己所負(fù)責(zé)的子系統(tǒng)。
現(xiàn)實(shí)世界中的事物與系統(tǒng)的關(guān)系包括如下幾種情況:
■某些事物位于系統(tǒng)邊界內(nèi),作為系統(tǒng)成分。如超市中的商品,抽象為系統(tǒng)內(nèi)的“商品”
對象。
■某些事物位于系統(tǒng)邊界外,作為參與者。
■某些事物可能既有一個(gè)對象作為其抽象描述,而本身(作為現(xiàn)實(shí)世界中的事物)又是
在系統(tǒng)邊界以外與系統(tǒng)進(jìn)行交互的參與者。如超市中的收款員,他本身是現(xiàn)實(shí)中的人,作為
參與者;在系統(tǒng)邊界內(nèi),又有一個(gè)相應(yīng)的“收款員”對象來模擬其行為或管理其信息,作為
系統(tǒng)成分。
■某些事物即使屬于問題域,也與系統(tǒng)責(zé)任沒有什么關(guān)系。如超市中的保安員,在現(xiàn)實(shí)
中與超市有關(guān)系,但與所開發(fā)的系統(tǒng)超市商品管理系統(tǒng)無關(guān)系。這樣的事物既不位于系統(tǒng)邊
界內(nèi),也不作為系統(tǒng)的參與者。
認(rèn)識清楚上述事物之間的關(guān)系,也就劃分出了系統(tǒng)邊界。
參與者是在系統(tǒng)之外的與系統(tǒng)進(jìn)行交互的任何事物。
概念與表示法
?定義:一個(gè)參與者定義了用例的使用者在與這些用例交互時(shí)所扮演的一組高內(nèi)聚的角
色。
?參與者可以發(fā)出對系統(tǒng)服務(wù)的請求:參與者能夠初始系統(tǒng)部分的動作
?按系統(tǒng)的要求提供服務(wù):響應(yīng)系統(tǒng)的請求
?通過參與者和系統(tǒng)之間服務(wù)請求的復(fù)雜對話與系統(tǒng)交互
?所有參與者的請求/響應(yīng)的完全集構(gòu)成了可以覺察到的系統(tǒng)的問題域邊界。
系統(tǒng)從來不會對沒有被設(shè)計(jì)的問題域部分作出響應(yīng),也就是說它不處理沒有被設(shè)計(jì)的
請求[輸入]。
?一個(gè)參與者的一個(gè)實(shí)例代表以一種特定的方式與系統(tǒng)進(jìn)行的單獨(dú)的交互。
盡管在模型中使用參與者,但參與者實(shí)際上并不是系統(tǒng)的一部分。它們存在于系統(tǒng)之
外。
一些參與者可能具有共同的對系統(tǒng)調(diào)用的請求。一種做法是顯式地將這樣同的每一個(gè)
請求與每一個(gè)參與者相關(guān)聯(lián)。(不推薦)
如果一組參與者具有共同的性質(zhì),可以把這些性質(zhì)抽取出來放在另i個(gè)參與者中,它
們再從中繼承,把這種關(guān)系稱為參與者之間的泛化關(guān)系。
定義:從參與者A到參與者B之間的泛化關(guān)系是指,A的實(shí)例能與和B實(shí)例進(jìn)行通訊的用例
實(shí)例進(jìn)行通信。
總結(jié):如何發(fā)現(xiàn)參與者?
人員——系統(tǒng)的直接使用者直接為系統(tǒng)服務(wù)的人員
設(shè)備——與系統(tǒng)直接相聯(lián)的設(shè)備為系統(tǒng)提供信息在系統(tǒng)控制卜.運(yùn)行不與系統(tǒng)相聯(lián)
的設(shè)
外系統(tǒng)——上級系統(tǒng)子系統(tǒng)其它系統(tǒng)
外部事件
用例
用例是對一個(gè)參與者使用系統(tǒng)的一項(xiàng)功能的描述。
10
1、使用用例的原因
用例是對用戶需求(主要是功能需求)的規(guī)范化的描述。用戶需求是分析工作的起點(diǎn),
但分析員能夠得到的反映用戶需求的材料常常是不夠規(guī)范或不夠準(zhǔn)確的。通過全面、認(rèn)真地
定義用例,可把用戶對系統(tǒng)的功能需求比較準(zhǔn)確地在用例中表達(dá)出來,并且在形式上是較為
規(guī)范的。
為領(lǐng)域?qū)<?、最終用戶和開發(fā)者提供一種相互交流的手段。
為開發(fā)者提供一種認(rèn)識和理解系統(tǒng)的方法。系統(tǒng)、子系統(tǒng)或類可能會很復(fù)雜,充滿了
操作和其它部分。通過用例,可以幫助這些元素的使用者根據(jù)他們將如何使用這些元素而直
接地認(rèn)識它們。如果沒有這些用例,用戶將不得不親自搞清楚怎樣使用這些元素。用例使一
個(gè)元素的作者可以就元素應(yīng)該如何被使用,表達(dá)意圖。
用用例是開發(fā)期間隨著演化而測試每個(gè)元素的基礎(chǔ)。通過不斷地測試每個(gè)元素和它的
用例,可以不間斷地校驗(yàn)它的實(shí)施。這些用例不僅為單元測試提供了依據(jù),而且每當(dāng)向一個(gè)
元素中加入新的用例時(shí),還可以迫使我們重新考慮這個(gè)計(jì)劃的實(shí)施,以確保這個(gè)元素易于修
改。否則,必須恰當(dāng)?shù)卣{(diào)整體系結(jié)構(gòu)。
Usecase說明:
(1)一個(gè)用例描述參與者對一項(xiàng)或幾項(xiàng)系統(tǒng)功能的使用情況。而且只有當(dāng)外部的參與
者與該系統(tǒng)或類目進(jìn)行交互時(shí),該功能才發(fā)揮作用。
(2)是對一組動作序列的描述。
(3)描述參與者和系統(tǒng)在交互過程中雙方所做的事。
(4)描述彼此為對方直接地做什么事,不描述怎么做
(5)描述應(yīng)力求準(zhǔn)確、清晰,允許概括,但不要把雙方的行為混在一起。
(6)系統(tǒng)執(zhí)行該動作序列來為參與者產(chǎn)生一個(gè)可觀察的結(jié)果值。
(7)這些行為實(shí)際上是系統(tǒng)級的功能,用來可視化、詳述、構(gòu)造和文檔化在需求獲取
和分析過程中所希望的系統(tǒng)行為。內(nèi)部細(xì)節(jié)不要在其中描述。
用例與參與者之間的關(guān)系:
定義:關(guān)聯(lián)是參與者在用例中的參與(也就是參與者實(shí)例與用例實(shí)例之間的相互通信)。
任何一方都可發(fā)送和接收消息。
這是參與者和用例之間的唯一關(guān)系。交互是雙向的,參與者能夠產(chǎn)生對系統(tǒng)的請求,或
系統(tǒng)要求參與者采取某些動作。
把參與者和用例之間的關(guān)聯(lián)表示成參與者和用例之間的一條實(shí)線。
一個(gè)用例可能要與系統(tǒng)的一個(gè)或幾個(gè)參與者交互。
)捕獲用例的策略
捕獲系統(tǒng)功能時(shí),要注意考慮問題的抽象層次,因?yàn)樗幍某橄髮哟尾煌?,考慮問題的
出發(fā)點(diǎn)也不同。對系統(tǒng)的功能描述的抽象層次分為三類:
高層用例(high-level)和低層用例
高層用例描述對有價(jià)值的功能所提供的要素做了總的、簡要的描述,并不考慮這些有價(jià)
值的功能是怎樣獲得的。低層用例描述提供了表示活動、任務(wù)或變化的確切順序的業(yè)務(wù)細(xì)節(jié)。
主要用例(primaryusecase)和次要用例(secondaryusercase)
主要用例捕獲系統(tǒng)的基本業(yè)務(wù)功能,即向用戶提供系統(tǒng)存在的理由的功能。次要用例處
理不常見的和例外的情況。
基本用例(essentialusecase)和真實(shí)用例(realusecase)
基本用例是獨(dú)立于實(shí)現(xiàn)的(硬件的和軟件的)業(yè)務(wù)解,而真實(shí)用例是依賴設(shè)計(jì)的?;?/p>
和真實(shí)的區(qū)別是黑盒和透明盒模型之間的區(qū)別。
2)利用參與者捕獲用例
11
對所有的參與者(把自己作為參與者),提問下列問題:
■每個(gè)參與者的主要任務(wù)是什么?
■為了達(dá)到某種目的,它們參加什么活動?該參與者是否將讀、寫或修改系統(tǒng)的任何信
息?參與者是否該把系統(tǒng)外部的變化通知系統(tǒng)?參與者是否希望系統(tǒng)把預(yù)料之外的變化通
知自己?
■在交互過程中,它們是怎樣使用系統(tǒng)的服務(wù)來完成它們的任務(wù)以達(dá)到目的?
■它們參加了什么在本質(zhì)上是不同的過程?
■是什么事件引起了與系統(tǒng)進(jìn)行交互的序列?
能完成特定功能的每一項(xiàng)活動明確地是一個(gè)用例。這些參與者參與的活動,通常會導(dǎo)致
其它用例。
3)從系統(tǒng)功能角度捕獲用例
用于本步驟的一些簡單的指導(dǎo)如下:
1)一個(gè)用例描述一項(xiàng)功能,這項(xiàng)功能不能過大。例如,把一個(gè)企業(yè)信息管理系統(tǒng)粗略
第分為生產(chǎn)管理、供銷管理、財(cái)務(wù)管理和人事管理等幾大方面的功能,就顯得粒度太大了,
應(yīng)該再進(jìn)行細(xì)化。
2)全面地認(rèn)識和定義每一個(gè)用例,要點(diǎn)是以窮舉的方式考慮每一個(gè)參與者與系統(tǒng)的交
互情況,看看每個(gè)參與者要求系統(tǒng)提供什么功能,以及參與者的每一項(xiàng)輸入信息將要求系統(tǒng)
作出什么反映,進(jìn)行什么處理;另外,要以窮舉的方式,檢查用戶對系統(tǒng)的功能需求,是否
能在各個(gè)用例中體現(xiàn)出來。
用例文檔模板
用例名
描述:對該用例的一句或兩句的描述。
參與者:識別參與用例的參與者。
包含:識別該用例所包含的用例。
擴(kuò)展:識別該用例可以擴(kuò)展的用例。
泛化:若該用例是子用例,則要說明它的父用例。
前置條件:啟動此用例所必須具備的條件。
細(xì)節(jié):識別該用例的細(xì)節(jié)(可選)。
后置條件:識別在該用例結(jié)束時(shí)確保成立的條件。
例外:識別在該用例的執(zhí)行的過程中可能引起的例外*。
限制:識別在應(yīng)用中可能出現(xiàn)的任何限制*。
注釋:提供可能對該用例是重要的任何附加信息。
用例示例:
表示形式:名稱(參與者,功能)行為描述控制語句括號或標(biāo)號
收款員收款
輸入開始本次收款的命令;作好收款準(zhǔn)備,應(yīng)收款總數(shù)置為0,輸出提示信息;
for顧客選購的每種商品do
輸入商品編號;
if此種商品多于一件then輸入商品數(shù)量endif;
檢索商品名稱及單價(jià);貨架商品數(shù)減去售出數(shù);
if貨架商品數(shù)低于下限then
通知供貨員請求上貨endif;
計(jì)算本種商品總價(jià)并打印編號、名稱、數(shù)量、單價(jià)、總價(jià);總價(jià)累加到應(yīng)收款總數(shù);
endfor;
12
打印應(yīng)收款總數(shù);
輸入顧客交來的款數(shù):
計(jì)算應(yīng)找回的款數(shù),
打印以上兩個(gè)數(shù)目,
應(yīng)收款數(shù)計(jì)入帳冊。
用例圖展示了用例之間以及同用例與參與者之間是怎樣相互聯(lián)系的。用例圖用于對系
統(tǒng)、子系統(tǒng)或類的行為進(jìn)行可視化,使用戶能夠理解如何使用這些元素,并使開發(fā)者能夠?qū)?/p>
現(xiàn)這些元素。
定義用例圖呈現(xiàn)了一些參與者和一些用例,以及它們之間的關(guān)系。
在圖形上,用例圖是一幅由一組參與者、一組用例以及這些元素之間的關(guān)系組成的圖。
這些關(guān)系是參與者和用例之間的關(guān)聯(lián)、參與者之間的泛化,以及用例之間的泛化、擴(kuò)展和包
含。
可以選擇把一些用例用一個(gè)矩形圍起來,用來表示系統(tǒng)、子系統(tǒng)或“類”的邊界。
用例圖可以包含注解和約束。
在分析軟件系統(tǒng)的功能設(shè)置時(shí),應(yīng)該把重點(diǎn)放在描述軟件系統(tǒng)的外部邊界上即重點(diǎn)考慮
用戶對軟件系統(tǒng)的功能設(shè)置的合理性、方便性和運(yùn)行效率的要求,而不應(yīng)該在需求分析階段
就過多地考慮軟件系統(tǒng)的結(jié)構(gòu)和內(nèi)部實(shí)現(xiàn)機(jī)制。這是在對軟件系統(tǒng)進(jìn)行需求分析時(shí),應(yīng)該遵
循的一個(gè)重要原則。
例2:為“設(shè)備”對象設(shè)立一個(gè)屬性,名為“狀態(tài)”屬性值:關(guān)閉、待命、運(yùn)行、故障
等。
在這里,“狀態(tài)”是一個(gè)專門設(shè)置的屬性,它的值反映了實(shí)際事物的狀態(tài)。
狀態(tài)轉(zhuǎn)換圖(STD)
A入*S?)
律也<未交)
MVC通過以下三種方式消除與用戶接口和
面向?qū)ο蟮脑O(shè)計(jì)有關(guān)的絕大部分困難:
控制器通過一個(gè)狀態(tài)機(jī)跟蹤和處理面向操作的用戶事件、MVC將用戶接口與面向?qū)ο?/p>
的模型分開MVC允許應(yīng)用的用戶接口進(jìn)行大的變化而不影響模型
盡管MVCMVC設(shè)計(jì)模式很早就提出,但在WebWeb項(xiàng)目的開發(fā)中引入MVCMVC卻是步履維艱。
主要原因:在早期的Web項(xiàng)目的開發(fā)中,程序語言和HTML的分離一直難以實(shí)現(xiàn)腳本語言
的功能相對較弱,缺乏支持MVC設(shè)計(jì)模式的一些必要的技術(shù)基礎(chǔ)
在使用Java開發(fā)WebApplication中符合
MVC設(shè)計(jì)模式的開發(fā)方式:
Jsp+Serv1et+JavaBean(EJB)
Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
TDK(Turbine,Velocity...)
Xsp(Cocoon)
Jsp+Struts+JavaBean(EJB)
13
創(chuàng)建WebWeb應(yīng)用程序的方法
將JSP用于顯示,將JavaBeans用于邏輯
在一個(gè)Model-View-Controller(MVC)結(jié)構(gòu)(也稱為Model-2)中將servlets、JSP
和JavaBeans一起運(yùn)用
struts是MVC的一種實(shí)現(xiàn),它將Servlet和JSP標(biāo)記(屬于J2EE規(guī)范)用作實(shí)現(xiàn)的一部
分。Struts繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展
Struts的體系結(jié)構(gòu)實(shí)現(xiàn)了Model-View-Controller設(shè)計(jì)模式的概念,它將這些概念映射
到web應(yīng)用程序的組件和概念中
基于MVC的系統(tǒng)中的Model部分可以細(xì)分為兩個(gè)概念:系統(tǒng)的內(nèi)部狀態(tài)能夠改變狀
態(tài)的行為
View:JSP頁面和表示組件:
基于Struts的應(yīng)用程序中的View部分通常使用JSP技術(shù)來構(gòu)建
JSP環(huán)境包括了其用途由JSP規(guī)范來描述的?套標(biāo)準(zhǔn)的行為標(biāo)記,一個(gè)用來定義你自己
標(biāo)記的標(biāo)準(zhǔn)機(jī)制,這些自定義的標(biāo)記組織在“定制標(biāo)記庫”中。
Struts包括了一個(gè)廣闊的便于創(chuàng)建用戶界面,并且充分國際化的定制標(biāo)記庫,與作為系
統(tǒng)
Model部分一?部分的ActionFormbeans美妙地相互配合
Controller:ActionServlet和ActionMapping
應(yīng)用程序的Controller部分集中于從客戶端接收請求,決定執(zhí)行什么商業(yè)邏輯功能,
然后將產(chǎn)生下一步用戶界面的責(zé)任委派給一個(gè)適當(dāng)?shù)腣iew組件。在Struts中,controller
的基本組件是一個(gè)ActionServlet類的servlet
Struts也支持使用包含有運(yùn)行框架所必需的標(biāo)準(zhǔn)屬性之外的附加屬性的
ActionMapping類的能力
Struts的創(chuàng)建:
創(chuàng)建Model組件:
通常說來,Model組件的開發(fā)者集中于創(chuàng)建支持所有功能需求的JavaBeans類。通???/p>
以分成下面討論的幾種類型:ActionFormBeans系統(tǒng)狀態(tài)Beans商業(yè)邏輯Beans
創(chuàng)建View組件:創(chuàng)建應(yīng)用程序中的View組件的任務(wù),主要使用JSP技術(shù)建立,主要內(nèi)
容包括:國際化消息表單和FormBean的交互其它的表示技術(shù)(特定于應(yīng)用程序的定制
標(biāo)記、有包含文件的頁面組件、圖片處理組件)
創(chuàng)建Controller組件
Struts包括,?個(gè)實(shí)現(xiàn)映射一個(gè)請求URI到一個(gè)行為類的主要功能的servlet。因此你的與
Controller有關(guān)的主要責(zé)任是:為每一個(gè)可能接收的邏輯請求寫一個(gè)Action類,寫一個(gè)
定義類名和與每個(gè)可能的映射相關(guān)的其它信息的ActionMapping類,寫行為映射配置文件(用
XML)用來配置controllerservlet,為應(yīng)用程序更新web應(yīng)用程序展開描述符文件(用XML)
用來包括必需的Struts組件,給應(yīng)用程序添加適當(dāng)?shù)腟truts組件。
Struts優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
Struts跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開源軟件,使開發(fā)者能更深入的
了解其內(nèi)部實(shí)現(xiàn)機(jī)制Taglib。Taglib是Struts的標(biāo)記庫,靈活動用,能大大提高開發(fā)效率頁
面導(dǎo)航,使系統(tǒng)脈絡(luò)更加清晰
缺點(diǎn):
Taglib是Struts的一大優(yōu)勢,但對于初學(xué)者而言,卻需要一個(gè)持續(xù)學(xué)習(xí)的過程,甚至還
會打亂你網(wǎng)頁編寫的習(xí)慣,Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同
14
時(shí),也增加了系統(tǒng)的復(fù)雜度
Struts逐步越來越多運(yùn)用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點(diǎn),但它是一種非常優(yōu)秀
的J2EEMVC實(shí)現(xiàn)方式
什么是設(shè)計(jì)模式?簡述2種設(shè)計(jì)模式
設(shè)計(jì)模式描述了一個(gè)通用的設(shè)計(jì)結(jié)構(gòu),該結(jié)構(gòu)能被用來構(gòu)造可復(fù)用的面向?qū)ο笤O(shè)計(jì),確
定了所包含的類、實(shí)例以及它們的角色、協(xié)作方式。
使用設(shè)計(jì)模式的好處:1)確定系統(tǒng)對象2)決定對象粒度3)指定對象接口4)描述對象
實(shí)現(xiàn)5)運(yùn)用復(fù)用機(jī)制6)平滑結(jié)構(gòu)映射7)支持需求變化
原則:1)針對接口編程,而不是針對實(shí)現(xiàn)編程2)優(yōu)先使用對象組合,而不是類繼承
設(shè)計(jì)模式類別-創(chuàng)建型(Creational)-結(jié)構(gòu)型(Structural)-行為型(Behavioral)
創(chuàng)建型(CreationalCreational)模式:以建立對象來解決問題:-ClassACA=ne\v
ClassAO;工廠模式單件模式
工廠模式
存在一個(gè)創(chuàng)建對象的工廠調(diào)用者從中取得特別的對象由工廠決定如何符合調(diào)用需
求客戶不知道對象如何生成
單件模式
整個(gè)系統(tǒng)中對象是唯一的也可以有固定數(shù)目個(gè)-如:對象池、portal中的配置對象
當(dāng)前httpcontextappdomain
結(jié)構(gòu)型(StructuralStructural)模式
與對象之間的結(jié)構(gòu)有關(guān)涉及兩個(gè)或兩個(gè)以上對象間活動沒有限制-小結(jié)構(gòu)組織大
結(jié)構(gòu),組織解決方案
組合模式(composite):通常以大對象方式出現(xiàn)由眾多小對象組成
BehavioralBehavioral模式行為型
Iterator模式封裝多個(gè)元素使用戶正確使用遍歷內(nèi)部內(nèi)容
Proxy模式:客戶端---proxy---sever
大數(shù)據(jù)調(diào)用大計(jì)算遠(yuǎn)程計(jì)算機(jī)訪問限制訪問權(quán)限
文檔設(shè)計(jì)模式的具體實(shí)例:36—47頁20100526_設(shè)計(jì)模式概論
動態(tài)模型的必要性:
動態(tài)模型——對真正工作的系統(tǒng)建模并且展示其可能的執(zhí)行狀態(tài)
動態(tài)模型處理系統(tǒng)中對象生命周期中的各個(gè)不同階段
需要?jiǎng)討B(tài)模型因?yàn)樗磉_(dá)了系統(tǒng)在時(shí)間上的變化
所有系統(tǒng)都有靜態(tài)結(jié)構(gòu)和動態(tài)行為!對象模型中的類圖和對象圖用來描述系統(tǒng)的靜態(tài)結(jié)
構(gòu)。動態(tài)模型用于表達(dá)系統(tǒng)的行為(動態(tài))!
系統(tǒng)中動態(tài)實(shí)體之間的通訊可以使用UML中
的四種圖來描述:順序圖(sequencediagram)協(xié)作圖(collaborationdiagram)活動
圖(activediagram)狀態(tài)圖(statechartdiagram)
UML包括9種示圖(diagram)
靜態(tài)結(jié)構(gòu):類圖(classdiagram)對象圖(objectdiagram)組件圖(Componentdiagram)
部署圖(deploymentdiagram)
動態(tài)結(jié)構(gòu):使用案例圖(usecasediagram)順序圖(sequencediagram)協(xié)作圖
(collaborationdiagram)表示動態(tài)行為活動圖(activediagram)狀態(tài)圖(statechart
diagram)
交互圖包括(順序圖、協(xié)作圖)
通過類圖,可以描述問題域的詞匯;
15
組件圖與部署圖是用來對面向?qū)ο笙到y(tǒng)的物理方面建模的兩種圖。組件圖顯示一組組件
之間的組織及其依賴關(guān)系。部署圖顯示運(yùn)行時(shí)進(jìn)行處理的節(jié)點(diǎn)和在節(jié)點(diǎn)上活動的組件的配
置。
通過使用案例圖,可以描述系統(tǒng)的期望行為。
通過使用順序圖,協(xié)作圖、狀態(tài)圖和活動圖可以說明所定義的問題域詞匯中的事物是如
何共同協(xié)作來完成這一行為的。
動態(tài)模型的內(nèi)容
順序圖(sequencediagram)-本圖描述了對象實(shí)體之間的交互-主要的重點(diǎn)在于從
時(shí)間的角度描述這些交互作用
協(xié)作圖(collaborationdiagram)-本圖和序列圖一樣描述了對象實(shí)體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)建筑瓦工施工承包合同
- 旅游業(yè)文化墻施工合同
- 橋梁工程分包施工合同
- 海參養(yǎng)殖員工職業(yè)倦怠預(yù)防合同
- 商業(yè)秘密保護(hù)律師聘用協(xié)議
- 酒店?duì)I銷策劃方案范文七篇
- 學(xué)期英語工作計(jì)劃三篇
- 學(xué)生心理健康教育與咨詢制度
- -婦產(chǎn)科醫(yī)生年度工作總結(jié)
- 員工辭職申請書模板匯編5篇
- 現(xiàn)代酒店管理智慧樹知到課后章節(jié)答案2023年下海南工商職業(yè)學(xué)院
- 2023-2024學(xué)年云南省昆明市西山區(qū)六上數(shù)學(xué)期末經(jīng)典模擬試題含答案
- 浙江省紹興市新昌縣2023-2024學(xué)年數(shù)學(xué)三上期末調(diào)研模擬試題含答案
- 笛卡爾環(huán)線性化技術(shù)的基本原理
- 人教版小學(xué)數(shù)學(xué)三年級上冊全套課件合集
- GB/T 10001.1-2023公共信息圖形符號第1部分:通用符號
- 資產(chǎn)評估常用數(shù)據(jù)與參數(shù)手冊
- 公園廣場保潔管理服務(wù)投標(biāo)方案
- 警察影像-江蘇警官學(xué)院中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 金融隨機(jī)分析2課后答案
- 數(shù)控銑床工作臺三維運(yùn)動伺服進(jìn)給系統(tǒng)設(shè)計(jì)-課程設(shè)計(jì)
評論
0/150
提交評論