応用情報技術者過去問題 令和6年秋期 午後問8

⇄問題文と設問を画面2分割で開く⇱問題PDF

問8 情報システム開発

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

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

〔コネクタの利用方法〕
 N君は,M社のデータ連携ハブのコネクタの利用方法を整理した。図1は,データ連携ハブを用いてデータ送信元システムからデータ送信先システムへ組織データを送信する例である。
pm08_1.png/image-size:406×141
 データ連携ハブがFTPSを用いて人事システムからデータフォーマットがCSV形式のデータを取得し,データフォーマットや通信プロトコルを変換して別の三つのシステムに送信している。このときデータ連携ハブのコネクタの役割は,通信プロトコルやデータフォーマットの変換である。

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

〔コネクタのクラス設計〕
 N君は,コネクタの利用方法を考慮し,オブジェクト指向を用いてコネクタに関係するクラスを設計した。N君が設計したクラス図(抜粋)を図2に示す。
pm08_2.png/image-size:596×460
 まず,送受信するデータのデータ項目を定義する連携データクラスとそれを親クラスとする組織データクラスを設計し,各クラスに必要な属性とメソッドを設計した。連携データクラスの論理削除属性は,組織データクラスのメソッドからアクセス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に入れる適切な字句を答えよ。

解答入力欄

  • a:
  • b:
  • c:

解答例・解答の要点

  • a:カプセル化
  • b:継承
  • c:多相性

解説

aについて〕
オブジェクト指向において「データとそのデータに対する処理を一つのオブジェクトにまとめる」という概念が問われています。

オブジェクト指向では、データ(属性)とそれを操作するメソッド(処理)を1つのクラスにまとめ、外部からのアクセスを制限します。この設計指針を「カプセル化」といいます。カプセルとは「小さな密閉容器」のことで、関連するデータと処理を容器に封じ込め、外部から保護するイメージです。カプセル化により、独立したソフトウェア部品として機能するようになるため、変更の影響範囲の局所化、再利用性や保守性の向上といったメリットが得られます。

なお、似たような概念として「情報隠ぺい」がありますが、こちらは外部に公開するデータやメソッド制限することを指すので、文脈的に合っていません。

a=カプセル化

bについて〕
オブジェクト指向において「あるオブジェクトの特性を他のオブジェクトに引き継ぐ」という概念が問われています。

オブジェクト指向では、あるクラスのデータや処理を別のクラスが受け継ぐことができます。この仕組みを「継承(インヘリタンス)」といいます。継承を活用することで、共通の機能を親クラスにまとめ、子クラスでは必要な部分だけを追加・変更すれば済むようになっています。これを差分プログラミングといい、コードの重複を避けつつ、プログラムの生産性や保守性を向上させるための重要な手法です。例えば、動物クラスを親とし、それを継承した犬クラスや猫クラスを作るなどの例が挙げられます。継承元のクラスは親クラス/スーパークラス/基底クラス、継承先のクラスは子クラス/サブクラス/派生クラスと呼ばれます。

b=継承

cについて〕
オブジェクト指向において「同名のメソッド呼出しに対してオブジェクトの種類によって異なる処理を実行する」という概念が問われています。

オブジェクト指向では、オブジェクトへの操作呼出しが、呼出し側でなく受け手側オブジェクトの特性で決まります。すなわち、同じメッセージを送っても受け手によって行われる操作が異なります。この性質を「多相性」といいます。例えば、犬クラスや猫クラスに「鳴く」という同名のメソッドを定義したとします。犬クラスの「鳴く」メソッドは「ワン」、猫クラスの「鳴く」メソッドは「ニャー」というように、同じ「鳴く」というメソッドであっても動物によって動作は異なります。同じメソッド名で異なる動作をさせることで、コードを変更することなく新しい動作を追加したり、メソッドの使用を統一したりすることができるメリットがあります。

なお、多相性のほか、多態性、多様性、ポリモルフィズム(ポリモーフィズム)などの呼び方もあるため、これらの解答でも問題ありません。

c=多相性

設問2

〔コネクタのクラス設計〕について答えよ。
  • 図2中のdに入れる適切な字句を答えよ。
  • 本文中のefに入れる適切な字句を解答群の中から選び,記号で答えよ。
  • 本文中のghに入れる適切なクラス名を図2中の字句を用いて答えよ。
e,f に関する解答群
  • オーバーライド
  • オーバーロード
  • コンストラクタ
  • できない
  • できる
  • デストラクタ

解答入力欄

    • d:
    • e:
    • f:
    • g:
    • h:

