SAシステムアーキテクト試験 午前Ⅱ

令和6年度春期 システムアーキテクト 午前Ⅱ 問7

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

現在のプログラムA,Bに,在庫テーブルを更新した後に更新ログを出力する機能を追加する。この機能は共通モジュールで実装し,どのプログラムからも利用できるようにする。図は,プログラムの実装案である。案1も案2も,在庫テーブルを更新した後に更新ログが出力される。更新ログを出力する共通モジュールを呼び出す処理を,案1のように各プログラム中に直接記述するのではなく,案2のように呼び出し方の宣言を共通プログラムなどに記述することによって,開発の効率を高めたり,保守性を高めたりするプログラミング技法はどれか。
プログラムの実装案を示す図。〔現在〕〔案1〕〔案2〕の3案を横並びで示す。〔現在〕はプログラムAとプログラムBがそれぞれ「在庫テーブルを更新する」だけを持つ。〔案1〕は各プログラムA・Bが「在庫テーブルを更新する」に続けて「モジュールCを呼び出す」を直接記述し,モジュールCが「更新ログを出力する」。〔案2〕はプログラムXに「宣言:在庫テーブルを更新した後にモジュールCを呼び出す」と記述され,プログラムA・Bは「在庫テーブルを更新する」だけを持ち,モジュールCが「更新ログを出力する」。
プログラムの実装案を示す図。〔現在〕〔案1〕〔案2〕の3案を横並びで示す。〔現在〕はプログラムAとプログラムBがそれぞれ「在庫テーブルを更新する」だけを持つ。〔案1〕は各プログラムA・Bが「在庫テーブルを更新する」に続けて「モジュールCを呼び出す」を直接記述し,モジュールCが「更新ログを出力する」。〔案2〕はプログラムXに「宣言:在庫テーブルを更新した後にモジュールCを呼び出す」と記述され,プログラムA・Bは「在庫テーブルを更新する」だけを持ち,モジュールCが「更新ログを出力する」。

選択肢

  1. ア
    アスペクト指向プログラミング
  2. イ
    オブジェクト指向プログラミング
  3. ウ
    関数型プログラミング
  4. エ
    構造化プログラミング
解き方のヒントを見る

技法の分離目的を見極める視点

プログラミング技法を区別するときは、名称の印象ではなく、その技法が何を整理するために考えられたのかという目的に注目すると判断しやすくなります。一つの観点に絞り、その目的と問われている内容が整合するかを確かめましょう。

この問題で問われていること

問われているのは、処理を切り離すという共通の発想の中で、技法ごとに『何を整理の対象として分けようとしているか』の違いを見分けられるかどうかです。似た言葉に惑わされず、目的の違いに着目してください。

視点

プログラムの一部を別の場所にまとめる技法は数多くあります。どれも『分ける』点では似て見えます。区別の手がかりにしやすいのは、その技法がどんな困りごとを減らすために考え出されたかという目的です。用語の響きや見た目の共通点ではなく、目的と問われている状況が合っているかを軸に考えると、判断がぶれにくくなります。

確認ポイント

  • それぞれの技法が、本来どのような課題を解決するために生まれたのかを思い出す
  • 問題で述べられている『切り離す対象』と、その技法の目的が一致しているかを確認する
  • 名前や説明が似ている用語どうしでも、目的の違いで区別できているかを見直す
正解と解説を見る

正解

ア

解説

案2では、在庫テーブル更新後にログを出力する処理の呼出し方を、各プログラムへ直接書かず、共通プログラム側の宣言によって適用している。このように、複数の処理にまたがる機能を分離して組み込む技法が該当する。

理由

案2は、在庫テーブル更新後のログ出力という共通処理を、プログラムAとBそれぞれに直接記述せず、呼出し方の宣言によって組み込んでいる。これにより、共通処理の変更時に各プログラムを個別修正する負担を減らせる。

比較

この問題のポイントは、処理を部品として再利用することだけではなく、複数の処理に横断して適用される機能を本体から分離して管理する点にある。案1より案2の方が、開発効率や保守性を高めやすい構成です。

選択肢ア(正解)

これは正解だよ。アスペクト指向プログラミングは、ログ出力など複数の処理に共通して関係する機能を、各プログラムの本体から分離して記述し、必要な場所へ横断的に適用する考え方である。図の案2の構成に一致する。

選択肢イ

これは不正解だよ。オブジェクト指向プログラミングは、データとそれを扱う処理をオブジェクトとしてまとめ、再利用や拡張を行いやすくする考え方である。この設問で示される、共通機能の呼出し方を宣言して横断的に適用する特徴そのものを表していない。

選択肢ウ

これは不正解だよ。関数型プログラミングは、計算を関数の組合せとして扱い、状態変更や副作用を抑えることを重視する考え方である。共通ログ処理を各プログラムから分離し、宣言によって適用する設問の仕組みを直接説明する用語ではない。

選択肢エ

これは不正解だよ。構造化プログラミングは、順次・選択・反復などの基本構造を用いて、処理の流れを分かりやすく組み立てる考え方である。共通するログ出力機能を処理本体から分離し、横断的に組み込む技法とは異なる。

学習のポイント

横断的な共通処理を分離して適用する技法の特徴を理解する。

出典:独立行政法人 情報処理推進機構(IPA)令和6年度春期 システムアーキテクト試験 午前Ⅱ 問7(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針