From: Masahiro S. ()
<sa...@to...> - 2007-07-15 06:55:39
|
酒井です。 From: Masao Mutoh <mu...@hi...> Date: Sun, 15 Jul 2007 15:08:16 +0900 > むとうです。 > > On Sun, 15 Jul 2007 13:28:59 +0900 (JST) > Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > > > 酒井です。 > > > > まぁ、キャストができるからis aか、と言われると違うと言われれば > > > 違うような気もしますが、でもキャストができるんだからis aなんじゃ > > > なかろうかというような気もしないでもないです。 > > > > 「ポインタをキャストできるならば is-a」という考えに従うならば、 > > 上のコード例の AtkTextRectangle* は int* にキャストできるため > > AtkTextRectangle と int が is-a の関係にあることになってしまいますよ。 > > ちょっと説明が足りませんでした。この場合構造体だけで考えてました。 > #構造体をクラスと見立てています。 > 「ポインタをキャストした後の各変数に正しくアクセスができる」 > という考え方ですかね。 > > ただ、これは一般論として言ってるわけではなく、GTKでは > (たとえば、GtkWindowはGtkBinのみをPointerではなく持っていま > す)、継承関係的な位置づけがあるものはそういったポリシーで定義 > しているんじゃないかなと(勝手に)思っていたわけなんですが。 gtkでは継承関係を構造体の埋め込みとしてエンコードしているわけですが、 逆に構造体が埋め込まれていたからといって、それが継承関係を表したものと は限らないでしょう。 > > メモリ管理といよりは、int等と同じように単なる値として扱いたいということ > > だと思いますが。 > > 初心者みたいな質問して申し訳ないんですが(苦笑) > 値として扱いたい場合とポインタとして扱いたい場合の違いって > 何でしょうか。 基本的には、同一性(identity)に意味がある場合にポインタとして扱い、 同一性に意味がなく同値性のみが重要な場合に値として扱うのだと思います。 > それからさかいさんがis-aではないと思った理由って具体的には > なんでしょうか。 rangeという概念とrectangleという概念は、上位概念・下位概念の 関係にはないと感じたためです。 > rectangleを拡張したのがrangeと考えるのか、rangeはrectangleを持つ > と考えたかの違いだとは思うんですけど・・・。 ちなみに、 http://developer.gnome.org/doc/API/2.0/atk/AtkText.html#AtkTextRange ではメンバとして AtkTextRectangle bounds; A rectangle giving the bounds of the text range と書かれています。 継承関係を意図しているのならばこのような書き方はしないでしょう。 -- 酒井 政裕 / Masahiro Sakai |