人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

プログラム(クラス)の設計はどのように行なえばよいでしょうか?
現在、Chordアルゴリズムを利用したP2Pソフトウェアを勉強のため製作しています。
ネットワーク機能を利用したりと小さくない規模なのでUMLを利用してきちんと設計をするべきだと思う(ふだんは思い付くまものい記述してからバグを削るタイプです)のですが、機能をどのように細分化してクラス単位に纏めればよいかの基準や手法がいまいち要領を得ません。
基本的な指針を御教授いただけないでしょうか。
また、参考になる本やWebサイトなどありましたら紹介していただけると助かります。

うまく伝えきれていない部分もあるかと存じますが、よろしくお願いします。

●質問者: 椛川
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● しおり

以下どちらも古い書籍ですが、おすすめです。
特に1冊目には、タイトルの通り「オブジェクト指向の考え方(こころ)」が書かれています。

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン


椛川さんのコメント
書籍の紹介ありがとうございます。 参考にさせていただきます。

2 ● cdaotg
ベストアンサー

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―



やや古い本ですが、私はこれで勉強しました。また、Webサイトですと http://www1.u-netsurf.ne.jp/~kitada/3H/ が比較的わかり易かったです。

> 機能をどのように細分化してクラス単位に纏めればよいかの基準や手法がいまいち要領を得ません。

基本的には、「単一の機能を持つ、データ構造とアルゴリズムのまとまり」を1つのクラスとすべきです。

例えば、「メインウィンドウ」「設定ウィンドウ」「ハッシュ値の計算部分」「ネットワークを介した通信を行う部分」等は、それぞれ1つのクラスとすると良いかと思います。

また、私がよくやるのは、クラスの内部構成(持たせるデータやアルゴリズム)を仮決めした段階で、クラスの名前を考えます。で、複雑な名前になったらそれは「クラスの設計がまずい」と判断します。

例えばアプリ内で「文字列の線形リスト」を扱う必要が出て来て、それをそのまま一つのクラスにすると「LinkedListOfString」みたいな名前になりますよね。

で、これだと以下の2点から「複雑で悪い」名前だと判断します。

この場合、LinkedListクラスとStringリストの2つに分けると、それぞれの名前は短くシンプルになりますので、これは「良い名前=良いクラス設計」だと判断します。

ものすごく大雑把に説明しましたが、クラス名を考えてそれを基準にクラス設計の良し悪しを判断するというのは、それなりに使える手法だと考えています。


椛川さんのコメント
適切な名前を利用するのはなるほどと思いました。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