




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四章面向?qū)ο蠓椒ā緦W(xué)習(xí)目標(biāo)】本章集中介紹了面向?qū)ο蠓椒ǖ幕驹砗透拍?,同時簡述了統(tǒng)一建模語言(UnifiedModeling Languange, UML)的主要作用和基本概念,并結(jié)合一個實例,論述了基于UML語言的面向?qū)ο蠓治龇椒ǎ瑥亩箤W(xué)生掌握面向?qū)ο蠓椒ǖ幕纠碚?,學(xué)會使用UML語言進(jìn)行面向?qū)ο蟮姆治龊徒!!緦W(xué)習(xí)方法】正確理解面向?qū)ο蠓椒ê蚒ML 語言涉及的基本概念,結(jié)合具體實例運用面向?qū)ο蠓治黾夹g(shù),從而達(dá)到學(xué)習(xí)目的?!倦y重點】本章的學(xué)習(xí)重點在于理解面向?qū)ο蠓椒ǖ脑砗透拍?,熟練運用UML 語言,掌握面向?qū)ο蟮姆治龇椒ǎ潆y點是怎樣在實際的軟件項目中靈活運用這些思想和方法。【課前思
2、考】面向?qū)ο箝_發(fā)方法有什么優(yōu)點?面向?qū)ο蠓椒ò男┗靖拍??為什么要對軟件系統(tǒng)建模?什么是 UML ?面向?qū)ο蠓治雠c面向?qū)ο笤O(shè)計的區(qū)別是什么?什么是軟件復(fù)用?4.1 面向?qū)ο蠓椒ǜ攀觥颈竟?jié)知識點】什么是面向?qū)ο竺嫦驅(qū)ο蠹夹g(shù)的發(fā)展歷史面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮能浖こ谭椒?.1.1 什么是面向?qū)ο竺嫦驅(qū)ο螅?Object Oriented)技術(shù)是軟件工程領(lǐng)域中的重要技術(shù),這種軟件開發(fā)思想比較自然地模擬了人類認(rèn)識客觀世界的方式,成為當(dāng)前計算機(jī)軟件工程學(xué)中的主流方法。應(yīng)該特別強(qiáng)調(diào)的是,面向?qū)ο蠹夹g(shù)不僅僅是一種程序設(shè)計方法,更重要的是一種對真實世界的抽象思維方式。面向?qū)ο蠓椒ǖ幕舅枷胧菑默F(xiàn)實世界
3、中客觀存在的事物(即對象)出發(fā),盡可能地運用人類的自然思維方式來構(gòu)造軟件系統(tǒng)。它更加強(qiáng)調(diào)運用人類在日常的邏輯思維中經(jīng)常采用的思想方法與原則,例如抽象、分類、繼承、聚合、封裝等,使開發(fā)者以現(xiàn)實世界中的事物為中心來思考和認(rèn)識問題,并以人們易于理解的方式表達(dá)出來。面向?qū)ο蠹夹g(shù)的基本觀點如下:(1) 客觀世界是由對象組成的,任何客觀的事物或?qū)嶓w都是對象,復(fù)雜的對象可以由簡單的對象組成。( 2) 具有相同數(shù)據(jù)和相同操作的對象可以歸并為一個類,對象是對象類的一個實例。( 3) 類可以派生出子類,子類繼承父類的全部特性(數(shù)據(jù)和操作),又可以有自己的新特性。子類與父類形成類的層次結(jié)構(gòu)。( 4) 對象之間通過消
4、息傳遞相互聯(lián)系。類具有封裝性,其數(shù)據(jù)和操作等對外界是不可見的,外界只能通過消息請求進(jìn)行某些操作,提供所需要的服務(wù)。軟件工程學(xué)家 Codd 和 Yourdon 認(rèn)為:面向?qū)ο髮ο箢惱^承通信如果一個軟件系統(tǒng)采用這些概念來建立模型并予以實現(xiàn),那么它就是面向?qū)ο蟮摹?.1.2 面向?qū)ο蠹夹g(shù)的發(fā)展歷史面向?qū)ο蠓椒ㄆ鹪从诿嫦驅(qū)ο蟪绦蛟O(shè)計語言,后來才逐步形成了面向?qū)ο蟮姆治龊驮O(shè)計方法,其發(fā)展過程大體上經(jīng)歷了初始階段、發(fā)展階段和成熟階段等過程。初始階段60 年代末挪威奧斯陸大學(xué)和挪威計算中心共同研制的Simula 語言是面向?qū)ο笳Z言發(fā)展歷史上的第一個里程碑,它首先引入了類的概念和繼承機(jī)制,后來的一些著名面向?qū)?/p>
5、象編程語言(如Smalltalk 、C+、Eiffel )都受到 Simula 的啟發(fā)。 80 年代, Xerox 研究中心推出了 Smalltalk 語言和環(huán)境,它具備了面向?qū)ο笳Z言的繼承和封裝的主要特征,使面向?qū)ο蟪绦蛟O(shè)計方法趨于完善,掀起了面向?qū)ο笱芯康母叱?。發(fā)展階段從 80 年代中期到90 年代,面向?qū)ο笳Z言十分熱門,大批比較實用的面向?qū)ο缶幊陶Z言( Object OrientedProgramming Language,OOPL )涌現(xiàn)出來, 如 C+ 、Objective-C 、Object Pascal、CLOS( Common Lisp Object System)、 Eiff
6、el 、 Actor 等,特別是 C+ 語言已成為目前應(yīng)用最廣泛的 OOPL。面向?qū)ο缶幊陶Z言的繁榮是面向?qū)ο蠓椒ㄗ呦驅(qū)嵱玫闹匾獦?biāo)志,也是面向?qū)ο蠓椒ㄔ谟嬎銠C(jī)學(xué)術(shù)界、產(chǎn)業(yè)界和教育界日益受到重視的推動力。成熟階段在 C+ 語言十分熱門的時候,人們開始了對面向?qū)ο蠓治觯∣bject Oriented Anlysis , OOA )的研究,進(jìn)而延伸到面向?qū)ο笤O(shè)計(Object Oriented Design ,OOD )。特別是90 年代以后,許多專家都在嘗試用不同的方法進(jìn)行面向?qū)ο蟮姆治雠c設(shè)計,其中比較著名的有Booch 的方法、 Rumbaugh 的 OMT 方法、Coad/Yourdon 的方
7、法、 Wirtf-Brock 的 RDD 方法、 Shlear-Mellor 的方法、 Gibon 的 OBA 方法、 Jacobson 的 OOSE 方法、 Martin-Odell 的方法、 Fusion 方法等,這些方法各有所長, 力圖解決復(fù)雜軟件系統(tǒng)的開發(fā)問題。在這段時期,面向?qū)ο蟮姆治龊驮O(shè)計技術(shù)逐漸走向?qū)嵱?,最終形成了從分析、設(shè)計到編程、測試與維護(hù)一整套的軟件工程體系。4.1.3 面向?qū)ο蟮幕靖拍顚ο髮ο髲牟煌慕嵌扔胁煌暮x,我們針對系統(tǒng)開發(fā)來討論對象的概念,其定義是:對象( Object )是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位,由一組屬性和對這組屬性
8、進(jìn)行操作的一組服務(wù)組成。在這里,屬性和服務(wù)是構(gòu)成對象的兩個基本要素,其定義是:屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項。服務(wù)是用來描述對象動態(tài)特征(行為)的一個操作序列。從一般意義上講,對象是現(xiàn)實世界中的一個實際存在的事物,它可以是有形的,如車輛、房屋等,也可以是無形的,如國家、生產(chǎn)計劃等。而人們在開發(fā)一個系統(tǒng)時,則在一定的范圍(也稱問題域)內(nèi)考慮和認(rèn)識與系統(tǒng)目標(biāo)有關(guān)的事物,并用系統(tǒng)中的對象來抽象地表示它們。在這里,對象只描述客觀事物本質(zhì)的、與系統(tǒng)目標(biāo)有關(guān)的特征,而不考慮那些非本質(zhì)的、與系統(tǒng)目標(biāo)無關(guān)的特征。同時,對象是屬性和服務(wù)的結(jié)合體,對象的屬性值只能由這個對象的服務(wù)來讀取和修改。類類( Cl
9、ass)是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。類好比是一個對象模板,用它可以產(chǎn)生多個對象。類所代表的是一個抽象的概念或事物,在客觀世界中實際存在的是類的實例,即對象。舉例:在學(xué)校教學(xué)管理系統(tǒng)中, 學(xué)生 是一個類,其屬性具有姓名、性別、年齡等,可以定義 入學(xué)注冊 、 選課 等操作。一個具體的學(xué)生 王平 是一個對象,也是學(xué)生 類的一個實例。把眾多的事物歸納并劃分成一些類是人類在認(rèn)識客觀世界時經(jīng)常采用的思維方法,分類的原則是抽象,從那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征中找出事物的共性,并將具有共同性質(zhì)的事物劃分成一類,得出一個抽象
10、的概念。例如:人、房屋、樹木等都是一些抽象的概念,它們是一些具有共同特征的事物的集合,稱為類。類的概念使我們能對屬于該類的全部個體事物進(jìn)行統(tǒng)一的描述, 樹具有樹根、樹干、樹枝和樹葉,它能進(jìn)行光合作用 ,這個描述適合所有樹,而不必對每一棵具體的樹進(jìn)行描述。封裝封裝( Encapsulation )是把對象的屬性和服務(wù)結(jié)合成一個獨立的系統(tǒng)單位,并盡可能隱藏對象的內(nèi)部細(xì)節(jié)。封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,系統(tǒng)中把對象看成是屬性和對象的結(jié)合體,使對象能夠集中而完整地描述一個具體事物。封裝的信息隱蔽作用反映了事物的相對獨立性,當(dāng)我們從外部觀察對象時,只需要了解對象所呈現(xiàn)的外部行為(即做什么),而不必關(guān)
11、心它的內(nèi)部細(xì)節(jié)(即怎么做)。舉例:電視機(jī)包括外形尺寸、分辨率、電壓、電流等屬性,具有打開、關(guān)閉、調(diào)諧頻道、轉(zhuǎn)換頻道、設(shè)置圖象等服務(wù),封裝意味著將這些屬性和服務(wù)結(jié)合成一個不可分的整體,它對外有一個顯示屏、插頭和一些按鈕等接口,用戶通過這些接口使用電視機(jī),而不關(guān)心其內(nèi)部的實現(xiàn)細(xì)節(jié)。與封裝密切相關(guān)的概念是可見性,它是指對象的屬性和服務(wù)允許對象外部存取和引用的程度。在軟件上,封裝要求對象以外的部分不能隨意存取對象的內(nèi)部數(shù)據(jù)(屬性),從而有效地避免了外部錯誤對它的 交叉感染 ,使軟件錯誤能夠局部化,大大減少了查錯和排錯的難度。另外,當(dāng)對象內(nèi)部需要修改時,由于它只通過少量的服務(wù)接口對外提供服務(wù),便大大減少
12、了內(nèi)部修改對外部的影響,即減少了修改引起的 波動效應(yīng) 。封裝也有副作用,如果強(qiáng)調(diào)嚴(yán)格的封裝,則對象的任何屬性都不允許外部直接存取,因此就要增加許多沒有其他意義、只負(fù)責(zé)讀或?qū)懙姆?wù),從而為編程工作增加了負(fù)擔(dān),增加了運行開銷。為了避免這一點,語言往往采取一種比較靈活的做法,即允許對象有不同程度的可見性。繼承繼承( Inheritance )是指子類可以自動擁有父類的全部屬性和服務(wù)。繼承簡化了人們對現(xiàn)實世界的認(rèn)識和描述,在定義子類時不必重復(fù)定義那些已在父類中定義過的屬性和服務(wù),只要說明它是某個父類的子類,并定義自己特有的屬性和服務(wù)即可。舉例:考慮輪船和客輪兩個類,輪船具有噸位、時速、吃水線等屬性和行
13、駛、停泊等服務(wù),客輪具有輪船的全部屬性和服務(wù),又有自己的特殊屬性(如載客量)和服務(wù)(如供餐),因此客輪是輪船的子類,輪船是客輪的父類。與父類 /子類等價的其他術(shù)語有一般類/ 特殊類、超類 / 子類、基類 /派生類等。一個類可以是多個父類的子類,它從多個父類中繼承了屬性與服務(wù),這稱為多繼承( Multiple Inheritance)。舉例:客輪既是一種輪船,又是一種客運工具,它可以繼承輪船和客運工具這兩個類的屬性和服務(wù)。繼承對于軟件復(fù)用是十分有益的,如果將OO 方法開發(fā)的類作為可復(fù)用構(gòu)件,那么在開發(fā)新系統(tǒng)時可以直接復(fù)用這個類,還可以將其作為父類,通過繼承而實現(xiàn)復(fù)用,從而大大擴(kuò)展了復(fù)用的范圍。消
14、息消息( Message)是對象發(fā)出的服務(wù)請求,一般包含提供服務(wù)的對象標(biāo)識、服務(wù)標(biāo)識、輸入信息和應(yīng)答信息等信息。通常,一個對象向另一個對象發(fā)出消息請求某項服務(wù),接收消息的對象響應(yīng)該消息,激發(fā)所要求的服務(wù)操作,并將操作結(jié)果返回給請求服務(wù)的對象。舉例:使用電視機(jī)時,用戶通過按鈕或遙控器發(fā)出轉(zhuǎn)換頻道的消息,電視機(jī)變換對電視臺的接收信號頻率,并將結(jié)果顯示給用戶。在這里,用戶發(fā)出的信息包括:接受者 -電視機(jī);要求的服務(wù) - 轉(zhuǎn)換頻道;輸入信息 - 轉(zhuǎn)換后的頻道序號;應(yīng)答信息 -轉(zhuǎn)換后頻道的節(jié)目。面向?qū)ο蠹夹g(shù)的封裝機(jī)制使對象各自獨立,各司其職,消息通信則為它們提供了唯一合法的動態(tài)聯(lián)系途徑,使它們的行為能夠
15、相互配合,構(gòu)成一個有機(jī)的運動的系統(tǒng)。結(jié)構(gòu)與連接任何事物之間都不是互相孤立,而是彼此聯(lián)系的,并因此構(gòu)成一個有機(jī)的整體。對象之間常見的聯(lián)系包括: 分類關(guān)系,即一般與特殊結(jié)構(gòu); 組成關(guān)系,即整體與部分結(jié)構(gòu); 對象屬性之間的靜態(tài)聯(lián)系,即實例連接; 對象行為之間的動態(tài)聯(lián)系,即消息連接。(1) 一般與特殊結(jié)構(gòu)圖 4.1 一般與特殊結(jié)構(gòu)又稱分類結(jié)構(gòu)( classification structure ),它是由一組具有一般與特殊關(guān)系(即繼承關(guān)系)的類所組成的結(jié)構(gòu)。其中,由一些單繼承關(guān)系的類形成的結(jié)構(gòu)稱為層次結(jié)構(gòu),由一些多繼承關(guān)系的類形成的結(jié)構(gòu)稱為網(wǎng)格結(jié)構(gòu),圖4.1 顯示了一般與特殊的結(jié)構(gòu)。(2) 整體與部分
16、結(jié)構(gòu)又稱組裝結(jié)構(gòu)(composition structure),它描述對象之間的組成關(guān)系,即一個(或一些)對象是另一個對象的組成或部分。例如,大學(xué)中的系由辦公室、實驗室、資料室等組成, 辦公室 、 實驗室 、 資料室 對象類與 系 對象類之間是部分與整體的關(guān)系。( 3) 實例連接實例連接反映對象之間的靜態(tài)聯(lián)系,它是通過對象的屬性來表現(xiàn)對象之間的依賴關(guān)系。在面向?qū)ο蟮男g(shù)語中,對象之間的實例連接被稱為鏈接(Link ),而存在實例連接的對象類之間的聯(lián)系稱為 關(guān)聯(lián) ( Association )。例如, 教師 與 學(xué)生 是獨立的兩個類, 它們之間存在 教學(xué) 聯(lián)系,這種聯(lián)系是通過類中的 教學(xué)課程 、
17、時間 、 地點 等屬性建立起來的。(4) 消息連接消息連接描述了對象之間的動態(tài)聯(lián)系,即如果一個對象在執(zhí)行自己的服務(wù)時,需要通過消息請求另一個對象為它完成某個服務(wù),那么就說第一個對象與第二個對象之間存在著消息連接。消息連接是有向的,從消息發(fā)送者指向消息接收者。一般與特殊結(jié)構(gòu)、整體與部分結(jié)構(gòu)、實例連接和消息連接都是面向?qū)ο蟮姆治龊驮O(shè)計階段必須考慮的重要概念,只有在分析和設(shè)計階段認(rèn)清問題域中的這些結(jié)構(gòu)與連接關(guān)系,編程時才能準(zhǔn)確而有效地反映問題域。多態(tài)性多態(tài)性( Polymorphism )是指在父類中定義的屬性或服務(wù)被子類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。在體現(xiàn)一般與特殊關(guān)系的一個類
18、層次結(jié)構(gòu)中,不同層次的類可以共享一個操作,但卻有各自不同的實現(xiàn)。當(dāng)一個對象接收到一個請求時,它根據(jù)其所屬的類,動態(tài)地選用在該類中定義的操作。舉例:在父類幾何圖形 中定義了一個服務(wù) 繪圖 ,但并不確定執(zhí)行時繪制一個什么圖形。子類橢圓 和 多邊形 都繼承了幾何圖形類的繪圖服務(wù),但其功能卻不相同:一個是畫橢圓,一個是畫多邊形。當(dāng)系統(tǒng)的其他部分請求繪制一個幾何圖形時,消息中的服務(wù)都是 繪圖 ,但橢圓和多邊形接收到該消息時卻各自執(zhí)行不同的繪圖算法。多態(tài)性機(jī)制不但為軟件的結(jié)構(gòu)設(shè)計提供了靈活性,減少了信息冗余,明顯提高了軟件的可復(fù)用性和可擴(kuò)充性。多態(tài)性的實現(xiàn)需要OOPL 提供相應(yīng)的支持,與多態(tài)性實現(xiàn)有關(guān)的語
19、言功能包括:重載( overload)、動態(tài)綁定( dynamic binding )、類屬( generic)。主動對象主動對象 (Active Object )是一組屬性和一組服務(wù)的封裝體, 其中至少有一個服務(wù)不需要接收消息就能主動執(zhí)行(稱為主動服務(wù))。主動對象的作用是描述問題域中具有主動行為的事物以及在系統(tǒng)設(shè)計時識別的任務(wù),其主動服務(wù)描述相應(yīng)任務(wù)所應(yīng)完成的操作。 在系統(tǒng)實現(xiàn)階段, 主動服務(wù)應(yīng)該被實現(xiàn)為一個能并發(fā)執(zhí)行的、 主動的程序單位,如進(jìn)程或線程。除了具有主動服務(wù)外,主動對象的其他方面與被動對象沒有什么不同,主動對象中也可以有一些在消息的驅(qū)動下執(zhí)行的一般任務(wù)。4.1.4面向?qū)ο蟮能浖?/p>
20、程方法面向?qū)ο蟮能浖こ谭椒ㄊ敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面運用,涉及到從面向?qū)ο蠓治觯?OOA )、面向?qū)ο笤O(shè)計 ( OOD )、面向?qū)ο缶幊?(OOP)、面向?qū)ο鬁y試 ( Object Oriented Testing ,OOT )到面向?qū)ο筌浖S護(hù)( Object Oriented Software Maintenance , OOSM)的全過程。面向?qū)ο蟮姆治雒嫦驅(qū)ο蟮姆治觯∣OA )就是運用面向?qū)ο蟮姆椒ㄟM(jìn)行需求分析,其主要任務(wù)是分析和理解問題域,找出描述問題域和系統(tǒng)責(zé)任所需的類及對象,分析它們的內(nèi)部構(gòu)成和外部關(guān)系,建立OOA 模型。面向?qū)ο蟮脑O(shè)計面向?qū)ο蟮脑O(shè)計 ( OOD )就是
21、根據(jù)已建立的分析模型, 運用面向?qū)ο蠹夹g(shù)進(jìn)行系統(tǒng)軟件設(shè)計。 它將 OOA 模型直接變成 OOD 模型,并且補(bǔ)充與一些實現(xiàn)有關(guān)的部分,如人機(jī)界面、數(shù)據(jù)存儲、任務(wù)管理等。OOA 與 OOD 采用一致的表示法,使得從OOA 到 OOD 不存在轉(zhuǎn)換,只有局部的修改或調(diào)整,并增加了與實現(xiàn)有關(guān)的獨立部分,因此, OOA 與 OOD 之間不存在傳統(tǒng)方法中分析與設(shè)計之間的鴻溝,成為面向?qū)ο蠓椒ǖ闹饕獌?yōu)勢。面向?qū)ο蟮木幊堂嫦驅(qū)ο蟮木幊蹋?OOP)就是用一種面向?qū)ο蟮木幊陶Z言將 OOD 模型中的各個成分編寫成程序,從 OOA OOD OOP 的無縫連接和平滑過渡,提高了開發(fā)工作的效率和質(zhì)量。面向?qū)ο蟮臏y試面向?qū)ο?/p>
22、的測試( OOT)是指對于運用 OO 技術(shù)開發(fā)的軟件,在測試過程中繼續(xù)運用 OO 技術(shù)進(jìn)行以對象概念為中心的軟件測試。它以類作為基本測試單位,集中檢查在類定義之內(nèi)的屬性、服務(wù)和有限的對外接口,大大減少了錯誤的影響范圍。面向?qū)ο蟮能浖S護(hù)軟件維護(hù)的最大難點在于人們對軟件的理解過程中所遇到的障礙,在面向?qū)ο蠓椒ㄖ?,各階段采用的表示是一致的,從而大大降低了理解的難度,無論是從程序中的錯誤追溯到問題域,還是需求的變化需要從問題域追溯到程序,整個過程都是平坦的。另外,對象的封裝性使得一個對象的修改對其他對象的影響很小,不至于牽一發(fā)而動全身。面向?qū)ο蠓椒ǖ膬?yōu)點面向?qū)ο蠓椒ㄅc傳統(tǒng)的軟件開發(fā)方法相比,具有許多
23、顯著的優(yōu)點,其主要優(yōu)點如下:( 1) 按照人類的自然思維方式,面對客觀世界建立軟件系統(tǒng)模型,有利于對問題域和系統(tǒng)責(zé)任的理解,有利于人員交流。( 2) 在整個開發(fā)過程中采用統(tǒng)一的概念和模型表示,填平了語言之間的鴻溝,使得開發(fā)活動之間平滑過渡,圖 4.2 顯示了傳統(tǒng)的軟件工程方法與面向?qū)ο蠓椒ǖ谋容^。圖 4.2 傳統(tǒng)的開發(fā)方法與面向?qū)ο蟮拈_發(fā)方法在傳統(tǒng)的結(jié)構(gòu)化方法中,自然語言與編程語言之間存在差距,開發(fā)人員需要將自然語言表示的分析結(jié)果轉(zhuǎn)換成計算機(jī)的編程語言,工作量巨大且容易出錯。在面向?qū)ο蟮姆椒ㄖ校?OOA 、OOD 和 OOP 采用統(tǒng)一的表示方法,不存在這樣的鴻溝。( 3) 對象所具有的封裝性和
24、信息隱蔽等特性,使其容易實現(xiàn)軟件復(fù)用。對象類可以派生出新類,類可以產(chǎn)生實例對象,從而實現(xiàn)了對象類的數(shù)據(jù)結(jié)構(gòu)和操作代碼的軟構(gòu)件的復(fù)用。另外,面向?qū)ο蟪绦蛟O(shè)計語言的開發(fā)環(huán)境一般預(yù)定義了系統(tǒng)動態(tài)連接庫,提供大量公用程序代碼,避免重復(fù)編寫,提高了開發(fā)效率和質(zhì)量。( 4) 在面向?qū)ο蟮姆椒ㄖ?,系統(tǒng)由對象構(gòu)成,對象是一個包含屬性和操作兩方面的獨立單元,對象之間通過消息聯(lián)系。這樣的系統(tǒng)一旦出錯,容易定位和修改,系統(tǒng)的可維護(hù)性好。4.2統(tǒng)一建模語言 UML【本節(jié)知識點】軟件建模的意義什么是 UMLUML 的概念模型UML 的應(yīng)用4.2.1 軟件建模的意義毫無疑問,高質(zhì)量是軟件開發(fā)努力追求的一個重要目標(biāo)。但是,
25、軟件質(zhì)量受到諸多因素的混合影響,在軟件工程過程中,我們面臨著成本和工作量的壓力,在軟件產(chǎn)品方面,我們需要保證軟件的功能、性能、有效性、容錯能力、擴(kuò)展性、可維護(hù)性、可移植性等等,尤其對大型復(fù)雜軟件系統(tǒng)而言,費用超支、生產(chǎn)率低下和質(zhì)量不高等問題常常會困繞著軟件開發(fā)。然而,造成這些難以應(yīng)對的問題的主要根源在于軟件的復(fù)雜性,如圖 4.3 從技術(shù)和管理兩方面顯示了軟件的復(fù)雜性??梢赃@樣說,未來 20 年我們面臨的挑戰(zhàn)不是成本、速度和性能,而將是復(fù)雜性的問題。從管理角度來看,軟件規(guī)模、客戶要求和資金狀況等對其產(chǎn)生直接的影響,顯然,特定用戶委托開發(fā)的大型軟件項目的管理難度遠(yuǎn)遠(yuǎn)高于自主開發(fā)的小型軟件產(chǎn)品。從技
26、術(shù)角度來看,應(yīng)用第四代語言( 4GL )和組件技術(shù)開發(fā)軟件,以及實現(xiàn)交互特性等的技術(shù)復(fù)雜度較低,但是,滿足體系結(jié)構(gòu)、系統(tǒng)定制、軟件復(fù)用和高性能等要求卻具有很高的技術(shù)復(fù)雜度。各種類型的軟件系統(tǒng)分布在軟件復(fù)雜度空間的不同部分,如防御武器系統(tǒng)和空中運輸控制系統(tǒng)在技術(shù)和管理上均具有很高的復(fù)雜度,而小型的科學(xué)模擬系統(tǒng)和商業(yè)制表軟件則相對簡單得多。人們在處理現(xiàn)實問題的過程中,對復(fù)雜問題的理解能力是有限的,因此,需要采用科學(xué)的方法降解復(fù)雜度,從而保證正確地解決問題。建模( Modeling )是一種處理上述復(fù)雜性的有效手段,它將難以處理的復(fù)雜問題劃分成若干容易解決的小問題,解決了這些小問題也就解決了復(fù)雜的難
27、題。建模的目的是將所要設(shè)計的結(jié)構(gòu)和系統(tǒng)的行為融匯貫通,對系統(tǒng)的體系結(jié)構(gòu)進(jìn)行可視化和控制,化解復(fù)雜性的問題,有效地管理開發(fā)風(fēng)險,從而開發(fā)出高品質(zhì)的軟件。也許人們會產(chǎn)生這樣的疑問:軟件已經(jīng)是抽象的東西,為什么要進(jìn)行軟件建模?我們不可否認(rèn)下面的事實: 軟件系統(tǒng)越來越大,如Windows NT5.0 具有 4 千萬行代碼,任何個人都不可能單獨管理這些代碼; 沒有參加開發(fā)的人員無法直接理解程序代碼; 我們需要一種描述復(fù)雜系統(tǒng)的簡單方法。近年來,面向?qū)ο蟮慕7椒ㄖ饾u流行起來,對象或類成為軟件系統(tǒng)的主要構(gòu)造塊,人們在問題空間或解空間中識別各種對象,并對其進(jìn)行抽象化描述,從不同的視角建立模型,形成系統(tǒng)的不同
28、視圖。這種方法適合于在各種問題域中建造各種規(guī)模和復(fù)雜程度的系統(tǒng),為使用組件技術(shù)裝配系統(tǒng)提供了良好的概念基礎(chǔ)。在我們的日?;顒又校R呀?jīng)成為一項經(jīng)過驗證且被廣為接受的工程技術(shù)。在建筑業(yè),人們借助建筑模型獲得對實際建筑物的印象,通過數(shù)學(xué)模型分析風(fēng)力等對建筑物的影響;在制造業(yè),人們將計算機(jī)模型和物理模型等應(yīng)用于汽車和飛機(jī)的設(shè)計之中;在電影業(yè),劇本也是一種建模的形式。鑒于軟件所具有的復(fù)雜性,以及人們對復(fù)雜問題理解的局限性,在軟件開發(fā)過程中使用共同的建模語言進(jìn)行軟件建模成為必要,特別是對于大型復(fù)雜系統(tǒng)而言。建??梢愿玫乩斫馕覀冋陂_發(fā)的系統(tǒng),有助于根據(jù)實際需求對系統(tǒng)進(jìn)行可視化,從而詳細(xì)說明系統(tǒng)的結(jié)構(gòu)
29、和行為,為指導(dǎo)我們構(gòu)造系統(tǒng)提供了一個模板,并對我們作出的決策進(jìn)行文檔化。4.2.2什么是 UML面向?qū)ο蟮慕7椒ㄊ加?0 世紀(jì)80 年代初期,大量有決定意義的思想形成于20 世紀(jì)90 年代中期,這期間涌現(xiàn)出一些重要方法,包括Booch 、OMT 、 Shlaer-Mellor 、Fusion、 OOSE 和 Coad-Yourdon等。1994 年 10 月, Jim Rumbaugh 和 Grady Booch 開始共同合作,于1995 年 10 月提出 統(tǒng)一方法( UnifiedMethod )0.8 版本。隨后, Ivar Jacobson 也加入其中,同時將 OOSE 思想融合進(jìn)來,
30、于 1996 年 6 月發(fā)布 統(tǒng)一建模語言( Unified Modeling Language ,UML ) 0.9 版本。1997 年 1 月, UML1.0 版本被提交給OMG 組織,申請作為一種標(biāo)準(zhǔn)建模語言。在此期間,一些重要的軟件開發(fā)商和系統(tǒng)集成商成立了一個UML 伙伴組織,如Digital Equipment Corporation 、HP、IBM 、Microsoft 、Oracle、Rational 等,它們積極地使用UML 并提出反饋意見,于1997 年 7 月將 UML 的修改版(1.1 版本)再次提交OMG ,1997 年 11 月, UML1.1 版本正式被OMG 采納
31、作為業(yè)界標(biāo)準(zhǔn)。目前, UML 已經(jīng)提交國際標(biāo)準(zhǔn)化組織(ISO )進(jìn)行國際標(biāo)準(zhǔn)化。統(tǒng)一這些先進(jìn)的面向?qū)ο笏枷?,域的建模語言。圖 4.4 UML 的發(fā)展歷史UML 是 Booch 、OOSE 和 OMT 方法的結(jié)合,同時吸收了其他方法的思想,包括Wirfs-Brock 、Ward、Cunningham、Rubin 、Harel、Gamma、Meyer 、Odell 、Embley 、Coad、Yourdon 、Shlaer 和 Mellor 等,通過UML 成為一種定義明確的、富有表現(xiàn)力的、強(qiáng)大的、可應(yīng)用于廣泛的問題統(tǒng)一建模語言( Unified Modeling Language ,UML )是
32、一種直觀化、明確化、構(gòu)建和文檔化軟件系統(tǒng)產(chǎn)物的通用可視化建模語言, 從企業(yè)信息系統(tǒng)到基于 Web 的分布式應(yīng)用,甚至嚴(yán)格的實時嵌入式系統(tǒng)都適合于用 UML 來建模。它是一種富有表達(dá)力的語言,可以描述開發(fā)所需要的各種視圖,并以此為基礎(chǔ)組建系統(tǒng)。(1) UML 是一種語言像任何語言一樣, UML 提供了用于交流的詞匯表及其組詞規(guī)則,說明如何創(chuàng)建或理解結(jié)構(gòu)良好的模型,但它并沒有說明在什么時候創(chuàng)建什么樣的模型。( 2) UML 是一種可視化的建模語言軟件開發(fā)的難點在于項目參與人員之間的溝通和交流,領(lǐng)域?qū)<?、軟件設(shè)計開發(fā)人員、客戶等各自使用不同的語言交流,對系統(tǒng)的概念模型容易產(chǎn)生錯誤的理解。另外,閱讀程
33、序代碼雖然可以推斷其含義,但無法正確地理解它,當(dāng)接手別人的開發(fā)工作時,你往往由于難以理解而不得不重新實現(xiàn)部分程序。UML 提供一組具有明確語義的圖形符號, 可以建立清晰的模型便于交流, 同時所有開發(fā)人員都可以無歧義地解釋這個模型。(3) UML 是一種可用于詳細(xì)描述的語言UML 為所有重要的分析、設(shè)計和實現(xiàn)決策提供了精確的、無歧義的和完整的描述。(4)UML是一種構(gòu)造語言UML不是一種可視化的編程語言,但它所描述的模型可以映射成不同的編程語言,如JAVA 、 C+ 和Visual Basic 等。這種映射可以進(jìn)行正向工程由編程語言代碼重新構(gòu)造UML 模型。- 從 UML模型到編程語言的代碼生成
34、,也可以進(jìn)行逆向工程-(5)UML是一種文檔化語言UML 不是過程,也不是方法,但允許任何一種過程和方法使用它。它可以建立系統(tǒng)體系結(jié)構(gòu)及其詳細(xì)文檔,提供描述需求和用于測試的語言,同時可以對項目計劃和發(fā)布管理的活動進(jìn)行建模。4.2.3 UML 的概念模型UML 由視圖( Views )、圖( Diagrams )、模型元素( Model Elements )和公共機(jī)制( General Mechanisms)等部分組成。視圖( Views )完整地描述系統(tǒng)需要一組視圖反映系統(tǒng)的各個方面,每個視圖代表系統(tǒng)的一個抽象,反映了系統(tǒng)中的一個特定方面,從而使不同的人員關(guān)注系統(tǒng)的不同方面。UML 采用五個互
35、連的視圖來描述軟件系統(tǒng)的體系結(jié)構(gòu),即用例視圖( Use-case View)、設(shè)計視圖(DesignView )、進(jìn)程視圖( Process View)、實現(xiàn)視圖( Implementation View )和展開視圖( Deployment View ),如圖 4.5 所示。圖 4.5 軟件系統(tǒng)結(jié)構(gòu)的4+1 視圖( 1) 用例視圖( Use Case View)用例視圖描述系統(tǒng)應(yīng)該具有的功能集,它從系統(tǒng)外部用戶的角度出發(fā),實現(xiàn)對系統(tǒng)的抽象表示。在用例視圖中,角色( Actor )代表外部用戶或其他系統(tǒng),用例( Use-case)表示系統(tǒng)能夠提供的功能,通過列舉角色和用例,顯示角色在每個用例中
36、的參與情況。用例視圖是其他視圖的核心和基礎(chǔ),其他視圖的構(gòu)造和發(fā)展依賴于用例視圖所描述的內(nèi)容。用例試圖靜態(tài)地描述系統(tǒng)功能,主要為用戶、設(shè)計人員、開發(fā)人員和測試人員而設(shè)置。( 2) 設(shè)計視圖( Design View )設(shè)計視圖用來揭示系統(tǒng)功能的內(nèi)部設(shè)計和協(xié)作情況。它利用靜態(tài)結(jié)構(gòu)和動態(tài)行為描述系統(tǒng)的功能,其中,靜態(tài)結(jié)構(gòu)描述類、對象及其關(guān)系等,動態(tài)行為主要描述對象之間發(fā)送消息時產(chǎn)生的動態(tài)協(xié)作、一致性和并發(fā)性等,接口和類的內(nèi)部結(jié)構(gòu)需要在設(shè)計視圖中定義。( 3) 進(jìn)程視圖( Process View)進(jìn)程視圖描述系統(tǒng)的并發(fā)工作狀況,它包含形成系統(tǒng)并發(fā)與同步機(jī)制的線程和進(jìn)程,主要提供給系統(tǒng)開發(fā)商和集成商。
37、( 4) 實現(xiàn)視圖( Implementation View )實現(xiàn)視圖由一些獨立的構(gòu)件和文件組成,顯示實現(xiàn)模塊及其之間的依賴關(guān)系。這些構(gòu)件和文件可以用各種方法裝配,以產(chǎn)生運行系統(tǒng)。( 5) 分布視圖( Deployment View )分布視圖主要描述系統(tǒng)的物理架構(gòu),顯示系統(tǒng)硬件拓?fù)浣Y(jié)構(gòu)的節(jié)點,提供給開發(fā)人員、集成人員和測試人員。圖( Diagrams)系統(tǒng)模型中每一個視圖的內(nèi)容是由一些圖來描述的,UML 中包含用例圖、類圖、對象圖、狀態(tài)圖、時序圖、協(xié)作圖、活動圖、組件圖、分布圖等九種圖,如圖 4.6 所示。對整個系統(tǒng)而言,其功能由用例圖描述,靜態(tài)結(jié)構(gòu)由類圖和對象圖描述,動態(tài)行為由狀態(tài)圖、時
38、序圖、協(xié)作圖和活動圖描述,而物理架構(gòu)則是由組件圖和分布圖描述。圖 4.6 UML 的圖(1) 用例圖用例圖定義了系統(tǒng)的功能需求,它完全是從系統(tǒng)的外部觀看系統(tǒng)功能,并不描述系統(tǒng)內(nèi)部對功能的具體實現(xiàn)。在用例圖中,角色代表觸發(fā)系統(tǒng)功能的用戶或其他系統(tǒng),用例代表具體的功能描述。( 2) 類圖類圖描述系統(tǒng)的靜態(tài)結(jié)構(gòu),表示系統(tǒng)中的類以及類與類之間的關(guān)系。( 3) 對象圖對象圖描述了一組對象以及它們之間的關(guān)系,表示類的對象實例。( 4) 狀態(tài)圖狀態(tài)圖表示一個狀態(tài)機(jī),強(qiáng)調(diào)對象行為的事件順序。( 5) 時序圖和協(xié)作圖時序圖和協(xié)作圖均表示一組對象之間的動態(tài)協(xié)作關(guān)系, 其中時序圖反映對象之間發(fā)送消息的時間順序,協(xié)作
39、圖反映收發(fā)消息的對象的結(jié)構(gòu)組織。時序圖和協(xié)作圖是同構(gòu)的,即兩者之間可以相互轉(zhuǎn)換。(6) 活動圖活動圖反映系統(tǒng)中從一個活動到另一個活動的流程,強(qiáng)調(diào)對象間的控制流程。( 7) 組件圖組件圖描述組件以及它們之間的關(guān)系,表示系統(tǒng)的靜態(tài)實現(xiàn)視圖。( 8) 分布圖分布圖反映了系統(tǒng)中軟件和硬件的物理架構(gòu),表示系統(tǒng)運行時的處理節(jié)點以及節(jié)點中組件的配置。4.2.3 UML 的概念模型模型元素( Model Elements )在 UML 中,模型元素由一些基本的構(gòu)造元素以及它們之間的連接關(guān)系組成,素的圖形符號。圖 4.7 列出了一些模型元圖 4.7 UML 的基本模型元素( 1) 類是對一組具有相同屬性、相同操
40、作、相同關(guān)系和相同語義的對象的描述。( 2) 對象是類的實例。( 3) 接口是描述一個類或組件的服務(wù)的操作集。( 4) 用例是對一組動作序列的描述。( 5) 狀態(tài)機(jī)描述了一個對象響應(yīng)事件所經(jīng)歷的狀態(tài)序列。( 6) 組件是系統(tǒng)中物理的、可替代的部件。( 7) 節(jié)點是在運行時存在的物理元素。( 8) 包是把元素組織成組的機(jī)制。( 9) 注解依附于一個或一組元素之上,對其進(jìn)行約束或解釋。( 10) 依賴是一種使用關(guān)系,它描述了一個事物的變化會影響到另一個使用它的事物。( 11) 關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系,說明一個事物的對象與另一個事物的對象間的聯(lián)系。( 12) 泛化是一種一般事物(父類)和特殊事物(子類)
41、之間的關(guān)系。(13) 實現(xiàn)是一個類元指定了由另一個類元保證執(zhí)行的契約, 例如接口和實現(xiàn)它們的類或組件之間的關(guān)系。語義規(guī)則( Rules)UML 定義了一系列的語義規(guī)則,用于建立語義一致、與其他模型協(xié)調(diào)的良好模型。( 1) 命名( Name):為事物、關(guān)系和圖起名;( 2) 范圍( Scope):給一個名稱以特定含義的語境;( 3) 可見性( Visibility):如何使一個名字被外部識別和使用,它包括public(公共) 、protected(保護(hù))、 private(私有)三種可見性,分別用+ 、# 和- 表示;( 4) 完整性( Integrity ):事物如何正確地、一致地相互聯(lián)系;(
42、 5) 可執(zhí)行性( Execution):運行或模擬動態(tài)模型的含義是什么。公共機(jī)制( Common Mechanisms )UML 規(guī)定了四種公共機(jī)制:說明、修飾、通用劃分、擴(kuò)展機(jī)制。(1) 說明( Specification ):UML 不只是一個圖形語言,它還規(guī)定了對于每一個UML 圖形的文字說明的語法和語義。( 2) 修飾( Adornment ):大多數(shù)的 UML 元素有唯一的直接圖形表示法,表達(dá)該元素的最重要的特征,除此之外,還可以對該元素加上各種修飾,說明其他方面的細(xì)節(jié)特征。(3) 通用劃分( Common Division ): UML 的模型元素有兩種劃分,即型-實例、接口 -
43、實現(xiàn)。型 -實例是一個通用描述符與單個元素項之間的對應(yīng)關(guān)系,如類與對象的劃分、數(shù)據(jù)類型與數(shù)據(jù)值的劃分;在接口- 實現(xiàn)的劃分中,接口聲明了一個約定,而實現(xiàn)則負(fù)責(zé)執(zhí)行接口的全部語義。( 4) 擴(kuò)展機(jī)制( Extensibility ): UML 的語言擴(kuò)展機(jī)制允許UML 的使用人員根據(jù)需要自定義一些構(gòu)造型語言成分,擴(kuò)展UML或使其用戶化,便于完成軟件系統(tǒng)的開發(fā)。擴(kuò)展機(jī)制(Extensibility)UML 提供了幾種擴(kuò)展機(jī)制,允許建模者在不用改變基本建模語言的情況下做一些通用的擴(kuò)展。制包括約束、標(biāo)記值和構(gòu)造型,圖4.8 顯示了擴(kuò)展機(jī)制的一個例子。擴(kuò)展機(jī)( 1) 約束( constraint)擴(kuò)展了
44、 UML 構(gòu)造元素的語義,它是用文字表達(dá)式表示的語義限制。( 2) 標(biāo)記值( tagged value)擴(kuò)展了 UML 構(gòu)造元素的特性,它是附加到任何模型元素上的命名的信息塊。( 3) 構(gòu)造型( stereotype)擴(kuò)展了 UML 的語匯,它是在一個已定義的模型元素的基礎(chǔ)上構(gòu)造的一種新的模型元素。UML 是一種標(biāo)準(zhǔn)的可視化建模語言,它采用若干視圖(View )構(gòu)造系統(tǒng)模型,視圖用圖(Diagram )進(jìn)行描述,圖又用模型元素的符號來表示。UML 的視圖包括用例視圖(Use-case View)、設(shè)計視圖( Design View )、進(jìn)程視圖( Process View)、實現(xiàn)視圖 (Imp
45、lementation View )和展開視圖 (Deployment View )等,UML 圖包括用例圖、 類圖、對象圖、狀態(tài)圖、時序圖、協(xié)作圖、活動圖、組件圖、分布圖等,圖中包含的模型元素可以有類、對象、接口、組件、用例、狀態(tài)機(jī)、關(guān)系(關(guān)聯(lián)、泛化、依賴、實現(xiàn))等。UML 定義了一系列的語義規(guī)則,用于建立語義一致、與其他模型協(xié)調(diào)的良好模型。UML 規(guī)定了說明、修飾、通用劃分、擴(kuò)展機(jī)制等四種公共機(jī)制,其擴(kuò)展機(jī)制包括約束、標(biāo)記值和構(gòu)造型。4.2.4 UML 建模示例在 Web 瀏覽器中,很容易編寫JAVA 程序 Hello , World ! import java.awt.Graphics;
46、class HelloWorld extends java.applet.Applet public void paint (Graphics g) g.drawString(Hello, World ! , 10,10);在 UML 中,對上述程序建模十分簡單,具體形式如圖4.9 所示。圖 4.9 HelloWorld 抽象模型在前面的代碼中,還有兩個類Applet 和 Graphics,其中類則被類 HelloWorld 的一個操作paint 所使用,從而形成了如圖Applet 是類 HelloWorld 4.10 所示的關(guān)系。的父類,類Graphics如果分析類Applet和 Graph
47、ics 的 JAVA庫,就會發(fā)現(xiàn)這兩個類的繼承層次,形成另一個類圖, 如圖4.11所示。為了管理大規(guī)模的類層次圖,可以用包來組織類,將HelloWorld打包形成如圖4.12 形式。圖 4.12 HelloWorld 包也許人們想知道JAVA 類庫中各部分之間是如何協(xié)同工作的,如圖4.13 顯示了如何調(diào)用HelloWorld的操作 paint 。圖 4.13 painting 機(jī)制Hello ,World ! 作為一個程序并不是單獨存在的,它通常是嵌入在Web 頁中,如圖4.14 顯示了這個程序的物理構(gòu)件視圖。4.2.5 UML 的應(yīng)用UML 作為一種強(qiáng)有力的系統(tǒng)建模語言,具有創(chuàng)建系統(tǒng)的靜態(tài)結(jié)構(gòu)和動態(tài)行為等多種模型的能力,其應(yīng)用范圍十分廣泛,它可以用于商業(yè)建模和軟件開發(fā)建模的各個階段,也可以用于其他類型的系統(tǒng)。UML 結(jié)合了國際上面向?qū)ο箜椖康某晒?jīng)驗,主要適合于大型
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報書全部
- 法治思維課題申報書
- Unit 3 Keep Fit section B 2a-2c 同步課時講練(含答案)七年級英語下冊(人教版2024)
- 廣州 社科 課題申報書
- 合同范本模板不能復(fù)制
- 不讓停車協(xié)議合同范本
- 體育和音樂課題申報書
- 醫(yī)療會議服務(wù)合同范例
- 發(fā)廊美甲招租合同范本
- 咖啡原料供貨合同范本
- DB5101-T 71-2020 成都市電動汽車充電設(shè)施 安全管理規(guī)范
- 2025年七臺河職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 監(jiān)理人員安全培訓(xùn)考試試卷(答案)
- 2025年北京電子科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- xxx項目財務(wù)評價報告
- 2024年山東交通職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 團(tuán)隊賦能培訓(xùn)
- 2025年廣東廣州市黃埔區(qū)第二次招聘社區(qū)專職工作人員高頻重點提升(共500題)附帶答案詳解
- 第一單元第2課《人工智能應(yīng)用》說課稿 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)八年級下冊
- 2025年寫人要抓住特點
- 萬兆小區(qū)方案及實施路徑
評論
0/150
提交評論