サブルーチン、標準パターン、非手続き型言語、データベース、オブジェクト指向、SOA
機械を設計するのに、ボルトやナットまで設計することは稀です。それは形状、材質、強度などが一定水準の品質であることが規格化されているからです。このように工業製品では、標準化した部品を用いることにより、生産の合理化、品質保証を実現しています。
それと同様に、ソフトウェアでも、部品化をして再利用することが行われてきました。
技術計算での「方程式の求根」や「連立方程式の解」、事務処理での「ファイルの操作」や「データのソート」など、多くのプログラムで共通して利用される処理があります。その処理プログラムをサブルーチンや副プログラムといいます。オブジェクト指向言語系ではクラスとして扱われます。サブルーチンを集めたものをライブラリといいます。
これを利用すれば、プログラマはコーディングするメインプログラム(主プログラム)の中で、サブルーチンにある処理部分はそれを呼び出す命令を記述することができます。それにより、次のようなメリットがります。
サブルーチンは、言語ソフトウェアでの提供。アドオンソフト、市販ライブラリなどがありますが、自作することもあります。自作の場合、広く利用でき、利用勝手のよいサブルーチンにするには、モジュール分割の評価基準を参照するのが適切です。
事務処理では、ソート、照合、集計など、似たような処理が多くあります。サブルーチンとは逆に、メインルーチンが担当するフレームを汎用的に使えるプログラムとして標準化しておき、その中で個別処理をする部分だけをコーディングします。
事前に中計キー、小計キーでソートされているファイルを読んで、明細行、小計、中計、総計の表を出力する標準パターンを例にします。
そのロジックを記述したメインプログラム(標準パターン)を用意しておき、ファイルの仕様、ソートキーや累積項目の変数、コントロールブレイクした(小計、中計が発生した)ときの処理プログラムを記述する場所に印をつけておきます。プログラムするときは、その場所だけをコーディングすればよいのです。
ここでは疑似言語を用いており、指定指示もあいまいですが、イメージはつかめるでしょう。
メインプログラム(標準パターン)
総計累計項目 = 0
call ファイル読込
while (データがある間) {
前中計キー = 中計キー
中計累計項目 = 0
while (中計キー == 前中計キー) {
前小計キー = 小計キー
小計累計項目 = 0
while ((中計キー == 前中計キー) and (小計キー == 前小計キー)) {
call 明細行処理
小計累計項目 = 小計累計項目 + 明細累計項目
call ファイル読込
}
call 小計処理
中計累計項目 = 中計累計項目 + 小計累計項目
}
call 中計処理
総計累計項目 = 総計累計項目 + 中計累計項目
}
call 総計処理
サブルーチン(個別記述)
ファイル読込
中・小計キー、明細累計項目の定義
ファイルのデータがなくなったときのフラグ設定
明細行処理
明細行累計項目間の計算と出力
小計処理
小計累計項目間の計算と出力
中計処理
中計累計項目間の計算と出力
総計処理
総計累計項目間の計算と出力
このような標準パターンを検討するには、プログラムを全体かから細部に階層的に分割し、細部を実行する順序をします。そして、汎用化する部分と個別記述する部分を区分することになります。すなわち、構造化設計で設計することになり、標準パターンを利用して生成したプログラムは構造化プログラムになります。
関係者全員が、標準パターンを使えば、プログラムのどの部分で何をしているかが共通理解できます。これはウォークスルーの実施で大きな効果があります。また、多様な標準パターンが用意されていえば、システム全体を標準パターンの組合せとして構築することにつながります。
修正個所を発見するには、プログラムのステップ数が短いほうが容易です。COBOLのような手続き型言語に比べてSQLのような非手続き言語を用いれば、ステップ数は非常に少なくなります。非手続き型言語は、標準パターンを言語化して汎用性を高めたものだと解釈することもできます(参照:「プログラミング言語の発展」)。
反面、適切な管理をしないで部品化を進めると、かえって混乱が生じます。
そのため、部品化を推進するには、多様な対処が必要になります。