版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 從過(guò)程抽象到數(shù)據(jù)抽象1.3 面向?qū)ο蠓治龊驮O(shè)計(jì) 主要內(nèi)容面向?qū)ο蠼?duì)象模型UML建模技術(shù)面向?qū)ο蠓治雒嫦驅(qū)ο笤O(shè)計(jì)面向?qū)ο髮?shí)現(xiàn)1.3.1 面向?qū)ο蠼?在創(chuàng)建系統(tǒng)之前必須對(duì)問(wèn)題有一個(gè)透徹的了解。為了更好的理解問(wèn)題和描述問(wèn)題,人們常常采用“建立問(wèn)題模型”技術(shù)。如:建造一座大廈(圖紙),拍電影(劇本) 模型由一組圖示符號(hào)和組織這些符號(hào)的規(guī)則組成,利用它們來(lái)定義和描述問(wèn)題域中的術(shù)語(yǔ)和概念。 模型是一種思考工具,利用這種工具可以把知識(shí)規(guī)范地?zé)o歧義地表示出來(lái)。1. 建模的目的: (1)模型幫助我們將系統(tǒng)可視化,可以更好地理解系統(tǒng)。 (2)模型可以讓我們直觀、詳細(xì)描述系統(tǒng)的結(jié)構(gòu)和行為,并利用它和同
2、事容易溝通。 (3)模型提供了指導(dǎo)我們創(chuàng)建系統(tǒng)的模板,我們可以用它為使用系統(tǒng)的人提供幫助。(4)模型對(duì)我們所做的決策進(jìn)行文檔化。系統(tǒng)越大越需要建立問(wèn)題模型。為了開(kāi)發(fā)復(fù)雜的軟件系統(tǒng),系統(tǒng)分析員應(yīng)該抽象出目標(biāo)系統(tǒng)的特性,使用精確的表示方法構(gòu)造系統(tǒng)的模型,并在設(shè)計(jì)過(guò)程中逐漸把和實(shí)現(xiàn)有關(guān)的細(xì)節(jié)加進(jìn)模型中,直至最終用程序?qū)崿F(xiàn)模型。2.建立問(wèn)題模型方法從算法的角度建立問(wèn)題模型:所有的問(wèn)題都用過(guò)程/函數(shù)作為主要構(gòu)造塊面向?qū)ο蟮慕?所有的問(wèn)題都用對(duì)象/類作為主要構(gòu)造塊面向?qū)ο蟮慕5姆椒ê芏?Rumbaugh-OMTBooch Yourdon - OOA&DJacobson - OOSEMartin - O
3、OD每種方法都有自己的建模內(nèi)容和圖形化工具。目前最好最流行的圖形化工具是UML。UML的軟件:Rational Rose; Visio OMT建模OMT是著名的對(duì)象模型化技術(shù)OMT。OMT認(rèn)為用面向?qū)ο蠓椒ㄩ_(kāi)發(fā)軟件,通常需要建立三種形式的模型,它們分別是:1.描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對(duì)象模型(基本、核心)2.描述系統(tǒng)控制結(jié)構(gòu)的動(dòng)態(tài)模型3.描述系統(tǒng)功能的功能模型這三個(gè)模型從3個(gè)不同但又密切相關(guān)的角度模擬目標(biāo)系統(tǒng)。一個(gè)典型的軟件系統(tǒng)組合了上述三方面內(nèi)容:它使用數(shù)據(jù)結(jié)構(gòu)(對(duì)象模型),執(zhí)行操作(動(dòng)態(tài)模型),并且完成數(shù)據(jù)值的變化(功能模型)。分析:對(duì)象模型是三個(gè)模型中最關(guān)鍵的一個(gè)模型。它的作用是描述系統(tǒng)的靜態(tài)
4、結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對(duì)象,它們的屬性和操作,及它們之間的關(guān)系。(定義“對(duì)誰(shuí)做”)動(dòng)態(tài)模型著重于系統(tǒng)的控制邏輯。要想對(duì)一個(gè)系統(tǒng)了解得比較清楚,還應(yīng)當(dāng)考察在任何時(shí)刻對(duì)象及其關(guān)系的改變。系統(tǒng)的這些涉及時(shí)序和改變狀況用動(dòng)態(tài)模型來(lái)描述。(定義“何時(shí)做”)功能模型著重于系統(tǒng)內(nèi)部數(shù)據(jù)的傳送和處理。功能模型表明,通過(guò)計(jì)算,從輸入數(shù)據(jù)能得到什么樣的輸出數(shù)據(jù),不考慮參加計(jì)算的數(shù)據(jù)按什么時(shí)序執(zhí)行。(定義“做什么”)最核心的模型-對(duì)象模型 面向?qū)ο蠓椒◤?qiáng)調(diào)圍繞對(duì)象而不是圍繞功能來(lái)構(gòu)造系統(tǒng)。對(duì)于大系統(tǒng):3個(gè)模型必不可少.對(duì)于小系統(tǒng):對(duì)象模型必不可少。對(duì)象模型是上述三種模型中最重要、最基本、最核心的模型。 對(duì)象模型表
5、示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)。它是對(duì)模擬客觀世界實(shí)體的對(duì)象以及對(duì)象彼此間的關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。 OMT對(duì)象模型化技術(shù)把分析時(shí)收集的信息構(gòu)造在三類模型中,即對(duì)象模型、動(dòng)態(tài)模型和功能模型。動(dòng)態(tài)模型對(duì)象模型功能模型 這個(gè)模型化的過(guò)程是一個(gè)迭代過(guò)程。通過(guò)不斷更新、細(xì)化,直到切合系統(tǒng)的真正需求為止。 為了建立系統(tǒng)模型,需要定義一組圖形符號(hào),并且規(guī)定一組組織這些符號(hào)以表示特定語(yǔ)義的規(guī)則。如對(duì)象模型,需要包含下列符號(hào):表示類的符號(hào)(應(yīng)該既能表示屬性又能表示服務(wù));表示對(duì)象(類實(shí)例)的符號(hào);表示繼承關(guān)系的符號(hào);表示類和(或)對(duì)象 間其他關(guān)系的符號(hào)。統(tǒng)一建模語(yǔ)言(UML)為建立系統(tǒng)模型提供
6、了一個(gè)圖形化的表示手段UML建模技術(shù)1. UML(Unified Modeling Language, 統(tǒng)一建模語(yǔ)言) UML是軟件和系統(tǒng)開(kāi)發(fā)的標(biāo)準(zhǔn)建模語(yǔ)言。它主要以圖形的方式對(duì)系統(tǒng)進(jìn)行分析、設(shè)計(jì)。 UML是在多種面向?qū)ο蠓治雠c設(shè)計(jì)方法相互融合的基礎(chǔ)上形成的,是一種專用于系統(tǒng)建模的語(yǔ)言。它為開(kāi)發(fā)人員與客戶之間,以及開(kāi)發(fā)人員之間的溝通與理解架起了“橋梁”。2.UML系統(tǒng)視圖UML 是用來(lái)描述模型的,它用模型來(lái)描述系統(tǒng)的結(jié)構(gòu)、或靜態(tài)特征、以及行為或動(dòng)態(tài)特征它從不同的視角為系統(tǒng)的架構(gòu)建模,形成系統(tǒng)的不同視圖(view)每一種UML 的視圖都是由一個(gè)或多個(gè)圖(diagram )組成的,一個(gè)圖就是系統(tǒng)架
7、構(gòu)在某個(gè)側(cè)面的表示,它與其它圖是一致的,所有的圖一起組成了系統(tǒng)的完整視圖。UML 提供了九種不同的圖描述系統(tǒng)模型??梢苑殖蓛纱箢悾阂活愂庆o態(tài)圖。包括用例圖、類圖、對(duì)象圖、組件圖、配置圖另一類是動(dòng)態(tài)圖。包括序列圖、協(xié)作圖、狀態(tài)圖和活動(dòng)圖UML圖(preview)1) 用例圖2) 時(shí)序圖:打印3) 時(shí)序圖:打電話4) 協(xié)同圖:打印5) 狀態(tài)圖:電梯6) 封包7) 活動(dòng)圖:磁盤8) 構(gòu)件分布圖9) 構(gòu)件圖的組合10) 配置圖:主機(jī)與外圍設(shè)備11)類圖類圖用于表示類的存在和類與類之間的相互關(guān)系,是從系統(tǒng)構(gòu)成的角度來(lái)描述正在開(kāi)發(fā)的系統(tǒng)。類的表示:類的名稱屬性屬性 :數(shù)據(jù)類型屬性 :數(shù)據(jù)類型 = 初值操作
8、操作(參數(shù)表):結(jié)果類型類圖12)對(duì)象圖類圖表示類和類與類之間的關(guān)系,對(duì)象圖則表示在某一時(shí)刻這些類的具體實(shí)例和這些實(shí)例之間的具體連接關(guān)系。由于對(duì)象是類的實(shí)例,所以UML 對(duì)象圖中的概念與類圖中的概念完全一致。對(duì)象圖可以看作類圖的示例,幫助人們理解一個(gè)比較復(fù)雜的類圖。對(duì)象圖也可用于顯示類圖中的對(duì)象在某一點(diǎn)的連接關(guān)系。對(duì)象的圖示方式與類的圖示方式幾乎是一樣的,主要差別在于對(duì)象的名字下面要加下劃線。對(duì)象名有下列三種表示格式:13)關(guān)系類圖由類和它們之間的關(guān)系,組成類與類之間通常有四種關(guān)系:泛化關(guān)系(Generalization)關(guān)聯(lián)關(guān)系(Association)聚合關(guān)系(Aggregation)合成
9、關(guān)系(Composition)依賴關(guān)系(Dependency)其中,聚合關(guān)系(Aggregation),合成關(guān)系(Composition)屬于關(guān)聯(lián)關(guān)系(Association)。泛化關(guān)系表現(xiàn)為繼承或?qū)崿F(xiàn)關(guān)系(is a),關(guān)聯(lián)關(guān)系表現(xiàn)為變量(has a ),依賴關(guān)系表現(xiàn)為函數(shù)中的參數(shù)(use a)。泛化關(guān)系:表示為類與類之間的繼承關(guān)系,接口與接口之間的繼承,類對(duì)接口的實(shí)現(xiàn)關(guān)系。表示方法: 用一個(gè)空心箭頭實(shí)線,箭頭指向父類。或空心箭頭虛線,如果父類是接口。關(guān)聯(lián)關(guān)系:類與類之間的聯(lián)接,它使一個(gè)類知道另一個(gè)類的屬性和方法。表示方法:用 實(shí)線箭頭, 箭頭指向被使用的類。在示范代碼中,Employee可以
10、有0個(gè)或更多的TimeCard對(duì)象。但是,每個(gè)TimeCard只從屬于單獨(dú)一個(gè)Employee。聚合關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合關(guān)系是整體和個(gè)體的關(guān)系。關(guān)聯(lián)關(guān)系的兩個(gè)類處于同一層次上,啊聚合關(guān)系兩個(gè)類處于不同的層次,一個(gè)是整體,一個(gè)是部分。表示方法:空心菱形實(shí)線箭頭,箭頭指向部分。合成關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強(qiáng)的關(guān)系。它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期,合成關(guān)系不能共享。表示方法:實(shí)心菱形實(shí)線箭頭,Employee和TimeCard的關(guān)系或許更適合表示成“合成”,而不是表示成“關(guān)聯(lián)”。 依賴關(guān)系:是類與類之間的連接,表示一個(gè)類依賴于另一
11、個(gè)類的定義。例如如果A依賴于B,則B體現(xiàn)為局部變量,方法的參數(shù)、或靜態(tài)方法的調(diào)用。表示方法:虛線箭頭UML開(kāi)發(fā)工具IBM Rational RoseMicrosoft Visio-UML 模型圖Borland TogetherJude (Java and UML Developers Environment),一個(gè)小巧實(shí)用的UML建模軟件,是一個(gè)中日合作采用XP開(kāi)發(fā)方式純JAVA開(kāi)發(fā)的軟件,也可以說(shuō)是半個(gè)國(guó)產(chǎn)軟件EclipseUMLRoseStarUML:一款開(kāi)放源碼的UML開(kāi)發(fā)工具,是由韓國(guó)公司主導(dǎo)開(kāi)發(fā)出來(lái)的產(chǎn)品。1.3.2 面向?qū)ο蠓治?OOA)1. 基本內(nèi)涵 面向?qū)ο蟮姆治鼍褪沁\(yùn)用面向?qū)?/p>
12、象方法進(jìn)行系統(tǒng)分析,抽取和整理用戶需求并建立問(wèn)題域精確模型的過(guò)程。 它強(qiáng)調(diào)運(yùn)用面向?qū)ο蠓椒ㄟM(jìn)行分析,用面向?qū)ο蟮母拍詈捅硎痉ū磉_(dá)、分析結(jié)果。2. 基本任務(wù)OOA分析工作主要包含3項(xiàng)內(nèi)容:理解用戶需求;表達(dá)用戶需求;驗(yàn)證用戶需求。3. 基本步驟 面向?qū)ο蠓治龉ぷ鞔篌w上按照下列順序進(jìn)行:第一步,尋找類&對(duì)象;第二步,確定對(duì)象之間的關(guān)聯(lián);第三步,定義對(duì)象的屬性;第四步,定義對(duì)象的服務(wù)。 事實(shí)上,分析工作不可能嚴(yán)格地按照預(yù)定順序進(jìn)行,系統(tǒng)的模型往往需要反復(fù)構(gòu)造多遍才能建成。 通常,先構(gòu)造出模型的子集,然后再逐漸擴(kuò)充,直到完全、充分地理解整個(gè)問(wèn)題,才能最終把模型建立起來(lái)。1) 確定類&對(duì)象步驟:找出侯選
13、的類&對(duì)象。 對(duì)象是對(duì)問(wèn)題域中有意義的事物的抽象,它們既可能是物理實(shí)體,也可能是抽象概念。 通常,將需求陳述中的名詞 或名詞短語(yǔ)作為類&對(duì)象的候選者。篩選出正確的類&對(duì)象。 找出候選的類&對(duì)象之后,還應(yīng)該嚴(yán)格考察每個(gè)候選者,從中去掉不正確的或不必要的。 刪除的依據(jù)如下:冗余的:兩個(gè)類名表示了相同的信息,應(yīng)該保留較全面的類&對(duì)象。無(wú)關(guān)的:與目標(biāo)系統(tǒng)無(wú)關(guān)的類&對(duì)象?;\統(tǒng)的:用精確的代替模糊、籠統(tǒng)的類&對(duì)象。無(wú)關(guān)的屬性:去掉類&對(duì)象中無(wú)關(guān)的屬性。操作:通常用動(dòng)詞定義類中的操作。實(shí)現(xiàn):在系統(tǒng)分析階段應(yīng)該少考慮或不考慮怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)。2) 確定關(guān)聯(lián)在需求陳述中使用的描述性動(dòng)詞或動(dòng)詞詞組,通常表示關(guān)聯(lián)關(guān)
14、系。因此,在初步確定關(guān)聯(lián)時(shí),大多數(shù)關(guān)聯(lián)可以通過(guò)直接提取需求陳述中的動(dòng)詞詞組而得出。分析員還應(yīng)該與用戶及領(lǐng)域?qū)<矣懻搯?wèn)題域?qū)嶓w間的相互依賴、相互作用關(guān)系,根據(jù)領(lǐng)域知識(shí)再進(jìn)一步補(bǔ)充一些關(guān)聯(lián)。最后,還需對(duì)初步確定的關(guān)聯(lián)進(jìn)行進(jìn)一步篩選,以去掉不正確的或不必要的關(guān)聯(lián)。三個(gè)或三個(gè)以上對(duì)象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)。3) 確定屬性 分析并確定每個(gè)對(duì)象有哪些特性。確定屬性的過(guò)程包括分析和選擇兩個(gè)步驟。通常,在需求陳述中用名詞詞組表示屬性。應(yīng)該僅考慮與具體應(yīng)用直接相關(guān)的屬性,不必考慮那些超出所要解決的問(wèn)題范圍的屬性。4) 確定服務(wù)分析并確定每個(gè)對(duì)象有哪些對(duì)屬性的操作。在確定類中應(yīng)該有的服務(wù)時(shí),既要考慮該
15、類實(shí)體的常規(guī)行為,又要考慮為完成本系統(tǒng)功能所需要提供的服務(wù)。5) 識(shí)別繼承關(guān)系 確定了類中應(yīng)該定義的屬性和服務(wù)之后,就可以利用繼承機(jī)制共享公共性質(zhì),并對(duì)系統(tǒng)中的類加以層次化組織。 一般說(shuō)來(lái),可以使用兩種方式建立繼承關(guān)系: 自底向上:抽象出現(xiàn)有類的共同性質(zhì)泛化出父類,這個(gè)過(guò)程實(shí)質(zhì)上模擬了人類歸納思維過(guò)程。自頂向下:把現(xiàn)有類細(xì)化成更具體的子類,這模似了人類的演繹思維過(guò)程。 關(guān)系層特征層對(duì)象層基本模型(類圖)交互圖主題圖詳 細(xì) 說(shuō) 明給出所有與問(wèn)題域和系統(tǒng)責(zé)任有關(guān)的對(duì)象,用對(duì)象類表示定義每個(gè)對(duì)象類的屬性與服務(wù)通過(guò)結(jié)構(gòu)與連接描述對(duì)象之間的關(guān)系對(duì)模型中的所有元素進(jìn)行詳細(xì)說(shuō)明對(duì)關(guān)系密切的類打包,幫助理解類
16、圖一幅交互圖表現(xiàn)完成某一項(xiàng)特定功能的一組對(duì)象之間的詳細(xì)交互。每一項(xiàng)功能用一個(gè) use case描述OOA模型(based on UML):1.3.3 面向?qū)ο笤O(shè)計(jì)(OOD) 面向?qū)ο蠓治鍪翘崛『驼碛脩粜枨?,并建立?wèn)題域精確模型的過(guò)程。面向?qū)ο笤O(shè)計(jì)則是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的系統(tǒng)實(shí)現(xiàn)方案的過(guò)程。 從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì),是一個(gè)逐漸擴(kuò)充模型的過(guò)程。或者說(shuō),面向?qū)ο笤O(shè)計(jì)就是用面向?qū)ο笥^點(diǎn)建立求解域模型的過(guò)程。1. 發(fā)展過(guò)程_I1) 早期的OOD(80年代至90年代初)1982 年G. Booch發(fā)表“Object-Oriented Design” ,首次稱“面向?qū)ο蟮脑O(shè)
17、計(jì)”。1986 年發(fā)表“Object-Oriented Development”,較完整地闡述了OOD思想。 兩個(gè)術(shù)語(yǔ)都用OOD作為縮寫,內(nèi)容上也沒(méi)有根本區(qū)別。 1983年R. J. Abbott提出正文分析方法,用規(guī)范的英語(yǔ)描述對(duì)一個(gè)問(wèn)題的解釋,然后從描述中提取對(duì)象及其特征。例:名詞對(duì)象,動(dòng)詞操作。被后來(lái)的許多OOD方法所采用。1. 發(fā)展過(guò)程_II1986年后,相繼出現(xiàn)了一批(早期的)OOD方法。如:Booch86Object-Oriented Development(面向?qū)ο蟮拈_(kāi)發(fā))GOODGeneral Object-Oriented Development(通用面向?qū)ο蟮拈_(kāi)發(fā))HOOD
18、Hierarchical Object-Oriented Design(層次式面向?qū)ο蟮脑O(shè)計(jì))OOSDObject-Oriented Structured Design(面向?qū)ο蟮慕Y(jié)構(gòu)設(shè)計(jì))1. 發(fā)展過(guò)程_III2) 現(xiàn)今的OOD(90年代以后)特點(diǎn):以面向?qū)ο蟮姆治鰹榛A(chǔ),一般不依賴結(jié)構(gòu)化分析。與相應(yīng)的OOA方法共同構(gòu)成一種OOA&D方法體系。OOA和OOD采用一致的概念與原則,但屬于軟件生命周期的不同階段,有不同的目標(biāo)及策略。較全面地體現(xiàn)面向?qū)ο蠓椒ǖ母拍钆c原則。大多數(shù)方法獨(dú)立于編程語(yǔ)言,通過(guò)面向?qū)ο蟮姆治雠c設(shè)計(jì)所得到的系統(tǒng)模型可以由不同的編程語(yǔ)言實(shí)現(xiàn)。2. 定義 面向?qū)ο蟮脑O(shè)計(jì)(OOD)
19、就在是OOA模型基礎(chǔ)上運(yùn)用面向?qū)ο蠓椒ㄟM(jìn)行系統(tǒng)設(shè)計(jì),目標(biāo)是產(chǎn)生一個(gè)符合具體實(shí)現(xiàn)條件的OOD模型。OOD與OOA、OOP關(guān)系: OOD是OO軟件工程中承前啟后的中間環(huán)節(jié)往前OOA(全部用OO概念建模)往后OOP(用OOPL支持的OO概念編程) OOD使用與OOA和OOP一致的概念建立完整的、可實(shí)現(xiàn)的系統(tǒng)設(shè)計(jì)模型。OOA與OOD的目標(biāo)、內(nèi)容OOA主要內(nèi)容是研究問(wèn)題域和用戶需求,運(yùn)用面向?qū)ο蟮挠^點(diǎn)和原則發(fā)現(xiàn)問(wèn)題域中與系統(tǒng)責(zé)任有關(guān)的對(duì)象,以及對(duì)象的特征和相互關(guān)系。目標(biāo)是建立一個(gè)直接映射問(wèn)題域,符合用戶需求的OOA模型。OOD主要內(nèi)容是以O(shè)OA模型為基礎(chǔ),按照實(shí)現(xiàn)的要求進(jìn)行設(shè)計(jì)決策,包括全局性的決策和局
20、部細(xì)節(jié)的設(shè)計(jì)。目標(biāo)是產(chǎn)生一個(gè)滿足用戶需求,并且完全可實(shí)現(xiàn)的OOD模型。全局性設(shè)計(jì)決策:體系結(jié)構(gòu)、分布方案、并發(fā)控制、人機(jī)交互、數(shù)據(jù)管理等。OOD方法應(yīng)支持用戶以O(shè)O概念表達(dá)對(duì)這些問(wèn)題的設(shè)計(jì)。局部細(xì)節(jié)的設(shè)計(jì):對(duì)每個(gè)對(duì)象類的每個(gè)屬性和每個(gè)服務(wù)給出詳細(xì)的定義。3. 設(shè)計(jì)內(nèi)容 通常,一個(gè)實(shí)用的軟件系統(tǒng)在邏輯上由問(wèn)題域子系統(tǒng)、人機(jī)交互子系統(tǒng)、任務(wù)管理子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)等四大部分組成。針對(duì)上述四個(gè)部分,在OOD中進(jìn)行以下四個(gè)相應(yīng)的活動(dòng):設(shè)計(jì)問(wèn)題域部分;設(shè)計(jì)人機(jī)交互部分的;設(shè)計(jì)任務(wù)管理部分;設(shè)計(jì)數(shù)據(jù)管理部分。4. 設(shè)計(jì)準(zhǔn)則_I模塊化 面向?qū)ο筌浖_(kāi)發(fā)模式,很自然的支持了把系統(tǒng)分解成模塊的設(shè)計(jì)原則:對(duì)象就
21、是模塊。抽象 面向?qū)ο蠓椒ú粌H支持過(guò)程抽象,而且支持?jǐn)?shù)據(jù)抽象。類實(shí)際上是一種抽象數(shù)據(jù)數(shù)據(jù)類型。信息隱藏 在面向?qū)ο蠓椒ㄖ校畔㈦[藏通過(guò)對(duì)象的封裝性實(shí)現(xiàn):類結(jié)構(gòu)分離了接口與實(shí)現(xiàn),從而支持了信息隱藏。弱耦合 在面向?qū)ο蠓椒ㄖ?,耦合主要指不同?duì)象之間相互關(guān)聯(lián)的緊密程度。 一般說(shuō)來(lái),對(duì)象之間的耦合可分為以下兩類:交互耦合:對(duì)象之間的耦合通過(guò)消息來(lái)實(shí)現(xiàn),則這種耦合就是交互耦合。繼承耦合:繼承是一般化類與特殊類之間耦合的一種形式。 在面向?qū)ο笤O(shè)計(jì)時(shí),應(yīng)盡量降低交互耦合的程度,提高繼承耦合程度。4. 設(shè)計(jì)準(zhǔn)則_II 為使交互耦合盡可能松散,應(yīng)該遵守下述準(zhǔn)則:1) 盡量降低消息連接的復(fù)雜程度。即減少消息中包含
22、的參數(shù)個(gè)數(shù),降低參數(shù)的復(fù)雜程度。2) 減少對(duì)象發(fā)送/接收的消息數(shù)。4. 設(shè)計(jì)準(zhǔn)則_III5) 強(qiáng)內(nèi)聚 在OOD中存在以下3種內(nèi)聚:服務(wù)內(nèi)聚:一個(gè)服務(wù)應(yīng)該完成一個(gè)且僅完成一個(gè)功能。類內(nèi)聚:一個(gè)類應(yīng)該只有一個(gè)用途。一般特殊內(nèi)聚:設(shè)計(jì)出的一般特殊結(jié)構(gòu)應(yīng)該是對(duì)相應(yīng)領(lǐng)域知識(shí)的正確抽取,應(yīng)該符合多數(shù)人的概念。 在設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚。4. 設(shè)計(jì)準(zhǔn)則_IV可重用 重用有兩方面的含義:一是盡量使用已有的類(包括開(kāi)發(fā)環(huán)境提供的類庫(kù),以及以往開(kāi)發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類);二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議時(shí),應(yīng)該考慮將來(lái)的重復(fù)使用性。OOD模型從兩個(gè)側(cè)面來(lái)描述人機(jī)交互部分?jǐn)?shù)據(jù)接口部分控制接口部分問(wèn)題
23、域部分從一個(gè)側(cè)面觀察OOD模型包括:一個(gè)核心部分+幾個(gè)外圍部分交 互 圖主 題 圖類 圖詳 細(xì) 說(shuō) 明從另一側(cè)面觀察OOD模型采用OOA的概念及 模型組織方式1.3.3 面向?qū)ο髮?shí)現(xiàn)1. 基本任務(wù)把面向?qū)ο笤O(shè)計(jì)的結(jié)果翻譯成用某種面 向?qū)ο蟪绦蛘Z(yǔ)言書寫的面向?qū)ο蟪绦?。測(cè)試和調(diào)試編寫出的面向?qū)ο蟪绦颉?程序的質(zhì)量主要由設(shè)計(jì)的質(zhì)量決定,應(yīng)該將大量的時(shí)間花在系統(tǒng)分析與設(shè)計(jì)上,但是所選用的程序語(yǔ)言的特點(diǎn)對(duì)程序質(zhì)量也有重要影響。2. 面向?qū)ο笳Z(yǔ)言的選擇面向?qū)ο笳Z(yǔ)言可以分為兩類:純面向?qū)ο笳Z(yǔ)言。例如:Java,C#,Smalltalk, Eiffel等?;旌闲兔嫦?qū)ο笳Z(yǔ)言(即在過(guò)程語(yǔ)言的基礎(chǔ)上增加面向?qū)ο髾C(jī)
24、制)例如:C+。選擇面向?qū)ο笳Z(yǔ)言或工具的原則計(jì)算模式:C/S或B/S運(yùn)行平臺(tái):PC/嵌入式系統(tǒng)/SmartDevice/otherOS平臺(tái):Windows/Linux/嵌入式OS/other時(shí)間、空間需求可參考的資源語(yǔ)言或工具的功能、類庫(kù)、配置、發(fā)布語(yǔ)言或工具未來(lái)的發(fā)展前景開(kāi)發(fā)人員的基礎(chǔ)項(xiàng)目的未來(lái)前景等等 一個(gè)面向?qū)ο蟮腃+程序?qū)嵗?. 需求陳述(一個(gè)簡(jiǎn)單圖形程序的需求): 在顯示器熒光屏上圓心坐標(biāo)為(100,100)的位置上,畫一個(gè)半徑為40的圓,在圓心坐標(biāo)為(200,300)的位置上,畫一個(gè)半徑為20的圓,在圓心坐標(biāo)為(400,150)的位置上,畫一條弧,弧的起始角度為30,結(jié)束角度為12
25、0,半徑為50。2. 面向?qū)ο蠓治龃_定對(duì)象 使用“語(yǔ)法分析”方法,在需求陳述中包含的名詞或名詞短語(yǔ)是對(duì)象的候選者,它們有下列一些: 顯示器熒光屏,圓心坐標(biāo),位置,半徑,圓,弧,起始角度,結(jié)束角度。分析:“顯示器熒光屏”是一種輸出設(shè)備,是運(yùn)行程序的物質(zhì)基礎(chǔ)(硬件平臺(tái)),應(yīng)該從候選對(duì)象中刪去?!皥A心坐標(biāo)”和“半徑”實(shí)質(zhì)上是圓和弧的基本屬性,并不需要獨(dú)立存在,因此也應(yīng)該從候選者中刪去。“位置”實(shí)際上是指圓心的位置,也就是圓心坐標(biāo),沒(méi)必要重復(fù)列出。“起始角度”和“結(jié)束角度”實(shí)質(zhì)上是弧的屬性,也應(yīng)該從候選者中刪去。結(jié)論: 最后得出的是圓(Circle)和弧(Arc)兩類對(duì)象。圓的兩個(gè)基本屬性是圓心坐標(biāo)和
26、半徑?;〉幕緦傩杂袌A心坐標(biāo),半徑,起始角度和結(jié)束角度。分析: 由于不可能在需求陳述中找到所有屬性,還必須借助領(lǐng)域知識(shí)和常識(shí),才能分析得出所需要的全部屬性。因此,圓和弧都應(yīng)該再增加一個(gè)屬性可見(jiàn)性。 確定屬性 確定服務(wù) 在分析階段可以認(rèn)為,每個(gè)屬性都是可以訪問(wèn)的。所謂可以訪問(wèn)是指提供了訪問(wèn)對(duì)象屬性的對(duì)外接口。(由對(duì)象主動(dòng)地向外界提供服務(wù))分析: 由這個(gè)程序應(yīng)完成的功能可知,圓和弧都應(yīng)該提供在熒光屏上“畫自己”的服務(wù)。相應(yīng)地也應(yīng)該提供“隱藏自己”這樣一個(gè)服務(wù)。 結(jié)論: 圓和弧分別有各自的屬性和服務(wù),如下圖所示。圓心坐標(biāo)半徑可見(jiàn)性讀/寫圓心坐標(biāo)讀/寫半徑讀/寫可見(jiàn)性顯示隱藏圓圓心坐標(biāo)半徑起始角度結(jié)束
27、角度可見(jiàn)性讀/寫圓心坐標(biāo)讀/寫半徑讀/寫起始角度讀/寫結(jié)束角度讀/寫可見(jiàn)性顯示隱藏弧3. 面向?qū)ο笤O(shè)計(jì)_I建立類等級(jí) 面向?qū)ο蟪绦虻囊粋€(gè)突出優(yōu)點(diǎn)來(lái)源于繼承性。應(yīng)該盡量抽取出相似類的公共屬性和公共服務(wù),以建立這些相似類的父類,并在類等級(jí)的適當(dāng)層次中正確地定義各個(gè)屬性和服務(wù)。簡(jiǎn)單圖形程序的對(duì)象模型如下圖(為簡(jiǎn)明起見(jiàn),圖中沒(méi)有列出讀寫屬性值的常規(guī)服務(wù))。位置坐標(biāo)點(diǎn)可見(jiàn)性顯示隱藏圓半徑顯示隱藏弧起始角度結(jié)束角度顯示隱藏3. 面向?qū)ο笤O(shè)計(jì)_II定義屬性 所謂定義屬性就是要確定每個(gè)屬性的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),同時(shí)還要確定每個(gè)屬性的訪問(wèn)權(quán)限(通常被定義在保護(hù)部分或私有部分)。定義服務(wù) 實(shí)現(xiàn)“顯示”服務(wù)的算法概
28、括來(lái)說(shuō)就是,把“可見(jiàn)性”屬性設(shè)置為true,然后調(diào)用相應(yīng)的庫(kù)函數(shù)用當(dāng)前的前景顏色畫出所要的圖形。4. 面向?qū)ο髮?shí)現(xiàn)_I圓類的定義class Circle :public Point protected: int Radius; public: Circle (int InitX,int InitY,int InitRadius); void Show( ); void Hide( ); int GetRadius( );Circle:Circle(int InitX,int InitY, int InitRadius):Point(InitX,InitY)Radius = InitRadius
29、;void Circle:Show()Visible = true;circle(X,Y,Radius);4. 面向?qū)ο髮?shí)現(xiàn)_II4. 面向?qū)ο髮?shí)現(xiàn)_IIIvoid Circle:Hide()int TempColor;TempColor = getcolor();setcolor(getbkcolor();Visible = false;circle(X,Y,Radius);setcolor(Tempcolor);int Circle:GetRadius()return Radius; 5. 小結(jié) 用面向?qū)ο蟪绦蛟O(shè)計(jì)方法,解決一個(gè)簡(jiǎn)單的實(shí)際工程的基本步驟如下:1) 面向?qū)ο蠓治觯?通過(guò)對(duì)用戶
30、需求的分析,合理地提取問(wèn)題域中所涉及到類-&-對(duì)象。包括:這些類-&-對(duì)象中應(yīng)該包括哪些屬性和方法。2) 面向?qū)ο笤O(shè)計(jì): 對(duì)分析中得到的準(zhǔn)確結(jié)果,設(shè)計(jì)出實(shí)現(xiàn)程序的方案。包括:建立類之間的繼承關(guān)系:根據(jù)對(duì)系統(tǒng)中共性和個(gè)性的劃分建立類等級(jí)即類之間的繼承關(guān)系(提取公共的屬性和服務(wù)以建立父類)定義屬性:確定屬性的數(shù)據(jù)類型及訪問(wèn)權(quán)限。定義服務(wù):確定實(shí)現(xiàn)服務(wù)的準(zhǔn)確算法以及清晰的接口。3)面向?qū)ο髮?shí)現(xiàn):選擇一種合適的編程語(yǔ)言,實(shí)現(xiàn)上述設(shè)計(jì)。1.3.4 Form C - C+C+是C語(yǔ)言的超集,增加了面向?qū)ο蟛糠?,是OOP的第一個(gè)大眾化版本。C+語(yǔ)言具有下列主要特點(diǎn): C+完全兼容C。大多數(shù)的C語(yǔ)言代碼略作修
31、改或不修改就可在C+的集成環(huán)境下運(yùn)行。 C+作為一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。 用C+設(shè)計(jì)的程序擴(kuò)充性強(qiáng)。C+在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言方面獲得主導(dǎo)地位,很大程度上是由于它繼承了C語(yǔ)言的主要特征,再加上它加強(qiáng)了數(shù)據(jù)類型的檢查機(jī)制,引入了類的概念等。從C+的名字可以看出它是C的超集。C+既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型的程序設(shè)計(jì)語(yǔ)言。1 C+程序的基本框架/ This is a simple C+ program.#include using namespace std;int main()coutThis is a simple C+ progr
32、am.endl; return 0;2 C+數(shù)據(jù)類型 C+的基本數(shù)據(jù)類型有整型(int)、字符型(char)、浮點(diǎn)型(float、double)、布爾型(bool)、空類型(void)等類型。void為無(wú)值型 : void show(); int show (void)C+的構(gòu)造數(shù)據(jù)類型是由基本數(shù)據(jù)類型構(gòu)造而成的。C+語(yǔ)言中的構(gòu)造數(shù)據(jù)類型有:數(shù)組、指針、枚舉、引用、結(jié)構(gòu)體、聯(lián)合、類。2.1指針變量的指針就是變量的地址。存放變量地址的變量是指針變量,用來(lái)指向另一個(gè)變量。為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“*”符號(hào)表示“指向”。符號(hào)“*”稱為指針運(yùn)算符。定義指針變量的一般形式為
33、:基類型 * 指針變量名例如:int *i_pointer;float *f_pointer;在使用指針之前,一定要先使指針有明確的指向。那么,怎樣使一個(gè)指針變量指向另一個(gè)變量呢?可以使用如下的賦值語(yǔ)句。例如:int * i_pointer1,* i_pointer2;int i,j;i_pointer1=&i;i_pointer2=&j;其中,“&”是地址運(yùn)算符,&i就是取變量i在內(nèi)存中的地址。指針變量的引用在定義了指針變量并明確了它的指向后,就可以使用指針變量了。利用指針變量,提供了一種對(duì)變量的間接訪問(wèn)形式。對(duì)指針變量的引用形式為:*指針變量其含義是指針變量所指向的值。指針變量作函數(shù)的參數(shù)
34、函數(shù)的參數(shù)不僅可以是整型、實(shí)型、字符型等數(shù)據(jù),還可以是指針類型。它的作用是將個(gè)變量的地址傳送到另一個(gè)函數(shù)中。由于被調(diào)用函數(shù)中獲得了所傳遞變量的地址,因此在該地址空間的數(shù)據(jù)當(dāng)函數(shù)調(diào)用結(jié)束后被物理地保留下來(lái)。2.2引用引用是C+語(yǔ)言中對(duì)一個(gè)變量或常量標(biāo)識(shí)符起的別名。例如,已經(jīng)定義了一個(gè)變量val,然后再建立一個(gè)對(duì)這個(gè)變量的引用rval,就為變量val起了一個(gè)別名,val和rval就是指的同一個(gè)變量,它們的使用方式也完全一樣。說(shuō)明一個(gè)引用的方式如下:int val; / 定義vaL是整型變量int &rval= val; /聲明rvaL是val的引用說(shuō)明一個(gè)引用時(shí),在引用標(biāo)識(shí)符的前面加上“&”,后面
35、跟上它所引用的標(biāo)識(shí)符的名字。當(dāng)編譯程序看到時(shí),就不為其后面的標(biāo)識(shí)符分配內(nèi)存空間,而只是簡(jiǎn)單地將它所引用的那個(gè)標(biāo)識(shí)符所具有的內(nèi)存空間賦給它。 引用的作用:1-引用作函數(shù)參數(shù)引用在一般場(chǎng)合是沒(méi)有什么用途的,單純?yōu)橐粋€(gè)變量取個(gè)別名也沒(méi)有什么意義。引用最大的用途是作為函數(shù)的參數(shù)或返回值類型,從而擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。我們知道,引用是它所引用的變量的一個(gè)別名,它們實(shí)際上是同一回事。因此,當(dāng)函數(shù)的形參是引用類型時(shí),它實(shí)際上是對(duì)實(shí)參所代表的變量的引用,它自己不具有獨(dú)立的內(nèi)存空間。這種實(shí)參傳遞給形參的方式稱為按引用傳遞。例6-16 利用“引用形參”實(shí)現(xiàn)兩個(gè)變量的值的互換2-引用返回值返回引用值的函數(shù)在一般情
36、形下并不多見(jiàn),但是如果需要讓函數(shù)調(diào)用作為左值時(shí),就需要將函數(shù)返回值設(shè)計(jì)為是引用類型。函數(shù)的返回值為引用類型表示該函數(shù)的返回值是一個(gè)內(nèi)存變量的別名??梢詫⒑瘮?shù)調(diào)用作為一個(gè)變量來(lái)使用,可以為其賦值。例6-18 定義了一個(gè)求兩個(gè)數(shù)中最小值的函數(shù),函數(shù)的參數(shù)是兩個(gè)整型變量返回值是對(duì)這兩個(gè)數(shù)中值較小的那個(gè)變量的引用。2.3常變量(const變量)C+中使用const修飾符來(lái)定義常量。const可以與指針一起使用,它們的組合情況較復(fù)雜,可歸納為三種:指向常量的指針、常指針和指向常量的常指針。1指向常量的指針指向常量的指針是指一個(gè)指向常量的指針變量。在指針定義語(yǔ)句的類型前加const修飾符,表示指向的對(duì)象是
37、常量。例如: const char *namechen; / 聲明指向常量的指針這個(gè)語(yǔ)句的含義為:聲明一個(gè)名為name的指針變量,它指向一個(gè)字符型常量,初始化name為指向字符串“chen”。2常指針常指針是指把指針本身是聲明為常量,而不是將它指向的對(duì)象聲明為常量。在指針定義語(yǔ)句的指針名前加const修飾符,表示指針本身是常量。例如: char * const name=chen; / 常指針這個(gè)語(yǔ)句的含義為:聲明一個(gè)名為name的指針常量,該指針是指向字符型數(shù)據(jù)的常指針,用字符串常量“chen”的地址初始化該常指針。3指向常量的常指針指向常量的常指針是指這個(gè)指針本身不能改變,它所指向的值也不
38、能改變。要聲明個(gè)指向常量的常指針,二者都要聲明為const,并且必須在定義時(shí)進(jìn)行初始化。例如: const char * const namechen; /指向常量的常指針這個(gè)語(yǔ)句的含義是:聲明了一個(gè)名為name的指針常量,它是一個(gè)指向字符型常量的常指針,用字符串常量chen的地址初始化該指針。 2.4定義變量初值定義變量的一般形式為:變量類型 變量名表列;變量賦初值C+語(yǔ)言允許在定義變量的同時(shí)使變量初始化。如:int a=1; / 指定 a為整型變量,初值為 1float pi=3.1415; / 指定 pi為單精度浮點(diǎn)型變量,初值為 3.1415也可以使被定義的變量的一部分賦初值。如int
39、 a,b,c1; / 表示指定a、b、c為整型變量,只對(duì)c初始化,c的初值為1如果對(duì)幾個(gè)變量賦予同一個(gè)初值,不能寫成int a=b=c=1; 而應(yīng)寫成int a=1,b=1,c=1;可在程序中隨意定義變量char *name(“Smith”)for(int i(0); i6; i+);2.5 C+的運(yùn)算符new 動(dòng)態(tài)內(nèi)存分配delete 回收new分配的內(nèi)存動(dòng)態(tài):域作用符: 對(duì)數(shù)據(jù)成員和成員函數(shù)的限定3. c+中的new/delete取代 malloc/free new/delete有什么好處?malloc/free只是對(duì)內(nèi)存進(jìn)行分配和釋放; new/delete還負(fù)責(zé)完成了創(chuàng)建和銷毀對(duì)象的任
40、務(wù)。另外,new的安全性要高一些,因?yàn)閚ew返回的就是一個(gè)所創(chuàng)建的對(duì)象的指針,對(duì)于malloc來(lái)說(shuō)返回的則是void*,還要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,這是一個(gè)危險(xiǎn)的漏洞。最后,我們可以對(duì)new/delete重載,使內(nèi)存分配按照我們的意愿進(jìn)行,這樣更具有靈活性,malloc則不行。new的使用:type * p = new typetype * p = new type(初值)type * p = new type數(shù)組大小int *p=new int;int *p=new int(50);int *p=new int10;std:string *stringPtr1 = new std:string;
41、std:string *stringPtr2 = new std:string100; delete的使用:delete stringPtr1; / 刪除一個(gè)對(duì)象 delete stringPtr2; / 刪除一個(gè)對(duì)象數(shù)組NOTEnew創(chuàng)建的內(nèi)存空間必須由delete回收new創(chuàng)建內(nèi)存空間不成功返回NULL指針(0)int *p=new int10;if (p=0) cout “Run out of memory”c+標(biāo)準(zhǔn)庫(kù)與Namespace C+標(biāo)準(zhǔn)庫(kù)很大:在C+標(biāo)準(zhǔn)中,關(guān)于標(biāo)準(zhǔn)庫(kù)的規(guī)格說(shuō)明占了密密麻麻300多頁(yè),這還不包括標(biāo)準(zhǔn)C庫(kù),后者只是 作為參考包含在C+庫(kù)中。C+庫(kù)并非提供了一切(
42、很明顯的是,沒(méi)有提供并發(fā)和圖形用戶接口的支持),但確實(shí)提供了很多。幾乎任何事你都可以求助于它。標(biāo)準(zhǔn)庫(kù)組織因?yàn)闃?biāo)準(zhǔn)庫(kù)中東西如此之多,你所選擇的類名或函數(shù)名就很有可能和標(biāo)準(zhǔn)庫(kù)中的某個(gè)名字相同。為了避免這種情況所造成的名字沖突,實(shí)際上標(biāo)準(zhǔn)庫(kù)中的一切都被放在名字空間std中。 具體組織情況:1-文件名稱:早期C+標(biāo)準(zhǔn)庫(kù)放在,等頭文件中后來(lái)的C+標(biāo)準(zhǔn)庫(kù)引入namespace:為包裝在std的那部分標(biāo)準(zhǔn)庫(kù)創(chuàng)建新的頭文件名。生成新頭文件的方法僅僅是將現(xiàn)有C+頭文件名中的 .h 去掉。所以變成了,變成了,等等。對(duì)于C頭文件,采用同樣的方法,但在每個(gè)名字前還要添加一個(gè)c。所以C的變成了,變成了,等等。實(shí)際來(lái)說(shuō),下面是C+頭文件的現(xiàn)狀: 舊的C+頭文件名如將會(huì)繼續(xù)被支持,盡管它們不在官方標(biāo)準(zhǔn)中。這些頭文件的內(nèi)容不在名字空間std中。 新的C+頭文件如包含的基本功能和對(duì)應(yīng)的舊頭文件相同,但頭文件的內(nèi)容在名字空間std中。(在標(biāo)準(zhǔn)化的過(guò)程中,庫(kù)中有些部分的細(xì)節(jié)被修改了,所以舊頭文件和新頭文件中的實(shí)體不一定完全對(duì)應(yīng)。) 標(biāo)準(zhǔn)C頭文件如繼續(xù)被支持。頭文件的內(nèi)容不在std中。 具有
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 優(yōu)惠合同協(xié)議的意義
- 全新電腦購(gòu)銷意向
- 教官發(fā)展服務(wù)合同
- 公路工程招標(biāo)文件的標(biāo)準(zhǔn)范本
- 育肥豬購(gòu)銷協(xié)議
- 有機(jī)紗線購(gòu)銷合同
- 招標(biāo)文件范本搖號(hào)定標(biāo)的合同條款
- 童裝采購(gòu)合同
- 代理招商合作合同定制
- 個(gè)人工作保安全
- 湖北省咸寧市通城縣2022-2023學(xué)年八年級(jí)上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試卷(含解析)
- 【MOOC】法理學(xué)-西南政法大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年新湘教版七年級(jí)上冊(cè)數(shù)學(xué)教學(xué)課件 第4章 圖形的認(rèn)識(shí) 章末復(fù)習(xí)
- 2024年民用爆炸物品運(yùn)輸合同
- 國(guó)家開(kāi)放大學(xué)24237丨學(xué)前兒童語(yǔ)言教育活動(dòng)指導(dǎo)(統(tǒng)設(shè)課)期末終考題庫(kù)及答案
- 2024-2030年中國(guó)離合器制造行業(yè)運(yùn)行動(dòng)態(tài)及投資發(fā)展前景預(yù)測(cè)報(bào)告
- 【MOOC】大學(xué)生創(chuàng)新創(chuàng)業(yè)教育-云南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 《個(gè)體防護(hù)裝備安全管理規(guī)范AQ 6111-2023》知識(shí)培訓(xùn)
- 客戶管理系統(tǒng)技術(shù)服務(wù)合同
- 北京交通大學(xué)《成本會(huì)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 治療皮膚病藥膏市場(chǎng)需求與消費(fèi)特點(diǎn)分析
評(píng)論
0/150
提交評(píng)論