読者です 読者をやめる 読者になる 読者になる

【漫画つき】Rubyのオブジェクト指向って何...?オブジェクト指向プログラミングの正体を暴いたぞ!

SPONSORED LINK

f:id:einginner-carry:20170419104335p:plain

エンジニア転職の記事が読まれていて嬉しいエンジニア☆エンジンのエンエンと申します。

 

Rubyって学生時代に勉強しただけだったので、基礎・基本からしっかりと理解を深めていきます

 

息抜きついでに興味があれば、ぜひコメントください!

Rubyの勉強をしています!

f:id:einginner-carry:20170419104908p:plain

Rubyの勉強や!とRuby on Rails Totorialをしたけど、英語だし難しくてわからんとサジを投げた学生時代が懐かしいです。

 

そこでこちらのRubyの基礎的な入門本を購入してみました。

 

作りながら学ぶ Ruby入門


作りながら学ぶRuby入門 第2版【電子書籍】[ 久保秋 真 ]

 

Rubyオブジェクト指向言語として有名ですし、CrowdWorksなんかもRailsで構築されたWebサービスみたいですね。

 

今日Ruby入門で学んだのは次の内容です

  1. スクリプト言語
  2. オブジェクト指向言語
  3. シングルクォート
  4. ダブルクォート
  5. リテラル
  6. メソッド呼び出し

 

この中のオブジェクト指向言語が謎〜〜だったんので、まずは理解を深めたいと思います!

 

Rubyオブジェクト指向ってメッセージを送ることなのか...!!

f:id:einginner-carry:20170419105050p:plain

Rubyの世界でのオブジェクト指向を考えた場合と、現実の世界に存在しているオブジェクト(モノ・物)で考えている場合は違う理解をしていることになります。

 

Rubyの定義するオブジェクトとはなんらかの操作ができる対象物のことで、現実世界の定義するオブジェクトはたんなる物体のことです。

 

さらにRubyオブジェクト指向の場合は、操作をすると何かをしてくれそうなモノなら、具体的・概念的な存在でもオブジェクトとして定義します。

 

aオブジェクトがbオブジェクトにやってもらいたい処理を「メッセージ」として送ります

f:id:einginner-carry:20170419105311p:plain

これですね。Rubyオブジェクト指向言語としての1番の謎は...!

 

Rubyの場合はオブジェクトがオブジェクトに対して何らかの処理をしてもらう為にメッセージを送ると考えます。

 

こんな感じですね。

f:id:einginner-carry:20170418165546p:plain

例えば「"データを取ってくる"」とaオブジェクトbオブジェクトに処理してもらうためにメッセージを送っているわけです。

 

 

メッセージを送るaオブジェクトをセンダーでメッセージを受け取るbオブジェクトがレシーバと言います。

f:id:einginner-carry:20170418171119p:plain

 

 

aオブジェクトが送ったメッセージを送ったあとにbオブジェクトが処理しますよね。

この処理をRubyではメソッドと呼びます(めちゃ大事やん!

f:id:einginner-carry:20170418172818p:plain

 

aオブジェクトがbオブジェクトにどうやってメッセージを送るかといえば、メソッドの中でレシーバに対してメッセージを送ります

 

Rubyではメッセージ(やってもらいたい処理)をメソッド名として定義することが多いようですね。

 

だからRubyの場合は、やってもらいたい処理をメソッド名として書いて、ClassオブジェクトAのメソッドの中でメッセージを送るのですね 。

f:id:einginner-carry:20170418181150p:plain 

さて、まとめます。

  • オブジェクト指向では、センダーはメソッドの中にメッセージ(やってほしい処理)を書いていて、レシーバはメッセージ(やってほしい処理)を受け取ると、それに答えてメソッドを実行する仕組みとなっている。

 

ほむほむ...

 

Rubyをプログラムしていく場合はプログラマー(センダー)が、クラスメソッドやメソッド(レシーバ)にメソッド名を通じてやってほしいことを伝えて、そのメソッドを呼びかけたオブジェクトが持っていたら処理をしてくれる。という感じですね。

 

うーん。言葉にしたら簡単だけど、土台となる基礎知識で大事ですね。

 

人が人に話しかける。人がプログラムに話しかける。みたいな感じで対話式な感じなんですね。

 

センダーやレシーバっていう変数名はあっても、やってほしい処理をメッセージとしてオブジェクトに送るというのは変わらない感じでわかりやすかったです。

 

すぐにわかる!オブジェクト指向漫画を書いたよ

f:id:einginner-carry:20170418235319p:plain

センダー君『文字列を出力して欲しいから、レシーバさんにメッセージを送ろう』

 

レシーバさん(オブジェクト)『センダーくんがなんかして欲しいみたいだね。なんだろう...?』

 

f:id:einginner-carry:20170418181150p:plain

センダー君『レシーバさんオブジェクトにはput_a_wordメソッドで"メッセージ"っていう文字列を出力してもらうようにプログラムしておいたんだ』

 

レシーバさん(オブジェクト)『僕はA Classに定義されているput_a_wordメソッドの中に書かれている処理(メソッド)なら実行できるな!』

 

f:id:einginner-carry:20170419001424p:plain

センダーくん『よし!! Put_a_wordだ!!!!!!!!!!!!!!

 

レシーバ(オブジェクト)『ああ。putsメソッドを呼び出しているんだな。センダーくんは!よしputsメソッドをしたよ』

 

f:id:einginner-carry:20170419002313p:plain

センダーくん『よし。メッセージという文字列が出力されたぞい!』

 

 

....

 

......

 

........

 

 

細かいことは気にせずにオブジェクトとオブジェクトがメッセージを送りあって、メソッドの中の処理内容を実行することだけ書いてみました

 

Rubyではオブジェクトに定義されているメソッドを実行するための上記の一連の流れを「メソッド呼び出し」の1語で簡単に言い換えることができます。

 

あと、put_a_wordは単語を入れておく入れ物のようなメソッドにしたかったので、命名しましたよ!

 

f:id:einginner-carry:20170419002437p:plain

それでは。

 

こちらも良く読まれています。