*の方向性はどうでもいい

プログラミングなどの学習履歴として最初は書いてたけどもう何でもいいやと思って今に至る

オブジェクト指向イベント参加報告

先日、勉強会に参加してきました。

Rubyを使ってオブジェクト指向を学ぼうというものでした。

 

私自身はオブジェクト指向についてはほとんど分からない人なので、

何とか理解しようと必死でした。

今回、勉強会の報告を書いていこうと思います。

 

オブジェクト指向

ソースコードをオブジェクトとしてとらえる”

よくオブジェクト指向は「現実世界をそのままソフトウェアに表現する技術である」と説明されていますが、実際は似て非なるものです。

オブジェクト指向の特徴である「クラス(設計)」、「ポリモーフィズム(多態性)」、「継承」を使って擬人化して役割分担をさせることができるから、現実世界をそのまま表現できると認識されてきたのだと思います。

最大の特徴は「ソースの部品化」と「ソースの再利用」です。

部品化することで対象のソースコードが汎用的に使うことができ、

色々な開発でそれを再利用できるようになります。

オブジェクト指向が誕生する前のソース構造が「テレビデオ」のように

テレビ部分とビデオデッキ部分が一体化したような感じでした。

これだとテレビ部分に異常が起きたら全体を見ないといけないので、

修理にものすごく時間がかかります。

逆にテレビとビデオデッキが分かれていてテレビに異常が起きたのなら

テレビだけ見ればいいので修理に時間はテレビデオよりかかりません。

オブジェクト指向は保守性と再利用性を高めるために独立性の高い部品で

構成し、役割分担を与えていくことが重要です。

 

使ったソースを一部紹介

class NokoNoko
def initialize
puts "I'm born!!!"
end

def walk
puts "てくてく"
end

def run
puts "タッタッタッタッ"
end
end

class PataPata < NokoNoko
def walk 
super 
puts "ぴょんぴょん"
end

def run
puts "びゅーん"
end
end

enemy1 = NokoNoko.new
enemy1.walk
enemy1.run
enemy2 = PataPata.new # PataPataクラスのインスタンス化時にもinitializeが実行される
enemy2.walk
enemy2.run

 

出力結果は

I'm born!!!
てくてく
タッタッタッタッ
I'm born!!!
てくてく
ぴょんぴょん
びゅーん

 

となります。

PataPataクラスがNokoNokoクラスを継承している箇所で

superが使われていますが、これは親クラスである

NokoNokoクラスのwalk関数を呼び出しています。

superと書くだけで親クラスのメソッドを使えるのは

面白いと思いました。

一度定義したメソッドを使いまわしたり、

サブクラスに継承させたりと効率よく開発していけるのが

オブジェクト指向の醍醐味でもありますが、

慣れない人にとっては一つの壁だと感じました。