令和6年度 秋期 応用情報技術者試験 午後問題 問8 データ連携ハブのオブジェクト指向設計

テクノロジシステム開発技術

この問題は2024(R6)秋 応用情報技術者 午後に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

データ連携ハブのソフトウェア設計を題材にしたオブジェクト指向の問題です。クラス図の空欄を埋めるだけでなく、フォーマット変換や文字コード変換といった機能追加の際に、どのクラスを親として派生させ、どのクラスへメソッドを追加すべきかという設計判断まで問われます。この記事では、共通部分と可変部分の分離という原則を軸に、クラス図の読み方と各設問の根拠を順に確認します。

この記事で押さえる論点

  • クラス図から継承・委譲の構造を読み取り空欄のクラス名を特定する
  • 継承・多相性・委譲を用いて共通処理と可変処理を分離する設計を説明できる
  • 機能追加時にどのクラスへ手を入れるべきかを責務から判断する

問題本文

問8 オブジェクト指向設計に関する次の記述を読んで、設問に答えよ。

M社は、企業内の複数の情報システムを接続するデータ連携ハブを製造する会社である。M社のデータ連携ハブは、企業の基幹システムを構成するERP (Enterprise Resource Planning) ソリューションやクラウドサービスとデータ連携するための部品であるコネクタの種類が多いことが人気を呼び、売上を増大させている。

M社には三つの事業所に合計約100名が在籍しており、開発部がソフトウェアの開発を行っている。M社のデータ連携ハブに含まれるコネクタを実現するソフトウェアは、ERPソリューションやクラウドサービスの仕様変更に合わせて頻繁に修正する必要がある。また、同じプログラムコードが複数箇所にコピーされているなどの原因によって保守性が低いという課題があり、コネクタの開発コストが増大している。そこで、M社では、コネクタの開発コストを低減させるために、コネクタを構成するソフトウェアを再設計することになり、開発部のN君が担当することになった。

〔コネクタの利用方法〕

N君は、M社のデータ連携ハブのコネクタの利用方法を整理した。図1は、データ連携ハブを用いてデータ送信元システムからデータ送信先システムへ組織データを送信する例である。

図1 データ連携ハブを用いた組織データの送信の例
図の説明テキスト

データ連携ハブを用いた組織データの送信の例を示すシステム構成図。

  • 左側に「データ送信元システム」として「人事システム」の枠がある。
  • 右側に「データ送信先システム」として上から順に「販売システム」「製造システム」「会計システム」の枠がある。
  • 中央に「データ連携ハブ」の縦長の枠がある。
  • 人事システムからデータ連携ハブへの矢印があり、経路に「FTPS, CSV」と記載されている。データ連携ハブ側の矢印の先端付近に「■」記号(コネクタ)がある。
  • データ連携ハブから販売システムへの矢印があり、経路に「FTPS, CSV」と記載されている。データ連携ハブ側の矢印の始点付近に「■」記号がある。
  • データ連携ハブから製造システムへの矢印があり、経路に「HTTPS, XML」と記載されている。データ連携ハブ側の矢印の始点付近に「■」記号がある。
  • データ連携ハブから会計システムへの矢印があり、経路に「HTTPS, XML」と記載されている。データ連携ハブ側の矢印の始点付近に「■」記号がある。
  • 左下に凡例として「■ コネクタ」と記載されている。

データ連携ハブがFTPSを用いて人事システムからデータフォーマットがCSV形式のデータを取得し、データフォーマットや通信プロトコルを変換して別の三つのシステムに送信している。このときデータ連携ハブのコネクタの役割は、通信プロトコルやデータフォーマットの変換である。

〔オブジェクト指向に関する調査〕

