類別 Class、物件 Object 和實體 Instance的差別?[轉錄]

Ryan Lu
AI反斗城
Published in
Oct 30, 2020

這次要介紹在物件導向技術中三個經常容易搞混的名詞,分別是object、class、instance。首先看一下Object-Oriented Software Engineering這本書對於這三個名詞的定義:

  • Object:An object is characterized by a number of operations and a state which remembers the effect of these operations.(p.44)
  • Class:A class represents a template for several objects and describes how these objects are structured internally. Objects of the same class have the same definition both for their operations and for their information structures.(p.50)
  • Instance:An instanceis an object created from a class. The class describes the (behavior and information)structure of the instance, while the current state of the instance is defined by the operations performed on the instance.(p.50)

以下為上述定義翻成白話文再加上一點Teddy個人補充的資料:

  • Class是用來定義object的一種東西,class的內容包含了動作(operations)與資料(data)。
  • 動作(operations)、方法(methods)和行為(behaviors)可以看作同義詞。理想上一個object的狀態只能透過動作去改變它。
  • 一個object就是某個class的instance,換句話說可以把object和instance看作是同樣的東西。只是在某些場合大家比較習慣用object這個說法,其他場合則是會用instance。例如,

List<String> a = new LinkedList<String>();

List<String> b = new LinkedList<String>();

你可以說「a、b兩個ojbects各指到一個LinkedList類別的instance」或是說「a、b兩個ojbects各指到一個 LinkedList類別的object」,

但是如果程式變成下面這樣

a = b;

那麼說成「a、b兩個ojbects都指到一個相同的LinkedList類別的instance」,或是更簡單一點「a、b都指到同一個instance」會比「a、b都指到同一個object」意思要來的清楚一點。

  • 資料成員(data members)和屬性(attributes)是同義詞,都是用來儲存物件的狀態。如果一個class沒有任何資料成員,這個class所產生的所有objects看起來就會是一模一樣的東西。也就是說,可以把一個沒有狀態的class變成一個static class,不用產生任何instance就可以呼叫該class的operations。

類別(Class) 物件(Object) 是個一體兩面的東西,以下我用幾個不同的方式說明這兩著的差別:

簡單解釋:

  • 類別算是一個藍圖、一個範本、一個可參考的文件,他沒有 實體 (Instance) 的概念,屬靜態的。
  • 物件是一個看的到、摸的到的實體,屬於動態的,狀態會隨時改變,但架構與行為不會改變。

比喻一:建築物

  • 類別:設計藍圖
  • 物件:實際蓋好的房子
  • 兩者關係:設計藍圖(類別)決定房子應該怎麼蓋,決定幾台電梯、幾間房間、走道如何設計。實際蓋好的房子(物件)是照著設計藍圖所蓋出來的房子,人只能照設計藍圖的設計使用這間房子。

比喻二:蓋世武功

  • 類別:武林密笈
  • 物件:修練武林密笈而成的武林高手
  • 兩者關係:武林密笈(類別)記載許多各種攻擊與回應的方式,讓武林高手(物件)知道遭遇到什麼攻擊時要用什麼招式回應。
  • 程式設計:每執行到我們用 new 運算子時,等同於將物件產生,也等同於成功得到武林密笈可以開始練功,或是在「建構子」的時候就已經賦予你基本功力。

基本上,類別只用來決定物件形成時的樣子,當物件形成時,物件就變成一個記憶體中的空間,記載著物件活動時暫存的資料與狀態,並且當有類別存在時有能力透過方法(Method)執行一些動作。

[轉錄]
1.什麼是物件導向(2):Object, Class, Instance
2.物件導向基礎:何謂類別(Class)?何謂物件(Object)?

--

--