前言
這系列文會整理進目前公司以來所學,目標是釐清自己觀念、脫離只知其一不知其二的狀態,故文章將會不停更新。
本文
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:一句話透過摩斯密碼傳遞,接收的人需要根據密碼表重組成原句。