- UML2面向對象分析與設計(第2版)
- 譚火彬編著
- 2001字
- 2019-07-01 10:17:33
1.3 對象和類
面向對象技術是由一系列的概念和原則組成的,而這些概念和原則中的兩個最基礎、最重要的就是對象和類。
1.3.1 對象
對象(Object)可以是一個實體、一件事、一個名詞,也可以是可獲得的某種東西,還可以是可想象為有自己標識的任何事物。對象的實體可以是物理存在的、也可能是一個概念,或是軟件中的實體。例如,一輛卡車是一個物理上存在的實體;而一個化學反應過程則是一個概念中的實體;數據結構中的一個鏈表則是軟件領域的實體。
結合前面的描述,可以對對象進行一個正式的定義:對象是一個實體,這個實體具有明確定義的邊界(Boundary)和標識(Identity),并且封裝了狀態(State)和行為(Behavior)。這里關于對象的定義有兩方面重要特征。
(1)對象具有明確定義的邊界和標識。邊界意味著對象是一個封裝體,通過封裝來與其他對象分隔。而標識則表明每一個對象都是唯一的,雖然有時候某個對象的狀態有可能與其他對象一樣。每個對象都是獨一無二的,通過明確的邊界與其他對象區分;同時,這個邊界應該是研究該對象的用戶可以清晰定義的。比如杯子里的一杯水,對于普通用戶來說,杯體就是其邊界,這一杯水就是一個對象,區別于另外一個杯子里面的一杯水;但對于化學老師來說,如果他/她現在要研究水的分子結構,那這杯水就不是一個對象,而是包括一系列的水分子的對象,甚至還可以進一步包括氫原子、氧原子這樣的對象。
(2)對象封裝了狀態和行為。對象的狀態通過對象的屬性(Attribute)和關系(Relationship)來表達。在實際應用中,對象的狀態反映了現實世界的一系列屬性,如屬性的值(即與對象有關系的數據)、與其他對象的關系、任意一個時刻的歷史狀態。而對象的行為通過對象的操作(Operation)、方法(Method)和狀態機(State Machine)來表達,它由對象定義的一系列操作來決定。它定義了當其他對象發出請求時,該對象如何反應。
在UML中,對象用矩形框表示,對象的名稱寫在矩形框內部,并加上下畫線。UML中的對象有命名對象和匿名對象之分,如圖1-4所示。

圖1-4 UML中的對象
圖1-4(a)為命名對象,對象的名稱為J.Clark,“:”后面為對象所屬的類名Professor,表示J.Clark對象是Professor類的一個實例;而圖1-4(b)展示的是匿名對象,該對象沒有名稱,只有所屬的類名Professor,表示Professor類的某個對象;圖1-4(c)是一個J.Clark對象,沒有指定其所屬的類,嚴格來說,這種只有對象名、沒有類名的對象是錯誤的(因為在對象世界中,任何對象都來自類的實例化),但在早期的分析模型中可以使用,說明已知存在這樣的一個對象,但尚未最終確定它所屬的類。
1.3.2 類
在現實世界中,對象是具體存在的,可以準確反映問題空間的概念。但是,現實世界的對象常常和其他對象很相近。例如,教授都有一些相似的特性(他們做同樣的事情,用同樣的方式被描述),學生也有相似的特征,課程也有相似的特征等。如果要對每一個對象都進行建模(編程),那會是很繁重的工作,應該只定義一次教授對象、學生對象、課程對象等,在實際需要該對象時再創建出具體的實體。這就是為什么會需要類的原因。
類(Class)就是這一系列對象的抽象描述,這些對象共享相同的屬性、操作、關系和語義。與此對應,一個具體的對象是該類的一個實例。由此可見,類是一種抽象,它將相似的實體抽象成相同的概念,這種抽象過程強調相關特征而忽略其他特征。例如,每位教授雖然有不同的特征(如年齡、身高、體重等),但在一個選課系統中,他們所扮演的角色是相同的,在我們只關注這些相同的特征時,他們就屬于同一個類。
類抽象的過程就是將具體對象的特征和行為進行參數化,分別用類的屬性和操作表示。
◆ 屬性代表類的特征或特性,它表達了類所知道的事情。屬性的值是某一特定對象的屬性值。在類中,屬性名必須是唯一的,同時每一個類的實例(即對象,下同)都有為這個類定義的所有屬性的值。
◆ 操作代表類知道和做的事情,它用于訪問或修改對象的屬性值。而對象的行為是由為此對象定義的一系列操作決定的。
對于一個類,其屬性和操作并不是固定的,它們取決于類的應用場景,不同的使用目的決定了不同的抽象方式。例如,針對一個汽車類,從銷售人員的角度,他只關注型號、價格、顏色、里程數等屬性,以及處理客戶訂單、準備銷售合同、加入清單、從清單中刪除等操作;而從維修人員的角度,他只關注發動機類型、傳動類型、維修記錄等屬性,以及測試剎車、修理剎車、轉動輪胎、檢查轉速等操作。
類和對象之間是緊密相關的,每一個對象都是某一個類的實例(類是生成對象的模板,類的定義中包含創建和刪除對象的操作);而每一個類在某一時刻都有零個或更多個的實例存在。一個類通過一系列操作來定義行為,而該類的所有實例都可以使用在這個類中定義的操作。同時,類定義了使用哪些數據描述屬性,每一個實例都需要定義具體的屬性值。
在UML中,同樣采用矩形框表示類,該矩形框可以劃分為3個區域,分別表示類名、屬性和操作,如圖1-5所示。

圖1-5 UML中的類
此外,類是靜態的,它的存在、語義和關系在執行前就已經定義好了。而對象是動態的,在程序執行時可以被創建和刪除。
- Oracle從入門到精通(第3版)
- Boost.Asio C++ Network Programming(Second Edition)
- DevOps Automation Cookbook
- PHP 編程從入門到實踐
- TypeScript實戰指南
- Reactive Programming With Java 9
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- iOS編程基礎:Swift、Xcode和Cocoa入門指南
- Mastering JBoss Enterprise Application Platform 7
- Java程序設計入門
- Android玩家必備
- 0 bug:C/C++商用工程之道
- INSTANT Adobe Edge Inspect Starter
- Raspberry Pi Robotic Blueprints
- Apache Solr PHP Integration