SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

応用情報技術 - 基礎:7/21 プログラム構造と言語(制御構造・言語分類・記述言語)

概要

応用情報技術者試験で出題されるプログラム構造・言語のうち、構造化プログラミング、言語の変遷、言語分類、マークアップ言語などを整理する。

プログラム言語は、処理手順を記述するだけでなく、データ構造、抽象化、実行環境、文書構造の表現にも関係する。
言語ごとの特徴を、用途と実行方式の違いから押さえると整理しやすい。

この記事で理解できること

  • 順次、選択、繰返しの基本構造。
  • 手続き型、オブジェクト指向、関数型などの考え方。
  • コンパイラ方式とインタプリタ方式の違い。
  • 低水準言語と高水準言語の違い。
  • XML、HTML、JSON など記述言語の位置付け。

試験で問われやすい観点

分野 問われやすい内容
制御構造 基本3構造と構造化プログラミング。
言語分類 手続き型、オブジェクト指向、関数型、スクリプト言語の特徴。
実行方式 コンパイラとインタプリタの違い。
記述言語 XML、HTML、JSON などの用途。
世代分類 機械語、アセンブリ言語、高水準言語の違い。

混乱しやすい点

混乱しやすい点 見分け方
HTMLとプログラム言語 HTMLは文書構造を表すマークアップ言語。
コンパイラとインタプリタ 事前に機械語へ変換するか、実行時に逐次解釈するかで見分ける。
手続き型とオブジェクト指向 処理手順中心か、データと操作をまとめる設計かで異なる。
XMLとJSON どちらもデータ表現に使えるが、記法と用途が異なる。
スクリプト言語 軽量な記述や自動化に使われることが多い。

プログラム構造の種類

プログラムは、次の4つの構造に分類される。

  • 再使用可能(リユーザブル)プログラム
    初回起動(実行)後、メイン電源を切らずに再度起動(再実行)できるプログラムのこと。
    再使用可能でないプログラムは、メイン電源を入れなおさないと起動(実行)できない。

    また、再使用可能プログラムのうち、複数の要求に対して一つずつしか実行しないものを逐次再使用可能プログラムという。

    逐次再使用可能プログラムは、別タスクからそれぞれ呼出した場合でも、主記憶(メモリ上)に配置したまま再起動(再実行)されるので一貫した正しい結果を返す。
    ただし、同時に呼出せないため、次の再入可能プログラムとはならない。

  • 再入可能(リエントラント)プログラム
    プログラムの起動中(実行中)に別タスクで再度起動(再実行)できるプログラムのこと。

    同一プログラムの多重起動が可能で、多重起動を前提とした設計になっているので、再入可能プログラムは、必ず再使用可能プログラムとなる。

  • 再帰(リカーシブ)プログラム
    起動中(実行中)に自分自身を呼出すことができるプログラム。
    自分自身に再入できるので再帰プログラムは、必ず再入可能プログラムとなる。

    よって、上記の3構造包含関係は、再使用可能プログラム \(\supset\) 再入可能プログラム \(\supset\) 再帰プログラム となる。

  • 再配置可能(リロケータブル)プログラム
    主記憶内(メモリ上)に配置できるプログラムのこと。
    メモリアドレスをすべて相対アドレスで指定しているプログラムは、再配置可能となる。
    メモリの位置を指定する必要があるOS等以外は、ほとんどの場合、再配置可能。

プログラム言語の変遷

コンピュータのインターフェースは機械語(マシン語)と呼ばれ、プロセッサが実行可能な命令データで \(0\) と \(1\) の2進数で表現されるバイナリデータのことを指す。

この機械語人間とのインターフェースとしてプログラム言語が作られ、時代の変化(需要)に合わせて、以下アセンブリ言語からオブジェクト指向言語まで変遷してきた。

  • アセンブリ言語
    機械語の命令と \(1\) 対 \(1\) で対応させることを前提とした、人間が理解しやすいよう英単語や記号で簡略化した言語。

    加算演算が ADD、移動を MOV などで表現し \(2\) 進数より理解しやすい特徴がある。

    ただし、機械語の命令単位でのステップとなるため、計算に使用するレジスタ領域の表現も意識して表現する必要があり、\(A\) と \(B\) の加算結果を格納する変数 \(C\) を定義する「\(C = A + B\)」という処理だけでも \(4\) ステップも必要となる。

  • 高級言語(高水準言語)
    人間に理解しやすいことをコンセプトにした言語で、上記変数 \(C\) の定義も「\(C = A + B\)」のみで記述できる。

    代表例:COBOLFORTRAN など。

  • 構造化言語
    高級言語から登場したジャンプ命令GOTO命令)は、実装者の能力や個性に依存した表現になり保守も難しくなるため、これを非推奨とし基本3構造(順次、選択、繰返し)のみでの実装を提唱する言語のこと。

    代表例:C言語Pascal など。

  • オブジェクト指向言語
    グローバル変数が持つスコープの広さによる意図しない不具合が多いことを背景に変数メソッドをまとめて定義するクラスが導入された言語で、オブジェクト化(部品化)を意識したプログラム設計が前提となる。

    また、オーバーロードガベージコレクション(メモリの自動解放)などのコーディングが簡略化できる機能が多く登場し、今現在も日々進化している。

    代表例:SmalltalkC++C#Javaオブジェクト指向COBOL など。

