まずは構造化プログラミングですが、ASCII.jpデジタル用語辞典「構造化プログラミング」の解説によりますと、 (以下、引用)
個々の処理を小さな単位に分解し、階層的な構造にしてプログラミングすること。突き詰めていけば、プログラムは「連接(逐次)」「選択(条件判断)」「反復(ループ)」の3つだけで構築できることが数学的にも証明されている。構造化プログラミングでは、プログラムの構造が明確になり、アルゴリズムの間違いを減らすことができる。また、大規模なプログラムを分担して作成することもできる。PascalやPL/Iなどのプログラミング言語は、構造化に適した仕様を持ち、1970年代にプログラミング技術の新潮流となった。その後、発展したオブジェクト指向プログラミングが現在の主流となっている。
ASCII.jpデジタル用語辞典「構造化プログラミング」
となっていて、他にネットの記事や書籍・技術用語辞典で、色々と説明は数多くありますが、この内容がわたしの理解には割りと近いです。
ここで、構造化プログラミングには大きく2つの要素があることが分かります。
一つ目は、プログラムは小さな処理単位(とりあえずここでは「部品」とします)を組み上げて作るのが良い、ということです。プログラムを作る時に何を考えるかというと、方針として次のような考え方をします。例えば、
1. プログラム(全体)はA1、B1、C1という部品で構成されている。
2. A1という部品はA2とA3で構成されている。
3. B1という部品はB2とB3それにA3で構成されている。
4. C1という部品はC2とB1とA3で構成されている。
というように部品の積み上げで考えます。
上記の結果として、このプログラムの構造を示すと、下図のようになります。
部品としては、A1,A2,A3,B1,B2,B3,C1,C2の8つが必要ですが、A2とA3を書けば、A1はおおよそ出来上がり、B2とB3を書けば、A3は既にあるので、B1も出来上がる。C1に関してはC2を書けば、A3もB1も既に出来ているので、それでOKとなります。ということは、実質はA2,A3,B2,B3.C2の5部品のプログラムを書くことが必要だということです。これらを使ってそれぞれの上位の部品は構成されているからです。
このプログラム(全体)を書くポイントは何でしょうか? 2つ挙げておきます。
①プログラムが上図のような部品構成だと、そういう構造で出来上がると「見抜く」こと。
見抜かないといけない。なんか難しそうですね。でも、実はそうでもないのです。「見抜く、見抜いた」のは結果で、プログラムを書いている時は「細分化」をしています。このプログラムは、A1ということと、B1ということと、C1ということをすればいいんだなと。3つに分けた。細分化した。A1はA2とA3に更に細分化した。大体、モノは小さくなると、単純化し分かりやすくなることが普通です。一目見て何だか分かるようになるまで細分化したらいい・・・というのが目標です。(「段階的細分化」といいます)
C1でB1が使えそうだと、前もって分かったら素晴らしいが、後で使えることが分かって、結果、上図のようになった・・・ということもあります。とにかく、細分化すること。大きく、複雑なものをいきなり詳細から作るのは難しいのです。だから、とりあえず細かい中味まではまだ分からないけれど、おそらくA1とB1とC1に分けてやろう・・・で良いのです。
それとやはり試行錯誤で何回かやり直す(考え直す)ということも当然あります。最初から一発で素晴らしく効率的なものを書けたら・・・それはスゴイですが。もしそれができたら、わたしって天才かもと思っていい(笑) ほら、モーツァルトはいきなり譜面に完璧な曲を書いたとか言うじゃないですか。書き直しがないのだと。天才ですよねぇ。わたしのような凡人はそうはいかない。無理せず何度か書き直す、それでいいのです。
②部品を作る時に共用できるものをイメージすること(部品の共通化)
話を戻すと、ここで、B1とA3はちょっと重要で、2カ所以上の場所で使われている(共用している)、そういうふうになるように部品構成を考えなくてはならない。これを見抜くのは、経験とセンス・・・でしょうかね。こういう共通化できる部品をうまく作れると、プログラムは分かりやすくなります。プログラムを書く効率も良い。きっと出来上がったプログラムの実行性能もアップします。どうして性能アップするのか・・・も、いずれどこかで話しましょうかね。
ということで、これが構造化プログラミングの第一の要素です。部品化、細分化。部品の組み上げでプログラム(全体)ができている・・・という考え方です。
(続きます)
コメント