- PR -

Image と Graphics の関係を何というのでしょうか

1
投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-04-10 03:59
unibon です。こんにちわ。

Image 型のインスタンスに対して getGraphics
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Image.html#getGraphics()
をおこなうと、Graphics 型のインスタンスを取得できます。そして、その Graphics に対して描画(draw〜 や fill〜 等のメソッドを呼ぶこと)ができ、描画した結果は Image に反映されます。
この場合、Image と Graphics の間には何という関係があると考えれば良いのでしょうか。集約なのでしょうか。どっちがどっちを持っているのでしょうか。片方向の関係ではなく両方向の関係なのでしょうか。たとえば UML で表記する場合は、どんな記号を使って表記することになるのでしょうか。特に UML に拘るわけではないのですが。
また、これと同様(なのか別なのかもあやふやですが)に SQL の Statement と ResultSet の関係も良く分かりません。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-04-10 09:18
引用:

どっちがどっちを持っているのでしょうか。


直接的にどうのこうのというのが知りたいのであれば、ソースを見てみればいいと思います。
ですが、2つだけのクラスを捕まえてどっちがどっちと2次元的に考えるより、こうなんていうんですかね、うまくいえませんがオブジェクト指向的な考え方を身につけた方が良いと思います。
デザインパターンを勉強してみませんか?
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2004-04-10 14:14
API ドキュメントを見ただけですが、Graphics がモデルで Image はそのプレゼンテーションの一つではないでしょうか。
無論、プレゼンテーションは単独では存在できないので、必要に応じてモデルが作られていると思います。
関連としては、集約でない双方向の関連のように思えますがいかがでしょうか。

Statement と ResultSet の場合は、管理対象/被対象という関係はありますが、Statement がプロデューサ、アプリケーションがコンシューマで、ResultSet は両者に共有されるリソースであると思います。
こちらの関連は Graphics と Image の関連よりも、やはり管理について集約の関係を持つかもしれませんが、モデルとしての関連は希薄な気がします。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-04-11 00:05
MVC的に考えて、ImageがモデルでGraphicsがコントローラという考えた方がしっくりくるのではないでしょうか?ビューはImageを貼り付ける先のJLabelなど。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-04-11 01:40
GoFパターンのどれかといえば、ImageがAbstractFactoryで、GraphicsオブジェクトがConcreteFactoryであるImage実装クラスによって作成されるオブジェクト、という考え方があるでしょうか?
StatementとResultSet(ConnectionとStatement、DriverとConnectionも)の関係も同じですよね。ライブラリ開発者は、気がつくことさえなくごく当たり前にこのパターンを使っているということではないかと思うのですが。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-04-11 15:25
unibon です。こんにちわ。
みなさまありがとうございます。

引用:

シュンさんの書き込み (2004-04-11 01:40) より:
GoFパターンのどれかといえば、ImageがAbstractFactoryで、GraphicsオブジェクトがConcreteFactoryであるImage実装クラスによって作成されるオブジェクト、という考え方があるでしょうか?


そうですね。そんな感じがしっくり来るのだと分かりました。
コレクションクラスにおける、java.util.Collection インターフェースの iterator メソッドで返される Iterator 型のインスタンスもそんな感じですよね。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Collection.html#iterator()
この場合の関係は関連であり、その方向は Iterator から Collection への片方向だけだと思います。

引用:

シュンさんの書き込み (2004-04-11 01:40) より:
StatementとResultSet(ConnectionとStatement、DriverとConnectionも)の関係も同じですよね。ライブラリ開発者は、気がつくことさえなくごく当たり前にこのパターンを使っているということではないかと思うのですが。


前述のコレクションクラスならば実装のソースコード(たとえば ArrayList クラス)もすぐに見ることができて簡単で分かりやすいです。私も過去にも少し調べたことがあったのを思い出しました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4548&forum=12

しかし、Image と Graphics の組み合わせや、Statement と ResultSet の組み合わせは、ベンダー依存の実装コードになり、非常に深いところまで見ないと本当にそうなのかという確信が持てません。
もちろん、ベンダー依存のソースコードも Sun からダウンロードできますが、見るのが大変なのでちょっと行き詰まっています。また、JDBC-ODBC ブリッジのソースコードはちらっとだけ見たことがありますが、たとえば sun.jdbc.odbc パッケージにおいて、
JdbcOdbcStatement クラスは、
コード:
protected java.sql.ResultSet myResultSet;


というフィールドを持っていて、
sun.jdbc.odbc.JdbcOdbcResultSet クラスは、
コード:
protected sun.jdbc.odbc.JdbcOdbcStatement ownerStatement;


というフィールドを持っています。
すなわち、両方向の関連を持ってあり、とくにこのような両方向を持たざるを得なくなってしまう理由が、大きな疑問点です。実装を良く解析しきれていないのですが、おそらく Image と Graphics の組み合わせも、両方向の関連になってしまっている場合が多いのではと思っています。
1

スキルアップ/キャリアアップ(JOB@IT)