官术网_书友最值得收藏!

4.1 類圖的概念

構(gòu)建面向?qū)ο竽P偷幕A(chǔ)是類、對(duì)象以及它們之間的關(guān)系,可以在不同類型的系統(tǒng)(例如商務(wù)軟件、嵌入式系統(tǒng)和分布式系統(tǒng)等)中應(yīng)用面向?qū)ο蠹夹g(shù)。不同系統(tǒng)中所描述的類是各種各樣的,例如,在某個(gè)商務(wù)信息系統(tǒng)中,包含的類可以是顧客、協(xié)議書、發(fā)票、債務(wù)等;在某個(gè)工程技術(shù)系統(tǒng)中,包含的類可以有傳感器、顯示器、I/O卡、發(fā)動(dòng)機(jī)等。

在面向?qū)ο蟮奶幚碇校悎D處于核心地位,它提供了用于定義和使用對(duì)象的主要規(guī)則,同時(shí),類圖是正向工程(將模型轉(zhuǎn)化為代碼)的主要資源,是逆向工程(將代碼轉(zhuǎn)化為模型)的生成物。因此,類圖是任何面向?qū)ο笙到y(tǒng)的核心,隨之也成了最常用的UML圖。本節(jié)將詳細(xì)介紹與它相關(guān)的知識(shí),包括類圖的概念、類的表示和如何定義一個(gè)類等相關(guān)內(nèi)容。

4.1.1 類圖概述

類圖是描述類、接口以及它們之間關(guān)系的圖,是一種靜態(tài)模型,顯示了系統(tǒng)中各個(gè)類的靜態(tài)結(jié)構(gòu)。類圖根據(jù)系統(tǒng)中的類以及各個(gè)類的關(guān)系描述系統(tǒng)的靜態(tài)視圖,可以用某種面向?qū)ο蟮恼Z言實(shí)現(xiàn)類圖中的類。

類圖是面向?qū)ο笙到y(tǒng)建模中最常用和最基本的圖之一,其他許多圖(如狀態(tài)圖、協(xié)作圖、組件圖和配置圖等)都是在類圖的基礎(chǔ)上進(jìn)一步描述了系統(tǒng)其他方面的特性。類圖可以包含類、接口、依賴關(guān)系、泛化關(guān)系、關(guān)聯(lián)關(guān)系和實(shí)現(xiàn)關(guān)系等模型元素。另外,在類圖中也可以包含注釋、約束、包或子系統(tǒng)。

UML類圖中常見的關(guān)系有以下幾種:泛化、實(shí)現(xiàn)、關(guān)聯(lián)、聚合、組合以及依賴。其中,聚合和組合關(guān)系都是關(guān)聯(lián)關(guān)系的一種。這些關(guān)系的強(qiáng)弱順序不同,排序結(jié)果為:泛化=實(shí)現(xiàn)>組合>聚合>關(guān)聯(lián)>依賴。

類圖用于對(duì)系統(tǒng)的靜態(tài)視圖(它用于描述系統(tǒng)的功能需求)建模,通常以如下所示的某種方式使用類圖。

□ 對(duì)系統(tǒng)的詞匯建模 在進(jìn)行系統(tǒng)建模時(shí),通常首先構(gòu)造系統(tǒng)的基本詞匯,以描述系統(tǒng)的邊界。在對(duì)詞匯進(jìn)行建模時(shí),通常需要判斷哪些抽象是系統(tǒng)的一部分,哪些抽象位于系統(tǒng)邊界之外。

□ 對(duì)協(xié)作建模 協(xié)作是一些協(xié)同工作的類、接口和其他元素的共同體,其中元素協(xié)作時(shí)的功能強(qiáng)于它們單獨(dú)工作時(shí)的功能之和。系統(tǒng)分析員可以用類圖描述圖形化系統(tǒng)中的類及它們之間的關(guān)系。

□ 對(duì)數(shù)據(jù)庫模式建模 很多情況下都需要在關(guān)系數(shù)據(jù)庫中存儲(chǔ)永久信息,這時(shí)可以使用類圖對(duì)數(shù)據(jù)庫模式進(jìn)行建模。

下圖列舉了一個(gè)簡(jiǎn)單的類圖示例,它起到一個(gè)引導(dǎo)的作用,目的在于使讀者對(duì)類圖有一個(gè)直觀淺顯的了解。

