TOPLOGO

オブジェクト指向がわからないって?

2019-01-06 11:00:32

プログラミング

no_image
要約:ThoughtWorksアンソロジーを読めばオブジェクト指向が分かる

はじめに

作りたかったネトゲを去年の半年を掛けて作って、今はプログラムを毎日書くという生活からは少し遠ざかった。だから、ちょっとブログを書く時間が増えるかもしれない。

もちろん、まだテスト段階のネトゲだからテストプレイをしてみつけたバグは直している。ただそれも先月の一ヶ月間を使ってだいぶ減らすことができた。ここ三日間ぐらいはかなり安定していて直す箇所がかなり減ってきている。
当然ながら、ネトゲ開発に終わりはない。プログラム面ではOKでもデザインやモーションなど無限にやることはある。ただ不具合なく、負荷も低いというところまではいけて、ある程度個人的には満足している。
で、半年もネトゲを作っていたらプログラミング自体にも興味が湧いてきて勉強している。
ネットで調べていたら気になった書籍があった。それが「ThoughtWorksアンソロジー」という本で、早速借りてきた。
電子版しか売ってないから実物が見たくてね。で、そこに有名な五章というのがあってそれを実践すれば自然とオブジェクト指向が身につくという話だ。では、それはなんなのか?

ThoughtWorksアンソロジーの5章まとめ

以下引用、個人的メモ。

1.1つのメソッドにつきインデントは1階層までにすること
2.else句を使用しないこと
3.すべてのプリミティブ型と文字列型をラップすること
4.1行につきドットは1つまでにすること
5.名前を省略しないこと
6.すべてのエンティティを小さくすること(1クラス50行、(ステップ)以内、1パッケージ10クラス以内)
7.1つのクラスにつき、インスタンス変数は2つまでにすること
8.ファーストクラスコレクションを使用すること
9.Getter,Setter,プロパティを使用しないこと

オブジェクト指向が分からないのは、classの書き方が分からないという意味ではない

オブジェクト指向を教えたがる人はclassだのnewだのの使い方やカプセル化の話をしたがる。それはそうなんだが、オブジェクト指向が知りたい人、もしくは分からない人というのはそういうことじゃないと思う。
つまり、どうやってクラス分けをするのかというところだ。classを作ってnewをすると動くぞ!は入門書を読めばわかる。それから一歩二歩踏み込んだところが分からないのだ。

そして、そのオブジェクト指向はネットの記事で教えられるものではない。実践も必要だしちゃんと分かるように教えるには数百ページに及ぶ説明が必要で、書籍を1つ読んだとしてもまだまだ理解できるものではない。なんとなく分かったつもりになるだけで実践してもうまくできないだろう。

ただ、上のアンソロジーのことを実践して、とにかくシンプルに「小分け」にしてやっていけば自ずと意味が分かってくるだろうと思う。そういう私もネトゲを一本ゴリ押しで作ってから勉強してるから偉そうなことはいえないが、作りながらも「これはおかしいな」と思いながら書いていたから今勉強しているところだがめちゃくちゃ理解は早くなっている。

デザインパターンについて

ThoughtWorksアンソロジー の話はしたが、それだけでもまだ意味がわからないと思う。
問題はclassやnewやカプセル化や継承や、そのあたりのことをなんとなくわかったあと何を勉強するかだが、これにはデザインパターンという将棋でいうところの定跡がある。これを学ぶと良い。それには書籍があって「Head Firstデザインパターン」という本が有名だ。ちなみにこれも一緒に借りてきた。かなり古い本で2005年発売らしい。こっちまだ新品がアマゾンに売っているみたいだ。借りて読んでみてから良さそうなら買っておきたいと思っている。

オブジェクト指向のやばさ

半年間かけて一人でネトゲを作っていたからいろいろ分かることがあるが、オブジェクト指向というかプログラムはやばい。
何がやばいのかというと、どこに変数を書いても基本的には「動いてしまう」ことがやばいのだ。publicにしたら動くよという当たり前の話なんだが、ガバガバでも作れてしまう。そして、エラーは出ない。「それはもっとうまいやり方があるよ」とそのうちAIが書き直してくれる可能性もあるのだが、今のエディタでは無理だ。せいぜい補完されるぐらいだ(かなり便利だが)。
ということで、今後の人生で何かアプリを作ることもあるだろうから、半年かけて間違い続けたオブジェクト指向を1から勉強して今後の人生に役立てたいと思っている。

まとめ

classやnewの書き方は将棋でいうところの駒の動かし方にすぎない。勝つためには定跡が必要で、それがデザインパターンというやつだ。まあ1つ1つ覚えていくしかなさそうだ。

追記

UML入門という本を読んでオブジェクト指向を理解しようするのも1つの手段かもしれない。

 リンク