プログラミング

構造化プログラミングをわかりやすく学ぶ!概要からオブジェクト指向との違いまでを解説します。

構造化プログラミングって何だか難しい…。

本記事では構造化プログラミングに関して噛み砕いて解説をします。

構造化プログラミングは、複雑なプログラムをわかりやすくするためのプログラム手法の1つです。

本記事は「難しい用語のイメージをつかむ」ことを目的としており、正確さに欠ける表現がある場合があります。情報の正確さを重視する場合は別サイトをご確認ください。

構造化プログラミングの誕生の背景

まずは背景に関して説明をします。

時代は1960年代、アセンブリ言語が中心の時代です。
当時のプログラムは、goto文(goto statement)が主に使われていました。

構造化プログラミングは、goto文を使うことによって複雑になったプログラム(制御)を簡単にするための考え方の1つです。

イメージを掴みやすくするために簡単にアセンブリ言語とgoto文に関して説明をします。

アセンブリ言語とは?

アセンブリ言語とは、機械語の命令に1対1で対応した、低水準言語のプログラミング言語です。

機械語は0と1で表現されます。
その機械語と対応するので、人間にはわかりずらいです。

例えばC言語とアセンブリ言語を比べてみましょう。

C言語の場合

int square(int num) {
    return num * num;
}

アセンブリ言語の場合

square(int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     eax, DWORD PTR [rbp-4]
        imul    eax, eax
        pop     rbp
        ret

C言語に比べて、文字が多くわかりずらいですね。

goto文とは?

goto文とは、指定の位置に移動するための文法です。
サンプルコードを見てみましょう。

int main() {
  goto state;                              // 「state:」へ移動する
  printf("ここは実行されません");   //  実行されずスルーされる
state:
  printf("ここが実行されます");      // ここが実行される
}


goto文を使うことによって、自由に自分の好きな場所へプログラムを移動させることができます。

この「自由に自分の好きな場所へ」が問題となります。

int main() {
  goto B;

  A: printf("2番目"); goto C;
  B: printf("1番目"); goto A;
  C: printf("3番目");
}

プログラムが複雑に、量が増えれば増えるほど処理を追うのが難しくなります。

複雑なプログラムは、ソフトウェア開発の生産性を悪くします。
そこで、このような問題を解決し、生産性、品質を上げるための考え方の1つとして構造化プログラミングがあります。

より詳しく歴史を知りたい人はこちらの記事が参考になります。

構造化プログラミングの目的

構造化プログラミングは、わかりやすい、理解しやすいプログラムを作成することです。

  • 品質が高い
  • 作りやすい
  • 理解しやすい
  • 保守しやすい

具体的にどんな特徴があるのか?を解説していきます。

構造化プログラミングの特徴

構造化プログラミングは下記の特徴があります。

それぞれ解説をします。

プログラムを大きな流れと小さな部品に分けて作成する。

構造化プログラミングはプログラムを大きな流れと小さな部品に分けて作成をします。

例えば、画像ののプログラムの大きな処理は下記のとおりです。

  • 暗証番号を読み込む
  • 暗証番号の審査
  • 扉を開ける
  • 終了

まずはこのように、プログラムの大きな流れを作成します。
そこから処理を別のプログラムに分けて、プログラムを分割します。

例えば、「暗証番号を読み込むプログラム」をさらに分割します。

  • 通信方法の確認
  • 入力値の確認
  • 文字の形式の確認

そうすることによって、あっちこっちに制御がいかず、階層ごとに流れが整理され、わかりやすいプログラムを作成することができます。

プログラムを3つのパターンに分ける。

構造化プログラミングは下記パターンを大きな特徴として持ちます。

  • 順次
  • 選択
  • 繰返し

順接

プログラムを上から順番に実行します。

選択

条件を分岐して処理を実行します。

if文やswitch文が例としてあります。

繰返し構造

条件が満たされるまで処理を繰り返します。

for文やwhile文が例としてあります。

実行の制御をこの3つに限定することによって、goto文を削除し、わかりやすいプログラムを目指します。

構造化プログラミングの限界

プログラムは、下記で成り立ちます。

プログラム = 制御 + データ


構造化プログラミングは、制御の流れを構造化しましたが、データの構造化は出来ていません。
この問題点を解決する考え方がオブジェクト指向プログラミングです。

オブジェクト指向プログラミングの登場

オブジェクト指向プログラミングとは、データと手続きをひとつにまとめた概念です。

プログラムを部品として扱うことによって、制御とデータを構造化します。

その結果、よりわかりやすいプログラムを書くことを手助けします。

オブジェクト指向に関して深く学びたい人はこれらがおすすめです。

オブジェクト指向でなぜつくるのか?

オブジェクト指向を学ぶのに鉄板の1冊です。
プログラミング言語の歴史から構造化言語との違い、再利用化、デザインパターンまでかなり詳細に学ぶことができます。

先輩エンジニアにおすすめされたので何回も繰り返し読んでます。

Recursion

Recursionは、オブジェクト指向をコードを書きながらアウトプットすることができます。
オブジェクト指向だけではなく、コンピューターサイエンス(CS)を全般的に学べるサービスなのでとてもおすすめです。

オブジェクト指向をがっつり学べる唯一のWebサービスです。

他にも下記のような学習サイトがあるので、是非参考にしてください。

構造化プログラミングは複雑なプログラムをわかりやすくする

構造化プログラミングは複雑なプログラムをわかりやすくするためのプログラム手法の1つでした。

本サイトでは、若手エンジニアのキャリアがより良くなるための情報発信をしています。
転職活動のロードマップや転職エージェントを有効活用して転職を有利に進める方法を発信しています。

▼転職ロードマップ

▼転職エージェントの有効活用法



エンジニア転職のロードマップはこちらから

エンジニア転職に関してまとめました。

tenshoku_cta

詳細はこちらから