需求分析與系統(tǒng)設(shè)計(jì)重點(diǎn)_第1頁
需求分析與系統(tǒng)設(shè)計(jì)重點(diǎn)_第2頁
需求分析與系統(tǒng)設(shè)計(jì)重點(diǎn)_第3頁
需求分析與系統(tǒng)設(shè)計(jì)重點(diǎn)_第4頁
需求分析與系統(tǒng)設(shè)計(jì)重點(diǎn)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一名詞解釋IS(information system): 信息系統(tǒng)ERP(enterprise resource planning):企業(yè)資源規(guī)劃CRM(customer relationship management): 客戶關(guān)系管理SCM(supply chain management):供應(yīng)鏈管理RUP(rational unified process): Rational 統(tǒng)一過程XP(extreme programming):敏捷開發(fā)/敏捷編程CMM(capability maturity model):能力成熟度模型OCP:開放封閉原則LSP:里氏代換原則DIP:依賴倒轉(zhuǎn)原則SRP

2、:單一職責(zé)原則ISP:接口隔離原則CRP:合成復(fù)用原則LOD:迪米特法則CASE(computer-assisted software endineering):計(jì)算機(jī)輔助軟件工程UML(unified modeling language):統(tǒng)一建模語言XML():可擴(kuò)展標(biāo)記語言URM:統(tǒng)一資源監(jiān)控API(application programming interface):數(shù)據(jù)庫或應(yīng)用程序接口BPR(business progress re-engineering): 業(yè)務(wù)過程重組ISA(information system architecture):信息系統(tǒng)體系結(jié)構(gòu)OLTP(online

3、 transaction processing):聯(lián)機(jī)事務(wù)處理OLAP(online analytical processing):聯(lián)機(jī)分析處理DSS:決策支持系統(tǒng)MIS:信息管理系統(tǒng)GUI(graphical user interface):圖形用戶界面DLL(dynamic link library):動(dòng)態(tài)鏈接庫RPC(remote procedure calls):遠(yuǎn)程過程調(diào)用RMI:遠(yuǎn)程方法調(diào)用AOP(aspect-oriented programming):面向方面的軟件開發(fā)JAD(join application development): 聯(lián)合應(yīng)用開發(fā)RAD(rapid appl

4、ication development ):快速應(yīng)用開發(fā)MVC:模型-視圖-控制器CRC:類-職責(zé)-寫作者ORM:對(duì)象-關(guān)系映射DDP:向下依賴原則UNP:向上通知原則NCP:相鄰?fù)ㄐ旁瓌tPCBMER的原則EAP:顯示關(guān)聯(lián)原則CEP:循環(huán)去除原則CNP:類命名原則LAPP :相識(shí)包原則1實(shí)現(xiàn)繼承(特化繼承)的缺點(diǎn),在系統(tǒng)設(shè)計(jì)時(shí)如何避免實(shí)現(xiàn)繼承?提示:通常用接口繼承打破了封裝,因?yàn)榛愊蜃宇惐┞读藢?shí)現(xiàn)細(xì)節(jié)白盒重用,因?yàn)榛惖膬?nèi)部細(xì)節(jié)通常對(duì)子類是可見的當(dāng)父類的實(shí)現(xiàn)改變時(shí)可能要相應(yīng)的對(duì)子類做出改變不能在運(yùn)行時(shí)改變由父類繼承來的實(shí)現(xiàn)2接口與實(shí)現(xiàn)相分離(PLD)2.1什么叫接口與實(shí)現(xiàn)相分離 2.2在程序

5、設(shè)計(jì)中為什么要依賴抽象類?2.3比較JAVA的抽象類與接口3觀察者模式3.1什么是觀察者模式觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì) 象。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,讓他們能夠自動(dòng)更新自己3.2畫出觀察者模式的類圖interfaceOliserverinterfaceSubjectListenerSource3.3說明觀察者模式與好萊塢法則的關(guān)系4回調(diào)4.1什么是回調(diào),主要應(yīng)用場景舉例一個(gè)回調(diào)函數(shù)/方法(簡稱回調(diào)/ callback)是上層模塊定義的,將被下層模塊(反過來)調(diào)用的方法。下層模塊Server不知道上層定義的接口也不應(yīng)該直

