やっとオブジェクト指向が完全に理解できた
プログラミングを本格的に始めて1年。ずっとモヤモヤしていた疑問がスッキリした。なぜオブジェクト指向なのか。なぜオブジェクト指向で作らないといけないのか。オブジェクト指向プログラミングとは何か。すべての疑問が晴れた。
やっとオブジェクト指向が完全に理解できた

今まではオブジェクト指向プログラミングを学んでも、なぜオブジェクト指向でプログラミングしなければならないのか理由がわからなかった。もちろん継承を使って楽にプログラムが作れることは知っていた。カプセル化や多態性なども動画や本で学んでいた。クラスを使った簡単なプログラムの書き方は理解しているつもりだった。その何となくオブジェクト指向だった私の理解が今日完全なものになった。
オブジェクト指向とは

まずオブジェクト指向とは上図のようなものだ。どのプログラミングの技術書にも書かれてあるオブジェクト指向の概念である。私はこの意味がずっと理解できなかった。現実に存在する人や物をオブジェクト(物)として捉える(考える)と言われてもピンと来なかった。
オブジェクト指向が理解できなかった理由
なぜ理解できなかったのか。理由は単純で単にメソッド(関数)をたくさん使った手続き型のプログラムを自分の頭で考えながら書いた経験が足りなかったからだ。もちろん技術書を読んだり、プロゲートなどで学べば頭で理解はできる。しかし肝心ななぜオブジェクト指向でプログラミングをしなければならないのか、オブジェクト指向でプログラムを組み立てる利便性やメリットが理解できなかった。
オブジェクト指向を理解するために
オブジェクト指向を理解して自分で使えるようになる一番手っ取り早い方法は、何も参考にしないで自分の頭だけで考えながらJavaでいうところのメソッド(関数)をどんどん書くことと、本(スッキリわかるJava入門 第3版)を読んでみることではないかと思う。
関数を書くためには最低限のプログラミングの知識は必要なので、関数が分からない人はプロゲートやpaizaのJavaをまずはやってみる。一通りやってみたらスッキリわかるJava入門 第3版を読んでみる。そこまで行けば、関数を自分で作ることができると思うので、後は自分で考えながら関数を使ったプログラムをバンバン書いていく。できれば私のように職業訓練校などでJavaを教わると更に良いと思う。
オブジェクト指向を使えるようになるために

例えばドラクエ3(ファミコン版)などのRPGの戦闘シーンを再現してみたりする。勇者とスライム。モンスターと戦うシーンだ。勇者の攻撃から始まり、モンスターも攻撃をしてくる。最後はどちらかが勝って戦闘が終了する。単純なゲーム。こういったプログラムをオブジェクト指向ではなく、単純なif文や繰り返しだけで書こうとするとプログラムが全部で200行~300行くらいの分量になる。
次にこのプログラムコードを今度は勇者やモンスターや戦闘などを関数にまとめてみる。すると上からズラズラ書いたコードが少しは見やすくまとまってくる。ここまではオブジェクト指向でも何でもない、ただの関数にまとめて少し見やすくしたプログラムだ。という風に300行くらいのコード量であれば、別にオブジェクト指向でなくても良いことがわかる。しかしここからが問題。何が問題かというと、新しく機能を追加したり、別のスペックを持ったモンスターを作ろうとすると、コードが更に多くなってしまうのだ。どんどん新しい機能を追加する度にコードが膨大な量になってしまい、最後にはコードを書いた自分ですら何がどうなっているのか訳が分からない状態になってしまうのだ。
それに併せてどの機能をどの関数にまとめるのかという問題も出てくる。ここが一番の悩みポイントで、まとめ方を間違うとプログラムが思ったような動作をしないことに繋がってしまうのだ。つまりif文や繰り返しでズラズラ書いたコードをどう関数にまとめるのかに頭を悩ませなければならないのだ。
つまりこの問題を簡単に解決するのがオブジェクト指向プログラミングなのである。
最後に
肝心な「なぜオブジェクト指向でプログラミングをするのか、オブジェクト指向のメリット」については、長くなったので次回以降に書くことにする。
しかしこんなことを言っては元も子もないが、ここまで苦労してオブジェクト指向を身につけなくても本当は良いのである。なぜならエンジニアになれば誰でも身につく技術だからだ。限りなく中卒に近い高卒が独学でオブジェクト指向を身につけようとすると1年かかるということだ。独学という道はいつも回り道なのである。
コメントはこちら
コメント一覧
無駄な人生、おつかれちゃーん
おまえは無駄だよ