[Object-oriented] 物件與類別

[Object-oriented] : 物件與類別


前言 :

物件與類別
這兩個是物件導向初學者,很容易混淆的東西。
筆者試著從計算機物理層面,來解釋物件與類別的不同。


說明 :

不管是物件導向程式或是結構化程式,
執行程式的時候。
電腦作的事情是 : 把執行檔的檔案載入到記憶體並且一行一行執行。
載入到記憶體的檔案,這個我們姑且就叫他 : 「程式碼」


物件導向程式程式碼的單位,是以類別為單位。
也就是說,物件導向程式碼載入到記憶體裡面,我們可以把它看成一塊一塊的區段。
這個區段就是說我們常聽到的「類別」。
可以想像成這樣 :


程式碼載入到記憶體內之後,
電腦就會從Main(),開始一行一行執行程式碼。
當電腦執行程式到 Product X = new Product()的程式碼的時候,


會在空白的記憶體區塊複製類別的程式碼,必且將它取名為X。
這個從程式碼複製出來的記憶體區塊就是我們常聽到的「物件」。
(雖然我比較喜歡「實例」這個名詞 XD)
可以想像成這樣 :


而每個「物件」都是獨立的記憶體區塊,
當我們程式碼,繼續執行到Product Y = new Product();的時候
電腦會在另外在空白的記憶體區塊複製類別的程式碼,必且將它取名為Y。
X跟Y都是獨立的個體,變更X的資料不會去影響到Y。
可以想像成這樣 :


當我們的程式碼,執行 X.Name = "Clark"的時候。
電腦會將X所代表的記憶體區塊,裡面代表Name區塊的資料,設定為"Clark"
可以想像成這樣 : 


當我們的程式碼,執行 X.Show()的時候。
電腦會去執行X所代表記憶體區塊,裡面的Show()函式。
可以想像成這樣 : 



後記 :

本篇的文章,
描述了物件與類別的關係,希望對大家有幫助^^


P.S.
本篇的內容大幅度的簡化了計算機結構的內容,用以傳達物件導向的概念。
實際電腦系統在運作的時候,比本篇說明的複雜很多 ^^"。

期許自己
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。