解答例・解答の要点

    • d:データ取得()
    • e:
    • f:
    • g:XML
    • h:HTTPS
  • 解説

    • dについて〕
      図2を見ると、コネクタには«interface»というステレオタイプが付いており、クラスではなくインタフェースであることがわかります。インタフェースとは、それを実装するクラスが備えるべき属性やメソッド(名前、引数、戻り値の型など)のみを定義したものです。インタフェース自体はメソッドの実装を持たず、あくまで「どのようなメソッドが存在するか」を規定したものであることが重要な点です。インタフェースを実装するクラスは、そのインタフェースで定義されたメソッドを具体的に実装する必要があります。

      組織コネクタクラスは、インタフェースであるコネクタクラスを実装するクラスです。コネクタクラスには「データ取得()」と「データ送信(data: 連携データ)」という2つのメソッドが定義されていますから、組織コネクタクラスではこの2つを実装しなければなりません。図2中には「データ送信(data: 組織データ)」が記載済みなので、空欄dにはもう一方の「データ取得()」が当てはまります。インタフェースで引数が指定されていないため、実装クラスでも引数は不要です。

      d=データ取得()

    • eについて〕
      図2を見ると、連携データクラスの論理削除属性には「#」が付いています。凡例によるとこの記号は属性やメソッドの可視性を指し、"-"は私的、"+"は公開、"#"は保護であると説明されています。これらはアクセス修飾子というもので、属性やメソッドの公開範囲を指定する仕組みです。通常、私的はprivate、公開はpublic、保護はprotectedと呼ばれ、それぞれを指定した場合のアクセス可能な範囲は次のようになります。
      private
      クラス内部からのみアクセス可能
      public
      すべてのクラスからアクセス可能
      protected
      クラス内部と、自身の子クラス(継承先クラス)からアクセス可能
      組織データクラスは連携データクラスの子クラスであり、親クラスの論理削除属性は可視性が「保護」として定義されています。このため、組織データクラスから連携データクラスの論理削除属性にアクセスすることができます。よって、空欄eには「できる」が当てはまります。

      e=オ:できる

      fについて〕
      オブジェクト指向において、親クラスで定義されたメソッドを、子クラスで再定義することを「オーバーライド」といいます。オーバーライドするメソッドは、親クラスのメソッドと同じ名称・引数・戻り値を持つ必要があり、子クラスで提供されるメソッドにより親クラスの実装を上書きする形となります。よって、空欄fには「オーバーライド」が当てはまります。

      その他の用語の意味は次のとおりです。
      オーバーロード
      1つのクラス内に、名称が同じで引数の数や型が異なるメソッドを定義すること。呼出し時の引数の指定に応じて適切なメソッドが呼び出される
      コンストラクタ
      インスタンスが生成されるタイミングで実行されるメソッド
      デストラクタ
      インスタンスが破棄されるタイミングで実行されるメソッド
      f=ア:オーバーライド

    • ghについて〕
      図2を見ると、組織コネクタクラスはコンストラクタの引数にフォーマットとプロトコルを指定することになっています。図1より、データ連携ハブから製造システムにデータを送信する際は、データフォーマットにXML、通信プロトコルにHTTPSを用いることがわかります。それぞれに応じた処理はXMLクラスおよびHTTPSクラスに実装されていますから、引数として渡すのはこの2つのクラスのインスタンスとなります。

      シリアライズメソッドはフォーマットクラス、送信メソッドはプロトコルクラスでも定義されているので、どちらを指定すべきか迷うかもしれません。図2を確認すると、フォーマットクラスとプロトコルクラスの名称は斜体で表記されており、凡例よりこの2つは抽象クラスであることがわかります。抽象クラスは子クラスに継承されることを前提とするクラスで、それ自体を直接インスタンス化することはできません。この観点から考えても、インスタンスとして引数にするのは、子クラスであるXMLクラスとHTTPSクラスであると判断できます。

      文脈より、空欄gのクラスにはシリアライズメソッドがあり、空欄hのクラスには送信メソッドがあることがわかるので、シリアライズメソッドをもつ「XML」クラスが空欄gに、送信メソッドをもつ「HTTPS」クラスが空欄hにそれぞれ当てはまります。

      g=XML
       h=HTTPS

    設問3

    〔コネクタの修正〕について答えよ。
    • 本文中の下線①について,作成する二つのクラスは,図2中の異なるクラスを親クラスとする必要がある。作成するクラスの親クラスとすべきクラス名を図2中の字句を用いて全て答えよ。
    • 本文中の下線②について,文字コード変換のメソッドを追加すべきクラス名を図2中の字句を用いて答えよ。

    解答入力欄

    解答例・解答の要点

    • 連携データ,コネクタ
    • フォーマット
  • 解説

    • 人事システムに格納されている研修受講記録データを新たに他システムへ送信する場合、新たに研修受講記録データの送受信を取り扱うためのクラスが必要となります。

      図1は組織データを他システムに送信する例であり、図2ではこれに対応する形で組織データクラスが定義されています。これと同様に、研修受講記録データを扱う場合、それに対応した研修受講記録データクラスを用意する必要があります。研修受講記録データクラスは組織データクラスと同様に、「連携データクラス」を親クラスとして作成することになります。

      また「コネクタクラス,組織コネクタクラスは,…送受信するデータ項目に応じて処理を行うものである」とあるため、研修受講記録データの項目に応じた処理を行うためには、それ専用のコネクタクラス(研修受講記録コネクタクラス)を作成する必要があることがわかります。親クラスとするのは、組織コネクタクラスと同様に「コネクタクラス」です。

      したがって、親クラスとすべきクラス名は「連携データ、コネクタ」の2つです。

      ∴連携データ,コネクタ

    • オブジェクト指向設計では、DRY(Don't Repeat Yourself)の原則に従い、同じコードの重複を避けることが推奨されています。もし複数の子クラスで使用する共通機能が必要になった場合、それぞれの子クラスに個別に実装するとコードの重複が発生してしまうため適切とは言えません。このような場合は、親クラスに共通のメソッドを追加し、すべての子クラスで同じ機能を再利用できるようにします。もし変更があった際も親クラスの修正だけで対応可能になります。CSVクラスやXMLクラスは、ともにフォーマットクラスを親クラスとしているので、文字コード変換のメソッドは親クラスである「フォーマット」に実装するのが適切です。

      ∴フォーマット
    問8成績

    令和6年秋期 午後問題一覧

    問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 採点講評
    © 2010- 応用情報技術者試験ドットコム All Rights Reserved.

    Pagetop