iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

滿滿的紅寶石不拿嗎?-- 去吧!我把世界上的一切都放在那裡了! 系列 第 10

物件 <> 最初與最盡責的夥伴,黃金梅利號:我想再航行一次! - 滿滿的紅寶石不拿嗎?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20200918/20128363GyjtLaK21y.png

[Day10] 梅利號陪伴著草帽海賊團走過了許多的風風雨雨。。。

鐵人終於來到了第十天了,還記得當初出航的勇氣嗎?
今天想和大家討論一個非常重要的主題,在程式領域的範疇裡,我們無法避開它,那就是物件(object)。

物件是什麼?

按照慣例,先說一下程式語言裡的物件是什麼?

在剛接觸 Ruby 時,常常會聽到或看到一句話:「在 Ruby 裡,幾乎所有東西都是物件。」讓我相當好奇,究竟程式語言裡的物件是什麼?

在開始之前,我們先定義一個 Cat 類別:

class Cat
  attr_reader :age
  
  def initialize(age)
    @age = age
    puts "meows~"
  end
 
  def walk
    puts "走了一小段...爆衝!"
  end

  def eat
    puts "只有肉泥我才要!"
  end
end

(不知道什麼是類別也別緊張!明天就會介紹 類別 了~)

接著,我們來創造一隻屬於 Cat 類別的物件 didi

didi = Cat.new
meows~

didi 一出生就很有精神地喵喵叫了呢!

試想一下,你我都是 Ruby 程式世界的造物主,就在剛剛,我們已經創造了一個 didi 的物件。 didi 目前在 Ruby 的世界裡已經適應地很好,也領到了自己的身分證:

didi
=> #<Cat:0x00007fa5dd155920 @age=0> 

didi.object_id
=> 180    # ID_card get!

可以先把物件想作是一段活生生的程式碼,或者說是將記憶體的位置 擬物化 的過程。


物件的狀態和行為

物件可以像人、或是像任何一種生物一樣,
它會被賦予一個特定的意義,擁有自己的 狀態行為,不過又和方法(method)的定義不太一樣。

其實這件事一開始並不是很好理解,我是從自身出發去思考這個脈絡的。

譬如說,每個人都會有屬於自己的髮色、年齡等等,這些就是狀態的一種,至於吃飯、睡覺、走路等等,則是人們常見的行為。所以如果把現實世界參照到程式的世界,我們「每一個人」其實就是活在其中的物件,而「人類」就是我們所屬的類別了。(關於類別和實體的關係,明天會有更詳細的介紹。)

現在,再回過頭來看我們剛剛創造的 didi

# didi 現在幾歲
didi.age
=> 0 

# didi 走路
didi.walk
走了一小段...爆衝!

# didi 吃東西
didi.eat
只有肉泥我才要!

didi 也有了屬於它自己的狀態和行為了,是不是很可愛呢!


順帶一提,在了解程式世界與物件的關係後,
我不禁想起 Matrix 和虛擬理論,這邊帶個老高的影片給大家複習複習:

Yes

神也要花上六天才寫完程式啊...


為什麼要使用物件?

在程式的世界裡,我們會對著物件呼叫方法,來完成我們打算讓它執行的事情。

這裡就不得不提**物件導向(Object Oriented)**了(老實說我本來沒預料到要寫這個)
要用文字講解這麼抽象的概念,我自己也有點亂,接下來我們還是一邊看程式碼一邊說明吧!

在剛剛的例子裡:

didi.eat

可以看到, 我們對 didi 這個物件使用一個方法叫做 eat ,在一開始理解時,我會說是在這個物件 didi 呼叫了 times 這個方法。

但是在知道更多物件導向的概念後,我開始轉換思考的方式,把這整件事看成是 didi 這個接收者,接受了我傳遞給它的 eat 訊息,在 Ruby 裡,某些特定物件可以理解某些特定訊息,並對應到可執行的方法。

所以,我們並不只是在 didi 這個物件上呼叫了 eat 這個方法這麼單純而已,物件導向其實還偷偷做了很多的事情,不過由於篇幅有限,時間也相當緊迫,在此篇無法完整概述。

相信在不久後的將來,我勢必會再重新說明一次 Object Oriented 的概念,就像學 JavaScript 的人都要寫一篇網誌來說明什麼是 closure 沒有兩樣。


覺得還要更多的篇幅才能講完物件的概念,不過剛剛寫到後來我看了一下時間,發現如果只剩 30 分鐘再不發文就要斷更啦!趕快緊急停筆,不好意思只能先寫到這邊~

另外,其實在寫今天這篇物件之前,我一直在考慮到底要先介紹 類別 還是 物件 較好,苦惱了很久,畢竟 Ruby 語言裡有太多東西都環環相扣啦!最後決定還是先把自己對 物件 的理解寫出來,也梳理一番自己學習上的思緒。

緊接著明天就會介紹 Ruby 裡的類別啦!謝謝大家的觀看!


上一篇
回傳 <> 受傷了就趕快回船上治療! - 滿滿的紅寶石不拿嗎?
下一篇
類別 <> 前往海底一萬米!想要一睹 Ruby 世界裡的 All Blue 就進來吧!- 滿滿的紅寶石不拿嗎?
系列文
滿滿的紅寶石不拿嗎?-- 去吧!我把世界上的一切都放在那裡了! 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言