pulpul 日本の試験

基本情報技術者 概念書 · アルゴリズムとプログラミング

プログラム言語の基礎

要点と定義

プログラム言語は、機械語、アセンブラ言語、高水準言語へと発展してきました。言語の分類には、処理手順を記述する手続型、データと操作をクラスやオブジェクトとして組み立てるオブジェクト指向、短い記述で処理を実行しやすいスクリプト言語などがあります。分類は言語の特徴を捉える観点であり、各言語を必ず一つの性質だけで説明できるとは限りません。

手続型言語のコンパイラは、一般にソースコードを字句解析、構文解析、意味解析などの順で処理します。字句解析は文字列を識別子、演算子、数値などのトークンに分ける段階です。構文解析はトークンの並びが文法に合うかを調べ、意味解析は名前や型などの使い方を調べます。最初の段階を尋ねられたら、字句解析です。

オブジェクト指向言語では、クラスがデータや処理の共通部分を表し、オブジェクトがそのクラスに基づく実体になります。Javaのインタフェースは実装クラスに共通の操作を求め、複数の異なるクラスを共通の型で扱う助けになります。クラスが別のクラスを拡張する関係と、インタフェースを実装する関係は異なります。Javaには、不要になったオブジェクトのメモリ領域を自動回収するガーベジコレクションがありますが、整数や文字などの基本データ型が常にクラスになるわけではありません。

Javaの抽象クラスは、共通の状態や処理をまとめ、抽象メソッドでサブクラスに具体化を任せられます。抽象メソッドを宣言するクラスには抽象クラスを示す指定が必要です。クラスの継承には extends、インタフェースの実装には implements を使います。サブクラスから上位クラスの実装を呼ぶ super と、現在のオブジェクトのメソッドを呼ぶ this も区別します。同じメソッド内で this を使ってそのメソッドを呼ぶと、再帰呼出しになります。

クラスの役割分担は、コードの流れを読む手掛かりになります。たとえば、文字列をキー名に応じて置換する処理では、通常部分と置換指示を別々のフラグメントとして表し、共通インタフェースを通じて順に処理できます。文字ストリームを読むパーサは、読み取った文字をバッファに蓄え、区切りに応じて通常部分またはキー名のオブジェクトを作ります。最後にフラグメントのリストからテンプレートを作り、置換表を各フラグメントに渡して結果を組み立てます。これはインタフェース実装、オブジェクト生成、引数の受渡しが連携する例です。

抽象クラスを使う料金表の例では、段階の開始値と単価をペアにして保持し、共通の map 操作をサブクラスごとに具体化できます。料金計算クラスは、各段階の使用量にその段階の単価を掛けて合計します。次の段階がある間は「次の開始値 − 現在の開始値」が現在段階の幅です。たとえば開始値が0、120、300なら、0から120までの幅は120、120から300までの幅は180です。最終段階では上限がないため、使用量から現在段階の開始値を引きます。

割引を適用する例では、まず上位クラスの料金計算で割引前の料金 price を求め、その料金を基準に割引率を選びます。割引率が0.03なら、割引後の割合は 1.0 - 0.03 = 0.97 なので、price * 0.97 が割引後の金額です。電力量や基本料金だけを割引率の基準にすると、料金額に応じて率を選ぶ条件を満たしません。

共通言語基盤(CLI)は、JIS X 3016(ISO/IEC 23271)で標準化されている基盤です。対象範囲では、CLIの特徴を理解する項目として扱います。

適用条件と例

コードの解析工程を見分けるには、各段階が何を入力として何を調べるかを追います。たとえば total = 3 + 4; は、字句解析で名前、代入記号、数値、演算子、区切り記号などに分けられます。次に構文解析が並びを文法に照らし、意味解析が名前や型の使い方を確認します。トークンを作る処理と、トークンの並びを調べる処理を混同しないことが大切です。

インタフェースを使うと、異なるクラスに共通の操作を求められます。たとえば、通常部分を返すクラスとキー名を置換するクラスに同じ replace 操作を実装させれば、処理側はフラグメントを一つずつ同じ方法で扱えます。パーサでは、開始記号に出会った時点でバッファにある通常部分を通常部分クラスに渡し、終了記号に出会った時点ではバッファにあるキー名を置換クラスに渡します。読み取った記号そのものではなく、バッファに蓄えた内容が、それぞれのフラグメントのデータです。リストをテンプレートの生成に使い、置換処理には置換表を渡すことで、解析と適用の役割を分けられます。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む