官术网_书友最值得收藏!

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中的類

此外,類是靜態的,它的存在、語義和關系在執行前就已經定義好了。而對象是動態的,在程序執行時可以被創建和刪除。

主站蜘蛛池模板: 河北区| 平罗县| 循化| 且末县| 安庆市| 玛沁县| 齐河县| 天镇县| 楚雄市| 永吉县| 思茅市| 巨鹿县| 阳西县| 合阳县| 南投县| 庐江县| 九江县| 上高县| 扎兰屯市| 香河县| 通道| 淳化县| 平塘县| 东莞市| 望都县| 汕尾市| 郓城县| 方正县| 甘泉县| 淅川县| 吉安市| 阿荣旗| 阿勒泰市| 阿拉善右旗| 军事| 恩施市| 萨嘎县| 苏尼特左旗| 墨江| 淄博市| 元谋县|