類圖通過分析用例和問題域,可以建立系統(tǒng)中的類,然后再把邏輯上相關(guān)的類封裝成包,這樣就可以直觀清晰地展現(xiàn)出系統(tǒng)的層次關(guān)系。

但是,使用類圖時(shí)也需要遵循如下原則。

□ 簡(jiǎn)化原則 在項(xiàng)目的初始階段不要使用所有的符號(hào),只要能夠有效表達(dá)就可以。

□ 分層理解原則 根據(jù)項(xiàng)目開發(fā)的不同階段使用不同層次的類圖進(jìn)行表達(dá),以方便理解,不要一開始就陷入實(shí)現(xiàn)類圖的細(xì)節(jié)中。

□ 關(guān)注關(guān)鍵點(diǎn)原則 不要為每個(gè)事物都畫一個(gè)模型,只把精力放到關(guān)鍵的位置即可。

4.1.2 類

類是構(gòu)成類圖的基礎(chǔ),也是面向?qū)ο笙到y(tǒng)組織結(jié)構(gòu)的核心。要使用類圖,需要了解類和對(duì)象之間的區(qū)別。類是對(duì)資源的定義,它所包含的信息主要用來描述某種類型實(shí)體的特征以及對(duì)該類型實(shí)體的使用方法。對(duì)象是具體的實(shí)體,它遵守類制定的規(guī)則。從軟件的角度看,程序通常包含的是類的集合以及類所定義的行為,而實(shí)際創(chuàng)建信息和管理信息的是遵守類的規(guī)則的對(duì)象。

類定義了一組具有狀態(tài)和行為的對(duì)象,這些對(duì)象具有相同的屬性、操作、關(guān)系和語義。其中,屬性和關(guān)系用來描述狀態(tài)。屬性通常用沒有身份的數(shù)據(jù)值表示,如數(shù)字和字符串;關(guān)聯(lián)則用有身份的對(duì)象之間的關(guān)系來表示。行為由操作來描述,方法是操作的實(shí)現(xiàn)。

為了支持對(duì)身份、屬性和操作的定義,UML規(guī)范采用一個(gè)具有3個(gè)預(yù)定義分欄的圖標(biāo)表示類,分欄中包含的信息有:名稱(Name)、屬性(Attribute)和操作(Operation),它們對(duì)應(yīng)著類的基本元素,如下圖所示。

當(dāng)將類繪制在類圖中時(shí),名稱分欄是必須出現(xiàn)的,而屬性分欄和操作分欄則可以出現(xiàn)或不出現(xiàn)。上圖顯示了所有的分欄,另外3種形式如下圖所示。

當(dāng)隱藏某個(gè)分欄時(shí),并非表明某個(gè)分欄不存在。只顯示當(dāng)前需要注意的分欄,可以使圖形更加直觀、清晰。

類在它的包含者(可以是包或者另一個(gè)類)內(nèi)必須有唯一的名稱。類對(duì)它的包含者來說是可見的,可見性規(guī)定了類能夠怎樣被位于可見者之外的類所使用。類的多重性說明了類可以具有多少個(gè)實(shí)例,通常情況下可以有0個(gè)或多個(gè)。

下面將詳細(xì)介紹類的名稱、屬性和操作在類圖中的具體表示方法和含義。

1.名稱

類名書寫在名稱分欄的中部,它通常表示為一個(gè)名詞,既不帶前綴,也不帶后綴。為類命名時(shí)最好能夠反映類所代表的問題域中的概念,并且要清楚準(zhǔn)確,不能含糊不清。類名可分為簡(jiǎn)單名稱和路徑名稱。簡(jiǎn)單名稱只有類名,沒有前綴;路徑名稱中可以包含由類所在包的名稱表示的前綴,如下圖所示。

其中,Student是類的名稱,Person是Student類所在包的名稱。

2.屬性

類的屬性也稱為特性,它描述了類在軟件系統(tǒng)中代表的事物(即對(duì)象)所具備的特性,這些特性是該類的所有對(duì)象所共有的。類可以有任意數(shù)目的屬性,也可以沒有屬性。在系統(tǒng)建模時(shí)只抽取那些對(duì)系統(tǒng)有用的特性作為類的屬性,通過這些屬性可以識(shí)別該類的對(duì)象。例如,可以將學(xué)生姓名、編號(hào)、出生年月、所在班級(jí)、職務(wù)等特性作為Student類的屬性。

