プログラム言語の分類と実行
要点と定義
プログラム言語は、人が記述した処理をコンピュータで実行できる形にするための言語です。機械語、アセンブラ言語、高水準言語へと発展し、用途や記述の考え方によって手続型、オブジェクト指向、スクリプトなどに分類されます。分類は言語の特徴を理解する手掛かりであり、各言語の機能が必ず一つの分類だけに限られるという意味ではありません。シラバスの用語例には、手続型のCやCOBOL、オブジェクト指向のJavaやC++、スクリプト言語のPythonやRubyなどがあります。
プログラムの実行方法の一つであるインタプリタは、原始プログラムを実行時に解釈しながら動かします。原始プログラムを目的プログラムに翻訳するコンパイラとは役割が異なります。実行可能なプログラムを主記憶にロードするローダとも区別します。過去の午前問題の定義は、インタプリタをこのように識別する基礎知識として使えます。
オブジェクト指向言語では、オブジェクトの型や振る舞いをクラスやインタフェースで表せます。例えば、式を表す共通のインタフェースに評価メソッドを定め、定数や加算を表すクラスがそれを実装すれば、異なる種類の式を共通の型で扱えます。評価は式が表す計算を行い値を返す操作で、文字列表現を返す操作とは別です。過去の午後問題にあるAPI利用と式の構築は、この型の使い分けや実装の基礎を確認する材料です。
クラスのコンストラクタは、インスタンスを作るときに必要な値を受け取ります。二項演算の式なら左辺と右辺の式を順に受け取り、その参照を保持して評価時に利用できます。加算式に定数2と5を渡すと、評価値は2+5=7です。インスタンスを文字列と連結するときは、そのクラスの文字列表現が利用されるため、評価値7を得るには明示的に評価操作を呼び出します。
アクセス修飾子は、クラスやメンバーをどこから利用できるかを定めます。Javaのprotectedは、同じパッケージ内からのアクセスに加えて、別パッケージでも下位クラスからのアクセスを可能にします。ライブラリが抽象クラスを提供し、利用側が別パッケージで下位クラスを実装する場合、その実装に必要なコンストラクタやメソッドをprotectedにする設計が考えられます。protectedは、どこからでも使えるpublicと同じ範囲ではありません。
二項演算を表すクラスの文字列表現は、左右の式の文字列表現と演算子を組み合わせて作れます。例えば、2と5の加算を表す式をさらに減算式の左辺に置くと、左辺は評価値だけでなく「(2 + 5)」のような式の形を保てます。内側と外側の括弧を順に確認すれば、入れ子になった式も読み違えにくくなります。
オブジェクトの同一性と等価性も区別します。==は参照型では同じオブジェクトを指すかを調べ、equalsはオブジェクトが等価かを調べるためのメソッドです。クラスが値に基づくequalsを定義していない場合、値が同じ別々のインスタンスでも等価とは判定されないことがあります。値を比べたいのか、同じインスタンスかを比べたいのかを先に決めます。
文字ストリームを解析する処理では、読み取った文字を状態に応じて通常の文字として扱うか、区切りとして扱うかを決めます。例えば、エスケープ記号の後の一文字を通常文字として扱う仕様なら、記号そのものではなく次の一文字を読み取ってバッファに加えます。処理後に分岐を抜けることで、その文字が区切り記号としても処理されるのを防ぎます。
適用条件と例
「ソースを実行時に解釈するのか、先に目的プログラムへ翻訳するのか」を問われたら、実行のタイミングと処理内容で判別します。インタプリタは実行しながら解釈し、コンパイラは翻訳を行います。設問の説明が「解釈しながら実行」に当たる場合、インタプリタを選びます。翻訳やロードの説明があれば、それぞれの役割と混同しないようにします。
式を組み立てる例では、各式を共通の型Expressionとして受け渡し、評価と表示を分けて考えます。定数2と5を左辺、右辺の順に加算式へ渡すと、evaluateに相当する操作は7を返し、toStringに相当する操作は「(2 + 5)」のような式の表記を返します。入れ子の式では、内側の表記を先に求めてから外側の演算子で囲みます。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む