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

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング 42時間目】Rubyのモジュールの概念とオブジェクト指向について

<スポンサーリンク>

たのしいRuby 第3版

たのしいRuby 第3版

モジュールとは、クラスとは違い、処理だけをまとめる機能のことである。

・モジュールはインスタンスを持つことができない

・モジュールは継承できない

名前空間とは、メソッドや定数、クラスの名前を区別して管理する単位のこと。

・モジュールの提供するメソッドは「モジュール名.メソッド名」という形式で参照する。このような形式で使用するメソッドをモジュール関数という。


FileTestモジュールを使ってファイルがあるか確認するサンプル

#ファイルの存在を調べる
p FileTest.exist?("C:\\temp\\j2ee\\Counter\\build.xml")

#ファイルのサイズを調べる
p FileTest.size("C:\\temp\\j2ee\\Counter\\build.xml")

・モジュールをクラスに混ぜ合わせることを「Mix-in」という。

■モジュールを作る構文

module モジュール名
	モジュールの定義
end

モジュールを使ったサンプル

#モジュール文
module TestModule
	Msg = "hoge"  #定数の定義
	
	def hello(msg)
		print "Ah,",msg,"\n"
	end
	module_function :hello
end

p TestModule::Msg
TestModule.hello("OHAYO!")

include TestModule
p Msg
hello("KONTIWA!")

結果

"hoge"
Ah,OHAYO!
"hoge"
Ah,KONTIWA!

Rubyの定数
先頭がアルファベットの大文字で始まるものが定数となる。

■オブジェクトとは
プログラムの処理の対象を「オブジェクト」として考えるということ。

オブジェクトにはデータとデータを処理するためのメソッドもセットになっていて、処理の内容に対して責任を持たせる。

「もの」を外側から見た特徴を中心に考えることによって、実際のものごとの関係に近いモデルを使ってプログラムを組み立てることができるようになる。

カプセル化とは
カプセル化とは、オブジェクトが管理するデータをオブジェクトの外部から直には操作できないようにして、変更したり参照したりするときは必ずメソッドを呼び出させるようにすること。

ポリモルフィズムとは
1つのメソッド名が複数のオブジェクトに属すること、そしてそのオブジェクトによって異なる結果が得られることをオブジェクト指向の用語でポリモルフィズムという。

・ダックタイピングとは
オブジェクトを特徴づけるのは実際の種類(クラスとその継承関係)ではなく、そのオブジェクトがどのように振る舞うか(どんなメソッドを持っているか)であるという考え方。

なんてまとめたけど・・・
わかってしまえば「あぁそんな感じね」とすんなりオブジェクト指向で考えることができるけれど、わからないうちは永遠に意味不明なのがオブジェクト指向だ。

初心者用の本とかで、本棚とか人とかでオブジェクト指向の例を出してやってるけど、たぶんアレを読んでもオブジェクト指向ってそういうことか!、なんてわかることはないと思う。
俺がそうだったから。

振る舞い?属性?なんだそりゃ、って。
で、最初は本当に意味がわからなくて苦しかったし、今もまだまだ修行不足だけど、
それでもやっぱり、オブジェクト指向を理解していくには、
正しいオブジェクト指向(この言い方が正しいのかわからないけれど)で書かれたソースを

「このクラスはどんな役割を持っているのか」

と常々意識しながら読みまくるしかないと思う。

オープンソースとか、運良くプロジェクトに素晴らしいプログラマーがいてその人が書いたソースが読めるなら、そのソースを読みまくるとか。

折にふれてデザインパターンの勉強をしたり、UMLの本を読みながらプログラムを実装してみたりするうちにだんだんとプログラムを考えるときの思考がオブジェクト指向になってくるはず。
本を読んでぱっと理解するよりは、たくさんのソースを読み込んで、ソースを解読していくうちに、だんだんとわかってくるものなのだろう。

ちなみに運悪く触れるプログラムがレガシーな手続き型のプログラムばかりだと、ずっとオブジェクト指向意味不明状態が続くんじゃないかと思う。
・・・思うというか、俺がそうだったから。。

これからもがんばります。