從系統(tǒng)處理的角度來看,事物的特性中只有其值能被改變的那些才可以作為類的屬性。UML中描述類屬性的語法格式如下所示:

      [可見性] 屬性名 [:類型] [=初始值] [{屬性字符串}]

上述語法中,屬性包含5部分:可見性、屬性名、類型、初始值和屬性字符串。除了屬性名外,其他內(nèi)容都是可有可無的,可以根據(jù)需要選用上面列出的某些項(xiàng)。

1)可見性

可見性用于指定它所描述的屬性能否被其他類訪問,以及能以何種方式訪問。在UML中并未規(guī)定默認(rèn)的可見性,如果在屬性的左邊沒有標(biāo)識(shí)任何符號(hào),表明該屬性的可見性尚未定義,而并非取了默認(rèn)的可見性。

最常用的可見性類型有3種,分別為公有(Public)、私有(Private)和被保護(hù)(Protected)類型。

□ 被聲明為Public的屬性和操作可以在它所在類的外部被查看、使用和更新。在類里被聲明為Public的屬性和操作共同構(gòu)成了類的公共接口。類的公共接口由可以被其他類訪問及使用的屬性和操作組成,這表示公共接口是該類與其他類聯(lián)系的部分。類的公共接口應(yīng)盡可能減少變化,以防止任何使用該類的地方進(jìn)行不必要的改變。

□ 被聲明為Protected的屬性和操作可以被類的其他方法訪問,也可以被任何繼承類所聲明的方法訪問,但是,非繼承的類無法訪問Protected屬性和操作。即使用Protected聲明的屬性和操作只可以被該類和該類的子類使用,而其他類無法使用。

□ Private可見性是限制最為嚴(yán)格的可見性類型,只有包含Private元素的類本身,才能使用Private屬性中的數(shù)據(jù),或者調(diào)用Private操作。

注意

對(duì)于是否應(yīng)該聲明為Public屬性是有不同觀點(diǎn)的。許多面向?qū)ο蟮脑O(shè)計(jì)者對(duì)Public屬性存在抱怨,因?yàn)檫@會(huì)將類的屬性向系統(tǒng)的其余部分公開,違反了面向?qū)ο蟮男畔㈦[蔽的原則。因此,最好避免使用Public屬性。

除了以上3種類型的可見性之外,其他類型的可見性可由程序設(shè)計(jì)語言定義。需要注意的是,公有和私有可見性一般在表達(dá)類圖時(shí)是必需的。UML中Public類型用符號(hào)“+”表示,Private類型用符號(hào)“-”表示,Protected類型用符號(hào)“#”表示。這幾種類型符號(hào)在類中的表示如下圖所示。

在上圖中,屬性studentNo和studentBirth是類Student的私有屬性,studentName是類的公有屬性,studentClass和studentPosition屬性是類被保護(hù)的屬性,這些屬性的可見性是由它們名稱左邊的符號(hào)指定的。

2)屬性名

類的屬性是類定義的一部分,每個(gè)屬性都應(yīng)有唯一的屬性名,以標(biāo)識(shí)該屬性并以此區(qū)別于其他屬性。屬性名通常由描述所屬類的特性的名詞或名詞短語組成,單字屬性名小寫,如果屬性名包含了多個(gè)單詞,則這些單詞可以合并,且從第二個(gè)單詞起,每個(gè)單詞的首字母都應(yīng)是大寫,如上圖中屬性可見性的右邊為屬性名。

3)類型

每個(gè)屬性都應(yīng)指定其所屬的數(shù)據(jù)類型。常用的數(shù)據(jù)類型有整型、實(shí)型、布爾型、枚舉型等。這些類型在不同的編程語言中可能有不同的定義,可以在UML中使用目標(biāo)語言中的類型表達(dá)式,這在軟件開發(fā)的實(shí)施階段是非常有用的。

除了上面提到的類型外,屬性的數(shù)據(jù)類型還可以使用系統(tǒng)中的其他類或者用戶自定義的數(shù)據(jù)類型。類的屬性定義之后,類的所有對(duì)象的狀態(tài)由其屬性的特定值所決定。

4)初始值

開發(fā)人員可以為屬性設(shè)置初始值,設(shè)置初始值可以防止因漏掉某些取值而破壞系統(tǒng)的完整性,并且為用戶提供易用性。為Student類的相關(guān)屬性指定數(shù)據(jù)類型和初始值后,效果如下圖所示。

