- PR -

オブジェクト指向設計に関する質問

投稿者投稿内容
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-04-01 13:59
みなさん、返答ありがとうございます。
引用:
渋木宏明(ひどり)さんの書き込みより

即物的なマッピングをしてしまうと、余分な実装や困難な実装を行う羽目になるので、ある程度実装を踏まえた上で「何をクラスとするべきか」を考えないと、後工程で困ることになります。



そうですね、充分気をつけたいと思います。


引用:
unibonさんの書き込みより

UML よりも、実装レベルに近い話になるので、理論家はあまりこういうったことに興味がないのだろうと思います。でも、プログラマーとしては非常に重要な議論になるはずですが、たしかに、なかなかないですね。



なかなかないですよね、結局自分で身に付けていくしかないんですかね。

引用:
unibonさんの書き込みより

私もコーディング時に常に迷うのですが、こういう場合は、まずは「格納クラス」を作ることを考えたほうが良いです。自由度が高く、いろいろなケースでも破綻なく使えます。
しかし、これはコストが大きいので、必要に応じて、「本棚が本を持つ」か「本が本棚を持つ」にしてしまいます。しかしこれは妥協の結果でそうしたのだ、と意識しながら使います。検索を速くしたければこの変形で「両方で持ち合う」もありでしょう。
しかし、これらで使いにくければ、また「格納クラス」に戻します。



とても参考になりました。今後の設計ではまず格納クラス的なクラスを考えて、そこから適切な設計を導くようにしようと思いました。


引用:
R・田中一郎さんの書き込みより

僕は「何があると便利か?」を先に考えちゃいますね。


* この人は、今何の本を借りているのか?
* この人が、今までどんな本を借りたのか?
* この本箱には、今、どんな本があるのか?
* この本は、今誰が借りているのか?
* この本は、今どの本箱にあるのか?
* この本は、今まで、どの人に、どれだけの期間貸し出されて来たのか?



すると、これらの情報を取得したり管理するためのクラスは、どのようにするのが良い
のかが何となく見えてきて、後は、コーディングしては手直ししたり、別のクラスに分
けたりの繰り返しです。



必要・不必要な機能の洗い出しをしっかり行おうと思います。


引用:
ちいにぃさんの書き込みより

2006/01に出版されたプレファクタリング―リファクタリング軽減のための新設計が参考になるかも。



大変興味があります。早速注文しましたw

引用:
vincentさんの書き込みより

貸し出し業務デザインの定石としては、ここで「本」といわれているものは
「(a)カタログ[目録]」と「(b)本そのもの[実体]」に分けて考えるのが有用です。

検索や履歴表示には(a)、本棚への配置や顧客への割り当てには(b)を使います。



本を表すクラスを2つ用意して状況に応じた使い分けをするということですね。必要に応じてそういったクラスを用意することも考えるようにしようと思います。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2006-04-01 16:48
カタログとしての本と1冊の本は分けて、考えないといけませんね。

例)
図書館Aに「ハリーポッター賢者の石」は、2冊ある。
1冊は、Bさんが借りていて、もう1冊はCさんが借りている。
Dさんも借りようと思ったが、ないので予約をすることにした。
(予約は、カタログに対して行われ、返却は実際の本となる。)
Bさんが返しても、Cさんが返しても、Dさんはその本を借りられる。

こんなシステムを作りましたが、本のクラスは1つだけでした。
(1冊に対応するオブジェクトは、本クラスのオブジェクトと整数値1つの組でした。)
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-04-04 00:20
catsさん、返答ありがとうございます。
少し勘違いしていました。ようは同じ品を複数扱う場合に、種類を表すクラスと本体(?)を表すクラスを用意する必要があるということですね。


こちらは解答が付かなかったので自己レス

引用:
DBアクセスクラスの位置づけとして2通り思いついたのですが、
一つ目は、DBアクセスクラスを会員クラスや本クラスから利用するような設計、
二つ目は、会員クラスや本クラスからはDBアクセスクラスを利用しない設計です。

具体的には、
一つ目の設計では、会員クラスや本クラスにstaticメソッドとしてGetInstance(int id)というようなメソッドを用意し、このstaticメソッドがDBアクセスクラスのGetBookメソッドを呼び出します。他にもDBの更新や削除も会員クラスや本クラスにUpdateメソッド・Deleteメソッドを用意して、これらがDBアクセスクラスのUpdateBookメソッド等を呼び出します。これらのクラス群を利用するFormクラス等からはDBアクセスクラスを直接利用しません。(なんというか、会員クラスや本クラスの裏側に位置するような設計です。)

二つ目の設計では、会員クラスや本クラスからはDBアクセスクラスを利用せず、これらのクラス群を利用するFormクラス等がDBアクセスクラスのGetBookメソッド等を直接利用します。

この二つの設計について、一般的な設計としてはどちらの設計なのでしょうか?やはりこれもケースバイケースなのでしょうか?



設計について色々調べてたら以下のサイトに行き着きました。まだ全部読みきってもいませんが、ここに書かれていることをしっかり理解すればレベルアップできそうな気がします。(むしろ、設計を行う上で必須な知識っぽいですね^^;)

.NET のアプリケーション アーキテクチャ : アプリケーションとサービスの設計

@IT:連載:アプリケーション・アーキテクチャ設計入門

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