公開日2021.08.11
最終更新日2022.05.10
はじめに
初めまして、かそちいきです。
突然ですが、「構造化」という言葉を聞いたことはありますか?
いかにも専門用語という雰囲気のこの言葉、聞き馴染みのない人も多いのではないでしょうか。
私がこの単語を知ったきっかけは基本情報技術者試験の学習でしたが、「面倒な内容だろうなぁ・・・」と思い中々手を付けていませんでした。。笑
という訳で今回、IT初学者の私が構造化プログラミングについて調べてみました。
実は開発を行う上でとても大事な考え方だったので、是非最後まで読んでいただけたらと思います!
構造化プログラミングとは?
手始めに、「構造化プログラミングとは」で検索したところ、以下のような説明を見つけました。
構造化プログラミングとは、コンピュータプログラムの開発や理解、修正を円滑に行えるよう、プログラムを整理された構造の組み合わせによって構成すること。
リンク:IT用語辞典 e-words
うーん。。
「部分毎のプログラムを作ってそれらを組み合わせることで、扱いやすくすること」
、、かな?というやんわりとしたイメージは得られました。
ただ、初学者の私からするとこの説明ではどうしても分かりづらい部分がありますね。。
少し詳しく調べてみましょう。
(ちなみにパラダイムには模範や見本例といった意味があるようです。)
とりあえず用語を調べてみた。
まずは先ほどの概要説明のイメージを明確にすべく、「順次(順接)、反復、分岐」について調べてみました。
▼順接
リンク:プログラミングの始め方
“この処理の次つぎはこの処理”、というように順々に処理を実行していくことを「順次処理」といいます。
▼反復
ある処理を繰り返し実行することを「反復処理」といいます。
▼分岐
ある条件によって実行する内容を変えることを「分岐処理」といいます。
“制御構造”なんて難しい書き方がされていましたが、要するにそれぞれ処理の流れを指しているようですね。
ここで一度構造化プログラミングの概要について立ち返ると、
「単純なプログラムの流れをまとめて1つの部品をつくりそれらを組み合わせることで、開発、理解、修正が円滑に行えるような整理された構造を作り上げること」
といったところでしょうか。
単語の意味が分かっただけでも少しだけイメージがはっきりとしてきましたね。
概要の意味が掴めたところで、本来の趣旨である「構造化」について詳しく掘り下げていこうと思います。
“構造化”について掘り下げてみた。
“構造化”について調べていると、何やら「分割統治法」という、基になる考え方がある事に気が付きました。
知らない単語がまた一つ増えてしまいましたが、丁寧に調べていきましょう。。
分割統治法とは、大きな問題を効率的に解く手法の一つで、問題全体を同じ構造の小さな問題に再帰的に分割していき、簡単に解けるサイズにした上で解いていく方式。
リンク:IT用語辞典 e-words
つまり、分割統治法とは、一発で解決することが難しい問題を解決できるサイズまで分割する方法のようです。
例を挙げて考えるとすれば、
痩せたい!という漠然とした”大きな問題”があった場合、
- 摂取カロリーの調整
- 消費カロリーの調整
のように2つの”小さな問題”に分割してから、
- 摂取カロリーの調整として、夜はサラダだけ食べる
- 消費カロリーの調整として、毎日走る
という風にそれぞれに対しての”小さな解決策”を考え、これらがまとまって
“大きな解決策”に至るといったところでしょうか。。
この分割統治法の例をプログラミングに落とし込むと、
「痩せる」が全体のプログラムにあたり、それを構成する単純なプログラムが
- 摂取カロリーの調整として、夜はサラダだけ食べる
- 消費カロリーの調整として、毎日走る
ということになるかと思います。
さて、ここまで構造化プログラミングの考え方について調べ、
簡単にではありますがその内容を捉える事が出来ました。
ここからは構造化によるメリットとデメリットを考えてみようと思います。
構造化プログラミングのメリット/デメリットを考えてみた。
メリット
- 1つの開発物を小さなプログラムに分割することで仕事の分担・管理が容易になる。
- プログラムの修正を行う際、問題のある部分だけ交換することで全体への影響を減らすことができる。
デメリット
構造化プログラミングをベースにしたソフトウェアは、
リンク:MONOist
大昔の職人芸的なプログラミングに比べると分かりやすいのですが、
自分が作ったプログラムであっても、3カ月たてば他人のプログラム
と同じぐらい理解するのが大変です。
これが、構造化プログラミングの大きな欠点といえます。
メリットについては調べていて想像がつきましたが、開発業務の経験が無い身としては、いまいちデメリットが思い浮かばなかったので引用させていただきました。
このデメリットを解決できる方式が、現在主流となっている「オブジェクト指向」という考え方のようです。
さいごに
今回は構造化プログラミングとは?を初学者なりに調べてみました。
考え方自体は案外理解しやすい題材でしたが、実際の開発現場における各種言語への応用などは実際に経験しないと中々想像がつきにくいなと感じました。
いつか開発に携わる日に向けて、更に理解を深めていこうと思います!
ご覧いただきありがとうございました。