2014年4月5日土曜日

人で無しのための計算機理論入門 その9 プログラムの基礎 その3 使い回して効率を上げよう

がんばるためにがんばる、そんな訳の分からない状況で、貧乏なのに国のためにボランティアをやっている、なんだか訳の分からない私。しかし、「世界市民のみなさん。アメリカがあなたのためになにをしてくれるかではなく、人類の自由のために共になにができるかを考えようではありませんか」とは故ケネディ大統領の有名な演説にもある通り。少なくても今までこの国でも人権さえも無視されてきても、ホモサピエンスには違いありませんので、気持ちだけでも人類の自由のために微力を尽くそうという次第。
 
※ ところで、一つ訂正があります。「その3」にて、C/C++、Javaなどの高級言語のことを関数型と申し上げていましたが、オブジェクト指向型と申し上げるべきでした。お詫びして訂正いたします。ブログの方の記事においては訂正済みです。
 
さて、今回はサブルーチンについてお話しします。
ある程度プログラムが書けるようになって、いろいろなプログラムを書いているうちに、あれ、これってどこかで同じプログラムを書いたな、とか、この部分は他でも何回も使うんだけど、いちいち同じことを書いたりするの面倒だな、という気になってきますよね。
そういうときに、その部分だけを独立させて使い回すことをサブルーチン化すると言います。考え方としては、木の幹、いわば幹線的な処理を行う部分をメインルーチン、そこから呼び出されて様々な専門的に特化した仕事を繰り返し行うところをサブルーチンといいます。

以前、「その7」で説明した、フローチャートの記号は以下のようになります。


現在主流のオブジェクト指向型言語では、サブルーチンの処理をクラス(class)として、独立させることが主流です。
 
どのように独立させるかというと、
 
 1.サブルーチンの中で使用する変数とその中で行う処理を
   他から影響されない一つの独立した組にする。
  (カプセル化)
 2.似たようなサブルーチンは、同じクラスの中で、
   異なるメソッド(method)と記述し、呼び出すときは、
   [クラス名].[メソッド名]のようにして呼び出す
 
といった感じでしょうか。ちなみに、クラスの中の変数にも、
 
   [クラス名].[変数名]
 
という感じで呼び出せるものもあります。(呼び出せないものもあります。これについては後述します)
 
このような、
 
 [クラス名].[メソッド名]や、
 [クラス名].[変数名]
 
で呼び出せるものを、メンバ(member)と呼びます。3年B組の誰々さんを呼び出すのとちょっと似ていますよね。
 
一般にクラスの中だけで使う変数や、サブルーチンなどは、プライベート(private)と分類され、クラス外側から見えないようにします。クラスの外側から見えてもいいものをパブリック(public)に分類します。
 
このあたりのことは、言語の仕様にも依る部分があるので、詳しくはその言語の使用をよくご確認下さい。
ただ、プロセスが分かっていると、クラスに関しても何となくよく分かりますよね。
 
さて、このように、誰にだって、(コンピュータのプログラムにだって!)プライベートはあるんです。私にはありませんけど……。

0 件のコメント:

コメントを投稿