プログラマーの方に質問です。


良いモジュールインターフェースを考えるコツを教えてください。

クラスや関数を設計する時は、入力と出力のインターフェースが重要になります。

ある値を入力(引数)すると内部でアルゴリズムが処理され結果が出力(戻り値)されるのがプログラムです。
このインターフェースさえ把握していれば、それを使う人は内部アルゴリズムを解析する必要がなく生産性向上へ繋がります。

このような使いやすいインターフェースを設計する上でのコツを教えてください。(クラスや関数のネーミング、引数、戻り値)
宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/03/30 12:15:13
  • 終了:2009/04/06 12:20:03

回答(7件)

id:hijk05 No.1

hijk05回答回数1307ベストアンサー獲得回数232009/03/30 13:23:03

ポイント19pt

DBを使うのなら、DBが正規化されているのならそれにあわせて作ればよいのでは?

>入力と出力のインターフェースが重要になります。

本当に重要かな?

重要だとしたら、そのシステムはゴミです。

id:jar2

ゴミだと思う理由を教えてください

2009/03/30 14:21:56
id:dev_zer0 No.2

dev_zer0回答回数332ベストアンサー獲得回数252009/03/30 15:05:18

ポイント19pt

真似ること


例えばC/Javaなどのプログラム言語には標準関数やクラスがあります

それらの命名規則や引数の順番を真似れば、その言語を知っている人にとっては

そのインターフェースは馴染みやすいものとなります。

また、デザインパターンという考え方もあります。


既存のシステムと別の作り方だと「何でこれだけ違うんだ?」という

違和感を持ちます。既存の作りと「なるべく」合わせましょう。

# もし、あなたが、自分のインターフェース設計の方が断然勝っていて、

# ゴミみたいな既存のシステムと同じでありたくないと断固として思っているならば

# 上を説得してそのインターフェースで作るのもありですが

# その場合、周りの理解を求めましょう。自己満足で痛い目を見ないように

id:jar2

既存の使用事例を真似すれば、それを知ってる人にとっては学習する必要がありませんね。

ありがとうございます。

2009/03/30 15:29:49
id:cdaotg No.3

cdaotg回答回数91ベストアンサー獲得回数242009/03/30 18:18:21

ポイント18pt

私の場合は、最初に「シンプルな名前」を付ける事です。


例えばCのsin()関数。関数名を見ればその使い方が容易に分かる、すばらしい設計だと思います。

この様に、「今から作成するモジュールorクラス」にシンプルな名前をつけれる様に努力します。


複数の機能がゴチャゴチャこんがらがっていたりするクラスは、大抵名前もゴチャゴチャします。逆に、シンプルなクラスはシンプルな名前を付けれるものです。

クラス名がHogePiyoFooなら、HogeとPiyoとFooを別々のクラスに出来ないか? 出来るならば、それらのクラス間でのやりとりはどうやってすればいいか? と、名前を手がかりにクラスの設計を考える事が多いです。

id:jar2

目的が容易に予想できるシンプルな名前。たしかに重要だと思います。

そしてモジュールの分割の基準も名前がシンプルになるようにするのも良いアイデアですね。

ありがとうございます。

2009/03/30 18:27:26
id:hijk05 No.4

hijk05回答回数1307ベストアンサー獲得回数232009/03/30 23:10:57

ポイント18pt

>>入力と出力のインターフェースが重要になります。

>本当に重要かな?

>重要だとしたら、そのシステムはゴミです。

入出力とプログラム(アルゴリズム)の独立性と関係があります。

入出力が変更されたときに、プログラムのコアまで影響があるプログラムは良くないです。

オブジェクト指向のデータのカプセル化がそれにあたります。

id:tezuboa No.5

tezuboa回答回数18ベストアンサー獲得回数22009/03/30 23:23:02

ポイント18pt

使用方法をしっかりと明記するのが重要だと思います。


何をするためのモジュールなのか、インプットの指定可能範囲は何か、アウトプットの全ての値の意味など、完全に明記し間違った使われ方がされないようにするのが重要だと思います。


使用方法が明確であれば、中身がどうであれ使いやすく問題も発生しずらくなります。

(逆に説明が貧弱だとどんなに優れたモジュールだとしても間違った使われ方をしたり、使い方がわからないため結局つかわれなかったりと。やっぱり作りっぱなしはNGです。)

また、バグなどがあった際の修正時にも、間違った修正がされることも無くなり、保守面でも有効です。

id:kazuki_t No.6

kazuki_t回答回数5ベストアンサー獲得回数02009/04/02 02:15:54

ポイント18pt

良いモジュールインタフェースにするには、良いところでモジュールを分けることです。

中途半端なところでモジュールが分かれているなら、小手先でネーミングやドキュメントを

頑張ってもわかりやすくはなりません。

良い分け方としては、以下のようなことに気をつけています。

・モジュールの役割・責任がシンプルに説明できる

・データが分かれる

・処理のレベルがそろっている(コード量じゃなくて)

 

あと、インタフェースとしては一貫性をとると分かりやすくなると思います。

ルールがあってそれに従っていれば、見る方は個別の内容だけに集中できるので。

・似たような処理は似たような名前に

・誰がメモリを確保して、誰が解放するのか、

・省略値の指定の仕方

・エラー処理の作法

id:uehaj No.7

uehaj回答回数158ベストアンサー獲得回数152009/04/05 16:04:21

ポイント10pt

他の人が書いてなさそうなところで、

「副作用をできるだけ少なくする」、

「もし副作用があればドキュメントとして記載しておく」

が重要です。

例えば、グローバル変数/static変数をアクセスしないこと

が副作用を減らすことにつながります。

再入可能かどうかなども関係します。

また、1連の関数を呼び出すときの制約条件、

コンテキストに関わる部分もドキュメントが必須ですね。

例えば、Aを呼んだ後で、Bを呼ばなければならない、

とかです。その種の制約が自然に扱えるようならそれは

優れたモジュールI/Fであるとは言えます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません