Rubyのオブジェクト図をもう一度
もくひょう
●

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

●

注意事項
–
–

イメージ出来る事が目的です
記号の使い方とか細かい事にはこだわっていません
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...
What is Ruby?
●
●

図に直すとこうなります

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

class Foo
def hell

puts "hell"

end

end

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

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

●

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

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

attr_reader :number

end

def initialize; @number = 2; end

end

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

module MyModule
def print(str); puts("MyModule:" + str); end
end
class MyClass1
def print(str); p...
それ何が嬉しいの?
●

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

●

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

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

Ruby Association Certified Ruby Pr...
再び最初のコード
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...
●

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

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

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

Foo = Class.new{
def hell

puts "hell"

end

puts "hell"

end

end

}

obj.hell #=> hell

obj...
おしながき
●

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

インスタンス変数
クラスインスタンス変数
継承
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...
クラスインスタンス変数を追加したよ
class Bar

@number = 1
class << self

attr_accessor :number

end

end

bar = Bar.new

p Bar.number #=> 1...
継承
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.pr...
moduleを追加したよ
module MyModule

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

end

class Bar

include MyModule

end

obj = Bar.new

obj.pr...
特異メソッドだよ
string = "try!!"

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

end

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

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

end

string.prints #=> nice try!!
str...
クラスメソッドを追加したよ
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
ご清聴ありがとうございます
Upcoming SlideShare
Loading in …5
×

Rubyのオブジェクト図をもう一度

983 views

Published on

某勉強会で発表した資料。
メタプログラミングは良い本って話。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
983
On SlideShare
0
From Embeds
0
Number of Embeds
166
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rubyのオブジェクト図をもう一度

  1. 1. Rubyのオブジェクト図をもう一度
  2. 2. もくひょう ● とりあえずオブジェクト図がイメージ出来る ● 注意事項 – – イメージ出来る事が目的です 記号の使い方とか細かい事にはこだわっていません
  3. 3. What is Ruby? まずはRubyについて 今更、説明も要らないと思いますので、 簡単に
  4. 4. What is Ruby? ● 島根県の公用語 – – – 全てがオブジェクトで出来ているスクリプト言語 文字列操作とかめっちゃ楽 開発が早くなるのは結果で、 主目的は開発者が – 楽しく 利用方法はmacを購入する。 なれる事
  5. 5. What is Ruby? ● 例えば、クラスを作成するコードと図を見てみます class Foo def hell puts "hell" end end obj = Foo.new obj.hell #=> hell obj.class #=> Foo
  6. 6. What is Ruby? ● ● 図に直すとこうなります 重要なポイントはインスタンスメソッドは クラスにあるという点です class Foo def hell puts "hell" end end obj = Foo.new obj.hell #=> hell obj.class #=> Foo
  7. 7. というように、本日は図を見て行きます http://pixabay.com/p-81479/
  8. 8. それ何が嬉しいの? ● ● メソッドの定義箇所や、変数の定義箇所が把握出来る ようになります。 具体的には、次のようなコードを理解する際の手助け となります。
  9. 9. それ何が嬉しいの? それぞれ何が表示されますか? class MyClass class << self attr_reader :number end def initialize; @number = 2; end end p MyClass.number p MyClass.new.number
  10. 10. それ何が嬉しいの? 結果、何が表示されますか? 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")
  11. 11. それ何が嬉しいの? ● 先のページのコードは見落とす事があると思います – ● 僕自身も常に正解をサッと言える自信は無いです お察しの方もいらっしゃると思います – Ruby Association Certified Ruby Programmer Gold の試験問題はこういう系統のものもよく出ます
  12. 12. 再び最初のコード class Foo def hell puts "hell" end end obj = Foo.new obj.hell #=> hell
  13. 13. 再び最初のコード 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 違う点はスコープとかを気 にする場合です。 今回のお話には登場しませ ん。
  14. 14. ● 基本的に、classを右にsuperclass(親クラス)を上に 描いていくスタイルとします – 愛読書がその順に描いてあるので では、先程のコードを図にします
  15. 15. 再び最初のコード 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
  16. 16. おしながき ● 以降は基本的な図を見ていきます – – – – – – インスタンス変数 クラスインスタンス変数 継承 moduleインクルード 特異メソッド クラスメソッド
  17. 17. インスタンス変数を追加したよ class Foo def initialize @number = 1 end attr_accessor :number end obj = Foo.new p obj.number #=> 1
  18. 18. インスタンス変数を追加したよ class Foo def initialize @number = 1 end attr_accessor :number end obj = Foo.new p obj.number #=> 1 ポイントは、 インスタンス変数は、 インスタンスオブジェクトの中に居る点
  19. 19. クラスインスタンス変数を追加したよ class Bar @number = 1 class << self attr_accessor :number end end bar = Bar.new p Bar.number #=> 1 p bar.number #=> NoMethodError
  20. 20. クラスインスタンス変数を追加したよ class Bar @number = 1 class << self attr_accessor :number end end bar = Bar.new p Bar.number #=> 1 p bar.number #=> NoMethodError ポイントは、 クラスインスタンス変数はクラスに居る
  21. 21. 継承 class Parent def gaze puts "( <((●))> _ <((●))> )" end end class Child < Parent end child = Child.new child.gaze #=> ( <((●))> _ <((●))> )
  22. 22. 継承 class Parent def gaze puts "( <((●))> _ <((●))> )" end end class Child < Parent end child = Child.new child.gaze #=> ( <((●))> _ <((●))> ) ポイントは、 メソッドの探索はまずクラス、無ければ親へ親へ
  23. 23. moduleを追加したよ module MyModule def print(str); puts(str); end end class Bar include MyModule end obj = Bar.new obj.print("hell") #=> hell
  24. 24. 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の親クラスは変わらない
  25. 25. 特異メソッドだよ string = "try!!" string.class #=> String def string.prints "nice " + self end string.prints #=> nice try!! string2 = String.new string2.prints #=> NoMethodError
  26. 26. 特異メソッドだよ string = "try!!" string.class #=> String def string.prints "nice " + self end string.prints #=> nice try!! string2 = String.new string2.prints #=> NoMethodError ポイントは、 特異クラスを作って、そこにメソッドがある 特異クラスの特徴としては、インスタンスを1つしか持 てない
  27. 27. クラスメソッドを追加したよ class Human def self.thinking puts "_(:3」∠)_" end end class Me < Human end Me.thinking #=> _(:3」∠)_
  28. 28. クラスメソッドを追加したよ class Human def self.thinking puts "_(:3」∠)_" end end class Me < Human end Me.thinking #=> _(:3」∠)_ ポイントは、 クラスメソッドは、クラスの特異メソッド サブクラスからも参照出来るようになっている
  29. 29. まとめ ● 以上、Rubyの基本的なオブジェクト図を、急ぎ足で 紹介しました – – – – – – インスタンス変数はインスタンスに クラスインスタンス変数はクラスに インスタンスメソッドはクラスを探してから親へ親へ moduleは直上に入る 特異メソッドは特異クラスのメソッド クラスメソッドはクラスの特異メソッド
  30. 30. まとめ ● 普段の開発でこういう図を思い浮かべながら開発する 事はあまりないとは思いますが、知っていると、開発 中に困った場面で役に立つ事もあります – あと、Ruby Gold試験で役に立ちます
  31. 31. もっと知りたい方へ ● とてもおすすめです http://ascii.asciimw.jp/books/books/detail/978-404-868715-7.shtml
  32. 32. ご清聴ありがとうございます

×