#この文章
一連の
オブジェクト指向と10年戦ってわかったこと
付近の感想文。流行らしいので、少しだけのってみる。
#オブジェクト指向って
やっぱし単純に「オブジェクト指向」と言われても、分析なのか設計なのか言語の話なのか解釈の幅が広すぎると思うわけです。
ただ、もはや一般的には単に「オブジェクト指向」と呼んだ場合には「オブジェクト指向プログラミング」であるようには思いますけど。
で、確かにプログラミングは戦う相手が多いというか、固有の言語仕様とか実行効率よい実装とかはてはライブラリの使い方にまで飛び火していろいろアレでアレなので苦労する人も多かろうし、それを踏まえると例の三原則に否定的な人もぼちぼちいるんだろうとは思います。
自分は気持ちとしてはプログラミングは軸足においてないというのもあるので、オブジェクト指向言語とそのプログラミングについては郷に従え。って感じです。やればやるだけ奥が深いし、解釈も様々だし。言語やライブラリにはわざわざ「オブジェクトじゃなくす」ことで様々な方面の効率を求めているものもいっぱいあるし。そんなことにイチイチ噛みついてても進まないし。
この手の話で幅が広すぎると思うのは、学習目的でいろいろいじってみてる人~システム開発を仕事としてやらされてる人というあたり。
学術的にはその方がいいということがわかりきってても、周囲のリソースや時間の問題で選択できないってことは多いので、仕事でオブジェクト指向言語を使いますという場合に、例の三原則を知ってないとコーディングできないのか。というそうでもない。逆に変な設計者とか、変なフレームワークと呼ばれる何かとか、変な契約があるとどうやったってオブジェクト指向にできないこともあるしね。
実際問題、プログラムを仕事でやらされてる人は最初から設計やるわけじゃないだろうし、勉強するのは例の三原則とかじゃなくて、その言語の特性だったり、そのプロジェクトで使うライブラリの扱い方だったり、そういう実用的な方を先に覚えた方がいいような気がしてます。規模感とかにもよるので一概には言えませんが。
設計もするなら知ってた方がよいのは言わずもがな。元ネタはさっと理解する(復習)には確かに良エントリかも。
ただ、継承がインターフェースだっていうのは少なくてもJavaはそう理解してもいいと思うけど、言語仕様によっては何とも言えない気がするなぁ。
#おまけ:オブジェクト指向プログラミングに迷う人が陥る個所
- オブジェクト指向言語のライブラリを使えることがオブジェクト指向プログラムを理解したことだと思う。
- 抽象化と共通化の区別が曖昧。
- いきなりJavaで勉強を始め、まったくもってオブジェクト指向っぽくない「static void main()」という関数を書き始めてあさっての方に進む。