N君は,コネクタを再設計するために,オブジェクト指向について調査した。オブジェクト指向では,ソフトウェアを部品化し,部品の組合せによって目的のソフトウェアを作る。この方法では,データとそのデータに対する処理を一つのオブジェクトにまとめるaという設計指針のもと,外部公開するメソッドを定義してオブジェクト内のデータや処理の変更がオブジェクト外に与える影響を小さくする。また,あるオブジェクトの特性を他のオブジェクトに引き継ぐbが可能であり,開発コストを低減できる。また,同名のメソッド呼出しに対してオブジェクトの種類によって異なる処理を実行するcを実現することが可能である。

〔コネクタのクラス設計〕

N君は,コネクタの利用方法を考慮し,オブジェクト指向を用いてコネクタに関係するクラスを設計した。N君が設計したクラス図(抜粋)を図2に示す。

図2 N君が設計したクラス図(抜粋)
図の説明テキスト

N君が設計したクラス図(抜粋)の図。
各クラスの属性とメソッド、およびクラス間の関係(継承、関連)が示されている。

  • クラス「連携データ」

    • 属性: #論理削除 : boolean
    • メソッド: ※省略
    • サブクラスとして「組織データ」を持つ(継承)
  • クラス「組織データ」

    • 属性・メソッド: ※省略
  • クラス「コネクタ」(<>)

    • 属性: +data : 連携データ, +form : フォーマット, +pro : プロトコル
    • メソッド: +データ取得(), +データ送信(data : 連携データ)
    • サブクラスとして「組織コネクタ」を持つ(継承)
    • 「連携データ」「フォーマット」「プロトコル」へ関連付け(関連)
  • クラス「組織コネクタ」

    • 属性: ※省略
    • メソッド: + d, +データ送信(data : 組織データ), <> +組織コネクタ(form : フォーマット, pro : プロトコル) : 組織コネクタ
  • クラス「フォーマット」

    • 属性: ※省略
    • メソッド: +シリアライズ(data : 連携データ), +デシリアライズ() : 連携データ
    • サブクラスとして「CSV」「XML」を持つ(継承)
  • クラス「CSV」

    • 属性: ※省略
    • メソッド: +シリアライズ(data : 連携データ), +デシリアライズ() : 連携データ
  • クラス「XML」

    • 属性: ※省略
    • メソッド: +シリアライズ(data : 連携データ), +デシリアライズ() : 連携データ
  • クラス「プロトコル」

    • 属性: ※省略
    • メソッド: +取得(form : フォーマット) : 連携データ, +送信(data : 連携データ, form : フォーマット)
    • サブクラスとして「FTPS」「HTTPS」を持つ(継承)
  • クラス「FTPS」

    • 属性: ※省略
    • メソッド: +取得(form : フォーマット) : 連携データ, +送信(data : 連携データ, form : フォーマット)
  • クラス「HTTPS」

    • 属性: ※省略
    • メソッド: +取得(form : フォーマット) : 連携データ, +送信(data : 連携データ, form : フォーマット)
  • 左下に凡例があり、可視性(-, +, #)や継承(白抜き三角矢印)、関連(実線)などの表記ルールを説明している。

まず,送受信するデータのデータ項目を定義する連携データクラスとそれを親クラスとする組織データクラスを設計し,各クラスに必要な属性とメソッドを設計した。連携データクラスの論理削除属性は,組織データクラスのメソッドからアクセスe
フォーマットクラス,CSVクラス,XMLクラスは,送信するデータをCSV形式やXML形式に変換(シリアライズ)したり,受信したCSV形式やXML形式のデータを解析して,連携データクラスのインスタンスを生成(デシリアライズ)したりするクラスである。また,XMLクラスのシリアライズのように,親クラスと同じ名称・引数・戻り値のメソッドを定義することをfという。
プロトコルクラス,FTPSクラス,HTTPSクラスは,データ送受信のためのクラスである。コネクタクラス,組織コネクタクラスは,コネクタを実現するためのクラスであり,送受信するデータのデータ項目に応じて処理を行うものである。

図2で設計されたクラスを用いて,図1に記載のデータ連携ハブから製造システム向けにデータを送信する組織コネクタクラスのインスタンスを作成する場合,gクラス及びhクラスから生成したインスタンスを引数に,組織コネクタクラスのインスタンスを作成する。hクラスの送信メソッドの中ではフォーマットクラスのシリアライズメソッドが呼び出されるが,実際にはgクラスのシリアライズメソッドが呼び出される。

〔コネクタの修正〕

N君は,今後予想されるコネクタの修正時に,図2で設計したクラスに対して少ない修正で対応できるか机上で検証した。
図1に記載の人事システムに格納されている研修受講記録データを新たに他システムへ送信する必要がある場合には,新しいクラスを二つ作成すればよい。また,CSVファイルやXMLファイルの中の講座名などの文字列の文字コードを変換する共通機能が必要となった場合には,図2のある一つのクラスに文字コード変換のメソッドを追加すればよい

その後,N君は,コネクタの再設計に関する必要な作業を完了した。

設問と解答・解説

設問1

本文中の ac に入れる適切な字句を答えよ。

(1)

空欄a に入れる適切な字句を答えよ。

模範解答

カプセル化

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「カプセル化」と正確に記述している。
  • 1: 「カプセル化」を意図していると読み取れるが、軽微な誤字・脱字がある。
  • 0: 無解答、または全く異なる字句を記述している。

解説

オブジェクト指向における基本概念に関する設問です。
データとそれを操作する手続き(メソッド)を一つにまとめ、外部から直接データを変更できないようにして内部の構造を隠蔽する仕組みを カプセル化 と呼びます。

  • オブジェクト指向の三大要素の一つであり、システムの保守性や安全性を高めるために不可欠な概念です。
  • クラスを用いてデータとメソッドを一つにまとめることが、カプセル化を実現する手段となります。

高得点のポイント

  • 本文の文脈に合わせ、カプセル化という用語を正確に記述できていること。

(2)

空欄b に入れる適切な字句を答えよ。

模範解答

継承

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「継承」と正確に記述している。
  • 1: 「継承」を意図していると読み取れるが、軽微な誤字や別名(インヘリタンス等)を記述している。
  • 0: 無解答、または全く異なる字句を記述している。

解説

オブジェクト指向における基本概念に関する設問です。
あるクラス(親クラス・スーパークラス)で定義されたデータ構造やメソッドを、別のクラス(子クラス・サブクラス)が引き継いで利用する仕組みを 継承 と呼びます。

  • 継承を利用することで、共通の機能を再利用し、ソフトウェア開発の生産性を向上させることができます。
  • 既存のプログラムに最小限の変更を加えるだけで新しい機能を追加しやすくなります。

高得点のポイント

  • 本文の文脈に合わせ、継承という用語を正確に記述できていること。

(3)

空欄c に入れる適切な字句を答えよ。

模範解答

多相性

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「多相性」または「ポリモーフィズム」と正確に記述している。
  • 1: 「多相性」を意図していると読み取れるが、軽微な誤字・脱字がある。
  • 0: 無解答、または全く異なる字句を記述している。

解説

オブジェクト指向における基本概念に関する設問です。
同一のメッセージ(メソッド呼び出し)を送っても、受け取るオブジェクトのクラスによって異なる動作・振る舞いをする特性を 多相性(ポリモーフィズム)と呼びます。

  • オブジェクト指向における非常に重要な概念であり、正答率が低かったため、確実に理解しておく必要があります。
  • 多相性を活用することで、呼び出し側のコードを変更せずに新しいクラス(振る舞い)を追加できるようになり、柔軟なソフトウェア設計が可能になります。

高得点のポイント

  • 本文の文脈に合わせ、多相性という用語を正確に記述できていること。

設問1cは,正答率が低かった。多相性は,オブジェクト指向における重要な概念であり,是非理解しておいてほしい。

設問2

〔コネクタのクラス設計〕について答えよ。

(1)

図2中の d に入れる適切な字句を答えよ。

模範解答

データ取得()

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「データ取得()」と図中の字句通りに正確に記述している(括弧の有無は問わない)。
  • 1: 「データ取得」など意図は伝わるが、図中の正確な表記と僅かに異なる。
  • 0: 無解答、または全く異なるメソッド名を記述している。

解説

図2のクラス図に基づき、適切なメソッド名を答える設問です。
データ連携ハブにおけるコネクタの役割として、外部システムからデータを取り込む処理が必要です。

  • 図2のクラス設計を参照すると、データを受け取る役割を持つメソッドとして データ取得() が定義されています。
  • クラス図の構造を正しく読み取り、製品やフレームワークを利用するために適切なメソッドを特定するスキルが求められます。

高得点のポイント

  • 図2に記載された データ取得() という字句を正確に抜き出していること。

(2)

本文中の e に入れる適切な字句を解答群の中から選び,記号で答えよ。

  1. オーバーライド
  2. オーバーロード
  3. コンストラクタ
  4. できない
  5. できる
  6. デストラクタ

模範解答

選択肢オ: できる

配点 1

解説

オブジェクト指向におけるクラスの継承とメソッドの再定義の可否に関する設問です。

  • 親クラスで定義されているメソッドと同一のシグネチャ(メソッド名、引数の型と数)を持つメソッドを、子クラスで定義し直すことは できる ため、「オ」が正解となります。
  • これによって、親クラスの共通の振る舞いを子クラス固有の振る舞いに変更し、多相性を実現することが可能になります。

各選択肢の解説

  • ア (オーバーライド): メソッドを再定義する「機能・行為」自体の名称です。文脈上、この空欄には「できる」という可否の判定が入るため不適切です。
  • イ (オーバーロード): 同一クラス内で引数の型や数が異なる同名のメソッドを複数定義することであり、誤りです。
  • ウ (コンストラクタ): オブジェクト生成時に実行される初期化のためのメソッドであり、誤りです。
  • エ (できない): オブジェクト指向では親クラスのメソッドを子クラスで再定義することが可能であるため、誤りです。
  • オ (できる): 正解です。子クラスでの再定義は可能です。
  • カ (デストラクタ): オブジェクトが破棄される際に実行される終了処理のメソッドであり、誤りです。

(3)

本文中の f に入れる適切な字句を解答群の中から選び,記号で答えよ。

  1. オーバーライド
  2. オーバーロード
  3. コンストラクタ
  4. できない
  5. できる
  6. デストラクタ

模範解答

選択肢ア: オーバーライド

配点 1

解説

オブジェクト指向におけるメソッドの再定義の名称を問う設問です。

  • 親クラスで定義されているメソッドを、子クラスで独自に定義し直す機能のことを オーバーライド と呼びます。
  • これにより、子クラスは親クラスの機能を上書きし、固有の振る舞いを実現することができます。したがって「ア」が正解です。

各選択肢の解説

  • ア (オーバーライド): 正解です。親クラスのメソッドを子クラスで再定義することです。
  • イ (オーバーロード): 同一のクラス内で、引数の型や数が異なる同名のメソッドを定義することです。親クラスのメソッドを上書きするものではありません。
  • ウ (コンストラクタ): インスタンス(オブジェクト)が生成される際に自動的に呼び出される初期化メソッドです。
  • エ (できない) / オ (できる): メソッドの再定義の名称を問う文脈に合致しません。
  • カ (デストラクタ): インスタンスがメモリから破棄される際に自動的に呼び出されるメソッドです。

(4)

本文中の g に入れる適切なクラス名を図2中の字句を用いて答えよ。

模範解答

XML

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「XML」と正確に記述している。
  • 1: 大文字・小文字の誤りなど、軽微な表記揺れがあるが「XML」を意図しているとわかる。
  • 0: 無解答、または全く異なるクラス名を記述している。

解説

データ連携におけるデータ形式に関する設問です。
図2のクラス図の中から、データの構造や表現形式に関わるクラスを特定します。

  • 選択可能なクラス群の中で、データフォーマットを表現しているのは XML クラスです。
  • システム間のデータ連携において、XMLは汎用的なデータ記述言語として広く利用されます。

高得点のポイント

  • 指示通り、図2の字句から XML を正確に抜き出していること。

(5)

本文中の h に入れる適切なクラス名を図2中の字句を用いて答えよ。

模範解答

HTTPS

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「HTTPS」と正確に記述している。
  • 1: 大文字・小文字の誤りなど、軽微な表記揺れがあるが「HTTPS」を意図しているとわかる。
  • 0: 無解答、または全く異なるクラス名を記述している。

解説

データ連携における通信プロトコルに関する設問です。
図2のクラス図の中から、通信やデータ転送に関わるクラスを特定します。

  • コネクタが外部と通信する際に使用するプロトコルを示すクラスとして、図中には HTTPS が定義されています。
  • HTTPSは、HTTPによる通信を暗号化し、安全なデータ連携を実現するためのプロトコルです。

高得点のポイント

  • 指示通り、図2の字句から HTTPS を正確に抜き出していること。

設問2(3)は,正答率が平均的であった。クラス図を理解して適切なクラスを使用することは,製品やフレームワークの利用を行うために必須のスキルであるので,是非身につけてほしい。

設問3

〔コネクタの修正〕について答えよ。

(1)

本文中の下線①について,作成する二つのクラスは,図2中の異なるクラスを親クラスとする必要がある。作成するクラスの親クラスとすべきクラス名を図2中の字句を用いて全て答えよ。

模範解答

連携データ,コネクタ

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「連携データ」と「コネクタ」の2つのクラス名を両方とも正確に記述している。
  • 1: 「連携データ」または「コネクタ」のいずれか一方のみを正しく記述している。
  • 0: 無解答、または対象外のクラス名のみを記述している。

解説

ソフトウェアの修正・機能追加において、オブジェクト指向の継承をどのように活用するかを問う設問です。
既存のソフトウェアの保守性を下げずに新しい機能を追加するためには、適切な親クラスから継承して新しい子クラスを作成することが重要です。

  1. 追加される機能の役割を分析し、図2の既存のクラス構成と照らし合わせます。
  2. データの表現に関わる新しい要件に対応するには、連携データ クラスを親クラスとする新しいクラスが必要です。
  3. 新たな接続先のプロトコルやシステムに対応するためには、コネクタ クラスを親クラスとする新しいクラスを作成します。
  • これらを親クラスとすることで、既存の処理に影響を与えることなく差分プログラミングによる機能拡張が可能になります。

高得点のポイント

  • 図2に存在する 連携データ および コネクタ の2つのクラス名を漏れなく正確に記述していること。

(2)

本文中の下線②について,文字コード変換のメソッドを追加すべきクラス名を図2中の字句を用いて答えよ。

模範解答

フォーマット

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「フォーマット」と正確に記述している。
  • 1: 「フォーマット」の記述に軽微な誤りがあるが、意図は特定できる。
  • 0: 無解答、または全く異なるクラス名を記述している。

解説

文字コード変換という新しい処理を、どのクラスに責務として持たせるべきかを問う設問です。
オブジェクト指向設計においては、関連するデータと処理(メソッド)を同じクラスにまとめることが求められます。

  • 文字コードは、データそのものの表現形式(フォーマット)に深く関わる属性です。
  • したがって、図2に示されたクラス群の中では フォーマット クラスに文字コード変換のメソッドを追加するのが、設計として最も適切です。
  • 既存の構造を正しく理解し、責務の割り当てを適切に行う設計能力が問われています。

高得点のポイント

  • 指示通り、図2の字句から フォーマット を正確に抜き出していること。

設問3(1)は,正答率が低かった。既存のクラスの構造を理解し,最小限の追加で機能を追加することは,ソフトウェアの保守性を下げないために重要であるので,オブジェクト指向設計について理解を深めてほしい。