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

Черты против интерфейсов против миксинов?

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

Для каждого из признаков, миксинов и интерфейсов

  • В чем проблема?
  • Является ли определение понятия последовательным на всех языках программирования?
  • Каковы сходства между ним и остальными?
  • Каковы различия между ним и остальными?
4b9b3361

Ответ 1

Каждый тип ссылки в Java, кроме Object, происходит от одного единственного суперкласса.

Кстати, классы Java могут реализовывать ноль или больше интерфейсов.

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

Другими словами, класс Java обязан соблюдать свой контракт и, таким образом, предоставлять реализацию сигнатур методов, предоставляемых интерфейсами, которые он объявляет реализовать.

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

Это устанавливает основу для нескольких шаблонов абстракции, таких как, например, инъекция зависимостей.

Scala, имеет свои черты. Черты дают вам все возможности интерфейсов Java, с существенной разницей в том, что они могут содержать реализации и переменные методов. Черты - это умный способ реализации методов только один раз и - посредством этого - распространять эти методы во всех классах, которые расширяют черту. Подобно интерфейсам для классов Java, вы можете смешивать более одного признака с классом Scala.

Так как у меня нет фона Ruby, я укажу вам выдержку от Дэвида Поллака "Начало Scala" (ссылка amazon):

Ruby имеет mixins, которые представляют собой коллекции методов, которые могут быть смешаны с любым классом. Поскольку у Ruby нет статической типизации, и нет способа объявить типы параметров метода, нет разумного способа использовать mixins для определения контракта, такого как интерфейсы. Ruby mixins обеспечивают механизм составления кода в классах, но не механизм для определения или принудительного применения типов параметров.

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