iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
Modern Web

Ruby on Rails面試題挑戰系列 第 3

Ruby on Rails面試題挑戰 Day03 - 在Ruby當中幾乎所有的東西都是物件?

在前一天的Ruby及Rails的介紹中,一直反覆提到 「物件導向(Object-oriented)」 這個名詞,在還沒學程式以前,每次聽到這個名詞就覺得有種不明覺厲的感覺,今天就來挑戰一題與此相關的內容,試著解釋看看!


請解釋在Ruby當中幾乎所有的東西都是物件?
Everything (almost) is an object in Ruby. Please explain


要回答這題,首先要了解什麼是「物件」。

物件Object

物件(Object)擁有狀態(State)行為(Behavior),物件可以與現實世界的東西做連結。譬如一隻貓就可以是一個物件,那貓的「毛色」、「年齡」是物件的狀態,而貓可以「跳躍」、「吃貓食」就是物件的行為。

在物件導向的程式語言中,物件(Object)是一個類別(Class)所製造出來的實體(Instance)

類別Class

類別(Class)是建立物件的藍圖,裡面描述了物件的狀態以及物件可以做的行為。例如:「人類」就是一個類別,類別裡可能規範了一些基本的狀態(兩隻手、兩隻腳、一雙眼睛)和可以做的行為(走路、睡覺),而所有的人,包括你跟我,都是由「人類」這個類別所產生的實體。

在Ruby的世界中幾乎所有的東西都是物件,包括數字、字串、陣列等等。既然是物件,就是從某個類別建立出來的。
下面就試著對數字使用.class這個指令(或說方法),來找到他的是來自哪個類別。

5.class         # => Integer
Integer.class   # => Class
Class.class     # => Class

5這個數字是個物件,是由Integer這個類別所產生出來的,而Integer類別也是個物件,是由Class這個類別所產生出來的,而Class類別也是從Class這個類別自生出來的,所以Class類別也是個物件。

在Ruby當中,所有的類別(Class)都是Class這個類別所製造出來的實體。
(All classes are instances of the class "Class".)

而會說「幾乎」就表示有極少數不是物件的東西,例如區塊(Block)、方法(method)、條件陳述(conditional statements, ie: if,else)等等,這些不是物件的東西,也不屬於任何一個類別。


你可以這樣回答:

在物件導向程式中,物件(Object)是一個類別(Class)所產生的實體(Instance),有其狀態和行為。
而在Ruby中,所有的類別都是Class這個類別所製造出來的實體,所以他們也都是物件。
少數如區塊(Block)、方法(method)等不是物件,不屬於任何一個類別。


參考資料

  1. 維基百科_物件導向
  2. 為你自己學 Ruby on Rails - 類別(Class)與模組(Module)
  3. Ruby官方網站

上一篇
Ruby on Rails面試題挑戰 Day02 - Ruby on Rails 是什麼?
下一篇
Ruby on Rails面試題挑戰 Day04 - 類別變數與實體變數差異是什麼?
系列文
Ruby on Rails面試題挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言