前言

這系列文會整理進目前公司以來所學,目標是釐清自己觀念、脫離只知其一不知其二的狀態,故文章將會不停更新。

本文

1、類別(class)

  • 在程式設計中類別就像設計圖、它描繪出設計出來的樣貌。
  • 大話設計模式:類別就是具有相同之屬性和功能的物件抽象集合。
  • Ex:汽車設計圖、建築物設計圖。

2、物件(Object)

  • 實際設計出來的物品。
  • 大話設計模式:物件是一個獨立自主的實體,用一組可識別的特性和行為來標示。
  • Ex:特斯拉汽車、101大樓。

3、實體化

  • 描繪類別變成實體物件的狀態。
  • Ex:C#程式中會使用 New 來實體化出一個物件。
class 車子
{
	private 輪子(){}
	private 電池(){}
	private 方向盤(){}
}

車子 特斯拉 = new 車子()

問題討論

這邊的問題取自保哥物件導向基礎,建議往下看前先自行思考作答。

  • 1、請問「類別」可不可以包含「物件」?
  • 2、請問「物件」可不可以包含「類別」?
  • 3、請問「類別」可不可以包含「類別」?
  • 4、請問「物件」可不可以包含「物件」?
  • 5、請問「物件」可不可以當成資料傳遞?
  • 6、請問「類別」可不可以當成資料傳遞?
  • 7、 在 .NET 的世界,請問「物件」可以用什麼型態存在或用什麼格式傳遞?(可任意回答一種以上)
  • 8、在 .NET 的世界,請問「類別」可以用什麼型態存在或用什麼格式傳遞?(可任意回答一種以上)
  • 9、在 .NET 的世界,程式在執行的時候,「類別」可不可以被動態修改?
  • 10、如果有兩台主機要互相傳遞資料,他們傳遞的是「類別」還是「物件」?
  • 11、請問「物件」是否包含「方法(Method)」?
  • 12、如果「物件」從 A 電腦傳遞到 B 電腦時,若該物件要執行「方法」還需不需要有「類別」存在?

作答
1、不可以。本題提供同事講解易懂方式 Ex:特斯拉設計圖內不會包含真的特斯拉。
2、不可以。物件是實體的東西、而類別再被new出來前都是虛擬的,故實體物件不應該包含虛擬類別。
3、可以。可以有巢狀類別,Ex:特斯拉汽車的設計圖可以包含「設計電池、方向盤、中心電腦等設計圖。」
4、可以。同理Ex:特斯拉汽車可以包含實體的輪子、方向盤等。
5、可以。將物件透過編碼方式即可傳遞。
6、不可以。物件導向世界中類別為虛擬的東西,沒辦法傳遞。
7、a:可存在於記憶體中 b:json、xml等方式傳遞。
8、a:可存在於exe檔中 b:無法傳遞。
9、不行。被定義過的類別是無法修改的。Ex:不能擅自修改特斯拉的電池設計。
10、物件。
11、不包含。Method 它是一種定義、屬於類別的一部分,故不包含。
12、需要。資料編碼過後,傳遞過去的只算一連串編碼,需要有將它反編譯的方式才能得到該物件。Ex:一句話透過摩斯密碼傳遞,接收的人需要根據密碼表重組成原句。

參考連結