かとのぼのマイコード・マイライフ

ウェブサービス開発者のブログ

オブジェクト指向とは?まずはオブジェクト指向をイメージで掴むための記事

 

オブジェクト指向イメージ

オブジェクト指向、難しすぎ問題

私たちが触れるプログラミング言語の多くは「オブジェクト指向」の言語と呼ばれています。

プログラミングを勉強していて、このオブジェクト指向と言う言葉はもう目にしているのではないでしょうか?

 

それで、わかりましたか…?

 

いや、難しすぎますよね、オブジェクト指向。

 

私はプログラミング学習してからしばらくは、さっぱりわかりませんでした。と言うか今でもちゃんと説明しろと言われてもできる気がしないです(おい)

そこで、今回は、オブジェクト指向を1から説明するのではなく、どうしてオブジェクト指向が難しく思えるのかを私の経験から考えて、その理由と解説からオブジェクト指向の理解の助けになればと思って記事にしました。

オブジェクト指向が難しい理由1:そもそも言葉が難しい

「オブジェクト指向」と言う言葉自体が難しいです。普段生活していて「オブジェクト」も「指向」も使わないですよね。本当に使う場面ないですよ。本当になんだチミは!!

と言うことでこの言葉から考えていきましょう。

よく、「オブジェクトは「対象」で、全てのものを指す」などと解説されているのを目にします。

難しいことを難しく説明されてもわからないですよね。

 

ではどうイメージしたら良いでしょうか?

 

プログラミングのオブジェクトは「ひとまとめになった物(もしくは機能)」だと思っておくとわかりやすいです。よく「車」が例に出されますが、車は「車」という名前のひとまとまりの物体(機能)ですよね。そこに人間が乗ろうが、それぞれ大きさが違おうが車は車です。それで、その「車」という存在を定義して使えるようにしようと言うのがオブジェクト指向です。

つまり、オブジェクト指向は、ひとまとめの物体(機能)を作って使っていく方法論とやり方だとわかります。

ちなみに「指向」ですが方向とか、目的とかそんな意味です。要するし、本当はそこまで強調する必要がない言葉です。

そしてその具体的な方法が、よく聞く「クラス」と「オブジェクト(インスタンス)」となるのです。

オブジェクト指向が難しい理由2:色々な説明があって難しい

オブジェクト指向が難しいのに「これだ!」という説明がない点があります。つまり、みんな色々な説明や解説をしているので、初心者はどれを信じればいいのかわからない状態になってしまいます。

結論から言うと、オブジェクト指向は考え方(パラダイム)なので、厳密な正解はありません。だから、大体のイメージを掴んだら、具体的にコードで勉強してしまった方がいいと思います。

例えば、人によって理想のアイドル像はおそらく違いますよね?アイドルファンはいろんなアイドルの魅力をあなたに説明してきますが、どれも正しいし、どれも間違っていません。けど、アイドルを知らないあなたはどれが正しい情報か混乱します。手取り早くアイドルを把握するのは、アイドルの実物を見るのが一番だよと言うことです。

オブジェクト指向が難しい理由3:クラスとオブジェクトの概念が難しい

クラスが設計図、オブジェクトが具体的な中身だよという説明をよく見ますね。

私が最初にオブジェクト指向の説明を技術書で読んだ時には、たい焼きで説明されていました。

たい焼きを作る場合には、たい焼きを焼くためのたい焼き製造機(クラス)があって、そこにたい焼きの原料を入れると、製造機が生地の中にアンコを入れてくれて、いい感じに焼いてくれて、たい焼きの形をした実体(インスタンス)が作られる。

と言うものでした。

説明自体はわかりやすいと思いますが、これがどう今勉強しているプログラミングと繋がるのだ?と当時は不思議に思いました。なんでこれがオブジェクト指向という名前なのか?なぜこんな方法をやるのだろうとも。

これはオブジェクト指向が生まれた理由から考えるとわかりやすいです。

オブジェクト指向のウィキペディアにもこんな記載があります。

大まかな特徴としては、情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法に対し、オブジェクト指向と名が付く分野ではこの双方をひとまとめにして物事の解析と組み立てを行う点が共通している。

オブジェクト指向 - Wikipedia

 ここによるとオブジェクト指向の以前は「情報資源と処理手順を別々にして分析ないし設計を行っていた従来の標準的な手法」だったそうです。データはデータ、処理は処理と分かれていたんですね。

 

つまり、この従来の方法だと「たい焼き製造機」というひとまとまりの物体は作っておくことができないですよね。 なぜなら、たい焼き製造機は、たい焼きの情報と、たい焼きを焼いたりアンコを生地の中に入れる処理が必要になりますが、従来の方法だとそれはひとまとめに書けなかったわけです。

けど、この従来の方法だととっても面倒じゃないですか?

だから、オブジェクト指向は、たい焼きの製造に関する情報と、たい焼きを作るための処理方法をひとまとめの機能(たい焼き製造機)として扱えるようにしました。

一旦たい焼き製造機を作っておけば、必要になった時にたい焼き製造機を召喚(?)して、あとは生地の量とかアンコの量はその都度設定して作ればいいわけです。

情報と処理を一緒にまとめることができる。つまり、ひとまとまりの物体(機能)として扱えるのがオブジェクト指向の優れた点です。

車の例で言えば、車の情報(車の形状、タイヤの数、エンジンがあるなどの情報)と一緒に、処理(アクセルを踏むと走る、ブレーキを踏むと減速)もひとまとめにして、「車」として扱えるようにしている。と言うことです。

まとめ

まとめると、オブジェクト指向は、情報と処理をまとめて扱えるようにすることで、ひとまとまりのモノ(機能)として活用できるようにする考え方と方法と言うことです。

 

オブジェクト指向がどんなものかちょっぴりイメージしてもらえたでしょうか?もちろん、この記事も一つの捉え方の話なので、しっくりくるこないがあると思います。また、ここから真のオブジェクト指向の理解が始まります。あなたはこれから抽象化やカプセル化、ポリフォーリズムという不思議な言葉と格闘する必要があるのです。ただ、まずは大前提のオブジェクト指向のイメージを掴んでもらえたらと思います。

 

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版