AP過去問 令和6年度秋期 午後 問8 情報システム開発
'],['\\[','\\]']], skipTags: ["code"], processEscapes: true }, "HTML-CSS": { undefinedFamily: "'Neo Euler Medium', Meiryo, STIXGeneral, 'Arial Unicode MS', serif", webFont :"Neo Euler Medium" } }); AP 過去問題 午後に戻る。
AP過去問_令和6年度秋期_午後_問7_組込みシステム開発の同じ回の前の問題へ移動。
AP過去問_令和6年度秋期_午後_問9_プロジェクトマネジメントの同じ回の次の問題へ移動。
令和6年度秋期 午後 問8 情報システム開発(AIプロンプト向け)
■オブジェクト指向設計に関する次の記述を読んで、設問に答えよ。
M社は、企業内の複数の情報システムを接続するデータ連携ハブを製造する会社である。M社のデータ連携ハブは、企業の基幹システムを構成するERP(Enterprise Resuource Planning)ソリューションやクラウドサービスとデータ連携するための部品であるコネクタの種類が多いことが人気を呼び、売上を増大させている。
M社には三つの事業所に合計約100名が在籍しており、開発部がソフトウェアの開発を行っている。M社のデータ連携ハブに含まれるコネクタを実現するソフトウェアは、ERPソリューションやクラウドサービスの仕様変更に合わせて頻繁に修正する必要がある。また、同じプログラムコードが複数個所にコピーされているなどの原因によって保守性が低いという課題があり、コネクタの開発コストが増大している。そこで、M社では、コネクタの開発コストを低減させるために、コネクタを構成するソフトウェアを再設計することいなり、開発部のN君が担当することになった。
[コネクタの利用方法]
N君は、M社のデータ連携ハブのコネクタの利用方法を整理した。図1はデータ連携ハブを用いてデータ送信元システムからデータ送信先システムへ組織データを送信する例である。
図1 データ連携ハブを用いた組織データの送信の例ここから
・データ送信元システムである人事システムがデータ連携ハブと接続されていてFTPSとCSVのやり取りをする。
・データ連携ハブとデータ送信先システムである販売システムと接続されていてFTPSとCSVのやり取りをする。
・データ連携ハブとデータ送信先システムである製造システムと接続されていてHTTPSとXMLのやり取りをする。
・データ連携ハブとデータ送信先システムである会計システムと接続されていてHTTPSとXMLのやり取りをする。
図1 データ連携ハブを用いた組織データの送信の例ここまで
データ連携ハブがFTPSを用いて人事システムからデータフォーマットがCSV形式のデータを取得し、データフォーマットや通信プロトコルを変換して別の三つのシステムに送信している。このときデータ連携ハブのコネクタの役割は、通信プロトコルやデータフォーマットの変換である。
[オブジェクト指向に関する調査]
N君は、コネクタを再設計するために、オブジェクト指向について調査した。オブジェクト指向では、ソフトウェアを部品化し、部品の組合せによって目的のソフトウェアを作る。この方法では、データとそのデータに対する処理を一つのオブジェクトにまとめる [a] という設計指針のもと、外部公開するメソッドを定義してオブジェクト内のデータや処理の変更がオブジェクト外に与える影響を小さくする。また、あるオブジェクトの特性を他のオブジェクトに引き継ぐ [b] が可能であり、開発コストを低減できる。また、同名のメソッド呼出しに対してオブジェクトの種類によって異なる処理を実効する [c] を実現することが可能である。
[コネクタのクラス設計]
N君は、コネクタの利用方法を考慮し、オブジェクト指向を用いてコネクタに関係するクラスを設計した。N君が設計したクラス図(抜粋)を図2に示す。
図2 N君が設計したクラス図(抜粋)ここから
・(ステレオタイプ=Interface、クラス名=コネクタ)は公開属性の属性名=dataで連携データ型、公開属性の属性名=formでフォーマット型、公開属性の属性名=proでプロトコル型を保持していて、メソッドには公開属性のメソッド名=データ取得(引数は無し)、公開属性のメソッド名=データ送信(引数はdataで連携データ型)というクラスを構成
・クラス名=コネクタの関連クラスとして(クラス名=連携データ)は保護属性の属性名=論理削除でboolean型を保持していて、メソッドは省略を保持しているクラスを構成
・クラス名=連携データを継承しているクラスとして(クラス名=組織データ)は属性情報は省略、メソッド情報は省略を保持しているクラスを構成
・クラス名=コネクタを継承しているクラスとして(クラス名=組織コネクタ)は属性情報は省略、メソッドには公開属性[d]、データ送信(引数はdataで組織データ型)、ステレオタイプ=Createで公開属性のメソッド名=組織コネクタ(引数formでフォーマット型、proでプロトコル型)返却値型は組織コネクタ型を保持しているクラスを構成
・クラス名=コネクタの関連クラスとして(クラス名=フォーマット)は属性情報は省略、メソッドには公開属性のメソッド名=シリアライズ(引数はdataで連携データ型)、公開属性のメソッド名=デシリアライズ(引数は無し)を保持しているクラスを構成
・クラス名=フォーマットを継承しているクラスとして(クラス名=CSV)は属性情報は省略、メソッドには公開属性のメソッド名=シリアライズ(引数はdataで連携データ型)、公開属性のメソッド名=デシリアライズ(引数は無し)を保持しているクラスを構成
・クラス名=フォーマットを継承しているクラスとして(クラス名=XML)は属性情報は省略、メソッドには公開属性のメソッド名=シリアライズ(引数はdataで連携データ型)、公開属性のメソッド名=デシリアライズ(引数は無し)を保持しているクラスを構成
・クラス名=コネクタの関連クラスとして(クラス名=プロトコル)は属性情報は省略、メソッドには公開属性のメソッド名=取得(引数はformでフォーマット型)返却値型は連携データ型、公開属性のメソッド名=送信(引数はdataで連携データ型、formでフォーマット型)を保持しているクラスを構成
・クラス名=プロトコルを継承しているクラスとして(クラス名=FTPS)は属性情報は省略、メソッドには公開属性のメソッド名=取得(引数はformでフォーマット型)返却値型は連携データ型、公開属性のメソッド名=送信(引数はdataで連携データ型、formでフォーマット型)を保持しているクラスを構成
・クラス名=プロトコルを継承しているクラスとして(クラス名=HTTPS)は属性情報は省略、メソッドには公開属性のメソッド名=取得(引数はformでフォーマット型)返却値型は連携データ型、公開属性のメソッド名=送信(引数はdataで連携データ型、formでフォーマット型)を保持しているクラスを構成
図2 N君が設計したクラス図(抜粋)ここまで
まず、送受信するデータのデータ項目を定義する連携データクラスとそれを親クラスとする組織データクラスを設計し、各クラスに必要な属性とメソッドを設計した。連携データクラスの論理削除属性は、組織データクラスのメソッドからアクセス [e] 。
フォーマットクラス、CSVクラス、XMLクラスは、送信するデータをCSV形式やXML形式に変換(シリアライズ)したり、受信したCSV形式やXML形式のデータを解析して、連携データクラスのインスタンスを生成(デシリアライズ)したりするクラスである。また、XMLクラスのシリアライズのように、親クラスと同じ名称・引数・戻り値のメソッドを定義することを [f] という。
プロトコルクラス、FTPSクラス、HTTPSクラスは、データ送受信のためのクラスである。コネクタクラス、組織コネクタクラスは、コネクタを実現するためのクラスであり、送受信するデータのデータ項目に応じて処理を行うものである。
図2で設計されたクラスを用いて、図1に記載のデータ連携ハブから製造システム向けにデータを送信する組織コネクタクラスのインスタンスを作成する場合、[g] クラス及び [h] クラスから生成したインスタンスを引数に、組織コネクタクラスのインスタンスを作成する。[h] クラスの送信メソッドの中ではフォーマットクラスのシリアライズメソッドが呼び出されるが、実際には [g] クラスのシリアライズメソッドが呼び出される。
[コネクタの修正]
N君は、今後予想されるコネクタの修正時に、図2で設計したクラスに対して少ない修正で対応できるか机上で検証した。
図1に記載の人事システムに格納されている研修受講記録データを新たに他システムへ送信する必要がある場合には、①<u>新しいクラスを二つ作成</u>すればよい。また、CSVファイルやXMLファイルの中の口座名などの文字列の文字コードを変換する共通機能が必要となった場合には、②<u>図2ある一つのクラスに文字コード変換のメソッドを追加</u>すればよい。
その後、N君は、コネクタの再設計に関する必要な作業を完了した。
設問1 本文中の [a] ~ [c] に入れる適切な字句を答えよ。
設問2 [コネクタのクラス設計]について答えよ。
(1) 図2中の [d] に入れる適切な字句を答えよ。
(2) 本文中の [e] 、[f] に入れる適切な字句を回答群の中から選び、記号で答えよ。
回答群
ア オーバーライド
イ オーバーロード
ウ コンストラクタ
エ できない
オ できる
カ デストラクタ
(3) 本文中の [g] 、[h] に入れる適切なクラス名を図2中の字句を用いて答えよ。
設問3 [コネクタの修正]について答えよ。
(1) 本文中の下線①について、作成する二つのクラスは、図2中の異なるクラスを親クラスとする必要がある。作成するクラスの親クラスとすべきクラス名を図2中の字句を用いて全て答えよ。
(2) 本文中の下線②について、文字コード変換のメソッドを追加すべきクラス名を図2中の字句を用いて答えよ。
令和6年度秋期 午後 問8 情報システム開発(問題原文)
■オブジェクト指向設計に関する次の記述を読んで、設問に答えよ。
M社は、企業内の複数の情報システムを接続するデータ連携ハブを製造する会社である。M社のデータ連携ハブは、企業の基幹システムを構成するERP(Enterprise Resuource Planning)ソリューションやクラウドサービスとデータ連携するための部品であるコネクタの種類が多いことが人気を呼び、売上を増大させている。
M社には三つの事業所に合計約100名が在籍しており、開発部がソフトウェアの開発を行っている。M社のデータ連携ハブに含まれるコネクタを実現するソフトウェアは、ERPソリューションやクラウドサービスの仕様変更に合わせて頻繁に修正する必要がある。また、同じプログラムコードが複数個所にコピーされているなどの原因によって保守性が低いという課題があり、コネクタの開発コストが増大している。そこで、M社では、コネクタの開発コストを低減させるために、コネクタを構成するソフトウェアを再設計することいなり、開発部のN君が担当することになった。
[コネクタの利用方法]
N君は、M社のデータ連携ハブのコネクタの利用方法を整理した。図1はデータ連携ハブを用いてデータ送信元システムからデータ送信先システムへ組織データを送信する例である。
データ連携ハブがFTPSを用いて人事システムからデータフォーマットがCSV形式のデータを取得し、データフォーマットや通信プロトコルを変換して別の三つのシステムに送信している。このときデータ連携ハブのコネクタの役割は、通信プロトコルやデータフォーマットの変換である。
[オブジェクト指向に関する調査]
N君は、コネクタを再設計するために、オブジェクト指向について調査した。オブジェクト指向では、ソフトウェアを部品化し、部品の組合せによって目的のソフトウェアを作る。この方法では、データとそのデータに対する処理を一つのオブジェクトにまとめる a という設計指針のもと、外部公開するメソッドを定義してオブジェクト内のデータや処理の変更がオブジェクト外に与える影響を小さくする。また、あるオブジェクトの特性を他のオブジェクトに引き継ぐ b が可能であり、開発コストを低減できる。また、同名のメソッド呼出しに対してオブジェクトの種類によって異なる処理を実効する c を実現することが可能である。
[コネクタのクラス設計]
N君は、コネクタの利用方法を考慮し、オブジェクト指向を用いてコネクタに関係するクラスを設計した。N君が設計したクラス図(抜粋)を図2に示す。
まず、送受信するデータのデータ項目を定義する連携データクラスとそれを親クラスとする組織データクラスを設計し、各クラスに必要な属性とメソッドを設計した。連携データクラスの論理削除属性は、組織データクラスのメソッドからアクセス 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 本文中の a ~ c に入れる適切な字句を答えよ。
設問2 [コネクタのクラス設計]について答えよ。
(1) 図2中の d に入れる適切な字句を答えよ。
(2) 本文中の e 、f に入れる適切な字句を回答群の中から選び、記号で答えよ。
回答群
ア オーバーライド
イ オーバーロード
ウ コンストラクタ
エ できない
オ できる
カ デストラクタ
(3) 本文中の g 、h に入れる適切なクラス名を図2中の字句を用いて答えよ。
設問3 [コネクタの修正]について答えよ。
(1) 本文中の下線①について、作成する二つのクラスは、図2中の異なるクラスを親クラスとする必要がある。作成するクラスの親クラスとすべきクラス名を図2中の字句を用いて全て答えよ。
(2) 本文中の下線②について、文字コード変換のメソッドを追加すべきクラス名を図2中の字句を用いて答えよ。
回答・解説
設問1
a,b、cの長い穴埋めです。
オブジェクト指向では、ソフトウェアを部品化し、部品の組合せによって目的のソフトウェアを作る。この方法では、データとそのデータに対する処理を一つのオブジェクトにまとめる [a] という設計指針のもと、外部公開するメソッドを定義してオブジェクト内のデータや処理の変更がオブジェクト外に与える影響を小さくする。また、あるオブジェクトの特性を他のオブジェクトに引き継ぐ [b] が可能であり、開発コストを低減できる。また、同名のメソッド呼出しに対してオブジェクトの種類によって異なる処理を実効する [c] を実現することが可能である。
文字数の制限もなくフリー回答の記述なので、相当に詳しくないと答えられませんが、クラスに関する用語と意味を覚えていれば回答できる問題です。
[a] : データと処理を一つのオブジェクトにまとめ、外部公開するメソッドで操作する設計指針に対応します。これにより、外部からの影響を最小限に抑える。こういうのをカプセル化といいます。隠蔽化とカプセル化は違う意味なので、隠蔽化ではダメな場合もあると思います。カプセル化の結果生じる隠蔽化ですが、両方正解になっている可能性もあります。出題者の意向次第ですね。
- カプセル化と隠蔽化の違い
- カプセル化 (Encapsulation)
- データ(属性)とそれに関連する処理(メソッド)を一つのオブジェクトにまとめること。
- オブジェクト指向の設計指針として、データを構造的に整理し、外部への影響を抑えるための仕組みを指します。
主に「構造をまとめる」という観点で使われます。
- 隠蔽化 (Information Hiding)
- オブジェクト内部の実装詳細(属性や処理)を外部から隠し、外部は定義されたインターフェース(メソッド)を通じてのみオブジェクトとやり取りすること。
- カプセル化によって可能になる性質の一つであり、「カプセル化」の副次的な効果ともいえます。英語でEncapsulation、その読みのエンキャプスレーションも正解になると思います。英語以外の言語でもありだと思いますが、採点者が読めないとひょっとしたら×になっている可能性もあります。
[b] : あるクラスの特性を別のクラスに引き継ぐ仕組みで、コードの再利用性を高めます。本文で述べられている「特性を他のオブジェクトに引き継ぐ」というものです。こういうのを継承といいます。英語でインヘリタンスっていうのでカタカナでインヘリタンスと書いても正解です。Inheritanceと斜め上の英語回答でも正解だと思います。こちらも英語以外の回答は怪しくなってきます。
[c] : 同じメソッド名であっても、クラスごとに異なる処理を実行できる性質です。これにより柔軟なプログラム設計が可能になります。こういう仕組みをポリモーフィズムといったり、日本語では多相性とか多態性といいます。この3つを併記するでも正解だし、どれかを記載するのも正解でしょう。ポリモーフィズム(多態性)とかポリモーフィズム(多相性)と西洋、英語読みと日本語表記を併記するのもスマートで正解でしょう。これも英語以外の表現方法については怪しいです。したがって
a カプセル化
b 継承
c ポリモーフィズム(多態性)
が答えです。
設問2
(1) 図2中の[d]の穴埋めです。
組織コネクタクラスがコネクタクラスを継承し、そのメソッド仕様をそのまま引き継いでいるため、データ取得()が適切です。したがって
d データ取得()
が答えです。
(2)
eについて
連携データクラスの論理削除属性は、組織データクラスのメソッドからアクセス [e]。の穴埋めです。
ここは選択肢の・できる・できない のどちらかが入ると考えるのが自然ですが、連携データクラスの保護属性の論理削除は、親クラス内に定義されており、連携データクラスを継承した組織クラスからアクセス可能です。これにより「できる」が該当します。
fについて
XMLクラスのシリアライズのように、親クラスと同じ名称・引数・戻り値のメソッドを定義することを [f] という。の穴埋めです。
ここは選択肢の・できる・できない 以外の選択肢が入ると考えるのが自然で、親クラスで定義したメソッドを、子クラスで同名・同引数・同戻り値で再定義することをオーバーライドと言います。本文中の「親クラスと同じ名称・引数・戻り値のメソッドを定義」に対応しますので、オーバーライドが正しいです。したがって
e オ できる
f ア オーバライド
が答えです。
(3)
図1に記載のデータ連携ハブから製造システム向けにデータを送信する組織コネクタクラスのインスタンスを作成する場合、[g] クラス及び [h] クラスから生成したインスタンスを引数に、組織コネクタクラスのインスタンスを作成する。[h] クラスの送信メソッドの中ではフォーマットクラスのシリアライズメソッドが呼び出されるが、実際には [g] クラスのシリアライズメソッドが呼び出される。の穴埋めです。
最初の登場では[g]及び[h]となっているので順不同に感じますが、続きの部分で特定されます。製造システム向けにデータを送信する組織コネクタクラスのインスタンスを作成する場合は図1からも製造システム向けにデータ送信する場合はフォーマットがXMLで通信メソッドがHTTPSですので、HTTPSクラスとXMLクラスから生成したインスタンスになり、hは送信メソッドのクラスでgはフォーマットに対応するクラスが入ります。したがって
g XML
h HTTPS
が答えです。
設問3
(1)
設問が少しややこしいです。新しく作るクラスは何か?ではなくて、新しく作るクラスが利用する親クラスは何かです。新しい組織が出来たときは、組織データクラスと組織コネクタクラスを作る必要があります。その2つが利用する親クラスは、連携データクラスとコネクタクラスです。したがって
連携データ、コネクタ
が答えです。
(2)
CSVファイルやXMLファイルの中の口座名などの文字列の文字コード変換処理を新たに追加するときは、どこに変更を加えてメソッドを追加するとよいかですが、CSVにもXMLにも共通して必要となる機能なので、その親であるフォーマットクラスにメソッドを追加すると良いです。したがって、
フォーマット
が答えです。
最初の穴埋めができるレベルでクラスを理解していれば、後の問題は悩むことも少なく、短時間で答えを導き出せた問題です。設問3(1)で新しくクラスを作るときに、そのとき使う親クラスを答えよという回りくどい設問になっているひっかけもありますが、難しくない設問でした。管理人もこの問題を選択していればよかったなぁと思ったりしました。わけのわからないクラス図にちょっとビビりすぎた感じはあります。問題を読み始めさえすれば、簡単だったことに気づかされました。クラスを知ってたからこそですね。しらなければどうやっても解けない超難問だったと思います。
AP過去問_令和6年度秋期_午後_問7_組込みシステム開発の同じ回の前の問題へ移動。
AP過去問_令和6年度秋期_午後_問9_プロジェクトマネジメントの同じ回の次の問題へ移動。
AP 過去問題 午後に戻る。