Должны ли классы находиться в одном и том же дереве наследования, чтобы они имели отношение Has-A - PullRequest
0 голосов
/ 02 января 2012
class Employee {
    private String name;
    void setName(String n) { name = n; }
    String getName() { return name; }
}
interface Mungeable {
    void doMunging();
}
public class MyApp implements Mungeable {
    public void doMunging() { ; }
    public static void main(String[] args) {
        Employee e = new Employee();
        e.setName("bob");
        System.out.print(e.getName());
    } 
}

И возможные ответы:

Which are true? (Choose all that apply.)
A. MyApp is-a Employee.
B. MyApp is-a Mungeable.
C. MyApp has-a Employee.
D. MyApp has-a Mungeable.
E. The code is loosely coupled.
F. The Employee class is well encapsulated.

При ответе на поставленный выше вопрос я выбрал варианты B, C, E и F

Видимоединственные правильные ответы B, E и F.Чтобы MyApp имел отношение Has-A с Employee, оба должны находиться в одной иерархии дерева наследования.Это правильно?Я думал, что если класс имеет объект в качестве члена, он автоматически имеет отношение Has-A.

Ответы [ 5 ]

4 голосов
/ 02 января 2012

MyApp не имеет Employee, ни один член не определен. MyApp имеет основной метод, вот и все. Согласно приведенному ниже коду, MyApp has-a Employee.

public class MyApp implements Mungeable {
    public void doMunging() { ; }
    private Employee;
    public static void main(String[] args) {
        Employee e = new Employee();
        e.setName("bob");
        System.out.print(e.getName());
    } 
}
1 голос
/ 02 января 2012

Чтобы MyApp имел отношение к Employee, Employee e должна быть переменной-членом, а не просто создаваться локально в статическом методе.

1 голос
/ 02 января 2012

Должны ли классы находиться в одном и том же дереве наследования, чтобы иметь отношение Has-A

Нет, Например:

class Person{
    // Person has-a name, 
    // where Person is not a String,
    // neither reverse
    private String name; 
}
1 голос
/ 02 января 2012

Чтобы MyApp имел отношения Has-A с Сотрудником, оба должны быть в той же иерархии дерева наследования. Это правильно?

Это не правильно.

Я думал, что если у класса есть объект в качестве члена, он автоматически имеет отношения Has-A.

Вы были правы. Дело в том, что MyApp не имеет Employee в качестве участника.

0 голосов
/ 02 января 2012
E. The code is loosely coupled.

Это не правильно. Он тесно связан с классом сотрудников, для того чтобы он был слабо связан, он должен работать либо на интерфейсе, либо на абстрактном классе. Чтобы сделать его слабосвязанным, код должен быть следующим:

interface IEmployee{
...
...
}

class Employee implements IEmployee {
...
...
}

public class MyApp implements Mungeable {
    public void doMunging() { ; }
    //declare interface type
    private IEmployee emp;
    //use DI to inject  an implementation of IEmployee type in MyApp 
    public MyApp(IEmployee object){
    emp = object;
    }
    public static void main(String[] args) {
        emp.setName("bob");
        System.out.print(emp.getName());
    } 
}
...