iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0

物件 ( Object )

好的,來到各位讀者可能最常聽過,但概念也最模糊的『 物件 Object』,
可以這樣想像,一個人類,有很多個『屬性』和『功能』,
用程式來呈現,可能會像這樣:

weight = 65
height = 175

def eat ( kg )
   weight = weight + kg
end

def pee ( l )
    weight = weight - l	
end

有體重和身高兩個屬性,會吃和尿尿兩件事。
而人就是一種『物件』,所以我們想要設定人這個物件,
會以上的屬性和功能,可以設定成下方的程式碼,
同時也是一個基本的完整物件樣貌:

class Person

  attr_accessor :weight, :height

  def initialize(weight, height)
    @weight = weight
    @height = height
  end

  def eat ( kg )
     @weight = @weight + kg
  end

  def pee ( l )
      @weight = @weight - l
  end

  def get_weight()
      return @weight
  end

end

結構解說

首先,第一行我們使用『 class 』來設定一個物件,並把它命名叫『 Person 』。
再來用了 ruby 才有的 attr_accessor,去設定兩個變數 weight 和 height,
然後設定一個函式叫做 initialize,
這個函式會在我們建立一個物件時,自動自發的被執行,
而這個函式的用途,就是初始化我們的變數。
所以裡面就設定了我們的兩個變數的值,
那前面的 @ 小老鼠符號是什麼意思?
這也是 ruby 特有的寫法,它是宣告說這個變數的種類為『實例變數』,
這樣物件裡面的變數被取用的限制就寬鬆了許多。
再來設定完兩個函式『 eat 』和『 pee 』後,
最後設定一個函式『 get_weight() 』來取得 weight 這個變數的值。

物件使用

而我們要怎麼使用這個物件呢?可以像是以下的用法:

john = Person.new(65,175)
john.eat(10)
may = Person.new(65,175)
may.pee(10)

puts john.get_weight()
puts may.get_weight()

上面的程式碼,我們使用 Person.new() 的函數,建立了兩個 new 物件,
一個叫做 john ,一個叫做 may,並都設定相同的身高體重,
john 做了 eat 的動作,並傳入了 10 這個參數進去,
may 做了 pee 的動作,並傳入了 10 這個參數進去,
這是函數的概念,不清楚的讀者可以看看昨天的貼文,
兩個物件就會分別去改變自己的屬性,
那在實務上,我們就能分別拆開兩個樣貌相同,
但可能因應外部影響,而有不同屬性或行為的物件。

例如玩傳統的 RPG 遊戲時,裡面的怪物起初都是同樣的『物件』,
那因應不同玩家攻擊,或是捕獲之類的動作,會各自 HP,狀態有所改變,
因此物件的概念在程式是很重要的應用喔。

像是前幾天寫到的 Json 和 XML 的資料範例,
其實都是傳遞一整個物件,因此不只是複雜的程式,
簡單的資料傳遞也都會有物件的概念喔!!

如果有任何問題,或是指證文中的錯誤,歡迎寄信給我或留言在下面喔~


上一篇
[Day10] Function 函式
下一篇
[Day12] 資料結構 - 陣列和雜湊
系列文
菜鳥後端工程師的第一門課30

尚未有邦友留言

立即登入留言