本篇文章介紹UML的相關(guān)知識(shí)。參考《UML從入門到精通》
一、UML綜述
1. UML簡(jiǎn)介
統(tǒng)一建模語(yǔ)言(UML)是一個(gè)通用的可視化建模語(yǔ)言,用于對(duì)軟件進(jìn)行描述、可視化處理、構(gòu)造和建立軟件系統(tǒng)制品的文檔。UML描述了一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為。 UML將系統(tǒng)描述為一些離散的相互作用的對(duì)象并最終為外部用戶提供一定功能的模型結(jié)構(gòu)。靜態(tài)結(jié)構(gòu)定義了系統(tǒng)中重要對(duì)象的屬性和操作以及這些對(duì)象之間的相互關(guān)系。動(dòng)態(tài)行為定義了對(duì)象的時(shí)間特性和對(duì)象為完成目標(biāo)而相互進(jìn)行通信的機(jī)制。從不同但相互聯(lián)系的角度對(duì)系統(tǒng)建立的模型可用于不同的目的。UML不是一門程序設(shè)計(jì)語(yǔ)言,但可以使用代碼生成器工具將 U M L模型轉(zhuǎn)換為多種程序設(shè)計(jì)語(yǔ)言代碼,或使用反向生成工具將程序源代碼轉(zhuǎn)換為UML。
2. UML的目標(biāo)
UML語(yǔ)言的開(kāi)發(fā)有多個(gè)目標(biāo)。首先,最重要的目標(biāo)是使 U M L成為一個(gè)通用的建模語(yǔ)言,可供所有建模者使用。其次,我們希望UML 盡可能地采用源自O(shè)MT Booch, Objectory及其他主要方法的表示法,即使它能夠很好地支持設(shè)計(jì)工作,如封裝、分塊、記錄模型構(gòu)造思路。此外,我們希望UML能準(zhǔn)確表達(dá)當(dāng)前軟件開(kāi)發(fā)中的熱點(diǎn)問(wèn)題,比如大規(guī)模、分布、并發(fā)、方式和團(tuán)體開(kāi)發(fā)等。
二、模型的性質(zhì)與用途
1. 什么是模型
軟件系統(tǒng)的模型用建模語(yǔ)言來(lái)表達(dá),如UML。模型包含語(yǔ)義信息和表示法,可以采取圖形和文字等多種不同形式。建立模型的目的是因?yàn)樵谀承┯猛局心P褪褂闷饋?lái)比操縱實(shí)物更容易和方便。
2. 模型的用途
軟件系統(tǒng)的不同模型可以捕獲關(guān)于這個(gè)軟件的應(yīng)用領(lǐng)域、使用方法、度量手段和構(gòu)造模式等方面的需求信息。在編寫程序代碼以前,軟件系統(tǒng)的模型可以幫助軟件開(kāi)發(fā)人員方便地研究軟件的多種構(gòu)架和設(shè)計(jì)方案。軟件系統(tǒng)的一類模型可以說(shuō)明這個(gè)系統(tǒng)的外部行為和系統(tǒng)中對(duì)應(yīng)于真實(shí)世界的有關(guān)信息,另一類模型可以展示系統(tǒng)中的類以及實(shí)現(xiàn)系統(tǒng)外部行為特性所需要的內(nèi)部操作。實(shí)現(xiàn)這些行為有多種方法。利用軟件系統(tǒng)的模型,可以獲得類的聲明、過(guò)程體、用戶界面、數(shù)據(jù)庫(kù)、合法使用的說(shuō)明、配置草案以及與其他單位技術(shù)競(jìng)爭(zhēng)情況的對(duì)比說(shuō)明。軟件系統(tǒng)用視圖來(lái)組織信息:靜態(tài)結(jié)構(gòu)視圖、狀態(tài)機(jī)視圖、交互視圖、反映需求的視圖等等。
三、UML初覽
本章使用的例子是計(jì)算機(jī)管理的戲院售票系統(tǒng)。
1. UML視圖
在最上一層,視圖被劃分成三個(gè)視圖域:結(jié)構(gòu)分類、動(dòng)態(tài)行為和模型管理。
UML視圖和圖
不同視圖元素間的部分關(guān)系
四、靜態(tài)視圖
1. 概述
靜態(tài)視圖是UML的基礎(chǔ)。模型中靜態(tài)視圖的元素是應(yīng)用中有意義的概念,這些概念包括真實(shí)世界中的概念、抽象的概念、實(shí)現(xiàn)方面的概念和計(jì)算機(jī)領(lǐng)域的概念,即系統(tǒng)中的各種概念。
靜態(tài)視圖說(shuō)明了對(duì)象的結(jié)構(gòu)。一個(gè)面向?qū)ο蟮南到y(tǒng)使數(shù)據(jù)結(jié)構(gòu)和行為特征統(tǒng)一到一個(gè)獨(dú)立的對(duì)象結(jié)構(gòu)中。靜態(tài)視圖包括所有的傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)思想,同時(shí)也包括了數(shù)據(jù)操作的組織。數(shù)據(jù)和操作都可量化為類。
靜態(tài)視圖將行為實(shí)體描述成離散的模型元素,但是不包括它們動(dòng)態(tài)行為的細(xì)節(jié)。靜態(tài)視圖將這些行為實(shí)體看作是將被類所指定、擁有并使用的物體。
靜態(tài)視圖中的關(guān)鍵元素是類元及它們之間的關(guān)系。類元是描述事物的建模元素。有幾種類元,包括類、接口和數(shù)據(jù)類型。包括用例和信號(hào)在內(nèi)的其他類元具體化了行為方面的事物。實(shí)現(xiàn)目的位于像子系統(tǒng)、構(gòu)件和節(jié)點(diǎn)這幾種類元之后。
對(duì)象是從建模者理解和構(gòu)造的系統(tǒng)中分離出來(lái)的離散單元。它是類的實(shí)例—即,它是一個(gè)其結(jié)構(gòu)和行為都由類來(lái)描述的具有身份的個(gè)體。對(duì)象是一個(gè)可識(shí)別的狀態(tài),該狀態(tài)的行為能被激發(fā)。
類元之間的關(guān)系有關(guān)聯(lián)、泛化及各種不同的依賴關(guān)系,包括實(shí)現(xiàn)和使用關(guān)系。
2. 類元
3. 關(guān)系
類元之間的關(guān)系有關(guān)聯(lián)、泛化、流及各種形式的依賴關(guān)系,包括實(shí)現(xiàn)關(guān)系和使用關(guān)系。
關(guān)聯(lián)關(guān)系描述了給定類的單獨(dú)對(duì)象之間語(yǔ)義上的連接。關(guān)聯(lián)提供了不同類間對(duì)象可以相互作用的連接。其余的關(guān)系涉及到類元自身的描述,而不是它們的實(shí)例。
泛化關(guān)系使父類元(超類)與更具體的后代類元(子類)連接在一起。泛化有利于類元的描述,可以不用多余的聲明,每個(gè)聲明都需加上從其父類繼承來(lái)的描述。繼承機(jī)制利用泛化關(guān)系的附加描述構(gòu)造了完整的類元描述。泛化和繼承允許不同的類元分享屬性、操作和它們共有的關(guān)系,而不用重復(fù)說(shuō)明。
實(shí)現(xiàn)關(guān)系將說(shuō)明和實(shí)現(xiàn)聯(lián)系起來(lái)。接口是對(duì)行為而非實(shí)現(xiàn)的說(shuō)明,而類之中則包含了實(shí)現(xiàn)的結(jié)構(gòu)。一個(gè)或多個(gè)類可以實(shí)現(xiàn)一個(gè)接口,而每個(gè)類分別實(shí)現(xiàn)接口中的操作。
流關(guān)系將一個(gè)對(duì)象的兩個(gè)版本以連續(xù)的方式連接起來(lái)。它表示一個(gè)對(duì)象的值、狀態(tài)和位置的轉(zhuǎn)換。流關(guān)系可以將類元角色在一次相互作用中連接起來(lái)。流的種類包括變成(同一個(gè)對(duì)象的不同版本)和拷貝(從現(xiàn)有對(duì)象創(chuàng)造出一個(gè)新的對(duì)象)兩種。
依賴關(guān)系將行為和實(shí)現(xiàn)與影響其他類的類聯(lián)系起來(lái)。除了實(shí)現(xiàn)關(guān)系以外,還有好幾種依賴關(guān)系,包括跟蹤關(guān)系(不同模型中元素之間的一種松散連接) 、精化關(guān)系(兩個(gè)不同層次意義之間的一種映射) 、使用關(guān)系(在模型中需要另一個(gè)元素的存在) 、綁定關(guān)系(為模板參數(shù)指定值) 。使用依賴關(guān)系經(jīng)常被用來(lái)表示具體實(shí)現(xiàn)間的關(guān)系,如代碼層實(shí)現(xiàn)關(guān)系。在概括模型的組織單元,例如包時(shí),依賴關(guān)系很有用,它在其上顯示了系統(tǒng)的構(gòu)架。例如編譯方面的約束可通過(guò)依賴關(guān)系來(lái)表示。
4. 關(guān)聯(lián)
在關(guān)聯(lián)中如果同一個(gè)類出現(xiàn)不止一次,那么一個(gè)單獨(dú)的對(duì)象就可以與自己關(guān)聯(lián)。
一個(gè)類的關(guān)聯(lián)的任何一個(gè)連接點(diǎn)都叫做關(guān)聯(lián)端,與類有關(guān)的許多信息都附在它的端點(diǎn)上。關(guān)聯(lián)端有名字(角色名)和可見(jiàn)性等特性,而最重要的特性則是多重性,即一個(gè)類的多個(gè)實(shí)例與另一個(gè)類的一個(gè)實(shí)例相關(guān)。
如果一個(gè)關(guān)聯(lián)既是類又是關(guān)聯(lián),即它是一個(gè)關(guān)聯(lián)類,那么這個(gè)關(guān)聯(lián)可以有它自己的屬性。
如果一個(gè)關(guān)聯(lián)的屬性在一組相關(guān)對(duì)象中是唯一的,那么它是一個(gè)限定符,限定符是用來(lái)在關(guān)聯(lián)中從一組相關(guān)對(duì)象中標(biāo)識(shí)出獨(dú)特對(duì)象的值。
聚集和組成。聚集表示部分與整體關(guān)系的關(guān)聯(lián),它用端點(diǎn)帶有空菱形的線段表示,空菱形與聚集類相連接。組成是更強(qiáng)形式的關(guān)聯(lián),整體有管理部分的特有的職責(zé),它用一個(gè)實(shí)菱形物附在組成端表示。
5. 泛化
泛化關(guān)系是類元的一般描述和具體描述之間的關(guān)系,具體描述建立在一般描述的基礎(chǔ)之上,并對(duì)其進(jìn)行了擴(kuò)展。泛化用從子指向父的箭頭表示,指向父的是一個(gè)空三角形。
泛化的用途。泛化有兩個(gè)用途。第一個(gè)用途是用來(lái)定義下列情況:當(dāng)一個(gè)變量(如參數(shù)或過(guò)程變量)被聲明承載某個(gè)給定類的值時(shí),可使用類(或其他元素)的實(shí)例作為值,這被稱作可替代性原則(由 Barbara Liskov提出);泛化的另一個(gè)用途是在共享祖先所定義的成分的前提下允許它自身定義增加的描述,這被稱作繼承。繼承是一種機(jī)制,通過(guò)該機(jī)制類的對(duì)象的描述從類及其祖先的聲明部分聚集起來(lái)。繼承允許描述的共享部分只被聲明一次而可以被許多類所共享,而不是在每個(gè)類中重復(fù)聲明并使用它,這種共享機(jī)制減小了模型的規(guī)模。
6. 實(shí)現(xiàn)
實(shí)現(xiàn)關(guān)系將一種模型元素(如類)與另一種模型元素(如接口)連接起來(lái),其中接口只是行為的說(shuō)明而不是結(jié)構(gòu)或者實(shí)現(xiàn)。實(shí)現(xiàn)關(guān)系用一條帶封閉空箭頭的虛線來(lái)表示。
7. 依賴
依賴表示兩個(gè)或多個(gè)模型元素之間語(yǔ)義上的關(guān)系。根據(jù)這個(gè)定義,關(guān)聯(lián)和泛化都是依賴關(guān)系,但是它們有更特別的語(yǔ)義,故它們有自己的名字和詳細(xì)的語(yǔ)義。
依賴用一個(gè)從客戶指向提供者的虛箭頭表示:
8. 約束
約束用大括弧內(nèi)的文字表達(dá)式來(lái)表示,可以使用形式語(yǔ)言或自然語(yǔ)言。文字字符串可以寫成注釋或附加在依賴關(guān)系的箭頭旁。
五、用例視圖
1. 概述
當(dāng)用例視圖在外部用戶前出現(xiàn)時(shí),它捕獲到系統(tǒng)、子系統(tǒng)或類的行為。它將系統(tǒng)功能劃分成對(duì)參與者(即系統(tǒng)的理想用戶)有用的需求。而交互功能部分被稱作用例。用例使用系統(tǒng)與一個(gè)或多個(gè)參與者之間的一系列消息來(lái)描述系統(tǒng)中的交互作用。參與者可以是人,也可以是外部計(jì)算機(jī)系統(tǒng)和外部進(jìn)程。
2. 參與者
參與者是與系統(tǒng)、子系統(tǒng)或類發(fā)生交互作用的外部用戶、進(jìn)程或其他系統(tǒng)的理想化概念。每個(gè)參與者可以參與一個(gè)或多個(gè)用例。參與者可以是人、另一個(gè)計(jì)算機(jī)系統(tǒng)或一些可運(yùn)行的進(jìn)程。
3. 用例
用例是外部可見(jiàn)的一個(gè)系統(tǒng)功能單元 ,這些功能由系統(tǒng)單元所提供,并通過(guò)一系列系統(tǒng)單元與一個(gè)或多個(gè)參與者之間交換的消息所表達(dá)。用例除了與其參與者發(fā)生關(guān)聯(lián)外,還可以參與系統(tǒng)中的多個(gè)關(guān)系:
一個(gè)用例也可以被定義為基用例的增量擴(kuò)展 ,這叫做擴(kuò)展關(guān)系。同一個(gè)基用例的幾個(gè)擴(kuò)展用例可以在一起應(yīng)用。基用例的擴(kuò)展增加了原有的語(yǔ)義 , 此時(shí)是基用例而不是擴(kuò)展用例被作為例子使用。
包含和擴(kuò)展關(guān)系可以用含有關(guān)鍵字《 i n c l u d e》和《e x t e n d》的帶箭頭的虛線表示。包括用例關(guān)系箭頭指向被包含的用例,擴(kuò)展關(guān)系箭頭指向被擴(kuò)展的用例。
一個(gè)用例也可以被特別列舉為一個(gè)或多個(gè)子用例,這被稱做用例泛化。當(dāng)父用例能夠被使用時(shí),任何子用例也可以被使用。用例泛化與其他泛化關(guān)系的表示法相同,都用一個(gè)三角箭頭從子用例指向父用例。
六、狀態(tài)機(jī)視圖
1. 概述
狀態(tài)機(jī)視圖通過(guò)對(duì)類對(duì)象的生存周期建立模型來(lái)描述對(duì)象隨時(shí)間變化的動(dòng)態(tài)行為。狀態(tài)是給定類的對(duì)象的一組屬性值 ,這組屬性值對(duì)所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。狀態(tài)機(jī)用于描述類的行為,但它們也描述用例、協(xié)作和方法的動(dòng)態(tài)行為。
2. 狀態(tài)機(jī)
狀態(tài)機(jī)是展示狀態(tài)與狀態(tài)轉(zhuǎn)換的圖。通常一個(gè)狀態(tài)機(jī)依附于一個(gè)類,并且描述一個(gè)類的實(shí)例對(duì)接受到的事件所發(fā)生的反應(yīng)。狀態(tài)機(jī)也可以依附于操作、用例和協(xié)作并描述它們的執(zhí)行過(guò)程。
3. 事件
事件是發(fā)生在時(shí)間和空間上的一點(diǎn)的值得注意的事情。它在時(shí)間上的一點(diǎn)發(fā)生,沒(méi)有持續(xù)時(shí)間。如果某一事情的發(fā)生造成了影響,那么在狀態(tài)機(jī)模型中它是一個(gè)事件。
4. 狀態(tài)
狀態(tài)描述了一個(gè)類對(duì)象生命期中的一個(gè)時(shí)間段。它可以用三種附加方式說(shuō)明:在某些方面性質(zhì)相似的一組對(duì)象值;一個(gè)對(duì)象等待一些事件發(fā)生時(shí)的一段時(shí)間;對(duì)象執(zhí)行持續(xù)活動(dòng)時(shí)的一段時(shí)間。狀態(tài)用具有圓形拐角的矩形表示。
5. 轉(zhuǎn)換
動(dòng)作。當(dāng)轉(zhuǎn)換被引起時(shí),它對(duì)應(yīng)的動(dòng)作被執(zhí)行。動(dòng)作是原子性的,一般是一個(gè)簡(jiǎn)短的計(jì)算處理過(guò)程,通常是一個(gè)賦值操作或算術(shù)計(jì)算。
6. 組成狀態(tài)
一個(gè)簡(jiǎn)單狀態(tài)沒(méi)有子結(jié)構(gòu),只帶有一組轉(zhuǎn)換和可能的入口和出口動(dòng)作。組成狀態(tài)是一個(gè)被分解成順序的或并發(fā)的子狀態(tài)的狀態(tài)。
七、活動(dòng)視圖
1. 概述
活動(dòng)圖是一種特殊形式的狀態(tài)機(jī),用于對(duì)計(jì)算流程和工作流程建模。活動(dòng)圖中的狀態(tài)表示計(jì)算過(guò)程中所處的各種狀態(tài),而不是普通對(duì)象的狀態(tài)。
2. 活動(dòng)圖
活動(dòng)圖是活動(dòng)視圖的表示法。
泳道。將模型中的活動(dòng)按照職責(zé)組織起來(lái)通常很有用。對(duì)象流。活動(dòng)圖能表示對(duì)象的值流和控制流。對(duì)象流狀態(tài)表示活動(dòng)中輸入或輸出的對(duì)象。如下圖:
八、交互視圖
1. 概述
對(duì)象間的相互作用體現(xiàn)了對(duì)象的行為。這種相互作用可以描述成兩種互補(bǔ)的方式,一種以獨(dú)立的對(duì)象為中心進(jìn)行考察,另一種以互相作用的一組對(duì)象為中心進(jìn)行考察。
2. 順序圖
順序圖將交互關(guān)系表示為一個(gè)二維圖。縱向是時(shí)間軸,時(shí)間沿豎線向下延伸。橫向軸代表了在協(xié)作中各獨(dú)立對(duì)象的類元角色。類元角色用生命線表示。當(dāng)對(duì)象存在時(shí),角色用一條虛線表示;當(dāng)對(duì)象的過(guò)程處于激活狀態(tài)時(shí),生命線是一個(gè)雙道線。消息用從一個(gè)對(duì)象的生命線到另一個(gè)對(duì)象生命線的箭頭表示。箭頭以時(shí)間順序在圖中從上到下排列。
3. 協(xié)作圖
協(xié)作圖是一種類圖,它包含類元角色和關(guān)聯(lián)角色,而不僅僅是類元和關(guān)聯(lián)。可以將對(duì)象標(biāo)識(shí)成四個(gè)組:存在于整個(gè)交互作用中的對(duì)象;在交互作用中創(chuàng)建的對(duì)象(使用約束{ n e w });在交互作用中銷毀的對(duì)象(使用約束 { d e s t r o y e d });在交互作用中創(chuàng)建并銷毀的對(duì)象(使用約束 { t r a n s i e n t }) 。設(shè)計(jì)時(shí)可以首先表示操作開(kāi)始時(shí)可得的對(duì)象和連接,然后決定控制如何流向圖中正確的對(duì)象去實(shí)現(xiàn)操作。
九、物理視圖
1. 概述
系統(tǒng)模型的大部分內(nèi)容反映了系統(tǒng)的邏輯和設(shè)計(jì)方面的信息,并且獨(dú)立于系統(tǒng)的最終實(shí)現(xiàn)單元。然而,為了可重用性和可操作性的目的,系統(tǒng)實(shí)現(xiàn)方面的信息也很重要。UML使用兩種視圖來(lái)表示實(shí)現(xiàn)單元:實(shí)現(xiàn)視圖和部署視圖。實(shí)現(xiàn)視圖將系統(tǒng)中可重用的塊包裝成具有可替代性的物理單元,這些單元被稱為構(gòu)件。部署視圖表示運(yùn)行時(shí)的計(jì)算資源(如計(jì)算機(jī)及它們之間的連接)的物理布置。
2. 構(gòu)件
構(gòu)件用一邊有兩個(gè)小矩形的一個(gè)長(zhǎng)方形表示,它可以用實(shí)線與代表構(gòu)件接口的圓圈相連。
構(gòu)件圖表示了構(gòu)件之間的依賴關(guān)系。每個(gè)構(gòu)件實(shí)現(xiàn)(支持)一些接口,并使用另一些接口。如果構(gòu)件間的依賴關(guān)系與接口有關(guān),那么構(gòu)件可以被具有同樣接口的其他構(gòu)件替代。(構(gòu)件圖)
3. 節(jié)點(diǎn)
節(jié)點(diǎn)是表示計(jì)算資源的運(yùn)行時(shí)的物理對(duì)象,通常具有內(nèi)存和處理能力。節(jié)點(diǎn)可能具有用來(lái)辨別各種資源的構(gòu)造型,如C P U、設(shè)備和內(nèi)存等。節(jié)點(diǎn)可以包含對(duì)象和構(gòu)件實(shí)例。(部署圖)
十、模型管理視圖
1. 概述
任何大的系統(tǒng)都必須被分成幾個(gè)小的單元,這使得人們可以一次只處理有限的信息,并且分別處理這些信息的工作組之間不會(huì)互相干擾。模型管理由包及包之間的依賴關(guān)系組成。
2. 包
包是模型的一部分,模型的每一部分必須屬于某個(gè)包。建模者可以將模型的內(nèi)容分配到包中。但是為了使其能夠工作,分配必須遵循一些合理的原則,如公用規(guī)則、緊密耦合的實(shí)現(xiàn)和公用觀點(diǎn)等。U M L對(duì)如何組包并不強(qiáng)制使用什么規(guī)則,但是良好的解組會(huì)很大地增強(qiáng)模型的可維護(hù)性。
3. 包間的依賴關(guān)系
十一、擴(kuò)展機(jī)制
1. 概述
UML提供了幾種擴(kuò)展機(jī)制。包括約束、標(biāo)記值和構(gòu)造型。一定要記住擴(kuò)展是違反UML的標(biāo)準(zhǔn)形式的,并且使用它們會(huì)導(dǎo)致相互影響。在使用擴(kuò)展機(jī)制之前,建模者應(yīng)該仔細(xì)權(quán)衡它的好處和代價(jià),特別是當(dāng)現(xiàn)有機(jī)制能夠合理工作時(shí)。
2. 約束
約束用大括弧內(nèi)的字符串表達(dá)式表示。約束可以附加在表元素、依賴關(guān)系或注釋上。
3. 標(biāo)記值
標(biāo)記值是一對(duì)字符串—一個(gè)標(biāo)記字符串和一個(gè)值字符串—存儲(chǔ)著有關(guān)元素的一些信息。標(biāo)記值用字符串表示,字符串有標(biāo)記名、等號(hào)和值。它們被規(guī)則地放置在大括弧內(nèi)。
4. 構(gòu)造型
構(gòu)造型是在一個(gè)已定義的模型元素的基礎(chǔ)上構(gòu)造的一種新的模型元素。構(gòu)造型的信息內(nèi)容和形式與已存在的基本模型元素相同,但是含義和使用不同。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛(ài)好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過(guò)深研歷年考試出題規(guī)律與考試大綱,深挖核心知識(shí)與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評(píng)論 查看完整評(píng)論 | |