第07講類與類圖(軟件工程)_第1頁
第07講類與類圖(軟件工程)_第2頁
第07講類與類圖(軟件工程)_第3頁
第07講類與類圖(軟件工程)_第4頁
第07講類與類圖(軟件工程)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

類與類圖1回顧用例規(guī)約:用例的文字描述,用例的核心進行用例闡述成功場景(正常事件流的描述)擴展場景(備選事件流)約束等需要解決的問題2類圖概要類圖以反映類的結(jié)構(gòu)(屬性、操作)以及類之間的關(guān)系為主要目的,描述了軟件系統(tǒng)的結(jié)構(gòu),是一種靜態(tài)建模方法類圖中的“類”與面向?qū)ο笳Z言中的“類”的概念是對應(yīng)的,是對現(xiàn)實世界中的事物的抽象3類圖舉例4類圖中的事物及解釋從上到下分為三部分,分別是類名、屬性和操作。類名是必須有的類如果有屬性,則每一個屬性都必須有一個名字,另外還可以有其它的描述信息,如可見性、數(shù)據(jù)類型、缺省值等類如果有操作,則每一個操作也都有一個名字,其它可選的信息包括可見性、參數(shù)的名字、參數(shù)類型、參數(shù)缺省值和操作的返回值的類型等可見性-代表private+代表public#代表protected也可以使用圖形表示返回值類型操作名稱斜體為抽象操作缺省值類名斜體為抽象類屬性名稱參數(shù)列表5舉例Employee+employeeID:Integer-Employeename:String….+setEmployeeDetails()+getEmployeeDetails()-setSalary(salary:Float)#getSalary():Float….6舉例WashingMachineBrandnameModelnameSerialnumberCapacityAddclothes()Adddetergent()Removeclothes()Takedirtyclothesasinputandproducecleanclothesasoutput類名類的屬性類的操作類的職責(zé)職責(zé)指類承擔(dān)的責(zé)任和義務(wù)。在矩形框中最后一欄中寫明類的職責(zé)。斜體為抽象類7類圖中的事物及解釋接口:一組操作的集合,只有操作的聲明而沒有實現(xiàn)抽象類:不能被實例化的類,一般至少包含一個抽象操作模版類:一種參數(shù)化的類,在編譯時把模版參數(shù)綁定到不同的數(shù)據(jù)類型,從而產(chǎn)生不同的類(標準圖形)(變體圖形)接口抽象類模版參數(shù)模版類8類圖中的關(guān)系及解釋(1)關(guān)聯(lián)關(guān)系描述了類的結(jié)構(gòu)之間的關(guān)系。具有方向、名字、角色和多重性等信息。一般的關(guān)聯(lián)關(guān)系語義較弱。也有兩種語義較強,分別是聚合與組合UML表示法角色類的角色是“事物“多重性(用數(shù)字和*表示)1…*:1個或多個1個類圖有1個或多個類1個類屬于1個或多個類圖方向雙向關(guān)聯(lián)(省略箭頭)名字關(guān)系的名字是“使用”實例不帶箭頭也可以9舉例ManagerCompanyWorksForManagerCompanyEmployeeEmployerFourWheeledVehicleDoor1410聚合關(guān)系:特殊關(guān)聯(lián)關(guān)系,指明一個聚集(整體)和組成部分之間的關(guān)系組合關(guān)系:語義更強的聚合,部分和整體具有相同的生命周期UML表示法UML表示法(空心菱形)實例類圖包含有事物和關(guān)系,類圖不存在了,事物和關(guān)系還可用于其它的類圖(實心菱形)實例類與關(guān)聯(lián)關(guān)系之間有組合關(guān)系,類不存在了,則相應(yīng)的關(guān)聯(lián)關(guān)系也不存在11聚合舉例FourWheeledVehicleDoor14SeatWheel42..512組合舉例BuildingBulidingnameNumberofFloorssetName()setNumberofFloors()FloorfloorNumberNumberofRoomsgetFloorNumber()getNumberofRooms()RoomroomNumberroomLocationgetRoomNumber()getRoomLocation()11211813類圖中的關(guān)系及解釋(2)泛化關(guān)系在面向?qū)ο笾幸话惴Q為繼承關(guān)系,存在于父類與子類、父接口與子接口之間UML表示法關(guān)聯(lián)、泛化、實現(xiàn)、依賴都是一種關(guān)系類、接口都是一種事物14泛化舉例EmployeeClericalStaffSoftwareEngineerManagerSalesManagerProductionManager15類圖中的關(guān)系及解釋(3)實現(xiàn)關(guān)系對應(yīng)于類和接口之間的關(guān)系UML表示法類Circle、Rectangle實現(xiàn)了接口Shape的操作16類圖中的關(guān)系及解釋(4)依賴關(guān)系描述了一個類的變化對依賴于它的類產(chǎn)生影響的情況。有多種表現(xiàn)形式,例如綁定(bind)、友元(friend)等UML表示法模板類Stack<T>定義了棧相關(guān)的操作;IntStack將參數(shù)T與實際類型int綁定,使得所有操作都針對int類型的數(shù)據(jù)類Memento和類Originator建立了友元依賴關(guān)系,以便Originator使用Memento的私有變量state17依賴關(guān)系18類圖與代碼的映射C++代碼classVehicle{public:

