
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
シーケンス図(ClassAからClassBへmethodX、ClassBからClassCへmethodY、ClassCからClassAへmethodZ)をJavaプログラムで表現したときの、空欄(a)〜(c)に入るクラス名の組合せを選ぶ問題。
シーケンス図のメッセージ(メソッド呼出し)を、送り手・受け手のクラスの定義として読み取る問題。
① シーケンス図の矢印=「呼ぶ側のクラスのメソッドの中で、呼ばれる側のメソッドを呼ぶ」。コードの中のメソッド名から、どのクラスかを決める
② methodX() を持ち中で methodY() を呼ぶ(a)=ClassB。methodY() を持つ(c)=ClassC。methodX() を呼び methodZ() を持つ(b)=ClassA
③ ③
シーケンス図では、1.methodX()はClassAからClassBへ(ClassBがmethodXを持つ)、2.methodY()はClassBからClassCへ(ClassCがmethodYを持つ)、3.methodZ()はClassCからClassAへ(ClassAがmethodZを持つ)、呼び出される。プログラムを見ると、class (a)は、methodX()を定義し、その中で(c)型のinsPのmethodY()を呼び出している。methodXを持つのはClassBなので(a)=ClassB。methodYを持つ(c)=ClassC。class (b)は、methodZ()を定義し、(a)型(ClassB)のinsQのmethodX()を呼び出している。methodZを持つのはClassAなので(b)=ClassA。class (c)は、methodY()を定義し、(b)型(ClassA)のinsRのmethodZ()を呼び出している(ClassCからClassAへの呼出しと一致)。したがって、(a)=ClassB、(b)=ClassA、(c)=ClassCの③が正しい。
シーケンス図の矢印は、呼び出す側→呼び出される側。呼び出されるメソッドは、受け手のクラスに定義され、呼び出す側のクラスは、そのクラス型のフィールドを持つ。
キーワード: シーケンス図、Java、メソッド呼出し、クラス、インスタンス、UML、情報工学部門