[441] Re:「オブジェクト指向再入門」読んでよかった。
投稿者:(ぱ)
2007/02/20 02:13:25
>「オブジェクト指向再入門」。なるほどー。そうですか。面白かった。ためになった。
はじめまして。面白く読んでいただけたようで何よりです。
>>※2 もし、board.cの中で「たくさんの盤面」を配列で管理しているのなら、
>>board_create()の戻り値はintかもしれません。 しかし、戻り値をintにしてしまう
>>と、いざ盤面の数に制限をなくそうとして malloc()による動的確保に切り替えたと
>>き困ります。 逆に、最初から「Boardへのポインタ」にしておけば、 配列で実装し
>>ている場合にも困りません。&board[index]を返せばよいからです。
>
>ここで、&board[index] の index には何を使うのでしょうか。
>整数(int)を使うと、引用文二行目の int と同じ制限がかかってしまうと思うのですが。
まず、board.cの中で「たくさんの盤面」を配列で管理しているのなら、
おそらく盤面の数には制限ができることでしょう(回避策は後述)。
Cの配列は基本的に固定長だからです。
ただ、その場合でも、board_create()の戻り値をBoard*にしておけば、
将来的にmalloc()による動的確保に切り替えたとき、利用者側に影響を与えなくて
済む、というのが上の注の主旨です。
&board[index]のindexは、board.cが内部的に保持しているだけであり、
アプリケーションには見せません。簡略化して書くとこんな感じです。
static Board board[BOARD_MAX];
static int board_count = 0;
Board *create_board() {
return &board[board_count++];
}
実際にはfree_board(Board *b)も要るので、そういう場合はポインタ比較しながら
ループを回すことになるのでしょう。
昔、SunOS4か何かのfopen()が、10個くらいまではFILEの固定長配列の中から
FILE*を返すようになっていたと思います。それ以上オープンするときは動的に
確保するわけです(これが上で書いた「回避策」)。
>質問: 「どのオブジェクトに仕事をさせるのか」の具体例は。
>
>連続的に部分拡大をしていく画像(マンデルブロ集合)を表示する JFrame を沢山作っ
>ているのですが、或る画像の JFrame にアクセスする場合、配列を使う事しか思い浮
>かびません。( JFrame[] win = new JFrame[100]; // 100: ∞は可 ??? )
状況がよくわからないのですが、配列を使う方法でも、
「この画像のJFrameにアクセスしたい!」と思ったときには、そのインデックスが
わかっていなければいけないわけですよね?]
どうせインデックスを保持しなければならないのなら、代わりにJFrameの参照を
保持しても同じことではないのでしょうか。
もし、「すべてのJFrame」をどこかで保持する必要があるのであれば、
java.util.LinkedListなりを使えばよいと思います。
>答えてもらいたいから云うのではないが、「センス・オブ・プログラミング!」と
>「Java謎+落とし穴 徹底解明」の目次を技術評論社サイトで見ましたが、とても良さ
>そうですね。買うしかないか。また日曜プログラムが遅れる(-L-)
や、どうぞよろしくお願いいたします(_o_)