序文:
午後は通常 6 問あり、最初の 4 問は必須、5 問目と 6 問目は任意です。各問題は 15 点、合計 75 点で、45 点で合格できます。
続いて、2022年下半期のソフトウェア設計者の事例を教材に、午後の問題ごとの解き方を解説します。
1. データフロー図の分析
トピック
【イラスト】
新エネルギー車の急速な増加に伴い、全国の電気自動車用のサポート充電杭の数が急速に増加しており、充電杭の測定精度にも問題が生じています。充電パイルには、対応する電力量測定および電気料金請求機能が装備されている必要があり、充電測定の精度が必須である必要があります。現在、計量検証クラウド ソフトウェアを開発する必要があります。その主な機能は次のとおりです。
(1) データ受信。計量装置によって報告される充電データ、つまり、充電プロセス中の電圧、電流、電力量などの充電監視データおよび計量データを受信します(充電監視データは充電パイルによって監視されるデータ、計量データは測定されたデータです)計測デバイスによる心拍数データを受信し、計測デバイスからの心拍データを別途保存します。
(2)基礎データの整備。管理者は、充電パイルや計量検証デバイスなどの基本データを保守します。
(3) データ分析。電圧、電流、および電力量データの比較を実行し、誤差分析を実行し、計量装置の校正のために充電パイルの充電誤差を記録します。システムは、測定および試験担当者によって与えられたクエリおよび統計条件に基づいて、クエリ統計結果を表示します。
(4) 充電パイルの検証。充電エラーの分析: 計量士と検査担当者は、エラー分析結果と校正情報記録に基づいて充電パイルを校正し、校正結果を提出します。システムは充電パイル内の校正情報 (校正結果と校正時間) を更新し、それを次の場所に保存します。校正記録。
(5) 異常アラーム。計測デバイスのハートビートを検出し、ハートビートが停止したときに管理者にアラームを送信します。
(6) 充電パイルの校正情報を照会するための、充電パイルに関連するその他の第三者サービスの校正情報の取得。構造化手法を使用して計測検証クラウド ソフトウェアを分析および設計し、図 1-1 に示すコンテキスト データ フロー図と図 1-2 に示すレイヤー 0 データ フロー図を取得します。
[問題 1] (4 点)
説明の言葉を使用して、図 1-1 のエンティティ E1 ~ E4 の名前を答えてください。
[問題 2] (5 点)
説明の文言を使用して、図 1-2 のデータ ストア D1 ~ D5 の名前を答えてください。
[質問 3] (4 点)
説明内の文言に基づいて、図 1-2 で欠落しているデータ フローとその開始点と終了点を補足してください。
【問題4】(2点) 説明書に従い、「充電監視・計測データ」のデータストリームの構成を答えよ。
分析:
質問 1 (4 点)
質問: 説明の単語を使用して、図 1-1 のエンティティ E1 ~ E4 の名前を付けてください。
データ フローの質問を分析するときは、まず質問 1 の E に対応する一般名を確認し、次に質問を振り返ります。最初の 2 つの質問は一般に比較的単純です。 E の名前については、いくつかの質問とともに説明を遡って読むことができます。
E1 については、次の質問を含む説明から調べることができます。
1. 心拍データは誰が報告しますか?
2. 測定データは誰が報告しますか?
入手は簡単ですE1: 測定デバイス。
E2 については、次の質問を含む説明から調べることができます。
1. 警報情報は誰に通知されますか?
2. 基本データを入力したのは誰ですか?
E2: 管理者は簡単に取得できます。
E3 の場合は、次の質問を含む説明から調べることができます。
1. クエリと統計条件をシステムに送信するのは誰ですか?
2. 検証情報記録は誰に送信されますか?
3. 誰がテスト結果を提出しましたか?
結論は簡単です。E3: 測定および検査担当者。
E4 の場合は、次の質問を含む説明から調べることができます。
1. 情報照会要求を開始するのは誰ですか?
2. テスト情報は誰に返されますか?
簡単に入手できますE4: サードパーティ サービス。
質問 2 (5 点)
質問: 説明の言葉を使用して、図 1-2 のデータ ストア D1 ~ D5 の名前を付けてください。
問2は最も簡単で、入力と出力が同じであれば、表は投入量+表となります。入力のみまたは出力のみがある場合は、入力 + テーブルまたは出力 + テーブルを使用します。これは基本的にデータ フローの欠如を意味します。
D1 は充電検出および測定データを入力し、出力は同じであるため、テーブルは充電検出および測定データ テーブルである必要があります。
D2 は基本情報を入力し、出力を持たないため、テーブルは基本情報テーブル である必要があります。ここには D2 によって出力されたデータ ストリームがありません。
D3 は計測デバイスの心拍データを入力し、心拍データを出力します。テーブルは心拍データテーブル< a i= 3>。
D4 は充電エラー情報を入力し、充電エラーを出力するため、テーブルは充電エラー テーブルである必要があります。
D5 には入力がなく、出力は検証レコードであるため、テーブルは検証レコードテーブル
質問 3 (4 点)
Q: 説明内の文言に従って、図 1-2 で欠落しているデータ フローとその開始点と終了点を補足してください。
一般的に、質問 3 が最も難しいです。ここで要約すると、データ フローは通常、E、D、および P 間の相互作用です。通常、E と D は直接相互作用しません。次のステップは、欠落しているデータ ストリームを見つける方法です。通常、全員と共有するルールが 3 つあります。
ルール 1: XX テーブル、通常、入力と出力はペアで存在します。入力または出力が欠落している場合は、おそらくデータ ストリームが欠落していることを意味します。
規則 2: P の入力データ ストリームと出力データ ストリームは通常、ペアで存在します。入力項目に 1 つあり、出力項目にない場合は、データ フローが 1 つ少ないことを意味します。
ルール 3: P 操作は通常、計算のためにデータ テーブルに依存したり、入力データをデータ テーブルに保存したりするなど、データ テーブルに依存します。
上記の規則1によれば、D2は出力がなく、D5は出力がないことが分かる。
では、基本的な情報が必要なのは誰でしょうか?データ分析中にデータ フロー D2->P4 と基本情報が不足していると推測できます。
同様に、誰が記録を入力するのでしょうか?この説明から、充電パイルが調整されると、データ ストリーム P4->D5 と調整レコードが欠落することがわかります。
上記のルール 2 によれば、P3 には 1 つの入力と 2 つの出力があるため、1 つが欠落していることがわかります。
統計結果のクエリを開始したのは誰ですか?当然のことながら、測定および検査担当者であるため、E3->P3、クエリおよび統計条件といったデータ フローが不足しています。
上記のルール 3 によれば、P6 には依存関係がないか、どのデータ テーブルにも格納されていることがわかりますが、これにも問題があります。
説明によると、D5->P6、検証レコードのデータ ストリームが欠落していることが判明しました。
もちろん、他にもいくつかのデータ ストリームがあるはずですが、見つけるのが難しいため、ここではすべてをリストしません。
【質問4】(2点)
この説明によれば、「充電監視および計量データ」データストリームの構成が示されている。
問 4 の出題範囲は固定されておらず、一般的には比較的広い範囲で出題されます。
この質問は非常に簡単です。説明にあるすべての充電監視および計測データから、次の説明が見つかります。
その後、それを直接コピーできます。答えは次のとおりです。
充電プロセス中に、電圧、電流、電力量などの充電監視データと計量データ(充電監視データは充電パイルによって監視されるデータ、計量データは計量装置によって測定されるデータであり、間隔単位は秒です) )、計測デバイスの心拍データを受信し、それらをそれぞれ記録して保存します。
2. データベース設計の概念構造設計分析
トピック
[説明] マーケティング会社が各地の支店や店舗の管理を容易にするために、業務管理システムの開発を計画しています。以下の要求説明に従ってシステムのデータベース設計を完了してください。
【要件の説明】
(1) 支店情報には、支店番号、支店名、住所、電話番号が含まれます。このうち、枝番号は、枝関係の各タプルを一意に決定する。各支店には複数の店舗があり、各店舗は 1 つの支店にのみ属します。
(2)店舗情報には、店舗番号、店舗名、店長、支店番号、住所、電話番号が含まれ、このうち店舗番号は店舗関係における各タプルを一意に決定する。各専門店には 1 人の店長のみがおり、専門店のすべての業務に責任を負います。各店長は 1 つの専門店のみを担当します。各専門店には複数の従業員がおり、各従業員は 1 つの専門店にのみ所属します。
(3) スタッフ情報には、スタッフ番号、スタッフ名、店舗番号、役職、電話番号、給与が含まれます。その中で、従業員番号は従業員関係内の各タプルを一意に識別します。職種としては、店長、販売員などが挙げられます。
[概念モデルの設計]
要件段階で収集した情報に基づいて、設計されたエンティティ関係図 (未完成) を図 2-1 に示します。
【論理構造設計】
概念モデルの設計段階で完成したエンティティ連絡先図に基づいて、次のような関係モデル(未完成)が得られます。 支店(支店番号、支店名、住所、電話番号) 店舗(店舗番号、店舗名、__(a)__ 、スタッフ、住所、電話番号) スタッフ(スタッフ番号、スタッフ名、___(b)___、役職、電話番号、給与)
[質問 1] (6 点)
要件の説明によると、図 2-1 の実関係図では 3 つの接続が欠落しています。解答用紙に対応するエンティティ接続図に 3 つの接続と接点の種類を追加してください。
注: 連絡先名は、連絡先 1、連絡先 2、連絡先 3 のいずれかになります。質問の意味の理解に基づいて連絡先名を選択することもできます。
【質問2】(6点)
(1) 関係式の___(a)___と___(b)___の属性を記入し、解答用紙の対応する位置に記入してください。
(2) ストア関係の主キー: ____(c)___ と外部キー: ____(d)___。
従業員リレーションシップの主キー: ____(e)___ と外部キー: ____(f)___。
【質問3】(3点)
緊急事態が発生した場合に従業員の家族にすぐに連絡できるように、店舗では各従業員に少なくとも緊急連絡先の氏名、続柄、連絡先番号を記入するよう義務付けています。この状況に基づいて、使用 2-1 ではエンティティ ___(g)___ にアクセスする必要があり、従業員関係とこのエンティティの間の関係タイプは ____(h)___ です。
(3) エンティティの関係モデルを与えます。
分析:
【質問1】(6点)
要件の説明によると、図 2-1 のエンティティ関係図には 3 つの関係がありません。解答用紙に対応するエンティティ接続図に 3 つの接続と接点の種類を追加してください。
注: 連絡先名は、連絡先 1、連絡先 2、連絡先 3 のいずれかになります。質問の意味の理解に基づいて連絡先名を選択することもできます。
関係を見つけるには、要件の説明を注意深く読み、要件の説明から関係を探す必要があります。説明内の次のような多対多の対応に特に注意してください。
説明によると、合計 3 つの関係があります。
支店と専門店の関係、支店1:専門店N;
専門店と店長の関係、専門店1:店長1、専門店1:店長1。
専門店とスタッフの関係、専門店1:店員N.
【質問2】(6点)
(1) 関係式の___(a)___と___(b)___の属性を記入し、解答用紙の対応する位置に記入してください。
(2) ストア関係の主キー: ____(c)___ と外部キー: ____(d)___。
従業員リレーションシップの主キー: ____(e)___ と外部キー: ____(f)___。
a と b は記述から直接検索され、簡単に答えが得られます。
a: 店長、支店番号
bは:店舗番号
店舗情報では主キーによって一意性が決まりますが、主キーによって一意性が判断できるかどうかを確認するには、店舗番号を主キー、c:店舗番号とします。
外部キーは他のテーブルの情報に関連付けられています。どのフィールドを他のテーブルに関連付けることができるかを確認してください。次に、店長と支店番号を他のテーブル (外部キー d: 店長、支店番号) に関連付けることができます。
同様に、従業員関係の主キーは従業員番号 (e: 従業員番号) です。外部キーのストア番号、f: ストア番号。
【質問3】(3点)
緊急事態が発生した場合に従業員の家族にタイムリーに連絡できるよう、店舗では各従業員に少なくとも緊急連絡先の氏名、続柄、連絡先番号を記入するよう義務付けています。この場合、2-1 でエンティティ ___(g)___ を追加する必要があります。従業員関係とこのエンティティ間の連絡先タイプは ____(h)___ です。
(3) エンティティの関係モデルを与えます。
エンティティを追加します: g: 緊急連絡先。
緊急連絡先を少なくとも 1 人入力してください (N)。ということで、スタッフ1:緊急連絡先N。
関係モデル:
緊急連絡先(緊急連絡先番号、社員番号、緊急連絡先氏名、ご本人との続柄、連絡先)
3. オブジェクト指向クラス図の設計
トピック
[説明]
図 3-1 に、ソフトウェア システムにおける温度制御モジュールのインターフェイスを示します。インターフェイスには、華氏 (Farechet) と摂氏 (摂氏) という 2 つの温度測定単位が用意されています。このソフトウェアは、2 つの測定単位間の自動変換をサポートしています。つまり、華氏で温度を入力すると、対応する摂氏の温度値が自動的に摂氏表示ボックスに表示され、その逆も同様です。ユーザーは、インターフェイス上の [上げる] (温度を上げる) ボタンと [下げる] (温度を下げる) ボタンを使用して温度値を変更できます。インターフェイスの右側には温度計があり、デジタル形式の温度を温度計のシステム比に変換して表示します。温度値が変化すると、温度計の表示も同期して変化します。
ここで、オブジェクト指向手法を使用して温度制御テンプレートを実装し、図 3-2 に示すユースケース図と 3-3 に示すクラス図を取得します。
[問題 1] (4 点)
説明書の記載に従って、図 3.2 の U1 ~ U4 に該当するユースケース名を答えてください。
[問題 2] (8 点)
説明書の記載に従って、図 3-3 の C1 ~ C8 に相当するクラス名を答えてください (クラス名は図を使用しています) 3- 1) でマークされた語彙。
[質問 3] (3 点)
図 3-1 に示すインターフェイスは、任意の測定単位を実装できる、より一般的な GUI アプリケーションに変換する必要があります。キログラムとセンチメートル、センチメートルとインチの間の変換など。この新しい要件を実現するには、図 3-3 に示すクラス図にどの設計パターンを追加できますか? この設計パターンを選択した理由を説明してください (50 ワード以内)。
分析:
【質問1】(4点)
ここでは、まず U2 の摂氏の表示を確認します。、これは華氏の表示に対応しているため、U2 は です。 華氏を表示します。 U1 は温度を表示しているためです。表示温度が 3 種類あることが説明からわかるので、U3 が温度計表示です。 U1 と U2 には温度の表示に加えて、相互変換というもう 1 つの共通点があるため、U4 は自動変換になります。
名前 | ユースケース名 |
U1 | 表示温度 |
U2 | 華氏を表示 |
U3 | 温度計の表示 |
U4 | 自動変換 |
【設問2】(8点)
まず、ウィジェットに属し、C2、C3、および C4 と同じレベルにあるボタンを見てください。すると、C2~C4もWidgetsに所属する必要があり、図からわかるように、ボタンの他に、温度計のBar、エディットボックスのEditBox、エディットボックスの上の説明Textも存在します。
次に、C5 から C8 までがすべて拡張型の Button に属していることがわかります。対応する図に Button の型が何種類あるかを調べます。ラーレンヘイ上昇、ラーレンヘイ下位、摂氏上昇、摂氏下位。
C2 から C8 を特定した後、それらはすべて C1 を指していることがわかりました。したがって、TemperatureCovertorDialog だけがすべてのウィジェットをロードして関連付けを作成できます。
パラメータ名 | クラス名 | |
C1 | 温度カバーダイアログ | |
C2 | バー | |
C3 | エディットボックス | |
C4 | 文章 | |
C5 | ラーレンヘイレイズ | |
C6 | ラーレンヘイ下層 | |
C7 | 摂氏上昇 | |
C8 | 摂氏低い |
【質問3】(3点)
この質問はより専門的であり、デザイン パターンに慣れていない学生は戦略的に諦める可能性があります。
しかし、ソフトな試験問題を解きすぎると、これが戦略モードに属することがわかり、話すことは何もなく、主に蓄積に依存します。
戦略パターンはオブジェクトの動作パターンに属します。その目的は、各アルゴリズムを一連のアルゴリズムの共通インターフェイスを持つ独立したクラスにカプセル化して、相互に置き換えることができるようにすることです。戦略パターンにより、クライアントに影響を与えることなくアルゴリズムを変更できます。
4. アルゴリズム穴埋め問題
トピック
次の指示と C コードを読んで、質問 1 ~ 3 に答え、解答用紙の対応する列に答えを記入してください。
[説明] 質問ソートは、順序付けされていないデータ要素のセットを、非減少シーケンスのデータに調整するプロセスです。ヒープ ソートは、一般的に使用されるソート アルゴリズムです。シーケンシャル ストレージ構造を使用して要素をヒープに格納します。非減少ヒープ ソートの手順は次のとおりです。
(1) ソート対象の n 要素を含む最初の大きなトップ ヒープを構築し、それを配列 R(R[1], R[ 2 ],..., R[n])。このとき、ヒープのサイズは n で、ヒープの先頭要素 R[1] がシーケンス内で最大の要素、R[n] がヒープの最後の要素になります。
(2) ヒープの先頭要素をヒープ内の最後の要素と交換します。最後の要素はヒープ構造から分離され、ヒープのサイズは 1 減り、残りの要素はヒープ構造から分離されます。ヒープ内の要素を大きな上部ヒープに調整します ( 3) ヒープ構造に最後の要素だけが残るまで手順 (2) を繰り返します。このとき、配列 R は非減少データ列です。
[C コード]
以下は、このアルゴリズムの C 言語実装です。
(1) 主な変数の説明
n: ソート対象の配列の長さ
R[]: ソート対象の配列、 n 数値は R[1]、R[2]、...、R[n]
(2) コード に配置されます。
#include <stdio.h>
#define MAXITEM 100
/**
调整堆
R:待排序数组:
v:节点编号,以v为根的二叉树,R[v]≥R[2v],R[v]≥R[2v+1],且其左子树和右广树都是大顶堆:
n; 堆结构的规模,即堆中的元素数
*/
void Heapify(int R[MAXITEM], int v, int n)
{
int i, j;
i = v;
j = 2 * i;
R[0] = R[i];
while (i <= n)
{
if (j < n && R[j] < R[j + 1])
{
j++;
}
if ((1))
{
R[i] = R[j];
i = j;
j = 2 * i;
}
else
{
j = n + 1;
}
}
R[i] = R[0];
}
/*堆挂序,R为待排序数组:n为数组大小*/
void HeapSort(int R[MAXITEM], int n)
{
int i;
for (i = n / 2; i >= 1; i--)
{
// (2)
}
for (i = n; (3); i--)
{
R[0] = R[i];
R[i] = R[1];
// (4)
Heapify(R, 1, i - 1);
}
}
[問題 1] (8 点)
上記の指示と C コードに従って、C コードの空いたスペース (1) ~ (4) を埋めてください。
[質問 2] (2 点)
上記の説明と C コードによれば、アルゴリズムの時間計算量は (5) (O 表記) となります。
[問題 3] (5 点)
データ列 R=(7, 10, 13, 15, 4, 20, 19, 8), n=8, を考えてみましょう。最初に構築されたビッグトップ ヒープは (6) で、最初の要素はヒープ構造から分離され、残りの要素はビッグ トップ ヒープに調整され、ビッグ トップ ヒープの後の配列 R は (7) になります。
分析:
アルゴリズムの問題は午後の問題の中で最も難しいことが多く、場合によってはそれを詳細に説明し、出題者が何を表現したいのかを理解することが難しい場合もあります。しかし、質問をする過程で、いくつかのヒントがあることがよくあります。この質問を例として考えてみましょう。どのように実装されているのか、大きなトップ ヒープとは何なのかはわかりませんが、この質問に答えてみてください。
【質問1】(8点)
まず、コードを分析しましょう。 HeapSort は並べ替えメソッドである必要があり、Heapify を呼び出すため、Heapify は特定の並べ替えである必要があります。ソートする場合は Heapify(R, 1, i - 1) となり、1 から始まり、0 は使用されないため、R[0] がデータ交換に使用される場所になります。
(1) を飛ばして、まず (2) を見てみましょう。 (2) 一行しかないのでデータの代入かメソッド呼び出しになるはずです。ただし、以下のソート用の定数 i-- があるため、代入は含まれないため、初期化タイプの操作である必要があります。初期化するにはどうすればいいですか?これはいくつかのソートを介して実行する必要があるため、ここで Heapify メソッドを呼び出す必要があり、その後にパラメーターの問題が発生します。以下の Heapify 呼び出しを参照してください。最初のパラメータは R で、2 番目のパラメータは i である必要があります。ここでのループは常に前進しているため、ソートするたびに i から N までがソートされていることを確認するだけで済みます。したがって(2):Heapify(R, i, n);
(3) を見ると、i=n, i-- であれば、(3) が終了判定条件なので、(3) は i>X となるはずです。では、X はどうあるべきでしょうか?当然、残り 1 つだけの場合は並べ替える必要はないので、(3):i>=1 となります。
上記の (4) を見ると、R[0] = R[i]; および R[i] = R[1]; であるため、ここでデータ交換が行われるはずです。前述の R[0] はデータを一時的に保存するために使用され、R[0] は最終的に特定の位置に割り当てられる必要があり、R[i]=R[1] と組み合わせて最初のビットが割り当てられます。ここでは (4):R[1]=R[0] です。
(1) を振り返ると、この質問に答えたい場合は、大きなトップの山について一定の理解が必要です。 Heapify メソッドは、実際には大きな上部ヒープを構築します。 (1) は以下の代入と組み合わせた条件判定なので、R[i]>R[j] または R[j]>R[i] のような判定になるはずです。大きなトップヒープの場合、より大きな値が一番上、つまり先頭にあると考えられるため、交換する必要がある場合は、後で割り当てて交換する必要があるより大きな値である必要があります。したがって、ここでは (1): R[j] > R[i] となるはずです。
上記の答えは、プッシュソートと大きなトップヒープを理解していない私の推測であり、最終的な答えは完全に正しいとは限りません。
【質問2】(2点)
アルゴリズムの複雑さのコードを見ると、HeapSort は N レベルのループを実行するため、ここでは少なくとも N になります。次に Heapify メソッドを見てみると、while ループが含まれていますが、j=2*i の進行は順方向であるため、複雑さは logN になるはずです。
因为复杂度就是O(N*logN)。
【質問3】(5点)
この問題をどのように整理するかがわからない場合、それに対してできることは何もありません。
(6):20,15,19,10,4,13,7,8
(7):19,15,13,10,4,8,7,20
5. オブジェクト指向プログラミング
トピック
次の指示と Java コードを読み、(n) に記入する単語を解答用紙の対応する列に記入してください。
[説明]
ファサード パターンは、複数の複雑なサブシステムに一貫したインターフェイスを提供することで、これらのサブシステムにアクセスしやすくするパターンです。病院を例に挙げると、治療を受ける場合、患者は病院のさまざまな機能部門とやり取りして、登録、外来サービス、薬の受け取りなどの業務を完了する必要があります。診療プロセスを簡素化するために、患者に代わって上記の診療ステップを完了する受付スタッフのポジションが設定されており、患者は受付スタッフと対話するだけで済みます。 5-1 に示すように、このシナリオをアピアランス モードで実装するためのクラス図が示されています。
【コード】
import java.util.*;
interface Patient {
___(1)___;
}
interface Disposer {
___(2)___;
}
class Registry implements Disposer {
public void dispose(Patient patient) {
System.out.println("I am registering..." + patient.getName());
}
}
class Doctor implements Disposer {
public void dispose(Patient patient) {
System.out.println("I am diagnosing..." + patient.getName());
}
}
class Pharmacy implements Disposer {
public void dispose(Patient patient) {
System.out.println("I am giving medicine..." + patient.getName());
}
}
class Facade {
private Patient patient;
public Facade(Patient patient) {
this.patient = patient;
}
public void dispose() {
Registry registry = new Registry();
Doctor doctor = new Doctor();
Pharmacy ph = new Pharmacy();
registry.dispose(patient);
doctor.dispose(patient);
ph.dispose(patient);
}
}
class ConcretePatient implements Patient {
private String name;
public ConcretePatient(String name){this.name =name;}
public String getName() {return name};
}
class FacadeTest {
public static void main(String[] args) {
Patient patient = ___(3)___;
___(4)___ f = ___(5)___;
___(6)___;
}
}
【問1】(15点)
(1): (2): (3): (4): (5): (6):
分析:
この問題は Java や C++ の基礎力を問う問題ですが、実はこれら 2 つの言語の基礎力がなくても、いくつかのキーワードを知っていれば大体の理解は可能です。
まず、拡張と実装という 2 つのキーワードを理解します。 Implements はインターフェイスを実装し、extends は抽象クラスを実装します。
上記のコードではインターフェイス クラス Patient が定義されているため、(1) はこのインターフェイスで定義されたメソッドである必要があります。そこで、その実装クラスを直接探したところ、ConcretePatient が見つかりました。このクラスはメソッド getName() を実装しているため、(1) は public String getName(); となります。 (2) も同様のロジックです。その実装クラス Registry または Docter が見つかったら、(2) を知ることができます:public void destroy(Patientpatient)< /span>;
(3) はオブジェクトを定義してクラスを初期化しますが、Patient はインターフェイスであり初期化できないため、初期化はその実装クラスである必要があり、Patient = ___new ConcretePatient(" ;")___;//ここでの構築メソッドの入力パラメータに注意してください。
(4)(5) もオブジェクトを定義してクラスを初期化し、小文字の f を使用して変数を定義します。クラス名は F で始まるはずで、Facade は自然に見つかります。したがって (4)(5):ファサード f = 新しいファサード(患者);
(6) 何も定義されていませんが、上記 2 つのオブジェクトと Facade のメソッド定義を組み合わせると、(6):f.dispose() ; と推測することもできます。