IPA プログラム言語・パラダイム — 頻出論点と過去問
頻出論点
1. この分野は何か
プログラムの設計思想であるプログラミングパラダイムや、個々のプログラム言語・データ記述形式が持つ仕様上の特徴を扱う分野です。言語ごとの構文や型検査の仕組み、サブルーチン呼出し時のデータの受け渡し方、さらにはデータを交換するための記述形式の違いが問われます。名前が似た用語や、同じパラダイムに属する別の機能との取り違えを防ぐことが要点です。
2. 実際の出題のされ方
Web開発やデータ交換で使われる言語とデータ形式の基本用語を問う問題が、ITパスポートで出ています。具体的には、JavaScriptの性質を選ぶ問題や、区切り文字で表すデータ形式とタグで構造を書くデータ形式の名前を組み合わせる問題です。
応用情報技術者の午前と高度試験の午前Iでは、個別のプログラム言語が持つ文法や型検査の特徴、データ記述仕様の定義が問われます。ブロックの範囲を字下げで示す言語、Webのスクリプト言語のうち静的型付けができるもの、JavaScriptの表記法を基にしたデータ記述の仕様を、名前で選ぶ問題が出題されています。
プログラミングパラダイムの概念とサブルーチンの引数受渡し方式を掘り下げる問題は、システムアーキテクトの午前IIで出ています。オブジェクト指向におけるメソッドの置き換えの呼び名、純粋関数型言語の参照透過性の説明、論理型プログラミングで命題の証明を行う基本機能、共通処理を宣言で組み込む方式を選ぶ問題が出題されました。引数の渡し方では、呼び出し元の変数が変わらないことが保証される方式を選ぶ問題があります。また、C言語のプログラム全体で使用するスタックフレームのサイズを検証するのに、各関数のサイズのほかに何の情報が要るかが、エンベデッドシステムスペシャリストの午前IIで問われました。
3. 学習のポイント
複数のプログラミングパラダイムについて、それぞれの目的と核となる仕組みを対比して押さえます。
- オブジェクト指向プログラミング: データと手続きをまとめる技法です。子クラスが親クラスから受け継いだメソッドを、名前と引数の形をそのままにして中身だけ書き直すことを「オーバーライド」と呼びます。
- 関数型プログラミング: 処理を関数の評価として記述し、状態の変化や副作用をできるだけ持たないように書きます(純粋関数型言語では持ちません)。純粋関数型言語が持つ参照透過性は、式をその値で置き換えても結果が変わらない性質です。関数の結果が引数だけで決まり、外部の状態を読み書きしないので、同じ呼出しはいつも同じ値になります。
- 論理型プログラミング: 事実と規則から命題の証明を行います。変数を含む2つの項が一致するように値を割り当てる基本機能を「ユニフィケーション」と呼びます。
- アスペクト指向プログラミング: たとえば、多くの処理の前に共通して行う権限の確認を、各処理には書かず、どこで呼び出すかの宣言だけを別に書いて組み込む考え方です。横断的な共通処理を分離することで開発効率や保守性を高めます。
次に、サブルーチン(関数)の呼出しに伴うデータの受け渡しとメモリ管理の仕組みを整理します。
- 引数の受渡し方式: 呼び出し元の変数の値をコピーして渡す「値呼出し」では、サブルーチン内で値を書き換えても呼び出し元の変数は変更されません。一方、メモリアドレスを渡す「参照呼出し」、終了時に計算結果を呼び出し元の変数に書き戻す「結果呼出し」、参照されるたびに式を評価する「名前呼出し」は、いずれも呼び出し元の変数の値が変化する可能性があります。
- スタックフレームと呼出しツリー: 関数を呼び出すと、ローカル変数やレジスタの退避領域などを含むスタックフレームがメモリ上に割り当てられ、関数が終了すると解放されます。プログラム全体での最大使用量を見積もるには、個々の関数のスタックフレームサイズだけでなく、どの関数がどの関数をどれだけの深さで呼び出すかという呼出しツリーの情報が必要です。
さらに、各言語とデータ記述形式の固有の特徴を区別できるようにします。Pythonは波括弧などの記号や予約語を使わず等しい文字数の字下げでブロックを表し、TypeScriptはJavaScriptを拡張してコンパイル時の静的型付けを可能にしています。データ記述では、タグで構造を示すXMLと、JavaScriptのオブジェクト表記法を基にしたJSONの成り立ちの違いを押さえます。
4. 間違えやすいところ
用語の名前や関連する概念との取り違えに注意が必要です。
オブジェクト指向のメソッド定義では、「オーバーライド」と「オーバーロード」を混同させる選択肢があります。同一クラス内で引数の型や個数が異なる同名メソッドを複数定義するのはオーバーロードで、引数の形を変えるかどうかが分かれ目です。また、論理型プログラミングのユニフィケーションを問う問題でも、オブジェクト指向の用語が誤答肢でした。
参照透過性の説明を選ぶ問題では、関数を値として扱える性質(第一級関数)やそれを使う高階関数の説明、遅延評価の説明などが誤答肢でした。どれも関数型言語や型に関わる性質ですが、参照透過性とは別のものです。
言語やデータ形式の特徴でも、似た名称や役割のものが誤答肢になります。JavaScriptについては、名前が似ているJavaと同じ系統の言語だとする誤答肢がありました。また、静的型付けができるスクリプト言語を問う問題では、JavaScriptの標準規格名であるECMAScriptを、型付けの異なる別の言語と取り違えないようにします。データ形式では、JSONをタグで記述するマークアップ言語とみなす誤りや、HTML・XML文書をプログラムから操作するためのAPIであるDOMとJSONを混同させる選択肢に気をつけます。
最後に、スタックフレームの最大サイズ検証では、「グローバル変数の合計サイズ」という誤答肢があります。グローバル変数はスタック領域ではなく静的データ領域に配置されるため、スタックサイズの見積りには関係しません。
プログラム言語・パラダイムの理解度チェック
プログラム言語・パラダイムの過去問一覧
- 2025(R7)春 システムアーキテクト 午前II 問9 サブルーチンとの引数の受渡し方のうち,引数として渡した変数の値が,サブルーチンの実行後に変更されないことが保証されている…
- 2024(R6)春 システムアーキテクト 午前II 問7 現在のプログラム A, B に, 在庫テーブルを更新した後に更新ログを出力する機能を追加する。この機能は共通モジュールで…
- 2024(R6)春 システムアーキテクト 午前II 問8 純粋関数型言語が持つ特性の一つである参照透過性の説明はどれか。…
- 2024(R6)春 システムアーキテクト 午前II 問9 論理型プログラミングにおいて,命題の証明を行うための基本的な機能はどれか。…
- 2024年度(R6) ITパスポート 問88 JavaScriptに関する記述として,適切なものはどれか。…
- 2023(R5)秋 応用情報技術者 午前 問7 JavaScriptのオブジェクトの表記法などを基にして規定したものであって,“名前と値との組みの集まり”と“値の順序付…
- 2023(R5)春 システムアーキテクト 午前II 問5 Java サーブレットを用いた Web アプリケーションソフトウェアの開発では,例えば,doGet や doPost な…
- 2022(R4)秋 エンベデッドシステムスペシャリスト 午前II 問21 プログラム言語Cで作成されたプログラム全体で使用するスタックフレームのサイズが,確保したサイズ内に収まっていることを検証…
- 2022(R4)春 応用情報技術者 午前 問7 プログラム言語のうち,ブロックの範囲を指定する方法として特定の記号や予約語を用いず,等しい文字数の字下げを用いるという特…
- 2022(R4)春 高度試験共通 午前I 問3 プログラム言語のうち,ブロックの範囲を指定する方法として特定の記号や予約語を用いず,等しい文字数の字下げを用いるという特…
- 2022年度(R4) ITパスポート 問88 IoTデバイスで収集した情報をIoTサーバに送信するときに利用されるデータ形式に関する次の記述中のa, bに入れる字句の…
- 2021(R3)秋 応用情報技術者 午前 問7 静的型付けを行うプログラム言語では,コンパイル時に変数名の誤り,誤った値の代入などが発見できる。Webプログラミングで用…
- 2021(R3)春 システムアーキテクト 午前II 問8 サブルーチンへの引数の受渡し方のうち,引数として渡した変数の値が,サブルーチンの実行後に変更されないことが保証されている…
- 2019(R1)秋 システムアーキテクト 午前II 問4 Javaサーブレットを用いたWebアプリケーションソフトウェアの開発では,例えば,doGetやdoPostなどのメソッド…
- 2019(R1)秋 システムアーキテクト 午前II 問5 あるプログラム言語によるプログラミングの解説書の中に次の記述がある。この記述中の“良いプログラム”がもっている特性はどれ…