3. classの初歩と継承
# ただの名前と点数を表示するだけ s=Student.new("fujioka")
のプログラム s.english=80
s.puts_status
class Student rs=RikeiStudent.new("katahira")
attr_accessor :name rs.english=80
attr_accessor :english rs.math=92
def initialize(name) rs.science=85
@name=name rs.puts_status
end
def puts_status
puts @name
puts @english ~% ruby person.rb
end fujioka
end 80
katahira
class RikeiStudent < Student 80
92 解説ポイント
attr_accessor :math
attr_accessor :science 85
•継承
def puts_status
super •attr_accessor
puts @math •super
puts @science
end
•new
end •initialize
•ぐらい?
4. classの解説ちょっとだけ
class Student s=Student.new("fujioka")
@@namelist=[] s.english=80
attr_accessor :name s.puts_status
attr_accessor :english rs=RikeiStudent.new("katahira")
def initialize(name) rs.english=80
@name=name rs.math=92
解説ポイント
@@namelist.push name rs.science=85
end rs.puts_status •クラスメソッド
def puts_status p Student.namelist
puts @name p RikeiStudent.namelist •インスタンスメソッド
puts @english
end •クラス変数
def self.namelist •インスタンス変数
@@namelist % ruby person.rb
end fujioka •オブジェクトに型がある
end 80
katahira •変数に型はない
class RikeiStudent < Student 80
attr_accessor :math 92
attr_accessor :science 85
def puts_status ["fujioka", "katahira"]
super ["fujioka", "katahira"]
puts @math
puts @science
end
end
5. classの入れ子
class Sample
attr_accessor :value #<Sample:0x239ec>
KATAHIRA="DO" #<Sample::Sample2:0x23834>
class Sample2 "VALUE"
attr_accessor :value nil
def self.katahira "DO"
KATAHIRA
end
end
class Sample3
end
end
sample=Sample.new
p sample
sample2=Sample::Sample2.new
p sample2
sample.value="VALUE" 解説ポイント
p sample.value
p sample2.value •インスタンスものは独立している
p Sample::Sample2.katahira
•クラスものは子クラスから呼び出せる
7. moduleをちょっとだけ
module SampleModule
PI=3.14
def self.pi % ruby module.rb
PI 3.14
end 3.14
def pi
PI
end
end
p SampleModule.pi
class SampleClass
include SampleModule
end 解説ポイント
sc=SampleClass.new •moduleをクラスメソッドのように使う
p sc.pi
•self.piのようにすると呼び出せる
•moduleをmix-in用に使う
•includeするとclassのメソッドの一部になる
8. moduleを入れ子に
module SampleModule
module ChildModule
def child_module % ruby module_chile.rb
"CHILD_MODULE" "SAMPLE_MODULE"
end "CHILD_MODULE"
end
def sample_module
"SAMPLE_MODULE"
end
end
class SampleClass
include SampleModule
include ChildModule
end 解説ポイント
sc=SampleClass.new •同じネームスペースのものしかmix-inされない
p sc.sample_module
p sc.child_module •入れ子もincludeしなければならない
•Railsのソースはほとんどmoduleばっかり
•ちょっとだけ見てみよう
•ARの呼び出しの部分でも見てみるか。