Подтвердить что ты не робот

Терминология HAS-A, IS-A в объектно-ориентированном языке

Я просто читал книгу, и в ней были термины "HAS-A" и "IS-A". Кто-нибудь знает, что они означают конкретно? Пробовал поиск в книге, но книга длилась 600 страниц. Спасибо!

4b9b3361

Ответ 1

Это объектно-ориентированное программирование и терминология UML, а не специфичная для Java. На самом деле есть три случая, о которых вам следует знать:

  • Дом - это здание (наследование);
  • Дом имеет комнату (состав);
  • В доме есть пассажир (агрегация).

Разница между (2) и (3) является тонкой, но важной для дифференциации. Вместе они являются формами ассоциации. Какая разница? Композиция подразумевает, что дочерний объект не может жить вне контекста родителя (уничтожает дом и комнаты исчезает), тогда как агрегирование подразумевает, что ребенок может существовать сам по себе (уничтожить дом, а житель - в другом месте).

Ответ 2

A Car имеет-a Wheel.

A Sparrow is-a Bird.

В академическом плане термины используются для выбора между композицией и наследованием.

Ответ 3

Has-a означает, что класс, о котором идет речь, имеет поле типа.

Is-a означает, что класс распространяется из суперкласса или реализует интерфейс. Оператор instanceof возвращал бы true, если он был протестирован против класса в этом случае.

Ответ 4

Это не спецификация java, она специфична для OO.

IS-A означает, что вы можете иметь класс, который "является" чем-то. Как ученик "IS-A". Это используется для описания одного объекта, являющегося подклассом другого.

Иногда между двумя классами нет отношения IS-A, но более подходящим является "HAS-A". Например, стул "HAS-A". или несколько. это называется агрегацией, а не наследованием.

Я не буду подробно разбираться в том, когда использовать их, потому что это зависит от того, как используются классы, и даже если известно, что так много нужно учитывать, новый вопрос для конкретного случая был бы более уместным.

Ответ 5

Является специальным видом, например. Автомобиль - это особый вид транспортного средства.

Имеет a = Физически что-то имеет, например, у автомобиля есть двигатель.

Ответ 6

IS-A, HAS-A и т.д. на самом деле не очень OO. Вместо этого Принцип подстановки Лискова - это OO.

Дядя Боб проливает некоторый свет на историю IS-A на http://www.hanselminutes.com/default.aspx?showID=163

Роберт К. Мартин: Слово "ISA" проникло в наш словарный запас и, кстати, одно слово ISA, оно проникло в наш словарный запас через круговой маршрут и стало очень важным в объектно-ориентированных кругах, но оно не начиналось так. Он закрался в 80 через толпу AI, которая создала эти замечательные сети знаний, вы могли бы вспомнить об этом, всю шумиху об искусственном интеллекте в конце 80-х, начале 90-х годов, а затем создали эти структуры, которые будут ходить в сети знаний, и отношения между сущностями и сетями знаний с такими вещами, как a, вкусы, как a, пахнет как ISA, все эти отношения - это, как и a, когда и когда толпа AI потеряла финансирование, и все те, кто финансирует диски, они вроде как огляделись и сказали: "О, вот это еще что-то, это классно. Послушайте, там такие отношения, как есть, продолжаются, они действительно похожи, мы должны просто двигаться." И они вроде как и словарь перешел. Это интересно, это тоже немного печально, потому что наследование не ISA. Наследование, если вы посмотрите на него с очень заштрихованным глазом, наследование - это объявление методов и переменных в подсерии, и это не имеет никакого отношения к ISA, и понятие ISA может быть очень путаным. Простой пример: целое число - это действительное число, а действительное число - это комплексное число. Вы могли бы нарисовать это в своем UML, это было бы очень просто со всем наследованием там и так далее, но подумайте о попытке скомпилировать его. Целое число, на которое мы хотели бы надеяться, было бы 16 или, может быть, 64 бита, но если бы оно было получено из реального числа, то реальное число имеет в нем два целых числа, мантисса и характеристики, показатель и они использовали, они подразумевали двоичные точки внутри них чтобы сделать это число с плавающей запятой. Число с плавающей запятой, действительное число, происходит от комплекса, но комплекс имеет в себе два действительных числа: мнимую и действительную. Если бы вы подумали о написании этого на С++ или в Java, вы должны написать структуру, которая не может быть скомпилирована, потому что она имеет бесконечные мысли. Идеальный смысл на английском языке не имеет никакого смысла в программном обеспечении.

Ответ 7

как указывает cletus, is-a отличается. но будьте осторожны с has-a. это может означать композицию (ответственность за жизнь), агрегацию (часть чего-то) или просто использует-a (имеет ссылку, знает, как ее построить или найти). последнее - это просто ассоциация.

Ответ 8

" IS A": Устанавливает связь между связанными объектами. Вы можете использовать наследование, чтобы установить отношение.

"HAS A" . Определяет возможность для возможно несвязанных объектов. Вы можете использовать интерфейс, чтобы определить возможность.

Пример:

Собака - это животное. У него есть возможность узнать.

Человек не животное. У него есть возможность учиться, думать, подниматься и прикладываться.

Ответ 9

Имена в значительной степени подразумевают все.

Класс IS-A можно рассматривать как специализированную ссылку на экземпляр другого класса, который наследует все его атрибуты.

Если существует класс с именем Автомобиль. Тогда любой тип транспортного средства может наследовать атрибуты этого суперкласса. Например Полицейский автомобиль наследует все атрибуты Vehicle, потому что это специализация последнего.

введите описание изображения здесь

С другой стороны, класс HAS-A имеет ссылку на другой класс или экземпляр другого класса. Другими словами, он разделяет связь с другим классом. Существует два типа классов HAS-A, совокупность которых означает, что класс может существовать независимо и состав, то есть класс может существовать только рядом с тем, с которым он имеет общую связь.

Важно знать, когда классифицировать объект как класс композиции или просто как атрибут другого класса.

Взяв класс Автомобиль, класс Драйвер будет считаться агрегацией, потому что класс Драйвер может существовать как независимый объект, даже если класс Автомобиль перестает существовать.

В то время как класс Двигатель не может существовать, если класс Автомобиль не существует, поскольку Двигатель не может существовать вне области действия Автомобиль.

введите описание изображения здесь

Ответ 10

Если вы создаете класс коллекций под названием "Школа". У вас были бы "учителя" и "ученики" в школе. Вы разрабатываете класс "человек", и оба "ученика" и "учителя" наследуются от класса "Человек", поскольку оба являются "человеком". У каждого ученика и учителя есть день рождения. Вы должны создать "класс даты", так как у учителя и ученика "есть" или "есть" день рождения внутри "класса Person". Это "контейнерный" Вкратце "человек" использует наследование "имеет" использует контейнеровозы