- - PR -
クラスの拡張が理解できません。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-02 02:16
私も「あつしfx」さんの意見と同様で、是非とも「オブ脳」を読むことをお勧めします。
(読んで理解してていただければ、この疑問も解消するはずですので) 以下、私の個人的なお話になりますが... 私は元々COBOLとかVBなどの非オブジェクト指向の言語の出身です。 しかし、取り扱った言語が結構多かった為に、Javaを使う様になっても、 「Javaは『オブジェクト指向』の言語って難しそうなことを言っているけど、要は言語仕様が違うだけでしょ?JavaだろうがC(C++ではないです)だろうがVBだろうが(COBOLだろうがPL/IだろうがRPGだろうが....)記述方法が違うだけじゃない。」って思って接していました。 (そのため。実は私もここら辺(プリーモーフィズム)が理解できない状態でしばらくJavaに接していました。) しかし、ある方から「オブジェクト脳の作り方」「バグの無いプログラムの作り方」をすすめられて読んでみた結果、目から鱗がおち、今では非オブジェクト指向の言語には関わりたくないと思うようにまでなっています。 非オブジェクト指向の言語に長く関わって来た人間でさえ、ここまで考え方を変わらせることができる素晴らしい本が「オブジェクト脳の作り方」ですので、是非とも読んで欲しいです。 では。 | ||||
|
投稿日時: 2005-06-03 12:31
皆様。ご指導大変ありがとうございました。
しかし、まだまだ判然としません。申し訳ない。。。 脳が混乱をきたしております。 どうしてもひっかる所は"るぱん"さんがおっしゃっている 「機能が少ないのに何故ボスとして君臨できるのか?」の 箇所です。 お勧めされている「オブジェクト脳の作り方」を覗いてみます。 独学でやっていて「オブ脳」が理解できるか心配ですが、 一年を経過しようとしているこの状態を打破してくれる事を祈るばかりです。 | ||||
|
投稿日時: 2005-06-03 12:53
どもです。がると申します。
んっと。個人的雑感ではあるのですが。 オブジェクト系の知識を「理解しようとして」勉強してうまくいった ケースを、実はほとんど知りません。 これは別にオブジェクトに限らずのお話なのですが。 「それ」が発生した背景には、「それ」がなくて困った、という背景が 当然のようにあります。 で、その「困った」背景を理解したほうが、「それ」についての理解が 深めやすいと思うんです。 なので「なぜこうなる?」よりも「そうなったら何が便利なん?」 っていう部分に着目してみるのもひとつではないでしょうか? 最後に。めっさ手前味噌ではありますが。 http://jibun.atmarkit.co.jp/scenter/bbs/viewtopic.php?topic=8769&forum=21 から始まる講座をよかったら読んでみてください。 「実用」ベースの話で書いてあります。 今回の直接的な疑問は「クラスの継承」周りが把握できるとわかりやすく なると思います。 追記: 次の章を読むためには、右上の「同じ記事を参照しているスレッド一覧」を クリックしてもらえれば、一覧が出てきます ^^ それでは。 [ メッセージ編集済み 編集者: がるがる 編集日時 2005-06-03 12:59 ] | ||||
|
投稿日時: 2005-06-03 15:04
まず、クラス間の関係が「上下関係」だと考えていることに問題があると思います。 「クラス」というのは分類する(classify)から来ている言葉である、と考えるとよいと 思います。 最初に質問された例でいうと、ExceptionはArrayIndexOutOfBoundsExceptionも NumberFormatExceptionも包含する概念であるため、ArrayIndexOutOfBoundsExceptionも NumberFormatExceptionもExceptionとして扱うことができます。ただしExceptionでは、 ArrayIndexOutOfBoundsExceptionやNumberFormatExceptionに共通する性質しか扱えない ため、これらが独自に持つ性質は、Exceptionとして持つことができません。 よくあるAnimalとDogやCatとの関係で考えてもいいでしょう。AnimalはDogやCatを包含する 「広い」概念であるために、持てる性質は「少なく」なってしまうのです。いわゆる継承で 拡大するのは「性質」であって、そのために概念としては「狭く」なってしまうということを 理解してください。 |