Как решить, использовать ли отношение A A или есть отношение - PullRequest
9 голосов
/ 18 июня 2011
public class B {

    public String getMe()
    {
        return "Some";
    }
}

Предположим, у меня есть вышеупомянутый класс, по каким параметрам мы должны решить, что использовать ??Является ли или имеет отношение ??

HAS - A

public class A {



    public static void main(String args[])
    {
        B b = new B();
        System.out.println(b.getMe());
    }
}

или

public class A  extends B
{


    public static void main(String args[])
    {
        A b = new A();
        System.out.println(b.getMe());
    }
}

Ответы [ 4 ]

22 голосов
/ 18 июня 2011

Зависит от логического отношения. Это просто должно иметь смысл.

Пример:

Допустим, у вас есть классы животных.
Итак, у вас есть следующие классы: Животное, Собака, Кошка, Леопард, Мех, Ноги

Кошка и собака ЕСТЬ Животное.
Леопард ЕСТЬ Кат.
Животное ИМЕЕТ мех, ноги.

В двух словах:

IS Отношение означает, что вы наследуете и расширяете функциональные возможности базового класса.
Имеет отношение означает, что класс использует другой класс, поэтому он имеет его в качестве члена.

17 голосов
/ 18 июня 2011

Возможны 4 типа отношений:

  • Обобщение (IS A) : которое реализуется с использованием наследования, как вы делали выше. Он используется, когда класс A имеет все те же функции B, и вы хотите добавить еще несколько функций. Таким образом, вы просто расширяете B и добавляете новые функции.
  • Агрегация (HAS A) : Это более слабое отношение, чем обобщение. Вы используете это отношение, когда объект A владеет объектами B или состоит из объектов B (может быть среди других объектов других классов). Первый тип называется разделяемой агрегацией, второй - композицией. В агрегации и композиции обычно существует объект, контролирующий жизнь другого объекта (он создает его и уничтожает по мере необходимости).
  • Ассоциация : В ассоциации классы просто знают друг о друге, поэтому она слабее агрегации. Объекты не контролируют жизнь друг друга.
  • Использование : это самое слабое отношение двух классов, и оно просто означает, что один класс может появляться как тип в параметре метода или использоваться внутри кода в коде.

    В вашем примере это должна быть агрегация (HAS A), если A имеет поле типа B. Но если он просто создает экземпляр B для внутреннего использования в коде, и объект удаляется из памяти, когда заканчивается область действия, тогда это ни Е, ни ЕСТЬ А. Это просто отношение использования.

1 голос
/ 18 июня 2011

Проще говоря:

  • "представляет собой" представляет наследование / расширяет
  • "имеет" представляет делегирование / ассоциацию

дляпример:

  • Дом - это здание (наследство)
  • Дом имеет дверь (и) (объединение)

Вот один из лучших ресурсовЯ использовал для понимания ООП: http://chortle.ccsu.edu/CS151/cs151java.html (часть 6 и 10)

0 голосов
/ 01 апреля 2018

is-a похож на, например, Собака - это животное или Кошка - это животное или Это похоже на то, что "человек - это ... такой человек ". Отношения is-a имеют свойства других объектов, например, здесь " Animal " - это класс (объект) и т. Д.

Отношение has-a похоже на то, что у объекта есть свои свойства, например, у Fish есть жабры или у брюк есть карманы ... что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...