從上圖中可以看出屬性與數(shù)據(jù)類型之間要用冒號(hào)分隔,數(shù)據(jù)類型與初始值之間用等號(hào)分隔。使用Microsoft Visio畫圖時(shí),冒號(hào)和等號(hào)都是該軟件自動(dòng)添加的。

5)屬性字符串

描述類屬性的語法格式中的最后一項(xiàng)是屬性字符串。屬性字符串用來指定關(guān)于屬性的其他信息,任何希望添加屬性定義字符串但又沒有合適地方可以加入的都可以放在屬性字符串里。

除了上面的介紹外,還有一種類型的屬性,它能被所屬類的所有對(duì)象共享,這就是類的作用域?qū)傩裕蛘呓凶黝愖兞浚ɡ纾琂ava類中的靜態(tài)變量)。這類屬性在類圖中表示時(shí)要在屬性名的下面加一條下畫線。例如,開發(fā)人員可以將Student類中的studentPosition屬性更改為類變量或者重新添加一個(gè)新的類變量。

屬性可以代表一個(gè)以上的對(duì)象,實(shí)際上,屬性能代表其類型的任意數(shù)目的對(duì)象。在程序設(shè)計(jì)時(shí),屬性用一個(gè)數(shù)組來實(shí)現(xiàn)體現(xiàn)了面向?qū)ο笾袑?duì)象之間關(guān)聯(lián)的多重性。多重性指允許用戶指定屬性實(shí)際上代表一組對(duì)象集合,而且能夠應(yīng)用于內(nèi)置屬性及關(guān)聯(lián)屬性。如下圖列出了屬性對(duì)應(yīng)的多重性,由于一名學(xué)生可以借閱多本圖書,所以一個(gè)Student類可以對(duì)應(yīng)多個(gè)Book類。

3.操作

屬性僅僅描述了要處理的數(shù)據(jù),而操作則描述了處理數(shù)據(jù)的具體方法。類的操作是對(duì)其所屬對(duì)象的行為的抽象,相當(dāng)于一個(gè)服務(wù)的實(shí)現(xiàn),且該服務(wù)可以由類的任何對(duì)象請(qǐng)求,以影響其行為。屬性是描述對(duì)象特征的值,操作用于操縱屬性或執(zhí)行其他動(dòng)作。操作可以看作是類的接口,通過該接口可以實(shí)現(xiàn)內(nèi)、外信息的交互,操作的具體實(shí)現(xiàn)被稱作方法。

操作由返回值類型、名稱和參數(shù)表進(jìn)行描述,它們一起被稱為操作簽名。某個(gè)類的操作只能作用于該類的對(duì)象,一個(gè)類可以有任意數(shù)量的操作或者根本沒有操作。UML中用于描述操作的語法形式如下:

      [可見性] 操作名 [(參數(shù)表)] [:返回類型] [{屬性字符串}]

上述語法形式中有可見性、參數(shù)表和返回類型等內(nèi)容,其具體說明如下。

類操作的可見性類型包括公有(Public)、私有(Private)、受保護(hù)(Protected)和包內(nèi)公有(Package)幾種類型,UML類圖中,它們可以分別用“+”“-”“#”和“~”來表示。如果某一對(duì)象能夠訪問操作所在的包,那么該對(duì)象就可以調(diào)用可見性為公有的操作;可見性為私有的操作只能被其所在類的對(duì)象訪問;子類的對(duì)象可以調(diào)用父類中可見性為公有的操作;可見性為包內(nèi)公有的操作可以被其所在包的對(duì)象訪問。

在為系統(tǒng)建模時(shí),操作名通常用描述類的行為的動(dòng)詞或者動(dòng)詞短語,操作名的第一個(gè)字母通常使用小寫,當(dāng)操作名包含多個(gè)單詞時(shí),這些單詞要合并起來,并且從第二個(gè)單詞起所有單詞的首字母都是大寫。

參數(shù)用來指定提供給操作以完成工作的信息,它是可選的,即操作可以有參數(shù),也可以沒有參數(shù)。如果參數(shù)表中包含多個(gè)參數(shù)時(shí),各參數(shù)之間需要使用逗號(hào)隔開。當(dāng)參數(shù)具有默認(rèn)值時(shí),如果操作的調(diào)用者沒有為該參數(shù)提供相應(yīng)的值,那么該參數(shù)將自動(dòng)具有指定的默認(rèn)值。例如,類15中deleteStudent操作表示根據(jù)學(xué)生的編號(hào)刪除一個(gè)Student對(duì)象,執(zhí)行該操作時(shí)只需要知道學(xué)生編號(hào)信息即可,如下圖所示。