6、接調(diào)用上層接口?;卣{(diào)函數(shù),就是你自己寫的。你需要調(diào)用另外一個(gè)函數(shù),而這個(gè)函數(shù)的其中一個(gè)參數(shù), 就是你的這個(gè)回調(diào)函數(shù)名。這樣,系統(tǒng)在必要時(shí),就會(huì)調(diào)用你寫的回調(diào)函數(shù),這樣你就可以 在回調(diào)函數(shù)里完成你要做的事。模塊A有一個(gè)函數(shù)foo,它向模塊B傳遞foo的地址,然后在B里面發(fā)生某種事件(event) 時(shí),通過從A里面?zhèn)鬟f過來的foo的地址調(diào)用foo,通知A發(fā)生了什么事情,讓A做出相 應(yīng)的反應(yīng)。那么我們就把foo稱為回調(diào)函數(shù)。舉例:上層模塊Client調(diào)用了下層Server的copy()方法。假設(shè)上層需要更新進(jìn)度條顯示復(fù)制任務(wù)完成的進(jìn)度,顯然上層并不清楚復(fù)制的進(jìn)度而只有下層的Server才知道。這 時(shí)

7、下層模塊如何將進(jìn)度數(shù)據(jù)傳遞給上層的Client呢?4.2以JAVA語言為例說明回調(diào)的實(shí)現(xiàn)方式,畫出類圖,寫出包的名稱interfaceIXxxTestcallback孔二IClientServer回調(diào)方法是某個(gè)上層模塊定義的功能接口,但是所有上層模塊都不會(huì)直接調(diào)用它,而設(shè)計(jì) 它的目的就是為了下層模塊的反向調(diào)用。注意:通常公共模塊、上層模塊和下層模塊均有自己的包。在實(shí)踐中,3個(gè)模塊通常由 不同的程序員編寫。公共模塊IXxx公共模塊IXxx定義回調(diào)的接口。參數(shù)為底層上傳的數(shù)據(jù)。public interface IXxx(public void callback(int i);/參數(shù)為底層上傳的數(shù)據(jù)

8、 上層調(diào)用者Client :上層模塊public class Client implements IXxx(public void call() (new Server(this).copy();/傳遞 this下層調(diào)用時(shí)傳回一些數(shù)據(jù)。實(shí)現(xiàn)接口 IXxx以提供回調(diào)callback(int)的方法體;傳遞this作為回調(diào)的接受者。Override public void callback(int i) (System.out.println(i+0%”); 下層被調(diào)用者Server:public class Server(private IXxx whoCallMe; 一個(gè) IXxx 的引用pu

9、blic Server(IXxx listener) (whoCallMe = listener;public void copy() (for(int i=0;i100;i+)if (i/10 = 0) /在適當(dāng)?shù)臅r(shí)機(jī)調(diào)用回調(diào)whoCallMe.callback(i);System.out.println(copy() over); TestCallback :package API.event;public class TestCallbackpublic static void test()new Client().call(); public static void foo()()ne

10、w Server(new Client().copy(); 4.3用JAVA代碼演示好萊塢法則(重點(diǎn)在注冊方法)我們站在下層模塊的角度重新考慮回調(diào)。增添一點(diǎn)變化一一多個(gè)Client對(duì)下層Server2 對(duì)象的某種狀態(tài)變化感興趣。一些男女演員們(Client)都對(duì)某導(dǎo)演(Server2)是否拍新片子感興 趣。好萊塢法則:Dont call me; Ill call you.”。interfaceIXxxTestCzllhac Client下層模塊Server2的角度,需要一個(gè)List作為電話簿;提供一個(gè)register(IXxx listener)用于登記,參數(shù)為感興趣者或監(jiān)聽者7器;極其重要的

11、一個(gè)細(xì)節(jié):Client與Server2之間沒有依賴關(guān)系。public class Server2(private List listeners = new ArrayList();/電話簿public void register(IXxx listeife/監(jiān)聽器注冊listeners.add(listener);public void sthHappened()(/某 種狀態(tài)發(fā)生改變for(IXxx x: listeners) (x.callback(10);/通知所有已登記的演員 測試:package API.event;class TestCallback2(public static

12、void test()(Server2 s =new Server2();s.register( new Client();s.register( new Client();s.sthHappened();/這里由上層模塊觸發(fā)事件的發(fā)生 下層模塊狀態(tài)發(fā)生某些變化時(shí)某些事件發(fā)生時(shí),可以找到上層模塊相應(yīng)的處理代碼(回 調(diào)函數(shù))。而這一點(diǎn)正是Java委托事件模型的核心。此題20分5結(jié)合實(shí)踐介紹一種設(shè)計(jì)模式(ppt中23種之一),說明基本思想,使用場景(老師說要寫很多字,說明清楚)策略模式:思想:策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還 可以相互替換。策略模式讓算法獨(dú)立于使用它

13、的客戶而獨(dú)立變化。策略模式用于算法的自由切換和擴(kuò)展,它是應(yīng)用較為廣泛的設(shè)計(jì)模式之一。策略模式對(duì) 應(yīng)于解決某一問題的一個(gè)算法族,允許用戶從該算法族中任選一個(gè)算法來解決某一問題,同 時(shí)可以方便地更換算法或者增加新的算法。只要涉及到算法的封裝、復(fù)用和切換都可以考慮 使用策略模式。在以下情況下可以考慮使用策略模式:一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種,那么可以將這些算法封裝到一個(gè)個(gè)的具體 算法類中,而這些具體算法類都是一個(gè)抽象算法類的子類。換言之,這些具體算法類均有統(tǒng) 一的接口,根據(jù)“里氏代換原則”和面向?qū)ο蟮亩鄳B(tài)性,客戶端可以選擇使用任何一個(gè)具體算 法類,并只需要維持一個(gè)數(shù)據(jù)類型是抽象算法類的對(duì)象

14、。一個(gè)對(duì)象有很多的行為,如果不用恰當(dāng)?shù)哪J?,這些行為就只好使用多重條件選擇語句 來實(shí)現(xiàn)。此時(shí),使用策略模式,把這些行為轉(zhuǎn)移到相應(yīng)的具體策略類里面,就可以避免使用 難以維護(hù)的多重條件選擇語句。不希望客戶端知道復(fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),在具體策略類中封裝算法與相關(guān)的數(shù)據(jù)結(jié)構(gòu),可以提高算法的保密性與安全性。策略模式將行為和環(huán)境隔離開來,環(huán)境角色類負(fù)責(zé)維持和查詢行為的類,各種類 似的邏輯算法都在各個(gè)具體的策略類中進(jìn)行實(shí)現(xiàn),由于環(huán)境和行為隔離開來,所 以行為的邏輯變更不會(huì)影響到環(huán)境和客戶端。如果要使用策略類,則必須先抽象出需要包裝的邏輯算法,試圖從環(huán)境中分隔開 來。策略模式一般都是將一個(gè)系列的邏輯算

15、法包裝到一些列的策略類中,來作為 一個(gè)抽象策略類的子類。策略模式涉及到三個(gè)角色:環(huán)境角色抽象策略角色具體策略角色舉一個(gè)簡單的例子。假設(shè)現(xiàn)在在開發(fā)一個(gè)養(yǎng)殖管理系統(tǒng)。該系統(tǒng)用來對(duì)養(yǎng)殖過程中的整個(gè)流程進(jìn)行管 理。其中的一個(gè)模塊是關(guān)于禽類的喂養(yǎng)管理等。一個(gè)養(yǎng)殖專業(yè)戶喂養(yǎng)了多種禽類 (如兔子,雞,豬),養(yǎng)殖人員每天都需要給他們喂食物。由于不同的禽類都吃 不一樣的東西,在這里,對(duì)于喂養(yǎng)(feed)這個(gè)動(dòng)作,這個(gè)就是一個(gè)策略。這里 只是簡化說明,其中省略很多的邏輯方法等,只為了說明這個(gè)問題.應(yīng)用策略模式,對(duì)應(yīng)的三個(gè)角色如下:環(huán)境角色:這里是feeder(飼養(yǎng)員)抽象策略角色:這里是禽類的喂養(yǎng)FowlFeed

16、()具體策略角色:針對(duì)不同的的寵物的喂養(yǎng)方法或者行為RabbitFeed,HenFeed,PigFeed 等用代碼實(shí)現(xiàn)如下: 環(huán)境角色類Feeder: package com.longweir.strategy;/這里是環(huán)境角色Feederpublic class Feeder private FowlFeed fowlfeed;public void setFowlFeed(FowlFeed fowlfeed) this.fowlfeed=fowlfeed;public FowlFeed getFowlFeed() return fowlfeed;構(gòu)造方法1public Feeder()構(gòu)造

17、方法2public Feeder(FowlFeed fowlfeed) this.fowlfeed=fowlfeed;/策略方法feed()public void feedInterface() fowlfeed.feed();該類的其他的方法抽象策略角色FowlFeed,這里使用接口代替,也可以使用抽象類/ FowlFeed為抽象的策略類 這里使用接口來描述其他的具體策略類必須實(shí)現(xiàn)這個(gè)接口中的feed()方法package com.longweir.strategy;interface FowlFeedpublic void feed(); 具體策略類,關(guān)于喂養(yǎng)兔子RabbitFeed:pa

18、ckage com.longweir.strategy;/具體的策略類一喂養(yǎng)兔子public class RabbitFeed implements FowlFeed 構(gòu)造方法public RabbitFeed() 喂養(yǎng)兔子的策略方法,實(shí)現(xiàn)抽象策略中的方法 public void feed()(System.out.println(喂兔子吃青菜和蘿卜”);具體的策略類,關(guān)于喂養(yǎng)豬PigFeed:package com.longweir.strategy;具體的策略類-喂養(yǎng)豬的策略方法public class PigFeed implements FowlFeedpublic PigFeed()

19、喂養(yǎng)豬的策略方法,實(shí)現(xiàn)抽象策略中的方法public void feed()System.out.println(喂豬吃糠和泔水”);具體的策略類,關(guān)于喂養(yǎng)母雞的策略方法HenFeedpackage com.longweir.strategy;具體的策略角色-喂養(yǎng)母雞public class HenFeed implements FowlFeedpublic HenFeed()喂養(yǎng)母雞的策略方法public void feed()System.out.println(喂母雞吃谷物和米?!?;以上都實(shí)現(xiàn)了三個(gè)角色的代碼,我們編寫一個(gè)客戶端代碼來測試下:/客戶端的調(diào)用示例package com.lo

20、ngweir.strategy;public class Strategypublic static void main(String args)實(shí)例化一個(gè)環(huán)境角色feederFeeder feeder=new Feeder(new RabbitFeed();喂養(yǎng)兔子feeder.feedInterface();喂養(yǎng)豬feeder.setFowlFeed(new PigFeed();feeder.feedInterface();喂養(yǎng)母雞feeder.setFowlFeed(new HenFeed();feeder.feedInterface();執(zhí)行結(jié)果是:喂兔子吃青菜和蘿卜喂豬吃糠和泔水喂母

21、雞吃谷物和米粒在客戶端中,針對(duì)不同的具體策略類,環(huán)境角色執(zhí)行了不同的策略方法。當(dāng)我 們?nèi)蘸笮枰黾有碌牟呗詴r(shí),我們只需要新建一個(gè)具體的策略類來實(shí)現(xiàn)抽象策略 接口即可。例如系統(tǒng)中,飼養(yǎng)員新飼養(yǎng)了禽類為山羊(Goat)則代碼日下:package com.longweir.strategy;/*具體的策略角色類-喂養(yǎng)山羊的策略方法*/public class GoatFeed implements FowlFeedpublic GoatFeed()喂養(yǎng)山羊的策略方法,實(shí)現(xiàn)抽象策略中的方法public void feed()System.out.println(喂山羊吃青草”);然后我們的客戶端中就可

22、以很方便的調(diào)用,這樣一來實(shí)現(xiàn)了系統(tǒng)的擴(kuò)展。但是,很明顯的是, 如果重復(fù)使用策略,則不可行。重復(fù)的使用,我們可以使用裝飾器模式來解決6三層架構(gòu)6.1介紹物理三層與邏輯三層三層架構(gòu)(3-tier application)通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層 (UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了“高內(nèi)聚,低耦合” 的思想。1、表現(xiàn)層(UI):通俗講就是展現(xiàn)給用戶的界面,即用戶在使用一個(gè)系統(tǒng)的時(shí)候他的 所見所得。2、業(yè)務(wù)邏輯層(BLL):針對(duì)具體問題的操作,也可以說是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù) 業(yè)務(wù)邏輯處理。3、數(shù)據(jù)訪問層(DAL):該層所做事務(wù)直接操

23、作數(shù)據(jù)庫,針對(duì)數(shù)據(jù)的增、刪、改、查。開始分層的時(shí)候,你會(huì)按照職責(zé)劃分組件,這樣的組件屬于”發(fā)現(xiàn)”,更接近現(xiàn)實(shí),更像是”物理的”,這樣的分層是最基本的,僵化的,放在那里觀賞或者用于教學(xué)可以,卻很難適應(yīng)投產(chǎn)后的實(shí)際工況;實(shí)際上軟件生產(chǎn)中,為了改善組件之間的驅(qū)動(dòng)關(guān)系,使得驅(qū)動(dòng) 鏈扁平,會(huì)”發(fā)明”一些隔離或者代理組件,這些組件的職責(zé)是虛構(gòu)的,現(xiàn)實(shí)中并不存在,它們更像是”邏 輯的”6.2介紹BLL的功能與作用它的關(guān)注點(diǎn)主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè) 計(jì),也即是說它是與系統(tǒng)所應(yīng)對(duì)的領(lǐng)域(Domain)邏輯有關(guān),很多時(shí)候,也將業(yè)務(wù)邏輯層 稱為領(lǐng)域?qū)?。針?duì)具體問題的操作,也可

24、以說是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。業(yè)務(wù)邏輯層在體系架構(gòu)中的位置很關(guān)鍵,它處于數(shù)據(jù)訪問層與表示層中間,起到了數(shù) 據(jù)交換中承上啟下的作用。由于層是一種弱耦合結(jié)構(gòu),層與層之間的依賴是向下的,底層對(duì) 于上層而言是“無知”的,改變上層的設(shè)計(jì)對(duì)于其調(diào)用的底層而言沒有任何影響。如果在分層 設(shè)計(jì)時(shí),遵循了面向接口設(shè)計(jì)的思想,那么這種向下的依賴也應(yīng)該是一種弱依賴關(guān)系。因而 在不改變接口定義的前提下,理想的分層式架構(gòu),應(yīng)該是一個(gè)支持可抽取、可替換的抽屜” 式架構(gòu)。正因?yàn)槿绱?,業(yè)務(wù)邏輯層的設(shè)計(jì)對(duì)于一個(gè)支持可擴(kuò)展的架構(gòu)尤為關(guān)鍵,因?yàn)樗缪?了兩個(gè)不同的角色。對(duì)于數(shù)據(jù)訪問層而言,它是調(diào)用者;對(duì)于表示層而言,它卻是被調(diào)用者。 依賴與被依賴的關(guān)系都糾結(jié)在業(yè)務(wù)邏輯層上,如何實(shí)現(xiàn)依賴關(guān)系的解耦,則是除了實(shí)現(xiàn)業(yè)務(wù) 邏輯之外留給設(shè)計(jì)師的任務(wù)。6.3用JAVA代碼寫邏輯三層的演示程序7為什么在分析設(shè)計(jì)階段要忘掉關(guān)系數(shù)據(jù)庫?要點(diǎn): 分析設(shè)計(jì)階段以對(duì)象為出發(fā)點(diǎn),沒有表的概念可以使用對(duì)象關(guān)系映射工具,自動(dòng)生成表此題20分8結(jié)合實(shí)踐,說明數(shù)據(jù)庫設(shè)計(jì)在整個(gè)系統(tǒng)開發(fā)中的地位數(shù)據(jù)庫是

溫馨提示

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

評(píng)論

0/150

提交評(píng)論