令和6年度 春期 システムアーキテクト試験 午前Ⅱ 問7
この問題は2024(R6)春 システムアーキテクト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
現在のプログラム A, B に, 在庫テーブルを更新した後に更新ログを出力する機能を追加する。この機能は共通モジュールで実装し, どのプログラムからも利用できるようにする。図は, プログラムの実装案である。案1も案2も, 在庫テーブルを更新した後に更新ログが出力される。更新ログを出力する共通モジュールを呼び出す処理を, 案1のように各プログラム中に直接記述するのではなく, 案2のように呼び出し方の宣言を共通プログラムなどに記述することによって, 開発の効率を高めたり, 保守性を高めたりするプログラミング技法はどれか。

図の説明テキスト
プログラムの実装案を示す図。「〔現在〕」「〔案1〕」「〔案2〕」の3つの列で構成されている。
【現在】
・プログラムA:「在庫テーブルを更新する」処理が含まれる。
・プログラムB:「在庫テーブルを更新する」処理が含まれる。
【案1】
・プログラムA:「在庫テーブルを更新する」の後に「モジュールCを呼び出す」処理が含まれる。
・プログラムB:「在庫テーブルを更新する」の後に「モジュールCを呼び出す」処理が含まれる。
・モジュールC:「更新ログを出力する」処理が含まれる。
【案2】
・プログラムX:「宣言:在庫テーブルを更新した後にモジュールCを呼び出す」と記述されている。
・プログラムA:「在庫テーブルを更新する」処理が含まれる(直接の呼び出し記述はない)。
・プログラムB:「在庫テーブルを更新する」処理が含まれる(直接の呼び出し記述はない)。
・モジュールC:「更新ログを出力する」処理が含まれる。
解答・解説を読む
正解: 選択肢ア
本設問は、ログ出力のような複数のプログラムで共通して利用される処理(横断的関心事)を効率的に組み込むためのプログラミング技法を問うものです。
アスペクト指向プログラミング(AOP) は、オブジェクト指向プログラミングなどを補完する技術で、複数のクラスやモジュールに散在する共通の処理(ログ出力、トランザクション管理、セキュリティチェックなど)を「アスペクト」として分離し、プログラムの外部から織り込む(Weaving)ことで、開発効率や保守性を高める技法です。
設問の「呼び出し方の宣言を共通プログラムなどに記述することによって」実現する案2は、まさにこのアスペクト指向プログラミングの特徴を表しています。
各選択肢の解説
- ア:アスペクト指向プログラミング
正解です。上記の通り、共通処理を抽出し、外部から織り込む手法です。 - イ:オブジェクト指向プログラミング
データ(属性)とそれを操作する手続き(メソッド)をひとまとめにした「オブジェクト」を構成単位としてプログラムを作成する技法です。 - ウ:関数型プログラミング
処理を関数の評価の連続として記述する技法で、状態の変化や副作用を極力排除する特徴があります。 - エ:構造化プログラミング
プログラムを「順次」「選択」「反復」の3つの基本制御構造のみを用いて記述し、プログラムの論理を分かりやすくする技法です。