操作除了具有名稱與參數(shù)外,還可以有返回類型。返回類型被指定在操作名稱尾端的冒號(hào)之后,它指定了該操作返回的對(duì)象類型,如下圖所示。如果某個(gè)操作返回時(shí)可以不注明返回值的類型,那么在具體的編程語言中可能需要添加關(guān)鍵字void來表示無返回值的情況。

除了上圖中提供的每一個(gè)參數(shù)名及其數(shù)據(jù)類型外,還可以指定參數(shù)子句in、out或者inout。其中,in是默認(rèn)的參數(shù)子句,通過值傳遞的參數(shù)使用in參數(shù)子句,或者不使用任何參數(shù)子句。通過值傳遞參數(shù)意味著把數(shù)據(jù)的副本發(fā)送到操作,因而操作不會(huì)改變值的主備份。如果希望修改傳遞到操作的參數(shù)值的主備份,需要使用inout類型的參數(shù)子句標(biāo)記參數(shù),這意味著值通過引用傳遞,操作中任何對(duì)參數(shù)值的修改也就是對(duì)變量主備份的修改。除此之外,還有一種out參數(shù)子句,使用該參數(shù)子句時(shí),值不是被傳遞給操作,而是由操作把值返回給參數(shù)。

當(dāng)需要在操作的定義中添加一些預(yù)定義元素之外的信息時(shí),可以將它們作為屬性字符串。

4.職責(zé)

所謂的職責(zé),是指類或者其他元素的契約或義務(wù),可以在類標(biāo)記中操作分欄的下面另加一個(gè)分欄,用于說明類的職責(zé)。相關(guān)人員在創(chuàng)建類時(shí)需要聲明該類的所有對(duì)象具有相同的狀態(tài)和相同的行為,這些屬性和操作正是要完成類的職責(zé)。描述類的職責(zé)可以使用一個(gè)短語、一個(gè)句子或者若干句子。

5.約束和注釋

在類的標(biāo)記中說明類的職責(zé)是消除二義性的一種非形式化的方法,而使用約束則是一種形式化的方法。約束指定了類應(yīng)該滿足的一個(gè)或者多個(gè)規(guī)則。約束在UML規(guī)范中是用由花括號(hào)括起來的文本表示的。如下圖為Teacher類所添加的約束。

除約束外,還可以在類圖中使用注釋,以便為類添加更多的說明信息,注釋可以包含文本和圖形。如下圖所示為Teacher類所添加的注釋。

4.1.3 定義類

由于類是構(gòu)成類圖的基礎(chǔ),所以在構(gòu)造類圖之前首先要定義類,也就是將系統(tǒng)要處理的數(shù)據(jù)抽象為類的屬性,將處理數(shù)據(jù)的方法抽象為類的操作。要準(zhǔn)確地定義類,需要對(duì)問題域有透徹準(zhǔn)確的理解。在定義類時(shí),通常應(yīng)當(dāng)使用問題域中的概念,并且類的名字要用類實(shí)際代表的事物進(jìn)行命名。

通過自我提問并回答下列問題,將有助于在建模時(shí)準(zhǔn)確地定義類。

□ 在要解決的問題中有沒有必須存儲(chǔ)或處理的數(shù)據(jù),如果有,那么這些數(shù)據(jù)可能就需要抽象為類,這里的數(shù)據(jù)可以是系統(tǒng)中出現(xiàn)的概念、事件,或者僅在某一時(shí)刻出現(xiàn)的事務(wù)。

□ 有沒有外部系統(tǒng),如果有,可以將外部系統(tǒng)抽象為類,該類可以是本系統(tǒng)所包含的類,也可以是能與本系統(tǒng)進(jìn)行交互的類。

□ 有沒有模板、類庫或者組件等,如果有,這些可以作為類。

□ 系統(tǒng)中有什么角色,這些角色可以抽象為類,例如用戶、客戶等。

□ 系統(tǒng)中有沒有被控制的設(shè)備,如果有,那么在系統(tǒng)中應(yīng)該有與這些設(shè)備對(duì)應(yīng)的類,以便能夠通過這些類控制相應(yīng)的設(shè)備。

