概念背景 現實世界中的實體被看成對象,對象之間可能存在著聯繫或關係,基於對象之間可能存在的關係,引入了對象關係的概念。 對象關係的定義 對象之間存在的關係稱為對象關係。 對象關係的分類 根據對象之間存在的關係的性質,對象關係分為 1)關聯關係 2)聚合關係 3)繼承關係 其中聚合關係又可分為 1)組 ...
概念背景
現實世界中的實體被看成對象,對象之間可能存在著聯繫或關係,基於對象之間可能存在的關係,引入了對象關係的概念。
對象關係的定義
對象之間存在的關係稱為對象關係。
對象關係的分類
根據對象之間存在的關係的性質,對象關係分為
1)關聯關係
2)聚合關係
3)繼承關係
其中聚合關係又可分為
1)組合關係
2)非組合關係
下麵較詳細地介紹一下聚合關係及其來源。
聚合關係
什麼是聚合?什麼是組合?什麼是非組合?
首先來說明它們的概念。
聚合是將幾個對象收集在一起生成一個新對象的行為,其特性是聚合的內部對象與聚合的外部對象相對獨立。
組合是將幾個對象收集在一起生成一個新對象的行為,其特性是聚合的內部對象與聚合的外部對象相對獨立,但兩者的生命周期一致。
非組合是將幾個對象收集在一起生成一個新對象的行為,其特性是聚合的內部對象與聚合的外部對象相對獨立,但兩者的生命周期不一致。
可以看到聚合包括組合和非組合,它們三者都有“聚合的內部對象與聚合的外部對象相對獨立”的特征,但什麼是聚合的內部對象和聚合的外部對象呢?
舉個現實世界中的簡單的例子,
我們知道,一副棋具由棋子和棋盤兩樣東西組成,
以對象的角度來看,棋具、棋子和棋盤都是對象,
但是棋具是由棋子和棋盤這兩個對象組成的,本身又是一個對象,
這個棋具對象就是一個聚合的外部對象,棋子和棋盤就是聚合的內部對象。
一般情況下,聚合指的是非組合。
什麼是聚合關係?什麼是組合關係?什麼是非組合關係?
根據上面的內容,可以歸納出,
聚合關係是聚合的關係,
展開就是
聚合關係就是將幾個對象收集在一起生成一個新對象、內部對象與外部對象相對獨立的關係。
同理,
組合關係是組合的關係,
非組合關係是非組合的關係。
有什麼用?
在軟體工程中,面向對象程式設計方法是解決複雜問題的常用方法。
面向對象程式設計方法的內容包括:
1)對對象進行建模
2)對對象之間的聯繫或關係進行建模
於是,對對象之間的關係進行建模是軟體工程中使用面向對象程式設計方法解決問題各階段需要經歷的過程。
掌握對象之間的關係能夠幫助開發者對對象之間的關係建模
實例
實例採用Python語言實現。
# 對象之間的組合關係建模
class Cpu:
def __init__(self):
self.core = 4
class Computer:
def __init__(self):
self.cpu = Cpu()
cp = Computer()
print(cp.cpu.core)
del cp
由以上代碼可以知道, 當創建一個Computer類的實例時,同時會創建一個Cpu類的實例,並且它們的生命周期一致,即它們是組合的。
當刪除創建的Computer類的實例時,也會刪除同時創建的Cpu類的實例。
這也反映了一定的現實:當電腦對象存在時,處理器對象必定和電腦對象組合地存在。
# 對象之間的聚合關係建模
class ChessPieces:
def __init__(self):
self.number = 32
class ChessBoard:
def __init__(self):
self.texture = 'marble'
class ChessSet:
def __init__(self, chesspieces, chessboard):
self.chesspieces = chesspieces
self.chessboard = chessboard
cp = ChessPieces()
cb = ChessBoard()
cs = ChessSet(cp,cb)
print(cs.chesspieces.number, cs.chessboard.texture)
del cs
print(cp.number, cb.texture)
由以上代碼可以知道,當創建一個ChessSet類的實例時,必須先創建一個ChessPieces類的實例和一個ChessBoard類的實例,再將它們聚合成一個ChessSet類的實例。
創建的ChessSet類的實例和創建的ChessPieces類的實例和創建的ChessBoard類的實例的生命周期可能不同。
當刪除創建的ChessSet類的實例時,並不會刪除創建的ChessPieces類的實例和創建的ChessBoard類的實例。