RPG

364. サブ・ルーチンとプロシージャー

サブ・ルーチンプロシージャーとの違いを紹介していきたい。
なぜサブ・ルーチンでは駄目なのか?
プロシージャーにする利点はなになのか?

SOAとは何なのかを合わせて探っていきたい。

最初にサブ・ルーチンについて紹介しよう。
サブ・ルーチンは既に多くの読者諸氏が使われていることと
思うが、

■サブ・ルーチンの機能と目的

サブ・ルーチンとはメイン・ルーチンの一部であるが
ある繰り返す演算のまとまりだけをサブ・ルーチンとして
ひとつの塊りとして記述したものがサブ・ルーチンである。

 サブ・ルーチンには名前がつけられていて
  その名前を呼び出すことでサブ・ルーチンへメイン・ルーチンから
分岐することができる。

  繰り返して行われる処理をサブ・ルーチンとしてまとめておくと
同じ処理を繰り返して記述する必要がないので

   ・処理ステップを短くすることができる。
・処理の保守性を高めることができる。

の利点を得ることができる。
  従って一度しか使用されないロジックであっても
  サブ・ルーチンとしてまとめておくと見やすくわかりやすい
処理ロジックを形成することができる。

■サブ・ルーチンの問題点

  

サブ・ルーチンはあくまでもメイン・ルーチンの一部であるので
使用する変数(フィールド値)はメイン・ルーチンの変数と
共有している。
つまりサブ・ルーチンはメイン・ルーチンの使用する変数を
参照している場合が少なからずあることになる。
このため

・サブ・ルーチンは他のプログラムにそのままコピーしても
使用できるとは限らない。

・サブ・ルーチンはそのプログラムの一部であり他のプログラムから
そのプログラムのサブ・ルーチンを参照することはできない。

・サブ・ルーチンそのものだけでは完結していない。
そのためサブ・ルーチンを再利用することは保証されない。

■オブジェクト指向と再利用性

オブジェクト指向による開発というのはソースではなく
コンパイルされてできたオブジェクトを品質保証されたものとして扱い
オブジェクトを組み合わせて新たなオブジェクトを再作成しようという
開発技術のことである。

代表的なオブジェクト再利用技術はJavaVC++である。
最初にMicrosoftは C++で Classというカプセル化されたモジュールから
新たなClassを派生して作るという再利用技術を提唱した。
JavaはそのClassの考えをさらに極端にしてすべてのオブジェクトを
ClassにしたのがJavaである。

IBM iのi5/OSではパネル・グループも複数の品質保証されたオブジェクトを
組み合わせて再利用する考えに基づいて設計されている。

話を戻してサブ・ルーチンという処理の塊りを考える場合
サブ・ルーチンはメイン・ルーチンの一部であるので
これだけを(サブ・ルーチンだけを)取り出してカプセル化することは
できない。

将来にわたって保守性とソフトウェアの品質保証を進めていくと
サブ・ルーチンに独立性を与えてサブ・ルーチンを外部にも公開しなければ
ならない方向が出てくる。
それが次回から説明するプロシージャーである。

  次回はプロシージャーとは何かを説明する。