通過自我提問并回答以上列出的問題,有助于在建模時(shí)發(fā)現(xiàn)需要定義的類。但定義類的基本依據(jù)仍然是系統(tǒng)的需求規(guī)格說明,應(yīng)當(dāng)認(rèn)真分析系統(tǒng)的需求規(guī)格說明,進(jìn)而確定需要為系統(tǒng)定義哪些類。另外,分析完用例和問題域后可以建立系統(tǒng)中的類,然后再把邏輯上相關(guān)的類封裝成包,這樣就可以直觀清晰地展現(xiàn)出系統(tǒng)的層次關(guān)系。

4.1.4 接口

對(duì)Java或C#等高級(jí)語言不陌生的讀者一定知道:一個(gè)類只能有一個(gè)父類(即該類只能繼承一個(gè)類),但是如果用戶想要繼承兩個(gè)或兩個(gè)以上的類時(shí)應(yīng)該怎么辦?很簡(jiǎn)單,可以使用接口(Interface)。

接口是對(duì)對(duì)象行為的描述,但是它并沒有給出對(duì)象的實(shí)現(xiàn)和狀態(tài),且接口是一組沒有相應(yīng)方法實(shí)現(xiàn)的操作,非常類似于僅包含抽象方法的抽象類。接口中只包含操作,而不包含屬性,且接口沒有對(duì)外界可見的關(guān)聯(lián)。

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,使用接口可避免許多與多重繼承相關(guān)的問題,因此使用接口比使用抽象類要安全得多。如在Java和C#等新型編程語言中允許類實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)通用類或抽象類。

接口通常被描述為抽象操作,即只是用操作名、參數(shù)表和返回類型說明接口的行為,而操作的實(shí)現(xiàn)部分將出現(xiàn)在使用該接口的元素中。可以將接口想成非常簡(jiǎn)單的協(xié)議,它規(guī)定了實(shí)現(xiàn)該接口時(shí)必須實(shí)現(xiàn)的操作。接口的具體實(shí)現(xiàn)過程、方法對(duì)調(diào)用該接口的對(duì)象而言是透明的。在進(jìn)行系統(tǒng)建模時(shí),接口起到十分重要的作用,因?yàn)槟P驮刂g的協(xié)作是通過接口進(jìn)行的。相關(guān)人員可以為類、組件和包定義接口,利用接口說明類、組件和包能夠支持的行為。一個(gè)結(jié)構(gòu)良好的系統(tǒng),通常都定義了比較規(guī)范的接口。

UML中,接口可以使用構(gòu)造型的類表示,也可以使用一個(gè)“球形”來表示,如下圖所示演示了接口實(shí)現(xiàn)的兩種方法。

接口與抽象類一樣,都不能實(shí)例化為對(duì)象。在UML中,接口可以使用一個(gè)帶有名稱的小圓圈來表示,并且可以通過一條Realize(實(shí)現(xiàn)關(guān)系)線與實(shí)現(xiàn)它的類相連接,如下圖所示。

如果使用構(gòu)造型表示接口,則由于實(shí)現(xiàn)接口的類與接口之間是依賴關(guān)系,所以用一端帶有箭頭的虛線表示這個(gè)實(shí)現(xiàn)關(guān)系,如下圖所示。

如果某個(gè)接口是在一個(gè)特定類中實(shí)現(xiàn)的,則使用該接口的類僅依賴于特定接口中的操作,而不依賴于接口實(shí)現(xiàn)類中的其他部分。如果類實(shí)現(xiàn)了接口,但未實(shí)現(xiàn)該接口指定的所有操作,那么此類必須聲明為抽象類。使用接口可以很好地將類所需要的行為與該行為如何被實(shí)現(xiàn)完全分開。

主站蜘蛛池模板: 怀化市| 天等县| 淮安市| 渝北区| 新邵县| 汝阳县| 宝清县| 鄯善县| 龙海市| 永寿县| 芦山县| 青神县| 东台市| 红原县| 贵定县| 湖州市| 马龙县| 耿马| 明光市| 南木林县| 崇义县| 民和| 鹤山市| 读书| 开阳县| 永和县| 十堰市| 连州市| 宣威市| 京山县| 高台县| 卫辉市| 北碚区| 定陶县| 临猗县| 襄汾县| 横山县| 琼结县| 江川县| 阆中市| 百色市|