目的
この記事では、応用情報技術者試験の出題分野であるプログラム構造・言語に関する覚書きを列挙する。
プログラム構造の種類
プログラムは、次の4つの構造に分類される。
-
再使用可能(リユーザブル)プログラム
初回起動(実行)後、メイン電源を切らずに再度起動(再実行)できるプログラムのこと。
再使用可能でないプログラムは、メイン電源を入れなおさないと起動(実行)できない。また、再使用可能プログラムのうち、複数の要求に対して一つずつしか実行しないものを逐次再使用可能プログラムという。
逐次再使用可能プログラムは、別タスクからそれぞれ呼出した場合でも、主記憶(メモリ上)に配置したまま再起動(再実行)されるので一貫した正しい結果を返す。
ただし、同時に呼出せないため、次の再入可能プログラムとはならない。 -
再入可能(リエントラント)プログラム
プログラムの起動中(実行中)に別タスクで再度起動(再実行)できるプログラムのこと。同一プログラムの多重起動が可能で、多重起動を前提とした設計になっているので、再入可能プログラムは、必ず再使用可能プログラムとなる。
-
再帰(リカーシブ)プログラム
起動中(実行中)に自分自信を呼出すことができるプログラム。
自分自信に再入できるので再帰プログラムは、必ず再入可能プログラムとなる。よって、上記の3構造の包含関係は、再使用可能プログラム \(\supset\) 再入可能プログラム \(\supset\) 再帰プログラム となる。
-
再配置可能(リロケータブル)プログラム
主記憶内(メモリ上)に配置できるプログラムのこと。
メモリアドレスをすべて相対アドレスで指定しているプログラムは、再配置可能となる。
メモリの位置を指定する必要があるOS等以外は、ほとんどの場合、再配置可能。
プログラム言語の変遷
コンピュータのインターフェースは機械語(マシン語)と呼ばれ、プロセッサが実行可能な命令データで \(0\) と \(1\) の2進数で表現されるバイナリデータのことを指す。
この機械語と人間とのインターフェースとしてプログラム言語が作られ、時代の変化(需要)に合わせて、以下アセンブリ言語からオブジェクト指向言語まで変遷してきた。
-
アセンブリ言語
機械語の命令と \(1\) 対 \(1\) で対応させることを前提とした、人間が理解しやすいよう英単語や記号で簡略化した言語。加算演算が
ADD、移動をMOVなどで表現し \(2\) 進数より理解しやすい特徴がある。ただし、機械語の命令単位でのステップとなるため、計算に使用するレジスタ領域の表現も意識して表現する必要があり、\(A\) と \(B\) の加算結果を格納する変数 \(C\) を定義する「\(C = A + B\)」という処理だけでも \(4\) ステップも必要となる。
-
高級言語(高水準言語)
人間に理解しやすいことをコンセプトにした言語で、上記変数 \(C\) の定義も「\(C = A + B\)」のみで記述できる。代表例:
COBOL、FORTRANなど。 -
構造化言語
高級言語から登場したジャンプ命令(GOTO命令)は、実装者の能力や個性に依存した表現になり保守も難しくなるため、これを非推奨とし基本3構造(順次、選択、繰返し)のみでの実装を提唱する言語のこと。代表例:
C言語、Pascalなど。 -
オブジェクト指向言語
グローバル変数が持つスコープの広さによる意図しない不具合が多いことを背景に変数やメソッドをまとめて定義するクラスが導入された言語で、オブジェクト化(部品化)を意識したプログラム設計が前提となる。また、オーバーロードやガベージコレクション(メモリの自動解放)などのコーディングが簡略化できる機能が多く登場し、今現在も日々進化している。
代表例:
Smalltalk、C++、C#、Java、オブジェクト指向COBOLなど。
プログラム言語の種類
上記の変遷を単位とした分類とは別の観点で以下の種類に分けられる。
-
手続型言語
処理手順を上から下へ1行ずつ実行する形で記述する言語。代表例:
COBOL、FORTRAN、C、C++、C#、Javaなど、ほとんどの言語が該当する。 -
関数型言語
数学的な関数定義とその呼出し定義で記述する言語で再帰処理向き。代表例:
Lispなど。 -
論理型言語
述語理論を基礎とした論理式で記述する言語。代表例:人工知能の研究開発で用いられる
Prologなど。 -
スクリプト言語
プログラムを機械語にコンパイルせず、スクリプト(台本)のように1行1行処理する簡易的な言語を指す。代表例:
JavaScript、JSP(Java Server Pages)、Perl、Ruby、PHPなど。※ 簡易的な言語として分類されているが、
PHPやRubyのように大規模開発にも広く使われている言語でもある。
また、スクリプト言語 \(\neq\) インタプリタ言語なので混同に注意。
その他言語
上記のプログラム言語以外にシステムを動くには、以下の言語や仕組みを用いる。
-
共通言語基盤(CLI)
マイクロソフトが策定した.NET Frameworkの基幹を構成する実行コードや実行環境などについての仕様を指し、プログラム言語やコンピュータアーキテクチャに依存しない環境を定義したもの。高級言語で書いたプログラムを別のプラットフォームでも動かすことができる。
-
Ajax(Asynchronous JavaScript + XML)
Webブラウザ上での非同期通信により、通信結果(レスポンス)をページ全体でなく部分的に書換える手法のこと。新技術ではなく、
JavaScriptの通信技術を用いて、非同期通信が容易に実現できるよう部品化したもの。 -
データ定義言語(DDL:Data Definition Language)
データを定義するための言語や命令形態のことで代表的ものでは、SQLのSQL-DDL、XMLのDTD(Document Type Definition)などがある。 -
マークアップ言語:HTML(HyperText Markup Language)
Webページ作成(文書を保管・閲覧する)のために開発された言語でテキスト、音声、画像、動画、データファイルなどの表示やリンクを埋込むことができる。現在はHTML5という規格となり、WebSocketが使用可能になったのをはじめ、要素がより簡潔に表現され、表現の幅も広くなった。
-
マークアップ言語:XML(Extensible HTML)
HTMLの前身となったマークアップ言語SGMLをベースとしてデータを保管するために作られた言語で、文法には厳密なルールがある。また、汎用的に使えることを目的としているため、拡張可能で文章構造の定義は、上記DTD(Document Type Definition)で行う。
XML文章の正当性については、以下二つの水準があり、状況に応じてどちらか一方を許可し、XMLを作成する。
-
整形式XML文章(well-formed XML Document)
XMLデータの記述文法に従ったXML文章であること。
DTDの定義規格に適合なくても良く、DTDの定義自体がなくても良い。 -
妥当なXML文章(valid XML Document)
XMLデータの記述文法に従ったXML文章であり、DTDの定義規格に適合したXML文章であること。
-
-
マークアップ言語:XHTML(Extensible HTML)
HTMLをXMLの文法で定義し直したもので、より厳密なルールとなりHTMLのような曖昧な表現がなくなっている。 -
マークアップ言語:CSS(Cascading Style Sheet)
文章やタグなどの要素をどう見せるかそのスタイルを定義するために作られた言語でHTMLやXHTMLで使用される。また、Webページでは、要素の構造と体裁は、分離する理念(方針)があるため、構造はHTMLに、体裁はCSSに記述する。
-
JSON(JavaScript Object Notation)
JavaScriptのオブジェクト記法を用いた軽量のデータ交換フォーマットのこと。 -
YAML(YAML Ain't Markup Language)
構造化データ(検索エンジンが探しやすいようタグ付けしたHTML)等を表現する形式のこと。名前の由来は「YAMLはマークアップ言語でない」からきているが軽量のマークアップ言語としても多く利用されている。
類似の規格として、JSONがある。
参考文献
- 瀬戸 美月(\(2020\))『徹底攻略 応用情報技術者教科書』株式会社インプレス