SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
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.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
ご清聴ありがとうございます

Weitere ähnliche Inhalte

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

松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxruby
mirichi_
 
松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxruby
mirichi_
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
baban ba-n
 
Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)
Shinichirou Nakamura
 
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
ndruger
 

Ähnlich wie Rubyのオブジェクト図をもう一度 (10)

松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxruby
 
松江Ruby会議05 dxruby
松江Ruby会議05 dxruby松江Ruby会議05 dxruby
松江Ruby会議05 dxruby
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)Rubyでアプリ開発(2013 0430)
Rubyでアプリ開発(2013 0430)
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
ビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitechビルドの話 福井技術者のつどい #fukuitech
ビルドの話 福井技術者のつどい #fukuitech
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しよう
 
(超初心者向け)オブジェクト指向とC#
(超初心者向け)オブジェクト指向とC#(超初心者向け)オブジェクト指向とC#
(超初心者向け)オブジェクト指向とC#
 
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
Deep learningを使ったwebサービスの作成(のどかな田舎の花畑で絵を描きたい)
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

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