プログラム言語の種類

上記の変遷を単位とした分類とは別の観点で以下の種類に分けられる。

  • 手続型言語
    処理手順を上から下へ1行ずつ実行する形で記述する言語。

    代表例:COBOLFORTRANCC++C#Java など、ほとんどの言語が該当する。

  • 関数型言語
    数学的な関数定義その呼出し定義で記述する言語で再帰処理向き。

    代表例:Lisp など。

  • 論理型言語
    述語理論を基礎とした論理式で記述する言語。

    代表例:人工知能の研究開発で用いられる Prolog など。

  • スクリプト言語
    プログラムを機械語にコンパイルせず、スクリプト(台本)のように1行1行処理する簡易的な言語を指す。

    代表例:JavaScriptJSP(Java Server Pages)、PerlRubyPHP など。

    簡易的な言語として分類されているが、PHPRuby のように大規模開発にも広く使われている言語でもある。
    また、スクリプト言語 \(\neq\) インタプリタ言語なので混同に注意。

その他言語

上記のプログラム言語以外にシステムを動くには、以下の言語仕組みを用いる。

  • 共通言語基盤(CLI)
    マイクロソフトが策定した.NET Frameworkの基幹を構成する実行コードや実行環境などについての仕様を指し、プログラム言語やコンピュータアーキテクチャに依存しない環境を定義したもの。

    高級言語で書いたプログラムを別のプラットフォームでも動かすことができる。

  • Ajax(Asynchronous JavaScript + XML)
    Webブラウザ上での非同期通信により、通信結果(レスポンス)をページ全体でなく部分的に書換える手法のこと。

    新技術ではなく、JavaScriptの通信技術を用いて、非同期通信が容易に実現できるよう部品化したもの。

  • データ定義言語(DDL:Data Definition Language)
    データを定義するための言語や命令形態のことで代表的ものでは、SQLSQL-DDLXMLDTD(Document Type Definition)などがある。

  • マークアップ言語:HTML(HyperText Markup Language)
    Webページ作成(文書を保管・閲覧する)のために開発された言語でテキスト、音声、画像、動画、データファイルなどの表示やリンクを埋込むことができる。

    現在はHTML5という規格となり、WebSocketが使用可能になったのをはじめ、要素がより簡潔に表現され、表現の幅も広くなった。

  • マークアップ言語:XML(Extensible Markup Language)
    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 Markup Language)
    HTMLXMLの文法で定義し直したもので、より厳密なルールとなりHTMLのような曖昧な表現がなくなっている。

  • マークアップ言語:CSS(Cascading Style Sheet)
    文章やタグなどの要素をどう見せるかそのスタイルを定義するために作られた言語でHTMLXHTMLで使用される。

    また、Webページでは、要素の構造体裁は、分離する理念(方針)があるため、構造HTMLに、体裁CSSに記述する。

  • JSON(JavaScript Object Notation)
    JavaScriptのオブジェクト記法を用いた軽量のデータ交換フォーマットのこと。

  • YAML(YAML Ain't Markup Language)
    構造化データ(検索エンジンが探しやすいようタグ付けしたHTML)等を表現する形式のこと。

    名前の由来は「YAMLはマークアップ言語でない」からきているが軽量のマークアップ言語としても多く利用されている。

    類似の規格として、JSONがある。

実務とのつながり

  • 言語分類
    プロジェクトに合う言語や実行環境を選ぶ判断材料になる。

  • マークアップ言語
    Webページ、設定ファイル、データ交換形式の理解につながる。

  • 構造化プログラミング
    読みやすく保守しやすい処理を書く基本になる。

要約

  • プログラム構造は、順次、選択、繰返しを基本として整理できる。
  • プログラム言語は、実行方式や設計思想によって分類できる。
  • HTMLやXMLのような記述言語は、処理手順ではなく構造やデータを表すために使われる。

参考文献

  • 瀬戸 美月(\(2020\))『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp