そして、[651] をちょっと補足。
>>こっちの考え方は、突き詰めると数学や論理学の知識が必要になってしまうので、
>>実装面ほど簡単ではありません(私も勉強したいのですが、それらベースと
>>なる知識が足りないため足踏みしています)。
>実装面べたべたで行くと、抽象度の高い設計ができずに後ではまるといった
>問題があるのかもしれませんが、実装を離れて理論で突っ走っても、結局変なことに
>なってしまうように思います。月並みですがバランスが大事、ということでしょうか。
設計段階においてはその通りです。
ただ、ソフトウェアは「設計」「実装」の2段階ではなく、その前に「分析」を加えた3段階で作られます。そして、(本来は)分析なくして設計はなく、設計なくして実装はありえません。
実装の方が触るのは容易なので、実際には「実装→設計→分析」とスキルアップしていくケースが多いのでしょうか。
たぶん「分析」ができないと、オブジェクト指向の真髄を知ったとは言えないだろうなぁ、と思うわけです(実装だけ知っていれば、「オブジェクト指向プログラミング」は極められるかもしれませんが、「オブジェクト指向」を極めるにはそれだけでは足りません)。
当初のタイトルは『オブジェクト指向「初」入門』ですが、これはつまり『オブジェクト指向プログラミング「初」入門』ということですよね。
分析入門もあればいいのになぁ…と思いつつ、最近こんな本を読んでいたり。
http://www.sra.co.jp/people/aoki/IntroductionToOOAOOD/
ただ、「分析」を行うには、論理学を知っていたほうがいいのはあるかもしれませんが、[651] で意図したのはそういうことではありません。
「オブジェクト指向」そのものの数学的、論理学的意味についてです。
たとえば、クラスは分類だと言いましたが、数学的に言えば、クラスはオブジェクトの集合です。派生クラスは部分集合で、多重継承は積集合で…なんて数学の知識は、実務では分析レベルでもそうそう必要ない気がします。
もっと突っ込むと、群論とか圏論といった、ムズカシイ数学が出てきます(勉強したいのですがさっぱりわかりません)。
ちなみに、圏論には「オブジェクト」「クラス」「モルフィズム」というような用語が登場します。…なんとなくオブジェクト指向チックですよね?
こういう方面から攻めるのも併用すると、より理解が深まるんじゃないかな、ってことです。