現在、Chordアルゴリズムを利用したP2Pソフトウェアを勉強のため製作しています。
ネットワーク機能を利用したりと小さくない規模なのでUMLを利用してきちんと設計をするべきだと思う(ふだんは思い付くまものい記述してからバグを削るタイプです)のですが、機能をどのように細分化してクラス単位に纏めればよいかの基準や手法がいまいち要領を得ません。
基本的な指針を御教授いただけないでしょうか。
また、参考になる本やWebサイトなどありましたら紹介していただけると助かります。
うまく伝えきれていない部分もあるかと存じますが、よろしくお願いします。
オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
やや古い本ですが、私はこれで勉強しました。また、Webサイトですと http://www1.u-netsurf.ne.jp/~kitada/3H/ が比較的わかり易かったです。
> 機能をどのように細分化してクラス単位に纏めればよいかの基準や手法がいまいち要領を得ません。
基本的には、「単一の機能を持つ、データ構造とアルゴリズムのまとまり」を1つのクラスとすべきです。
例えば、「メインウィンドウ」「設定ウィンドウ」「ハッシュ値の計算部分」「ネットワークを介した通信を行う部分」等は、それぞれ1つのクラスとすると良いかと思います。
また、私がよくやるのは、クラスの内部構成(持たせるデータやアルゴリズム)を仮決めした段階で、クラスの名前を考えます。で、複雑な名前になったらそれは「クラスの設計がまずい」と判断します。
例えばアプリ内で「文字列の線形リスト」を扱う必要が出て来て、それをそのまま一つのクラスにすると「LinkedListOfString」みたいな名前になりますよね。
で、これだと以下の2点から「複雑で悪い」名前だと判断します。
この場合、LinkedListクラスとStringリストの2つに分けると、それぞれの名前は短くシンプルになりますので、これは「良い名前=良いクラス設計」だと判断します。
ものすごく大雑把に説明しましたが、クラス名を考えてそれを基準にクラス設計の良し悪しを判断するというのは、それなりに使える手法だと考えています。
以下どちらも古い書籍ですが、おすすめです。
特に1冊目には、タイトルの通り「オブジェクト指向の考え方(こころ)」が書かれています。
デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)
書籍の紹介ありがとうございます。
参考にさせていただきます。
オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
やや古い本ですが、私はこれで勉強しました。また、Webサイトですと http://www1.u-netsurf.ne.jp/~kitada/3H/ が比較的わかり易かったです。
> 機能をどのように細分化してクラス単位に纏めればよいかの基準や手法がいまいち要領を得ません。
基本的には、「単一の機能を持つ、データ構造とアルゴリズムのまとまり」を1つのクラスとすべきです。
例えば、「メインウィンドウ」「設定ウィンドウ」「ハッシュ値の計算部分」「ネットワークを介した通信を行う部分」等は、それぞれ1つのクラスとすると良いかと思います。
また、私がよくやるのは、クラスの内部構成(持たせるデータやアルゴリズム)を仮決めした段階で、クラスの名前を考えます。で、複雑な名前になったらそれは「クラスの設計がまずい」と判断します。
例えばアプリ内で「文字列の線形リスト」を扱う必要が出て来て、それをそのまま一つのクラスにすると「LinkedListOfString」みたいな名前になりますよね。
で、これだと以下の2点から「複雑で悪い」名前だと判断します。
この場合、LinkedListクラスとStringリストの2つに分けると、それぞれの名前は短くシンプルになりますので、これは「良い名前=良いクラス設計」だと判断します。
ものすごく大雑把に説明しましたが、クラス名を考えてそれを基準にクラス設計の良し悪しを判断するというのは、それなりに使える手法だと考えています。
適切な名前を利用するのはなるほどと思いました。
ありがとうございます。
適切な名前を利用するのはなるほどと思いました。
2013/01/25 18:18:00ありがとうございます。