將程式的資料和操作分別封裝到所屬類別
類別可以產生能操作的物件
物件不只有專屬的資料型態還有專屬的方法
英文為class
描述資料的形式以及對資料的操作
還需要實體化成物件才能操作
物件英文為object,實例為instance
能實際使用資料和對資料操作的單位
由類別實體化而來
所以我們要操作的是物件而不是類別
你不會拿電腦說明書上網的...
Ruby為完全物件導向
除了各種物件有所屬的類別
Ruby的各種類別其實是Class這個類的實體
類別的類別就是類別(!!)
最簡單的方法就是使用class關鍵字
class Klass
#這裏面的不能看到外面的變數歐
end
不過其實就只是在Klass這個常數裏面放入類別的實體
Klass=Class.new
每個物件有自己專屬的資料
實體變數就可以用來存放這些資料
使用"@"開頭的變數就是實體變數
用來存放這個類別共通可以操作的資料
目前暫且還用不到
可以用來存放所有物件共用的資料
使用"@@"開頭
在class和end中間可以宣告實體的方法
一樣是使用def關鍵字
方法中可以操作自己的類別變數或類別的類別變數
class C
@class_inst_var = "C類別的實體變數"
@@class_var = "C的類別變數"
def 我是C的實體方法
@inst_var = "我是C的實體變數"
end
end
請注意C類別的實體變數只有C類別能用
在Ruby中實體產生可以設定初始化的方法
class C
def initialize
@inst_var = 100
end
end
英文為duck typing
"當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱為鴨子。"
在Ruby中只要能呼叫到有該名稱的方法
就能夠依照該方法來運作
你不會想讓呱呱叫的噴火龍進入池塘
需要先宣告該類別的存在
使用類別的new方法產生物件
obj=Klass.new
這樣就會呼叫該類別的建構子進行初始化
遊戲初始化
外部輸入←┐
進行計算 │
輸出畫面→┘
遊戲結束
玩家要逃出充滿了小行星和起司的小行星帶
到底能在火力不足以及機體強度限制下逃多遠呢?
基本上遊戲會有一個主要類別來控制遊戲機制
這次的程式中就是Game類別
該類別要整合所有物件的運作
會有玩家的類別用來處理玩家的操作
在這次遊戲中為Ship類別
這個類別只產生一個物件
敵人也需要用類別來包裝其資料和操作
這次的敵人是不會主動攻擊的Rock
但是概念上還是屬於有害於玩家
射擊遊戲不可少的投射物
獨立出來為一個類別
這次只玩家會攻擊因此只有Bullet類別