狠狠撸

狠狠撸Share a Scribd company logo
搁耻产测のオブジェクト図をもう一度
もくひょう
●

とりあえずオブジェクト図がイメージ出来る

●

注意事項
–
–

イメージ出来る事が目的です
記号の使い方とか細かい事にはこだわっていません
What is Ruby?

まずはRubyについて

今更、説明も要らないと思いますので、
簡単に
What is Ruby?
●

島根県の公用語
–
–
–

全てがオブジェクトで出来ているスクリプト言語
文字列操作とかめっちゃ楽
開発が早くなるのは結果で、
主目的は開発者が

–

楽しく

利用方法はmacを購入する。

なれる事
What is Ruby?
●

例えば、クラスを作成するコードと図を見てみます

class Foo
def hell

puts "hell"

end

end

obj = Foo.new

obj.hell #=> hell

obj.class #=> Foo
What is Ruby?
●
●

図に直すとこうなります

重要なポイントはインスタンスメソッドは
クラスにあるという点です

class Foo
def hell

puts "hell"

end

end

obj = Foo.new

obj.hell #=> hell

obj.class #=> Foo
というように、本日は図を見て行きます

http://pixabay.com/p-81479/
それ何が嬉しいの?
●

●

メソッドの定義箇所や、変数の定義箇所が把握出来る
ようになります。

具体的には、次のようなコードを理解する際の手助け
となります。
それ何が嬉しいの?
それぞれ何が表示されますか?
class MyClass
class << self

attr_reader :number

end

def initialize; @number = 2; end

end

p MyClass.number

p MyClass.new.number
それ何が嬉しいの?
結果、何が表示されますか?

module MyModule
def print(str); puts("MyModule:" + str); end
end
class MyClass1
def print(str); puts("MyClass:" + str); end
include MyModule
end

class MyClass2 < MyClass1
include MyModule
end
MyClass2.new.print("hell")
それ何が嬉しいの?
●

先のページのコードは見落とす事があると思います
–

●

僕自身も常に正解をサッと言える自信は無いです

お察しの方もいらっしゃると思います
–

Ruby Association Certified Ruby Programmer Gold
の試験問題はこういう系統のものもよく出ます
再び最初のコード
class Foo
def hell

puts "hell"

end

end

obj = Foo.new

obj.hell #=> hell
再び最初のコード
class Foo
def hell

Foo = Class.new{
def hell

puts "hell"

end

puts "hell"

end

end

}

obj.hell #=> hell

obj.hell #=> hell

obj = Foo.new

Fooも
Classクラスの
インスタンスであるため、
右側はほぼ同じ意味の
コードになります。

obj = Foo.new

違う点はスコープとかを気
にする場合です。
今回のお話には登場しませ
ん。
●

基本的に、classを右にsuperclass(親クラス)を上に
描いていくスタイルとします
–

愛読書がその順に描いてあるので

では、先程のコードを図にします
再び最初のコード
class Foo
def hell

Foo = Class.new{
def hell

puts "hell"

end

puts "hell"

end

end

}

obj.hell #=> hell

obj.hell #=> hell

obj = Foo.new

obj = Foo.new
おしながき
●

以降は基本的な図を見ていきます
–
–
–
–
–
–

インスタンス変数
クラスインスタンス変数
継承
moduleインクルード
特異メソッド
クラスメソッド
インスタンス変数を追加したよ
class Foo

def initialize

@number = 1

end

attr_accessor :number

end

obj = Foo.new

p obj.number #=> 1
インスタンス変数を追加したよ
class Foo

def initialize

@number = 1

end

attr_accessor :number

end

obj = Foo.new

p obj.number #=> 1

ポイントは、
インスタンス変数は、
インスタンスオブジェクトの中に居る点
クラスインスタンス変数を追加したよ
class Bar

@number = 1
class << self

attr_accessor :number

end

end

bar = Bar.new

p Bar.number #=> 1

p bar.number #=> NoMethodError
クラスインスタンス変数を追加したよ
class Bar

@number = 1
class << self

attr_accessor :number

end

end

bar = Bar.new

p Bar.number #=> 1

p bar.number #=> NoMethodError
ポイントは、

クラスインスタンス変数はクラスに居る
継承
class Parent
def gaze

puts "( <((●))> _ <((●))> )"

end

end

class Child < Parent
end

child = Child.new

child.gaze #=> ( <((●))> _ <((●))> )
継承
class Parent
def gaze

puts "( <((●))> _ <((●))> )"

end

end

class Child < Parent
end

child = Child.new

child.gaze #=> ( <((●))> _ <((●))> )
ポイントは、

メソッドの探索はまずクラス、無ければ親へ親へ
moduleを追加したよ
module MyModule

def print(str); puts(str); end

end

class Bar

include MyModule

end

obj = Bar.new

obj.print("hell") #=> hell
moduleを追加したよ
module MyModule

def print(str); puts(str); end

end

class Bar

include MyModule

end

obj = Bar.new

obj.print("hell") #=> hell
ポイントは、

includeしたクラスの直上にProxyクラスとして入る点
Barの親クラスは変わらない
特異メソッドだよ
string = "try!!"

string.class #=> String
def string.prints
"nice " + self

end

string.prints #=> nice try!!
string2 = String.new

string2.prints #=> NoMethodError
特異メソッドだよ
string = "try!!"

string.class #=> String
def string.prints
"nice " + self

end

string.prints #=> nice try!!
string2 = String.new

string2.prints #=> NoMethodError
ポイントは、

特異クラスを作って、そこにメソッドがある

特異クラスの特徴としては、インスタンスを1つしか持
てない
クラスメソッドを追加したよ
class Human

def self.thinking

puts "_(:3」∠)_"

end

end

class Me < Human
end

Me.thinking #=> _(:3」∠)_
クラスメソッドを追加したよ
class Human

def self.thinking

puts "_(:3」∠)_"

end

end

class Me < Human
end

Me.thinking #=> _(:3」∠)_
ポイントは、

クラスメソッドは、クラスの特異メソッド

サブクラスからも参照出来るようになっている
まとめ
●

以上、Rubyの基本的なオブジェクト図を、急ぎ足で
紹介しました
–
–
–
–
–
–

インスタンス変数はインスタンスに
クラスインスタンス変数はクラスに
インスタンスメソッドはクラスを探してから親へ親へ
moduleは直上に入る
特異メソッドは特異クラスのメソッド
クラスメソッドはクラスの特異メソッド
まとめ
●

普段の開発でこういう図を思い浮かべながら開発する
事はあまりないとは思いますが、知っていると、開発
中に困った場面で役に立つ事もあります
–

あと、Ruby Gold試験で役に立ちます
もっと知りたい方へ
●

とてもおすすめです

http://ascii.asciimw.jp/books/books/detail/978-404-868715-7.shtml
ご清聴ありがとうございます

More Related Content

搁耻产测のオフ?シ?ェクト図をもう一度