SlideShare a Scribd company logo
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
ご清聴ありがとうございます

More Related Content

Similar to 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
 

Similar to 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サービスの作成(のどかな田舎の花畑で絵を描きたい)
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (11)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

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