版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第10章 面向對象設計 面向對象設計過程與準則面向對象設計過程與準則 體系結構模塊及依賴性體系結構模塊及依賴性 系統(tǒng)分解系統(tǒng)分解 問題域部分的設計問題域部分的設計 人機交互部分的設計人機交互部分的設計 任務管理部分的設計任務管理部分的設計 數據管理部分的設計數據管理部分的設計 對象設計對象設計10.1 面向對象設計過程與準則 面向對象設計過程面向對象設計過程(1) 建立系統(tǒng)環(huán)境模型。建立系統(tǒng)環(huán)境模型。在設計的初始階段,系統(tǒng)設計師用在設計的初始階段,系統(tǒng)設計師用系統(tǒng)環(huán)境圖對軟件與外部實體交互的方式進行建模。下圖系統(tǒng)環(huán)境圖對軟件與外部實體交互的方式進行建模。下圖給出了系統(tǒng)環(huán)境圖的一般的結構。給出了
2、系統(tǒng)環(huán)境圖的一般的結構。10.1 面向對象設計過程與準則(2) 設計系統(tǒng)體系結構。設計系統(tǒng)體系結構。體系結構設計可以自底向上進行,體系結構設計可以自底向上進行,如將關系緊密的對象組織成子系統(tǒng)或層;也可以自頂向如將關系緊密的對象組織成子系統(tǒng)或層;也可以自頂向下進行,尤其是使用設計模式或遺產系統(tǒng)時,會從子系下進行,尤其是使用設計模式或遺產系統(tǒng)時,會從子系統(tǒng)的劃分入手。統(tǒng)的劃分入手。 (3) 對各個子系統(tǒng)進行設計。對各個子系統(tǒng)進行設計。對于面向對象的系統(tǒng),典型的對于面向對象的系統(tǒng),典型的子系統(tǒng)有問題域子系統(tǒng)、人機交互子系統(tǒng)和任務管理子子系統(tǒng)有問題域子系統(tǒng)、人機交互子系統(tǒng)和任務管理子系統(tǒng)。系統(tǒng)。(4)
3、 對象設計及優(yōu)化。對象設計及優(yōu)化。對象設計以問題領域的對象設計為核對象設計以問題領域的對象設計為核心,其結果是一個詳細的對象模型。對象設計過程包括心,其結果是一個詳細的對象模型。對象設計過程包括使用模式設計對象、接口規(guī)格說明、對象模型重構、對使用模式設計對象、接口規(guī)格說明、對象模型重構、對象模型優(yōu)化象模型優(yōu)化4組活動。組活動。10.1 面向對象設計過程與準則面向對象設計準則面向對象設計準則模塊化模塊化傳統(tǒng)的面向過程方法中的模塊通常是函數、過程及子程傳統(tǒng)的面向過程方法中的模塊通常是函數、過程及子程序等,而面向對象方法中的模塊則是類、對象、接口、序等,而面向對象方法中的模塊則是類、對象、接口、構件
4、等。構件等。(1)在面向過程的方法中,數據及在數據上的處理是分離的;在面向過程的方法中,數據及在數據上的處理是分離的;而在面向對象方法中,數據及其上的處理是封裝在一起而在面向對象方法中,數據及其上的處理是封裝在一起的,具有更好的獨立性,也能夠更好地支持復用。的,具有更好的獨立性,也能夠更好地支持復用。 10.1 面向對象設計過程與準則(2) 抽象抽象面向對象方法不僅支持過程抽象,而且支持數據抽象。面向對象方法不僅支持過程抽象,而且支持數據抽象。類實際上就是一種抽象數據類型??梢詫㈩惖某橄蠓譃轭悓嶋H上就是一種抽象數據類型??梢詫㈩惖某橄蠓譃橐?guī)格說明抽象及參數化抽象。規(guī)格說明抽象及參數化抽象。類對
5、外開放的公共接口構成了類的規(guī)格說明,即協(xié)議。類對外開放的公共接口構成了類的規(guī)格說明,即協(xié)議。這種接口規(guī)定了外部可以使用的服務,使用者無需知道這種接口規(guī)定了外部可以使用的服務,使用者無需知道這些服務的具體實現算法。通常將這類抽象稱為規(guī)格說這些服務的具體實現算法。通常將這類抽象稱為規(guī)格說明抽象。明抽象。參數化抽象是指當描述類的規(guī)格說明時并不具體指定所參數化抽象是指當描述類的規(guī)格說明時并不具體指定所要操作的數據類型,而是將數據類型作為參數。要操作的數據類型,而是將數據類型作為參數。 10.1 面向對象設計過程與準則(3) 信息隱藏信息隱藏在面向對象方法中,信息隱藏通過對象的封裝性實現。對在面向對象方
6、法中,信息隱藏通過對象的封裝性實現。對于類的用戶來說,屬性的表示方法和操作的實現算法都應于類的用戶來說,屬性的表示方法和操作的實現算法都應該是隱藏的。該是隱藏的。(4) 弱耦合弱耦合耦合是指一個軟件結構內不同模塊之間互連的緊密程度。耦合是指一個軟件結構內不同模塊之間互連的緊密程度。在面向對象方法中,對象是最基本的模塊,因此,耦合主在面向對象方法中,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關聯(lián)的緊密程度。要指不同對象之間相互關聯(lián)的緊密程度。 10.1 面向對象設計過程與準則(5) 強內聚強內聚 內聚衡量一個模塊內各個元素彼此結合的緊密程度。在面內聚衡量一個模塊內各個元素彼此結合的緊密
7、程度。在面向對象設計中存在以下向對象設計中存在以下3種內聚:種內聚:(1) 服務內聚服務內聚:一個服務應該完成一個且僅完成一個功能。:一個服務應該完成一個且僅完成一個功能。(2) 類內聚類內聚:設計類的原則是,一個類應該只有一個用途,:設計類的原則是,一個類應該只有一個用途,它的屬性和服務應該是高內聚的。類的屬性和服務應該全它的屬性和服務應該是高內聚的。類的屬性和服務應該全都是完成該類對象的任務所必需的,其中不包含無用的屬都是完成該類對象的任務所必需的,其中不包含無用的屬性或服務。如果某個類有多個用途,通常應該把它分解成性或服務。如果某個類有多個用途,通常應該把它分解成多個專用的類。多個專用的
8、類。(3) 一般一般特殊內聚特殊內聚:設計出的一般:設計出的一般特殊結構,應該符合特殊結構,應該符合多數人的概念,更準確地說,這種結構應該是對相應的領多數人的概念,更準確地說,這種結構應該是對相應的領域知識的正確抽取。域知識的正確抽取。 10.1 面向對象設計過程與準則(6) 可重用可重用 軟件重用是提高軟件開發(fā)生產率和目標系統(tǒng)質量軟件重用是提高軟件開發(fā)生產率和目標系統(tǒng)質量的重要途徑。的重要途徑。 重用基本上從設計階段開始。重用有兩方面的含重用基本上從設計階段開始。重用有兩方面的含義:義:一是盡量使用已有的類一是盡量使用已有的類( (包括開發(fā)環(huán)境提供的類庫,及以包括開發(fā)環(huán)境提供的類庫,及以往開
9、發(fā)類似系統(tǒng)時創(chuàng)建的類往開發(fā)類似系統(tǒng)時創(chuàng)建的類) ), 二是如果確實需要創(chuàng)建新類,則在二是如果確實需要創(chuàng)建新類,則在設計這些新類的協(xié)議時設計這些新類的協(xié)議時,應該應該考慮將來的可重復使用性考慮將來的可重復使用性。l體系結構設計描述了建立計算機系統(tǒng)所需的數據結構和程體系結構設計描述了建立計算機系統(tǒng)所需的數據結構和程序構件。一個好的體系結構設計要求軟件模塊的分層及編序構件。一個好的體系結構設計要求軟件模塊的分層及編程標準的執(zhí)行。程標準的執(zhí)行。l在面向對象軟件中,常見的軟件模塊有在面向對象軟件中,常見的軟件模塊有類類、接口接口、包包和和構構件件。l在在設計階段設計階段我們往往我們往往關注類、接口和包關
10、注類、接口和包,在,在實現階段實現階段關注關注構件構件,而在,而在部署階段部署階段則關注則關注構件的部署構件的部署,也就是將構件部,也就是將構件部署在哪些結點上。署在哪些結點上。10.2 體系結構模塊及依賴性1. 類類 在面向對象的程序設計中,在面向對象的程序設計中,類和接口是程序的基本組成單類和接口是程序的基本組成單元元。 一個典型程序需要一個典型程序需要界面類界面類專門負責表示用戶界面信息,專門負責表示用戶界面信息,需要需要數據庫類數據庫類負責與數據庫進行交互,需要有負責與數據庫進行交互,需要有業(yè)務邏輯類業(yè)務邏輯類負責算法計算等。負責算法計算等。 在計算機程序中,要設計和實現的所有類都具有
11、唯一的在計算機程序中,要設計和實現的所有類都具有唯一的名字,在不同的階段或從不同的角度可以將它們稱為名字,在不同的階段或從不同的角度可以將它們稱為設計設計類類、實現類實現類、系統(tǒng)類系統(tǒng)類、應用類應用類等。等。 類及其依賴性類及其依賴性2繼承依賴性繼承依賴性 依賴性管理中最棘手的問題是由于繼承所引起的依賴依賴性管理中最棘手的問題是由于繼承所引起的依賴性。性。繼承是一種在父類和子類之間共享屬性和行為的方式繼承是一種在父類和子類之間共享屬性和行為的方式,所以運行時可以用一個子類對象代替其父類對象。程序中凡所以運行時可以用一個子類對象代替其父類對象。程序中凡是使用父類對象的地方,都可以用子類對象來代替
12、。一個子是使用父類對象的地方,都可以用子類對象來代替。一個子類對象是一種特殊的父類對象,它繼承父類的所有特征,同類對象是一種特殊的父類對象,它繼承父類的所有特征,同時它又可以覆蓋父類的方法,從而改變從父類繼承的一些特時它又可以覆蓋父類的方法,從而改變從父類繼承的一些特征,并可以在子類中增加一些新的功能。這樣,從客戶的角征,并可以在子類中增加一些新的功能。這樣,從客戶的角度看,在繼承樹中為請求提供服務的特定對象不同,系統(tǒng)的度看,在繼承樹中為請求提供服務的特定對象不同,系統(tǒng)的運行行為可能會有所不同。運行行為可能會有所不同。類及其依賴性類及其依賴性(1)多態(tài)繼承)多態(tài)繼承 根據為請求提供服務的對象不
13、同可以得到不同的行為,這根據為請求提供服務的對象不同可以得到不同的行為,這種現象稱為種現象稱為多態(tài)多態(tài)。在運行時對類進行實例化,并調用與實例。在運行時對類進行實例化,并調用與實例化對象相應的方法,稱為化對象相應的方法,稱為動態(tài)綁定動態(tài)綁定、后期綁定或運行時綁、后期綁定或運行時綁定。相應地,如果方法的調用是在編譯時確定的,則稱為是定。相應地,如果方法的調用是在編譯時確定的,則稱為是靜態(tài)綁定靜態(tài)綁定、前期綁定或編譯時綁定。、前期綁定或編譯時綁定。 多態(tài)并不是伴隨著繼承而出現。如果在子類中不覆蓋父類多態(tài)并不是伴隨著繼承而出現。如果在子類中不覆蓋父類中的任何方法,就不會產生多態(tài)行為。中的任何方法,就不
14、會產生多態(tài)行為。 很明顯,繼承會帶來類和方法之間的依賴性。繼承帶來的很明顯,繼承會帶來類和方法之間的依賴性。繼承帶來的依賴性有依賴性有編譯時繼承依賴性編譯時繼承依賴性和和運行時繼承依賴性運行時繼承依賴性。 類及其依賴性類及其依賴性類及其依賴性類及其依賴性 編譯時繼承依賴性編譯時繼承依賴性 右圖所示的例子說明了一棵樹中類之間的編右圖所示的例子說明了一棵樹中類之間的編譯時依賴性。在這個例子中,譯時依賴性。在這個例子中,B繼承繼承A,但沒有,但沒有覆蓋覆蓋A中的方法中的方法do1( )。因此,。因此,B和和A之間沒有之間沒有運行時繼承依賴性。也就是說,由于編譯時依運行時繼承依賴性。也就是說,由于編譯
15、時依賴性的存在,賴性的存在,A中中do1( )方法的任何變化,都會方法的任何變化,都會被被B在編譯時(靜態(tài)地)繼承。在編譯時(靜態(tài)地)繼承。 一般來說,一般來說,所有的繼承都會引入編譯時依賴所有的繼承都會引入編譯時依賴性性。依賴性是。依賴性是可傳遞的可傳遞的,也就是說,如果,也就是說,如果C依賴依賴B,B依賴依賴A,那么,那么C也依賴也依賴A。 運行時繼承依賴性運行時繼承依賴性 下圖舉例說明了在一棵繼承樹中涉及客戶對象訪問類服務的運行時下圖舉例說明了在一棵繼承樹中涉及客戶對象訪問類服務的運行時繼承依賴性。圖中類繼承依賴性。圖中類B的的do1( )方法是從父類方法是從父類A繼承來的,因此繼承來的
16、,因此Test與與B沒有運行時繼承依賴性,只是一個靜態(tài)依賴性,通過從沒有運行時繼承依賴性,只是一個靜態(tài)依賴性,通過從Test到到A的關的關聯(lián)來表明。如果在聯(lián)來表明。如果在doTest方法中調用的是方法中調用的是do2( )方法,或者在方法,或者在B中覆蓋中覆蓋了了A的的do1( )方法,則從方法,則從Test到到A和和B就會存在運行時依賴性。就會存在運行時依賴性。 類及其依賴性類及其依賴性(2)無多態(tài)繼承)無多態(tài)繼承 使用繼承最簡單的方式是子類不覆蓋從父類繼承來的方法,使用繼承最簡單的方式是子類不覆蓋從父類繼承來的方法,這樣就不存在多態(tài)性繼承問題。雖然無多態(tài)的繼承有時并不這樣就不存在多態(tài)性繼承
17、問題。雖然無多態(tài)的繼承有時并不是十分有用,但理解和管理起來是最容易的。是十分有用,但理解和管理起來是最容易的。(3)擴展繼承和約束繼承)擴展繼承和約束繼承 擴展繼承擴展繼承是指子類繼承父類的屬性,并且提供是指子類繼承父類的屬性,并且提供額外屬性額外屬性來來增強類定義。子類是父類的一種,如果子類覆蓋了父類的方增強類定義。子類是父類的一種,如果子類覆蓋了父類的方法,那么被覆蓋的方法應該實現該方法的定義,并且能夠在法,那么被覆蓋的方法應該實現該方法的定義,并且能夠在子類的語境中工作。子類的語境中工作。 當一個類覆蓋了繼承來的方法,并對一些繼承來的功能進當一個類覆蓋了繼承來的方法,并對一些繼承來的功能
18、進行了行了限制限制,這時就產生了,這時就產生了約束繼承約束繼承。這時,子類不再是父類。這時,子類不再是父類的一種。有時,限制會造成繼承方法的完全禁止。的一種。有時,限制會造成繼承方法的完全禁止。當方法的當方法的實現是空時實現是空時,就會發(fā)生這種情況。,就會發(fā)生這種情況。類及其依賴性類及其依賴性3交互依賴性交互依賴性 交互依賴性也稱為方法依賴性,是通過消息連接產生的。交互依賴性也稱為方法依賴性,是通過消息連接產生的。如下圖所示。如下圖所示。類及其依賴性類及其依賴性 圖中,圖中,CActioner使用方法使用方法do1( )來發(fā)送一條消息來發(fā)送一條消息do3( )給給EEmployee,因此,因此
19、,do1( )依賴于依賴于do3( )。依賴性向上傳。依賴性向上傳遞給所屬的類,因此,遞給所屬的類,因此,CActioner依賴于依賴于EEmployee。類似。類似地,地,EOutMessage的的do2( )調用調用EEmployee的方法的方法do3( ),因此,因此,EOutMessage依賴于依賴于EEmployee。類及其依賴性類及其依賴性1接口接口 在在UML2.0中,接口是不可直接實例化的特性集合的聲明,中,接口是不可直接實例化的特性集合的聲明,即其即其對象不能直接實例化對象不能直接實例化,需要通過類來實現,實現接口的,需要通過類來實現,實現接口的類需要實現接口中聲明的方法。類
20、需要實現接口中聲明的方法。UML2.0對流行編程語言中對流行編程語言中的接口概念進行了擴展。接口中不僅可以聲明操作,還可以的接口概念進行了擴展。接口中不僅可以聲明操作,還可以聲明屬性。聲明屬性。 由于允許在接口中存在屬性,因此,在接口之間或者接口由于允許在接口中存在屬性,因此,在接口之間或者接口和類之間可能會產生關聯(lián)。用另一個接口或類作為屬性的類和類之間可能會產生關聯(lián)。用另一個接口或類作為屬性的類型可以表示關聯(lián)。型可以表示關聯(lián)。接口及其依賴性接口及其依賴性在在UML2.0中,可以通過關聯(lián)實現從接口到類的導航。但在中,可以通過關聯(lián)實現從接口到類的導航。但在Java中是無法實現的,因為中是無法實現
21、的,因為Java規(guī)定接口中的數據元素必規(guī)定接口中的數據元素必須是常量。須是常量。接口與抽象類有相似之處,抽象類是至少包含一個沒有實現接口與抽象類有相似之處,抽象類是至少包含一個沒有實現的方法的類,如果在一個抽象類中所有的方法都沒有實現,的方法的類,如果在一個抽象類中所有的方法都沒有實現,則稱其為則稱其為純抽象類純抽象類,從這一點上,接口和純抽象類似乎沒有,從這一點上,接口和純抽象類似乎沒有區(qū)別。但實際上,接口和抽象類還是有著本質的區(qū)別。在只區(qū)別。但實際上,接口和抽象類還是有著本質的區(qū)別。在只支持單繼承的語言中,支持單繼承的語言中,一個類只能有一個直接父類一個類只能有一個直接父類,但是卻但是卻可
22、以實現多個接口??梢詫崿F多個接口。接口及其依賴性接口及其依賴性2實現依賴性實現依賴性 一個類可以實現多個接口,由類實現的接口集合稱為該一個類可以實現多個接口,由類實現的接口集合稱為該類的類的供給接口供給接口。在。在UML2.0中,將一個類和該類實現的接口中,將一個類和該類實現的接口之間的依賴性稱為之間的依賴性稱為實現依賴性實現依賴性。 右圖所示為實現依賴性的右圖所示為實現依賴性的UML符號,在箭頭末端的類符號,在箭頭末端的類實現了箭頭所指向的接口。實現了箭頭所指向的接口。從圖中可以看到,從圖中可以看到,Class1實實現了現了Interface1接口和接口和Interface2接口,而接口,而
23、Class2只實現了只實現了Interface2接口。接口。接口及其依賴性接口及其依賴性3使用依賴性使用依賴性 一個接口可以為其他類或接口提供服務,同時也可能需要一個接口可以為其他類或接口提供服務,同時也可能需要其他接口的服務。一個接口所需要的其他接口所提供的服務其他接口的服務。一個接口所需要的其他接口所提供的服務稱為這個類的稱為這個類的需求接口需求接口。需求接口詳細說明一個類或接口需。需求接口詳細說明一個類或接口需要的服務,從而可以為其客戶提供服務。在要的服務,從而可以為其客戶提供服務。在UML2.0中,通中,通過類(接口)和它所需接口之間的依賴關系來說明需求接口,過類(接口)和它所需接口之
24、間的依賴關系來說明需求接口,這稱為這稱為使用依賴性使用依賴性。 下圖所示為使用依賴性的下圖所示為使用依賴性的UML符號,在箭頭尾部的類或符號,在箭頭尾部的類或接口使用在箭頭頭部的接口。接口使用在箭頭頭部的接口。Class1使用使用Interface1,Interface1使用使用Interface2。在。在Java語言中,不允許接口之語言中,不允許接口之間的使用,只允許接口間的擴展繼承。間的使用,只允許接口間的擴展繼承。 接口及其依賴性接口及其依賴性 Class1包含方法包含方法do1( ),而,而do1( )調用操作調用操作op1( )。在靜。在靜態(tài)代碼中,并不清楚需求接口的哪個實現提供了所
25、需的服務,態(tài)代碼中,并不清楚需求接口的哪個實現提供了所需的服務,可以是實現可以是實現Interface1的任何一個類實例。當的任何一個類實例。當Class1的一個的一個執(zhí)行實例設置數據成員執(zhí)行實例設置數據成員myInterface的值時,具體實例才能的值時,具體實例才能確定,從而可以引用具體類的一個具體對象。確定,從而可以引用具體類的一個具體對象。 接口及其依賴性接口及其依賴性1. 包包 包包(package)又可稱為層或子系統(tǒng),是表示組織類的一)又可稱為層或子系統(tǒng),是表示組織類的一種方式,用于劃分應用程序的邏輯模型。包是高度相關的類種方式,用于劃分應用程序的邏輯模型。包是高度相關的類的聚合,
26、這些類本身是內聚的,但相對于其他聚合來說又是的聚合,這些類本身是內聚的,但相對于其他聚合來說又是松散耦合的。松散耦合的。 包可以嵌套包可以嵌套。外層包可以直接訪問包括在它的嵌套包中的。外層包可以直接訪問包括在它的嵌套包中的任何類。任何類。包還可以導入其他包包還可以導入其他包,例如,在包,例如,在包A中導入了包中導入了包B,這意味著包這意味著包A或者包或者包A的元素可以引用包的元素可以引用包B或者包或者包B的元素。的元素。因此,雖然一個類只屬于一個包,但是它可以被導入其他包。因此,雖然一個類只屬于一個包,但是它可以被導入其他包。包的導入操作會引入包之間的依賴性以及它們的元素之間的包的導入操作會引
27、入包之間的依賴性以及它們的元素之間的依賴性。依賴性。 包及其依賴性包及其依賴性 下圖為下圖為UML包的例子。一個包可以不暴露任何成員,也包的例子。一個包可以不暴露任何成員,也可以明確標明它所包含的成員,或者用符號可以明確標明它所包含的成員,或者用符號“ ”來表示。來表示。圖中,包圖中,包 B擁有類擁有類 X,包,包C擁有包擁有包 D,包,包E擁有包擁有包 F,包,包 F擁有類擁有類Y和類和類Z。包及其依賴性包及其依賴性 如果包如果包A的一些成員在某種程度上引用了包的一些成員在某種程度上引用了包B的的某些成員(包某些成員(包A導入了包導入了包B的一些成員),這隱的一些成員),這隱含著含著雙重含義
28、雙重含義。 包包B的變化可能會影響包的變化可能會影響包A,通常需要對包,通常需要對包A重重新進行編譯和測試。新進行編譯和測試。 包包A只能和包只能和包B一起使用。一起使用。包及其依賴性包及其依賴性包及其依賴性包及其依賴性2包依賴性包依賴性 本質上,本質上,兩個包之間的依賴性來自于兩個包中類之間的兩個包之間的依賴性來自于兩個包中類之間的依賴性依賴性。類之間的循環(huán)依賴性是個特別棘手的問題,好在。類之間的循環(huán)依賴性是個特別棘手的問題,好在大多數情況下可以通過重新設計避免循環(huán)依賴性。大多數情況下可以通過重新設計避免循環(huán)依賴性。 通過在上圖中通過在上圖中增加新包可以消除包之間的循環(huán)依賴性增加新包可以消除
29、包之間的循環(huán)依賴性。方法為:在第方法為:在第1個例子中將包個例子中將包B依賴的包依賴的包A的元素從包的元素從包A中分中分離出來,組成包離出來,組成包C,使得包,使得包B不再依賴包不再依賴包A,而是依賴包,而是依賴包C;包及其依賴性包及其依賴性在第在第2個例子中,將包個例子中,將包F所依賴的包所依賴的包D中的元素從包中的元素從包D中分離中分離出來,組成包出來,組成包G。消除循環(huán)依賴性后如下圖所示。消除循環(huán)依賴性后如下圖所示。包及其依賴性包及其依賴性 在面向對象的軟件工程環(huán)境中,面向對象技術已達到了類在面向對象的軟件工程環(huán)境中,面向對象技術已達到了類級復用,而構件級復用則是比類級復用更高一級的復用
30、,它級復用,而構件級復用則是比類級復用更高一級的復用,它是對是對一組類的組合一組類的組合進行封裝(當然,在某些情況下,一個構進行封裝(當然,在某些情況下,一個構件可能只包含一個單獨的類),并代表完成一個或多個功能件可能只包含一個單獨的類),并代表完成一個或多個功能的特定服務,也為用戶提供了多個接口。的特定服務,也為用戶提供了多個接口。 一個構件可以是一個編譯的類,可以是一組編譯的類,也一個構件可以是一個編譯的類,可以是一組編譯的類,也可以是其他獨立的部署單元可以是其他獨立的部署單元,如一個文本文件、一個圖片、,如一個文本文件、一個圖片、一個數據文件、一個腳本等。一個數據文件、一個腳本等。構件及
31、其依賴性構件及其依賴性 從軟件復用的角度,從軟件復用的角度,構件構件是指在軟件開發(fā)過程中可以重是指在軟件開發(fā)過程中可以重復使用的軟件元素,這些軟件元素包括復使用的軟件元素,這些軟件元素包括程序代碼、測試用程序代碼、測試用例、設計文檔、設計過程、需求分析文檔、甚至領域知例、設計文檔、設計過程、需求分析文檔、甚至領域知識識。可復用的軟件元素越大,我們稱復用的粒度就越大。可復用的軟件元素越大,我們稱復用的粒度就越大。為了能夠支持復用,軟件構件應具有以下特性:為了能夠支持復用,軟件構件應具有以下特性:(1)獨立部署單元)獨立部署單元:一個構件是獨立部署的,意味著它必:一個構件是獨立部署的,意味著它必
32、須能與它所在的環(huán)境及其他構件完全分離。須能與它所在的環(huán)境及其他構件完全分離。(2)作為第三方的組裝單元:)作為第三方的組裝單元:構件必須具備很好的內聚構件必須具備很好的內聚 性,必須封裝它的實現,并且只通過良好定義的接口性,必須封裝它的實現,并且只通過良好定義的接口 與外部環(huán)境進行交互。與外部環(huán)境進行交互。 構件及其依賴性構件及其依賴性(3)一個構件不能有任何(外部的)可見狀態(tài))一個構件不能有任何(外部的)可見狀態(tài):即構件不:即構件不能與自己的拷貝有所區(qū)別。能與自己的拷貝有所區(qū)別。 根據上述特性可以得出以下的定義:根據上述特性可以得出以下的定義: “軟件構件是一種組裝單元,它具有規(guī)范的接口規(guī)格
33、說軟件構件是一種組裝單元,它具有規(guī)范的接口規(guī)格說明明和顯示的語境依賴。軟件構件可以被獨立部署,并由第三和顯示的語境依賴。軟件構件可以被獨立部署,并由第三方任意組裝。方任意組裝?!?OMG UML規(guī)范中將構件定義為規(guī)范中將構件定義為“系統(tǒng)中某一定型化的、系統(tǒng)中某一定型化的、可配置的和可替換的部件,該部件封裝了實現并暴露一系可配置的和可替換的部件,該部件封裝了實現并暴露一系列接口列接口”。構件及其依賴性構件及其依賴性構件及其依賴性構件及其依賴性 構件圖構件圖表示構件之間的依賴關系,如下圖所示。每個構表示構件之間的依賴關系,如下圖所示。每個構件實現(支持)一些接口,并使用另一些接口。件實現(支持)一
34、些接口,并使用另一些接口。 構件及其依賴性構件及其依賴性構件與類的區(qū)別構件與類的區(qū)別是雙重的:是雙重的: 首先,構件是部署在某個計算機結點上的物理抽象。類表首先,構件是部署在某個計算機結點上的物理抽象。類表示邏輯事務,為了起到物理抽象的作用,不得不將其實現為示邏輯事務,為了起到物理抽象的作用,不得不將其實現為構件。構件。 其次,構件只顯示它所包含的類的某些接口,很多其他接其次,構件只顯示它所包含的類的某些接口,很多其他接口都被封裝在構件中口都被封裝在構件中它們只被協(xié)作的類在內部使用,對它們只被協(xié)作的類在內部使用,對于其他構件是不可見的。于其他構件是不可見的。 10.3 系統(tǒng)分解 子系統(tǒng)和類子系
35、統(tǒng)和類在大型和復雜的軟件系統(tǒng)情形,首先根據需求的功能模型在大型和復雜的軟件系統(tǒng)情形,首先根據需求的功能模型(用例模型),將系統(tǒng)分解成若干個部分,每一部分又可(用例模型),將系統(tǒng)分解成若干個部分,每一部分又可分解為若干子系統(tǒng)或類,每個子系統(tǒng)還可以由更小的子系分解為若干子系統(tǒng)或類,每個子系統(tǒng)還可以由更小的子系統(tǒng)或類組成,如圖所示。統(tǒng)或類組成,如圖所示。 系統(tǒng)結構的類圖系統(tǒng)結構的類圖 10.3 系統(tǒng)分解 服務和子系統(tǒng)接口服務和子系統(tǒng)接口服務是一組有公共目的的相關操作。而子系統(tǒng)則通過給其服務是一組有公共目的的相關操作。而子系統(tǒng)則通過給其他子系統(tǒng)提供服務來發(fā)揮自己的能力。與類不同的是,子他子系統(tǒng)提供服務
36、來發(fā)揮自己的能力。與類不同的是,子系統(tǒng)不要求其他子系統(tǒng)為它提供服務。系統(tǒng)不要求其他子系統(tǒng)為它提供服務。供其他子系統(tǒng)調用的某個子系統(tǒng)的操作集合就是子系統(tǒng)的供其他子系統(tǒng)調用的某個子系統(tǒng)的操作集合就是子系統(tǒng)的接口。接口。子系統(tǒng)的接口包括操作名、操作參數類型及返回值。子系統(tǒng)的接口包括操作名、操作參數類型及返回值。面向對象的系統(tǒng)設計主要關注每個子系統(tǒng)提供服務的定義,面向對象的系統(tǒng)設計主要關注每個子系統(tǒng)提供服務的定義,即枚舉所有的操作、操作參數和行為。即枚舉所有的操作、操作參數和行為。 10.3 系統(tǒng)分解 服務和子系統(tǒng)接口服務和子系統(tǒng)接口子系統(tǒng)分層的目的是建立系統(tǒng)的層次結構。每一層僅依賴子系統(tǒng)分層的目的是
37、建立系統(tǒng)的層次結構。每一層僅依賴于它下一層提供的服務,而對它的上一層可以一無所知。于它下一層提供的服務,而對它的上一層可以一無所知。下圖給出了一個三層的系統(tǒng)結構的示例。下圖給出了一個三層的系統(tǒng)結構的示例。10.3 系統(tǒng)分解 服務和子系統(tǒng)接口服務和子系統(tǒng)接口如果在一個系統(tǒng)的層次結構中,每如果在一個系統(tǒng)的層次結構中,每一層只能訪問與其相鄰的下一層,一層只能訪問與其相鄰的下一層,則稱之為封閉體系結構;如果每一則稱之為封閉體系結構;如果每一層還可訪問比其相鄰下一層更低的層還可訪問比其相鄰下一層更低的層次,則稱之為開放體系結構。層次,則稱之為開放體系結構。典型的封閉體系結構的例子就是開典型的封閉體系結構
38、的例子就是開放系統(tǒng)互聯(lián)參考模型(放系統(tǒng)互聯(lián)參考模型(OSIOSI模型),模型),如圖所示。如圖所示。 10.3 系統(tǒng)分解 服務和子系統(tǒng)接口服務和子系統(tǒng)接口開放體系結構的一個例子是開放體系結構的一個例子是JavaJava的的SwingSwing用戶接口包。它用戶接口包。它允許繞過高層直接訪問低層接口以克服性能瓶頸。如圖所允許繞過高層直接訪問低層接口以克服性能瓶頸。如圖所示。示。10.3 系統(tǒng)分解 Coad&Yourdon的面向對象設計模型的面向對象設計模型Coad & YourdonCoad & Yourdon基于基于MVCMVC(Model-View-Controlle
39、rModel-View-Controller)模型,)模型,在邏輯上將系統(tǒng)劃分為在邏輯上將系統(tǒng)劃分為4 4個部分,分別是問題域部分、人個部分,分別是問題域部分、人機交互部分、任務管理部分及數據管理部分,每一部分又機交互部分、任務管理部分及數據管理部分,每一部分又可分為若干子系統(tǒng)。可分為若干子系統(tǒng)。 Coad Coad 與與 Yourdon Yourdon 在設計階段中繼續(xù)采用了分析階段中提在設計階段中繼續(xù)采用了分析階段中提到的到的5 5個層次,用于建立系統(tǒng)的個層次,用于建立系統(tǒng)的4 4個組成成分。每一個子系個組成成分。每一個子系統(tǒng)都由主題、類統(tǒng)都由主題、類-&-&-對象、結構、
40、屬性和服務對象、結構、屬性和服務5 5個層次組成。個層次組成。這這5 5個層次可以被當作整個模型的水平切片。個層次可以被當作整個模型的水平切片。 10.3 系統(tǒng)分解 典型的面向對象設計模型典型的面向對象設計模型 10.3 系統(tǒng)分解 子系統(tǒng)之間的兩種交互方式子系統(tǒng)之間的兩種交互方式客戶客戶- -供應商關系供應商關系:在這種關系中,客戶子系統(tǒng)調用供應:在這種關系中,客戶子系統(tǒng)調用供應商子系統(tǒng),后者完成某些服務工作并返回結果。使用這種商子系統(tǒng),后者完成某些服務工作并返回結果。使用這種交互方案,作為客戶的子系統(tǒng)必須了解作為供應商的子系交互方案,作為客戶的子系統(tǒng)必須了解作為供應商的子系統(tǒng)的接口,而后者卻
41、無須了解前者的接口。統(tǒng)的接口,而后者卻無須了解前者的接口。平等伙伴關系平等伙伴關系:在這種關系中,每個子系統(tǒng)都可能調用其:在這種關系中,每個子系統(tǒng)都可能調用其他子系統(tǒng),因此每個子系統(tǒng)都必須了解其他子系統(tǒng)的接口。他子系統(tǒng),因此每個子系統(tǒng)都必須了解其他子系統(tǒng)的接口。與第一種方案相比,這種方案中,子系統(tǒng)間的交互更加復與第一種方案相比,這種方案中,子系統(tǒng)間的交互更加復雜。雜。10.3 系統(tǒng)分解 組織系統(tǒng)的兩種方案組織系統(tǒng)的兩種方案分層組織分層組織:這種組織方案把軟件系統(tǒng)組織成一個層次系統(tǒng),:這種組織方案把軟件系統(tǒng)組織成一個層次系統(tǒng),每層是一個子系統(tǒng)。上層在下層的基礎上建立,下層為實每層是一個子系統(tǒng)。上
42、層在下層的基礎上建立,下層為實現上層功能而提供必要的服務。每一層內所包含的對象,現上層功能而提供必要的服務。每一層內所包含的對象,彼此間相互獨立,而處于不同層次上的對象,彼此間往往彼此間相互獨立,而處于不同層次上的對象,彼此間往往有關聯(lián)。有關聯(lián)。 塊狀組織塊狀組織:這種組織方案把軟件系統(tǒng)垂直地分解成若干個:這種組織方案把軟件系統(tǒng)垂直地分解成若干個相對獨立的、弱耦合的子系統(tǒng),一個子系統(tǒng)相當于一塊,相對獨立的、弱耦合的子系統(tǒng),一個子系統(tǒng)相當于一塊,每塊提供一種類型的服務。每塊提供一種類型的服務。 混合使用層次結構和塊狀結構,可以成功地由多混合使用層次結構和塊狀結構,可以成功地由多個子系統(tǒng)組成一個完
43、整的軟件系統(tǒng)。個子系統(tǒng)組成一個完整的軟件系統(tǒng)。 10.4 問題域部分的設計 典型的面向對象系統(tǒng)一般由三層組成,即數據庫層、業(yè)務典型的面向對象系統(tǒng)一般由三層組成,即數據庫層、業(yè)務邏輯層及用戶界面層。那么,在這三層中,首先從哪一層邏輯層及用戶界面層。那么,在這三層中,首先從哪一層開始設計呢?開始設計呢? 實際上,面向對象的設計也是以面向對象分析的模型為基實際上,面向對象的設計也是以面向對象分析的模型為基礎的。礎的。 面向對象的分析模型包括有用例圖、類圖、順序圖和包圖,面向對象的分析模型包括有用例圖、類圖、順序圖和包圖,主要是對問題領域進行描述,基本上不考慮技術實現,當主要是對問題領域進行描述,基本
44、上不考慮技術實現,當然也不考慮數據庫層和用戶界面層。然也不考慮數據庫層和用戶界面層。 面向對象分析所得到的問題域模型可以直接應用于系統(tǒng)的面向對象分析所得到的問題域模型可以直接應用于系統(tǒng)的問題域部分的設計。問題域部分的設計。 所以,面向對象設計應該從問題域部分的設計開始,也就所以,面向對象設計應該從問題域部分的設計開始,也就是三層結構的中間層是三層結構的中間層應用邏輯層。應用邏輯層。10.4 問題域部分的設計在面向對象設計過程中,可能對面向對象分析在面向對象設計過程中,可能對面向對象分析所得出的問題域模型做以下方面的補充或調整。所得出的問題域模型做以下方面的補充或調整。調整需求。有兩種情況會導致
45、修改通過面向對調整需求。有兩種情況會導致修改通過面向對象分析所確定的系統(tǒng)需求:象分析所確定的系統(tǒng)需求:一是用戶需求或外部環(huán)境發(fā)生變化;一是用戶需求或外部環(huán)境發(fā)生變化;(1)二是分析員對問題理解不透徹,導致分析模型不能完整、二是分析員對問題理解不透徹,導致分析模型不能完整、準確地反映用戶的真實需求。準確地反映用戶的真實需求。10.4 問題域部分的設計(2) 復用已有的類復用已有的類從類庫選擇已有的類,從供應商那里購買商業(yè)外購構件,從類庫選擇已有的類,從供應商那里購買商業(yè)外購構件,從網絡、組織、小組或個人那里搜集適用的遺留軟構件,從網絡、組織、小組或個人那里搜集適用的遺留軟構件,把它們增加到問題域
46、部分的設計中去。把它們增加到問題域部分的設計中去。在被復用的已有類和問題域類之間添加泛化(一般化在被復用的已有類和問題域類之間添加泛化(一般化特殊特殊化)關系,繼承被復用類或構件屬性和方法?;╆P系,繼承被復用類或構件屬性和方法。標出在問題域類中因繼承被復用的已有類或構件而成為多標出在問題域類中因繼承被復用的已有類或構件而成為多余的屬性和服務。余的屬性和服務。修改與問題域類相關的關聯(lián)。修改與問題域類相關的關聯(lián)。 10.4 問題域部分的設計(3) 把問題域類組合在一起把問題域類組合在一起在進行面向對象設計時,通常需要先引入一個類,以便將在進行面向對象設計時,通常需要先引入一個類,以便將問題域專用
47、的類組合在一起,它起到問題域專用的類組合在一起,它起到“根根”類的作用,將類的作用,將全部下層的類組合在一起。全部下層的類組合在一起。當沒有一種更滿意的組合機制可用時,可以從類庫中引進當沒有一種更滿意的組合機制可用時,可以從類庫中引進一個根類,作為包容類,把所有與問題領域有關的類關聯(lián)一個根類,作為包容類,把所有與問題領域有關的類關聯(lián)到一起,建立類的層次。到一起,建立類的層次。之后,將同一問題領域的一些類集合起來,存于類庫中。之后,將同一問題領域的一些類集合起來,存于類庫中。10.4 問題域部分的設計(4) 增添泛化類以建立類間的協(xié)議增添泛化類以建立類間的協(xié)議有時某些問題域的類要求一組類似的服務
48、(以及相應的屬有時某些問題域的類要求一組類似的服務(以及相應的屬性)。此時,以這些問題域的類作為特化的類,定義一個性)。此時,以這些問題域的類作為特化的類,定義一個泛化類。泛化類。該泛化類定義了為所有這些特化類共用的一組服務名,作該泛化類定義了為所有這些特化類共用的一組服務名,作為公共的協(xié)議,用來與數據管理或其他外部系統(tǒng)部件通信。為公共的協(xié)議,用來與數據管理或其他外部系統(tǒng)部件通信。這些服務都是虛函數。在各個特化類中定義其實現。這些服務都是虛函數。在各個特化類中定義其實現。10.4 問題域部分的設計(5) 調整繼承的支持級別調整繼承的支持級別如果在分析模型中一個泛化關系中的特化類繼承了多個類如果
49、在分析模型中一個泛化關系中的特化類繼承了多個類的屬性或服務,就產生了多繼承關系,如圖所示。的屬性或服務,就產生了多繼承關系,如圖所示。 10.4 問題域部分的設計1) 1) 針對單繼承語言的調整。對于只支持單繼承關系的編程針對單繼承語言的調整。對于只支持單繼承關系的編程語言,可以使用兩種方法將多繼承結構轉換為單繼承結構。語言,可以使用兩種方法將多繼承結構轉換為單繼承結構。 把特化類看做是泛化類所扮演的角色,如圖把特化類看做是泛化類所扮演的角色,如圖(a)(a)和圖和圖(b)(b)所所示。示。 10.4 問題域部分的設計 把多繼承的層次結構平鋪為單繼承的層次結構,如圖所把多繼承的層次結構平鋪為單
50、繼承的層次結構,如圖所示。這意味著該泛化關系在設計中就不再那么清晰了。同示。這意味著該泛化關系在設計中就不再那么清晰了。同時某些屬性和服務在特化類中重復出現,造成冗余。時某些屬性和服務在特化類中重復出現,造成冗余。10.4 問題域部分的設計2) 2) 針對無繼承語言的調整。針對無繼承語言的調整。編程語言中的繼承屬性提供了表達問題域的一般化編程語言中的繼承屬性提供了表達問題域的一般化特殊化特殊化語義的語法,它明確地表示了公共屬性和服務,還為通過語義的語法,它明確地表示了公共屬性和服務,還為通過可擴展性而達到可復用性提供了基礎??蓴U展性而達到可復用性提供了基礎。然而,由于開發(fā)組織方面的原因,有些項
51、目最終選擇了不然而,由于開發(fā)組織方面的原因,有些項目最終選擇了不支持繼承性的編程語言。對于一個不支持繼承的編程語言支持繼承性的編程語言。對于一個不支持繼承的編程語言來說,只能將每一個泛化關系的層次展開,成為一組類及來說,只能將每一個泛化關系的層次展開,成為一組類及對象,之后再使用命名慣例將它們組合在一起。對象,之后再使用命名慣例將它們組合在一起。 10.4 問題域部分的設計(6) 改進性能改進性能 提高執(zhí)行效率是系統(tǒng)設計的目標之一。為以提高效率有時提高執(zhí)行效率是系統(tǒng)設計的目標之一。為以提高效率有時必須改變問題域的結構。必須改變問題域的結構。 1) 1) 如果類之間經常需要傳送大量消息,可合并相
52、關的類,如果類之間經常需要傳送大量消息,可合并相關的類,使得通信成為對象內的通信,而不是對象之間的通信,或使得通信成為對象內的通信,而不是對象之間的通信,或者使用全局數據作用域,打破封裝的原則,以減少消息傳者使用全局數據作用域,打破封裝的原則,以減少消息傳遞引起的速度損失。遞引起的速度損失。 2) 2) 增加某些屬性到原來的類中,或增加低層的類,以保增加某些屬性到原來的類中,或增加低層的類,以保存暫時結果,避免每次都要重復計算造成速度損失。存暫時結果,避免每次都要重復計算造成速度損失。10.4 問題域部分的設計(7) 存儲對象存儲對象 通常的作法是,每個對象將自己傳送給數據管理通常的作法是,每
53、個對象將自己傳送給數據管理部分,讓數據管理部分來存儲對象本身。部分,讓數據管理部分來存儲對象本身。10.5 人機交互部分的設計 用戶界面設計步驟用戶界面設計步驟 (1) (1) 從系統(tǒng)的輸入、輸出及與用戶的交互中獲得信息,定義從系統(tǒng)的輸入、輸出及與用戶的交互中獲得信息,定義界面對象和行為(操作)。界面對象和行為(操作)。(2) (2) 定義那些導致用戶界面狀態(tài)發(fā)生變化的事件,對事件建定義那些導致用戶界面狀態(tài)發(fā)生變化的事件,對事件建模。模。(3) (3) 描述最終向用戶展示的每一個界面的狀態(tài),。描述最終向用戶展示的每一個界面的狀態(tài),。(4) (4) 簡要說明用戶如何從界面提供的界面信息來解釋系統(tǒng)
54、狀簡要說明用戶如何從界面提供的界面信息來解釋系統(tǒng)狀態(tài)。態(tài)。WebWeb應用系統(tǒng)的界面設計應用系統(tǒng)的界面設計 界面設計目標界面設計目標 (1) (1) 簡單性:盡量做到適度和簡單,不要在頁面上提供太多簡單性:盡量做到適度和簡單,不要在頁面上提供太多的東西。的東西。(2) (2) 一致性:這一設計目標幾乎適用于設計模型的每一個元一致性:這一設計目標幾乎適用于設計模型的每一個元素。素。 (3) (3) 確定性:確定性:WebWeb應用系統(tǒng)的美學、界面和導航設計必須與應用系統(tǒng)的美學、界面和導航設計必須與將要構造的應用系統(tǒng)所處的領域保持一致。將要構造的應用系統(tǒng)所處的領域保持一致。 (4) (4) 健壯性
55、:在已經建立的確定性的基礎上,健壯性:在已經建立的確定性的基礎上,WebWeb應用系統(tǒng)應用系統(tǒng)通常會給用戶明確的通常會給用戶明確的“承諾承諾”。 WebWeb應用系統(tǒng)的界面設計應用系統(tǒng)的界面設計 界面設計目標界面設計目標 (5) (5) 導航性:我們已經在前面提及了導航應該簡單和一致,導航性:我們已經在前面提及了導航應該簡單和一致,也應該以直觀的和可預測的方式來設計。也就是說,用戶也應該以直觀的和可預測的方式來設計。也就是說,用戶不必搜索導航鏈接和幫助就知道如何使用不必搜索導航鏈接和幫助就知道如何使用WebWeb應用系統(tǒng)。應用系統(tǒng)。(6) (6) 視覺吸引:在所有類型的軟件中,視覺吸引:在所有
56、類型的軟件中,WebWeb應用系統(tǒng)毫無疑應用系統(tǒng)毫無疑問是最具有視覺效果的、最生動的、也是最具有審美感的。問是最具有視覺效果的、最生動的、也是最具有審美感的。 (7) (7) 兼容性:兼容性:WebWeb應用系統(tǒng)會應用于不同的環(huán)境應用系統(tǒng)會應用于不同的環(huán)境( (例如,不同例如,不同的硬件、的硬件、InternetInternet連接類型、操作系統(tǒng)、瀏覽器連接類型、操作系統(tǒng)、瀏覽器) ),并且,并且必須互相兼容。必須互相兼容。WebWeb應用系統(tǒng)的界面設計應用系統(tǒng)的界面設計 界面設計工作流界面設計工作流 (1) (1) 回顧那些在分析模型中的信息,并根據需要進行優(yōu)化?;仡櫮切┰诜治瞿P椭械男畔?,
57、并根據需要進行優(yōu)化。(2) (2) 開發(fā)開發(fā)WebWeb應用系統(tǒng)界面布局的草圖。應用系統(tǒng)界面布局的草圖。 (3) (3) 將用戶目標映射到特定的界面行為。將用戶目標映射到特定的界面行為。 (4) (4) 定義與每個行為相關的一組用戶任務。定義與每個行為相關的一組用戶任務。 (5) (5) 為每個界面行為設計情節(jié)串聯(lián)圖板屏像。為每個界面行為設計情節(jié)串聯(lián)圖板屏像。(6) (6) 利用從美學設計中的輸入來優(yōu)化界面布局和情節(jié)串聯(lián)圖利用從美學設計中的輸入來優(yōu)化界面布局和情節(jié)串聯(lián)圖板。板。 WebWeb應用系統(tǒng)的界面設計應用系統(tǒng)的界面設計 界面設計工作流界面設計工作流 (7) (7) 明確實現界面功能的界
58、面對象。明確實現界面功能的界面對象。 (8) (8) 開發(fā)用戶與界面交互的過程表示。開發(fā)用戶與界面交互的過程表示。 (9) (9) 開發(fā)界面的行為表示法。開發(fā)界面的行為表示法。 (10) (10) 描述每種狀態(tài)的界面布局。描述每種狀態(tài)的界面布局。 (11) (11) 優(yōu)化和評審界面設計模型。優(yōu)化和評審界面設計模型。 10.6 任務管理部分的設計 任務管理主要包括任務的選擇和調整。常見的任任務管理主要包括任務的選擇和調整。常見的任務有事件驅動型任務、時鐘驅動型任務、優(yōu)先任務有事件驅動型任務、時鐘驅動型任務、優(yōu)先任務、關鍵任務和協(xié)調任務等。務、關鍵任務和協(xié)調任務等。 設計任務管理子系統(tǒng)時,需要確定
59、各類任務,并設計任務管理子系統(tǒng)時,需要確定各類任務,并將任務分配給適當的硬件或軟件去執(zhí)行。將任務分配給適當的硬件或軟件去執(zhí)行。10.6 任務管理部分的設計1. 識別事件驅動任務識別事件驅動任務有些任務是事件驅動的,這些任務可能是負責與設備、其有些任務是事件驅動的,這些任務可能是負責與設備、其他處理機或其他系統(tǒng)通信的。他處理機或其他系統(tǒng)通信的。這類任務可以設計成由一個事件來觸發(fā),該事件常常針對這類任務可以設計成由一個事件來觸發(fā),該事件常常針對一些數據的到達發(fā)出信號。一些數據的到達發(fā)出信號。數據可能來自數據行或者來自另一個任務寫入的數據緩沖數據可能來自數據行或者來自另一個任務寫入的數據緩沖區(qū)。區(qū)。
60、10.6 任務管理部分的設計(1) 識別事件驅動任務識別事件驅動任務當系統(tǒng)運行時,這類任務的工作過程如下:當系統(tǒng)運行時,這類任務的工作過程如下:任務處于睡眠狀態(tài),等待來自數據行或其他數據源的中斷;任務處于睡眠狀態(tài),等待來自數據行或其他數據源的中斷;一旦接收到中斷就喚醒該任務,接收數據并將數據放入內一旦接收到中斷就喚醒該任務,接收數據并將數據放入內存緩沖區(qū)或其他目的地,通知需要知道這件事的對象,然存緩沖區(qū)或其他目的地,通知需要知道這件事的對象,然后該任務又回到睡眠狀態(tài)。后該任務又回到睡眠狀態(tài)。 10.6 任務管理部分的設計(2) 識別時鐘驅動任務識別時鐘驅動任務以固定的時間間隔激發(fā)這種事件,以執(zhí)行某些處理。某些以固定的時間間隔激發(fā)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版模具維修改型及知識產權保護合同3篇
- 二零二五版金融控股公司首席風險官(CRO)合同3篇
- 2025年度寧波高端住宅項目購房合同范本4篇
- 2025年度特色民宿搭棚建設合同4篇
- 2025年度外墻涂料專業(yè)承包及售后服務合同4篇
- 2025年度農藥產品質量檢測與認證服務合同6篇
- 2025版爬架租賃與施工安全監(jiān)督合同4篇
- 2025版戶外廣告位短期租賃及宣傳推廣合同4篇
- 2025年度洗衣機品牌授權合作合同范本下載3篇
- 二零二五年度戶外廣告牌門窗安裝及廣告發(fā)布合同3篇
- 鋪大棚膜合同模板
- 長亭送別完整版本
- 2024年英語高考全國各地完形填空試題及解析
- 智能養(yǎng)老院視頻監(jiān)控技術方案
- 你比我猜題庫課件
- 無人駕駛航空器安全操作理論復習測試附答案
- 建筑工地春節(jié)留守人員安全技術交底
- 默納克-NICE1000技術交流-V1.0
- 蝴蝶蘭的簡介
- 老年人心理健康量表(含評分)
- 《小兒靜脈輸液速度》課件
評論
0/150
提交評論