行き着く所はIPO(Input Process Output)

今日はこれまでとは少し違う切り口です。ソフトウェアはプログラムによって作られます。プログラムはプログラミング言語を用いて開発します。プログラムはプログラミング言語javaであればクラスが連携して全体が構築されています。クラスはフィールド(データ)とメソッド(処理)で構成されています。

クラスが組み合わさってソフトウェアができるとすれば、言い換えれば、ソフトウェアの根本的な性質はメソッドに表現されていると考えられます。つまりはIPO(Input Process Output)に集約されます。

public class Processor {
	
	public Output process(Input data) {
		return new Output();
	}

}

さて、ここで要件定義、基本設計(外部設計)です。要件定義、基本設計(外部設計)で明確にすべきことは、IPOで言えば、ソフトウェアの価値を提供するProcessの仕様を決めることであり、その条件となるものがInputとOutputです。Processの仕様を決めるには、まずInputとOutputを洗い出す必要があります。

Inputに当たるもの

Inputとなるものは、画面(入力)、イベント(要求/通知)、ファイルなど、そして引数を持たないメソッドもあるため、Inputがないこともあります。
また、Processが状態を持つ場合、その状態もInputになり得ます。

Outputに当たるもの

Outputとなるものは、画面(出力)、イベント(応答/通知)、ファイルなど、そして戻り値を持たないメソッドもあるため、Outputがないこともあります。
また、メソッドを呼び出した側には何も返さないが、DBに保存する、ファイルを生成する、通信をする、などもOutputになり得ます。

その他考えられること

メソッドには他にどのような要素があるか?と考えてみると、synchronized(同期)、throws(例外)などが思いつきます。これらもProcessの仕様を決める上で考える観点になります。

逆に考えないこと

Processの仕様を決めることが目的であって、その中身の書き方は内部設計で検討する内容です。よって、privateメソッドやクラス分割、デザインパターンなどを考えている自分に気づいたら、それは外部仕様から焦点がずれているのだと考えてよいでしょう。

補足

この内容は、どうしてもソフトウェア内部の機能やプログラムのことを考えてしまう、という人が上位設計をする場合にこのような視点を持ってみたら考え易いのでは?という思いつきですので、そのような考え方もある、という程度に捉えてやってください。