構造化プログラミング:プログラムの明瞭性と保守性を高める手法
構造化
プログラミングは、コンピュータプログラムの処理手順を分かりやすく、シンプルにし、読みやすくすることを目的とした
プログラミング手法です。一般的には、順次処理、条件分岐、繰り返し処理という3つの基本的な制御構造を用いてプログラムの流れを記述します。これらの制御構造は、プログラムの論理構造を明確にし、複雑なプログラムを理解しやすくします。また、プログラムを複数の小さな
モジュールに分割し、階層的に組み合わせることで、プログラム全体の構造を整理することも構造化
プログラミングの特徴です。
構造化
プログラミングの普及に大きく貢献したのは、
エドガー・ダイクストラによる1968年の論文「Go To Statement Considered Harmful」です。この論文では、goto文の乱用がプログラムの複雑さを増し、理解や保守を困難にすると指摘し、制御構造を用いた
プログラミングの重要性を訴えました。しかし、現在「構造化
プログラミング」として広く知られている概念は、ダイクストラが1969年のNATOソフトウェア工学会議で発表した論文「Structured Programming」の内容とは異なる解釈に基づいています。この論文では、プログラムの正当性検証のための設計技法が主に取り上げられており、トップダウン設計や段階的詳細化といった考え方が提唱されました。
制御構造
構造化
プログラミングの中核をなすのが、順次、選択、反復という3つの制御構造です。
順次処理 (Sequence): プログラムは上から下に、順番に実行されます。
選択処理 (Selection): 条件式に基づいて、異なる処理を実行します。`if`文などが該当します。
*
反復処理 (Repetition): 条件式が満たされている間、または指定された回数、処理を繰り返します。`while`文や`for`文などが該当します。
これらの制御構造を用いることで、goto文のような無条件ジャンプを避け、プログラムの流れを明確に記述できます。
構造化設計
構造化設計は、プログラム設計の上流工程における手法で、プログラム全体を
モジュールに分割し、階層的に構成するアプローチです。
モジュールは、特定の機能を持つ独立したプログラム単位であり、それぞれの
モジュールは明確なインターフェースを介して連携します。構造化設計では、
モジュールの凝集度(
モジュール内部の要素間の関連性の強さ)と結合度(
モジュール間の関連性の強さ)を考慮し、プログラムの構造を最適化します。
構造化
プログラミングの歴史は、1960年代のソフトウェア危機にまで遡ります。ソフトウェア危機とは、ソフトウェアの規模と複雑さが増大し、開発が困難になり、品質の低下やコスト増加が問題となった状況です。この危機を解決する一つのアプローチとして、構造化
プログラミングが提唱されました。
構造化
プログラミングの発展は、大きく3つの段階に分けられます。
1.
第一幕 (1960年代): ALGOL60などの言語が構造化文を提供し、ベームとヤコピーニが順次・選択・反復の組み合わせで任意のアルゴリズムが表現できることを証明しました。
2.
第二幕 (1968年以降): ダイクストラの「Go To Statement Considered Harmful」がgoto文批判を巻き起こし、構造化
プログラミングへの関心が一気に高まりました。ダイクストラの「Structured Programming」論文では、プログラムの正当性検証が重要視されました。
3.
第三幕 (1970年代以降): IBM社のハーラン・ミルズらが、制御構造を用いた構造化
プログラミングを積極的に推進し、多くの開発現場に普及しました。
ダイクストラの構造化
プログラミングは、プログラムの正当性検証を重視したアプローチです。トップダウン設計、段階的詳細化、抽象化、
モジュール化などの手法を用いて、プログラムの正しさを証明しやすい構造を目指しました。彼の提唱した考え方は、後の
オブジェクト指向[[プログラミング]]にも大きな影響を与えました。
goto文論争
ダイクストラの「Go To Statement Considered Harmful」は、goto文の使用に対する激しい議論を引き起こしました。goto文はプログラムの流れを複雑にし、理解を困難にするという批判に対し、goto文は適切な状況では有用であるという反論もありました。この論争は、構造化
プログラミングの普及に貢献しましたが、同時にgoto文の是非をめぐる長年の議論を引き起こしました。
まとめ
構造化
プログラミングは、プログラムの可読性、保守性、信頼性を向上させるための重要な
プログラミング手法です。その基本は、順次、選択、反復の制御構造を用いたプログラムの記述と、プログラムの
モジュール化にあります。ダイクストラらの貢献は、現代のソフトウェア開発に大きな影響を与え続けており、今日の
プログラミング実践の基礎となっています。