物件組成
(由物件結合跳轉過嚟)
物件組成(英文:object composition)係物件導向編程(OOP)上嘅一個概念,廣義上係泛指將啲物件或者資料類型砌埋一齊組成更加複雜嘅物件[1]。
基礎
編輯舉例說明,想像家陣有個人想編寫一個資訊系統程式,用嚟記住一間企業啲員工嘅個人資料,佢個程式可能會一段好似以下噉嘅 Python 碼[2]:
class Employee:
def __init__(self, id, name):
self.id = id
self.name = name
self.address = None
上述段碼做嘅係定義 Employee
(員工)呢個類別,個類別由幾個特性、方法同物件組成,當中 address
可以係一件物件,又會有 street
(街名)同 city
(城市)等嘅組成部份[2]。
物件結合
編輯喺再進階啲嘅應用當中仲有所謂嘅物件結合(object aggregation):物件結合意思係指件複雜物件 com
由多件物件組成,但 com
並唔「擁有」啲組成部份-當 com
俾人剷走嗰陣,如果用嘅係物件組成,組成 com
啲物件都會跟住被剷走,但喺物件結合之下,啲組成部份並唔隸屬於 com
,就算 com
俾人剷走,啲組成部份仲可以繼續噉存在。事實係有好多行 OOP 嘅程式語言都有陳述式專門做物件結合[1],例如想像一間大學又想整資訊系統記住啲員工嘅個資,可能會寫好似以下噉嘅 C++ 碼:
class Professor; // Professor(教授)呢個類別喺個程式嘅第度定義咗,為咗慳篇幅呢度唔詳講。
class Department { // 定義 Department(部門)呢個類別...
public:
Department(const std::string& title): title_(title) {}
private: // 物件結合:Professor 組成 Department 呢個類別,不過就算一個部門執咗,大學可能仲會想留住班教授同佢哋啲個資,調佢哋去第個部門。
std::vector<std::weak_ptr<Professor>> members_;
const std::string title_;
};
睇埋
編輯參攷
編輯- ↑ 1.0 1.1 Yaiser, Michelle. "Object-oriented programming concepts: Composition and aggregation". Archived from the original on April 8, 2015. There is a closely related concept to composition called aggregation. In conversation the differences between composition and aggregation are often ignored.
- ↑ 2.0 2.1 Composition in Python. Real Python.