Hi,
I would lean towards B and C.
A is incorrect, as X and Y cannot be called the subclass of an interface.To be a subclass, it should satisfy "extends" relationship.This relationship is based on "implements".Note that dashed-line specialization indicates that "X" and "Y" are implementing the interface (
Chapter 36, Section 36.3, Figure 36.4, Interfaces, Applying UML and Patterns, Craig Larman)
B is correct.We can draw an example from how Collection API is designed.You have java.util.List interface.The ArrayList implementation of this interface has methods/constructor which takes a Collection/List interface as a parameter.
C is correct.Note that "X" and "Y" can't be abstract classes.Abstract classes are indicated by italics in UML (
Chapter 28, Section 28.6.1, Applying UML and Patterns, Craig Larman).Hence,
"X" and "Y" must implement a getAppraisedValue() method. D is incorrect.You can never get substantial evidence on the instances of Mortgageable (which means objects of "X" and "Y"!!) in the production system, from the UML artifact.
Hope this helps,
-- Sandeep
[This message has been edited by Desai Sandeep (edited May 16, 2001).]