有非常多的文章在介紹 Ruby 時,會提到 Ruby 是一款物件化非常徹底程式語言,來看看OOP的定義:
物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、程式碼與方法。物件則指的是類別的實體。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的物件。
從 OOP 的來看,一個類別( class )定義了一件事物的抽象特點,其中包含了資料的形式以及對資料的操作。
物件導向是模擬現實生活中物件的一種程式抽象化概念。假設現實世界中每個物件都有他的狀態(state)以及行為(behavior),而對照到程式的物件導向中就會變成實體變數(instance variable)和方法(method)。 - 參考文章出處
1.用 class
定義方法給實體用,然後印出實體instance
,該實體便具備那些抽象特點,也就是使用哪些定義的方法:
定義「狗」,行為:「吠叫、吃與走路」,假設我有一隻哈士奇,牠會吃飯與吠叫。
class Dog
def bark
puts " 汪汪~ "
end
def eat
puts " 好吃好吃! "
end
end
husky = Dog.new
husky.bark # 印出 汪汪~
husky.eat # 印出 好吃好吃!
class Animal
end
class Dog < Animal # 繼承 Animal
end
husky = Dog.new
簡單的說類別就像模子,本身不直接拿來使用的,用模子印出的實體化成物件( object ),才被拿來「使用」。
object.calss # 印出 Class
Class.class # 印出 Class
Object.superclass # 印出 BasicObject
Class.superclass # 印出 Module.class
BasicObject.class # 印出 Class
BasicObject.superclass # 印出 nil
Module.class # 印出 Class
Module.superclass # 印出 Object
最後來做個的小實驗,用 .instance_methods
可叫出該 class 具備的 instance method,以此來驗證一下將 class
作為實體的寫法是否行得通
Dog = Class.new do
def bark
puts " 汪汪~ "
end
end
class Dog
def eat
puts " 好吃好吃! "
end
end
Dog.instance_methods - Object.instance_methods # 印出 [:bark, :eat]
上例可以推測出兩種宣告 class
的方法是等效的,差別在於使用 new
方法時,必須將 block
掛上,如此才可以把 method傳進該class
裡。
此文同步刊登於CJ-Han的網站