virtualintStart()=0;

virtualintStop()=0;

virtualintRun(floatfSpeed)=0;private:

floatfMaxSpeed;};Java代碼publicabstractclassVehicle{

publicabstractintStart();

publicabstractintStop();

publicabstractintRun(floatfSpeed);

privatefloatfMaxSpeed;}19關(guān)聯(lián)關(guān)系的映射C++代碼classDialog{private:

ButtonbtnOK;

ButtonbtnCancel;

TextBoxtxtInfo;};classButton{};classTextBox{};組合關(guān)系,代碼表現(xiàn)為Dialog的屬性有Button和TextBox的對象20泛化關(guān)系的映射Java代碼publicclassSavingsAccountextendsAccount{}C++代碼classSavingsAccount:publicAccount{};21實現(xiàn)關(guān)系的映射C++代碼classShape{public:virtualvoid

Draw()=0;};classCircle:publicShape{public:void

Draw();private;

PointptCenter;

intnRadius;};Java代碼publicinterfaceShape{publicabstract

voidDraw();}publicclassCircleimplementsShape{publicvoid

Draw();privatePointptCenter;privateintnRadius;}在C++語言里面,使用抽象類代替接口,使用泛化關(guān)系代替實現(xiàn)關(guān)系在Java語言里面,有相應(yīng)的關(guān)鍵字interface、implements22依賴關(guān)系的映射綁定依賴C++代碼template<typenameT>classStack{private:intsize;public:intPush(Telem);intPop();constT&GetTop();};typedefStack<float>FloatStack;C++代碼(編譯器生成)classFloatStack{private:intsize;public:intPush(floatelem);intPop();constfloat&GetTop();};23如何建立類圖分析問題域,確定需求;尋找類,確定類的含義和職責(zé);定義類的屬性和操作;確定類之間的關(guān)系;精化類和類間的關(guān)系;繪制類圖。24尋找類的方法(1)使用名詞/動詞尋找類:收集相關(guān)信息補充的需求規(guī)格說明用例項目說明文檔其他文檔分析信息名詞、名詞短語類或?qū)傩詣釉~、動詞短語操作25尋找類的方法(2)使用CRC分析法尋找類:C-class(類)R-responsibility(職責(zé))C-collaboration(協(xié)作)CRC分析法是根據(jù)類所要扮演的職責(zé)來確定類。腦力風(fēng)暴收集信息。關(guān)鍵業(yè)務(wù)用類表示,其它卡片作為屬性。26案例李小平是一個愛書之人,家里各類書籍已過千冊,而平時又時常有朋友外借,因此需要一個個人圖書管理系統(tǒng)。該系統(tǒng)應(yīng)該能夠?qū)幕拘畔从嬎銠C類、非計算機類分別建檔,實現(xiàn)按書名、作者、類別、出版社等關(guān)鍵字的組合查詢功能。在使用該系統(tǒng)錄入新書籍時系統(tǒng)會自動按規(guī)則生成書號,可以修改信息,但一經(jīng)創(chuàng)建就不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)耐饨枨闆r進行記錄,可對外借情況列表打印。另外,還希望能夠?qū)馁徺I金額、冊數(shù)按特定時間周期進行統(tǒng)計。27發(fā)現(xiàn)類李小平是一個愛書之人,家里各類書籍已過千冊,而平時又時常有朋友外借,因此需要一個個人圖書管理系統(tǒng)。該系統(tǒng)應(yīng)該能夠?qū)幕拘畔从嬎銠C類、非計算機類分別建檔,實現(xiàn)按書名、作者、類別、出版社等關(guān)鍵字的組合查詢功能。在使用該系統(tǒng)錄入新書籍時系統(tǒng)會自動按規(guī)則生成書號,可以修改信息,但一經(jīng)創(chuàng)建就不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)耐饨枨闆r進行記錄,可對外借情況列表打印。另外,還希望能夠?qū)馁徺I金額、冊數(shù)按特定時間周期進行統(tǒng)計。28篩選備選類“李小平”、“人”、“家里”很明顯是系統(tǒng)外的概念,無須對其建模;而“個人圖書管理系統(tǒng)”、“系統(tǒng)”指的就是將要開發(fā)的系統(tǒng),即系統(tǒng)本身,也無須對其進行建模;很明顯“書籍”是一個很重要的類,而“書名”、“作者”、“類別”、“出版社”、“書號”則都是用來描述書籍的基本信息的,因此應(yīng)該作為“書籍”類的屬性處理,而“規(guī)則”是指書號的生成規(guī)則,而書號則是書籍的一個屬性,因此“規(guī)則”可以作為編寫“書籍”類構(gòu)造函數(shù)的指南?!盎拘畔ⅰ眲t是書名、作者、類別等描述書籍的基本信息統(tǒng)稱,“關(guān)鍵字”則是代表其中之一,因此無需對其建模;“功能”、“新書籍”、“信息”、“記錄”都是在描述需求時使用到的一些相關(guān)詞語,并不是問題域的本質(zhì),因此先可以將其淘汰掉;29篩選修選類“計算機類”、“非計算機類”是該系統(tǒng)中圖書的兩大分類,因此應(yīng)該對其建模,并改名為“計算機類書籍”和“非計算機類書籍”,以減少歧義;“外借情況”則是用來表示一次借閱行為,應(yīng)該成為一個候選類,多個外借情況將組成“外借情況列表”,而外借情況中一個很重要的角色是“朋友”—借閱主體。雖然到本系統(tǒng)中并不需要建立“朋友”的資料庫,但考慮到可能會需要列出某個朋友的借閱情況,因此還是將其列為候選類。為了能夠更好地表述,將“外借情況”改名為“借閱記錄”,而將“外借情況列表”改名為“借閱記錄列表”;“購買金額”、“冊數(shù)”都是統(tǒng)計的結(jié)果,都是一個數(shù)字,因此不用將其建模,而“特定時限”則是統(tǒng)計的范圍,也無需將其建模;不過從這里的分析中,我們可以發(fā)現(xiàn),在該需求描述中隱藏著一個關(guān)鍵類—書籍列表,也就是執(zhí)行統(tǒng)計的主體。30得到候選類在使用“名詞動詞法”尋找類的時候,很多團隊會在此耗費大量的時間,特別是對于中大型項目,這樣很容易迷失方向。其實在此主要的目的是對問題領(lǐng)域建立概要的了解,無需太過咬文嚼字書籍計算機類書籍非計算機類書籍借閱記錄借閱記錄列表書籍列表31關(guān)聯(lián)分析建模32多

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論