どうもこじらです。
今回はJavaの根本的概念であるオブジェクト指向について、難しいと思われがちな「哲学」をあえて使って話していこうと思います。
まずはじめに
オブジェクト指向はプラトンのイデア論
オブジェクト指向の勉強と哲学の勉強をどちらもしたことがある人は、「あれ?オブジェクト指向ってイデア論じゃね?」と思う人が結構な数いるんじゃないかと思います。
実際、「オブジェクト指向 イデア論」と検索するとそれなりの件数が引っかかりますし、着想自体がイデア論から来ている可能性だってありそうです。
Javaは概念が難しいと言われがち
「Javaは難しい、概念が難しい」とよく言われます。
しかし、概念を学ぶための基礎はみなさんすでに持っていて、それを組み立てるための知識を持ち合わせていないだけなんですよね。
あと一歩のところまで来ているのに、「簡単!Java入門!」というようなタイトルの本は簡単に書こうとするせいで逆に説明が分かりにくくなっていることがよくあります。
てか、簡単とはじめに言われてしまうと、「簡単って言ってる本なのに全然わからない…自分ってプログラミングの才能ないのかも……」となって挫折する可能性が高くなりますし、全然親切じゃないと思います。
まぁ本を買ってもらうことが目的であって、教えてあげたいっていう考えは二の次ですもんね。
うんまぁ、それはしょうがない。
ということで、今回はそのアンチテーゼの意味合いも込め、あえて分かりにくいとされる哲学を使って、みなさんが無意識的に知っている概念側から深堀し、知識との紐付けを行っていきたいと思います。
イデア論の超概要
イデア論とは、
「物事に対する捉え方は人によって異なるが、その捉え方を抽象化してみると同じような概念にたどり着くんだよ。そして、その概念の真の姿はイデア界に存在するんだよ。」
というプラトンが提唱した考え方です。
雑すぎてて誰かから怒られそうw
詳しくは私以外が書いたまともな記事を読んでくださいねw
三角形の例
イデア論の考え方はよく三角形や丸などの図形に例えられます。
↓この三角形を見てみてください。
謎の勢力「トラックボールマウスで書くな!話がこじれるだろ!」
( ’-‘ )
↓この画像は誰が見ても三角形だと分かりますよね。
しかし、ここに表示されている三角形はきれいな三角形であっても、完全ではありません。
この画面に表示されている時点で、ドットの集まりなので線はギザギザしています。
これは別の媒体に描いてみても、なにかしらで同じような現象が発生します。
プラトン「完全な三角形というのは表現できないし、見たこともないのに、なぜ私たちは三角形というものを知っているのだろう…。そうか!別世界にあるんだな!」
プラトン最後雑ww
まぁこれが超ざっくりとしたイデア論です。
オブジェクト指向
オブジェクト指向の捉え方は人によって大きく異なりますが、「物事に焦点を当てたプログラミング手法」といったニュアンスが一般的じゃないでしょうか。
私たちが知っている概念、もしくは自分が作りたい概念を「オブジェクト」というもので表現することによって、分かりやすく、簡潔なコーディングが実現されます。
三角形をオブジェクト指向で
三角形というものを定義したい場合、まず三角形を抽象的にとらえます。
「まず、図形だな。そして、辺が3つだな。算数でよく使うな。そして二等辺三角形とか、正三角形とかがあるな。」
と三角形について知っていることを挙げてみます。
これを体系化します。
こうすると、三角形という概念が分かりやすくなったように思えませんか?
三角形は比較的分かりやすい概念ですが、もっと分かりづらい概念を取り扱った際に真の実力を発揮します。
もう一つ例を出してみます。
ボールペン
今度はボールペンです。
自分が知っているボールペン像を、もしくは自分が作りたいボールペン像を思い浮かべます。
「うん、ペンだな。ペンにはシャーペンもある。インクが出るな。ノック式。キャップ式。書ける。回せる。水性。油性。太い。細い。……」と色々挙げてみます。そして体系化します。
こんな感じのができました。
「あ、やっぱ商品名も付け足したいな。プラスチック製かステンレス製かみたいな素材も付け足したい。…えっ!?油性でも水性でもないボールペンもあんの!?」
とさらに付け足したい要素が思い浮かびました。
ただ、やることは簡単で、これらの新しい要素がどこに属するかを考え、付け足していけばいいだけです。
「ペンだけじゃ動きがないな……人間も概念化しよう。そうだな、左利き右利き。ペンを持つ。ペンで書く。ペンを置く。いるのか分からんけど性別の属性もつけてみるか。」
と、人間の概念も体系化したとします。
ここまでくれば、もう人間がペンを使って書くところまでがプログラム上で実現できますよね。
「今度は椅子に座れるようにしよう。座る。立つ。……」
と、ここからは付け足しを重ねて行けば色んなことができるようになっていきますね。
抽象的概念の定義化
- 図形というイデア
- 三角形というイデア
- 丸というイデア
をプログラム上で再現したものがオブジェクトです。
それを組み立て、処理に流れを作っていくのがオブジェクト指向型プログラミングです。(と思っています。)
まとめ
今回のオブジェクト指向の考え方やイデア論の考え方は、Javaの勉強以外にも色々なところで役に立つと思います。
論理的思考を鍛えるにしても、まずこういった知識がないと始まりませんからね。
すごいざっくりまとめましたが、今回話した範囲がJava入門の一番の壁だと思います。
この考え方に色々と付け足して行けば、色んなことができるようになっていきます。
何を学べば自分が作りたいものを作れるかについても、この考え方で体系化しちゃえばいい訳ですからねw
まぁ知識がないと体系化すらできないってのが難しいところではありますけどね。
知識、欲しいなぁ。
という感じで。
こじらでした
じゃ
コメント