Описание того, что делает интерфейс?

Что касается ООП, как бы вы описали интерфейс?

Я имею в виду, что подклассы можно описать как "Имеет", а наследование - как "Это". Метод члена может быть "Сможет сделать".

Есть ли способ расширить это (без каламбура), чтобы описать, что делает интерфейс?

композицию можно описать как "has-a", а не как подкласс ...

Federico A. Ramponi 27.12.2008 00:06
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
3
1
389
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Действует как-А.

Интерфейс - это абстрактный базовый класс со всеми чистыми виртуальными членами.

Итак, глядя на ваш Has-A / Is-A, он должен быть похож на то, что вы бы применили для абстрактного базового класса.

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

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

Это в значительной степени резюмирует, что такое интерфейс.

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_interrfaces03052006095933AM/csharp_interrfaces.aspx?ArticleID=cd6a6952-530a-4250-a6d7-54717ef3b345

Отсюда и часть «все чисто виртуальные члены».

Joel Coehoorn 27.12.2008 00:13

Как и в вашем описании методов, я бы также описал интерфейс как «Can-Do». Интерфейс - это договор вроде «все классы, которые меня реализуют, могут делать эти вещи».

Ответ принят как подходящий

Я думаю об объектах как об существительные, о методах как о глаголы и об интерфейсах как о прилагательные (конечно, эта аналогия слишком упрощена, но часто работает достаточно хорошо).

Пример: интерфейс Serializable работает как прилагательное в том смысле, что он применяет некоторые качества к объекту, реализующему этот интерфейс, но не меняет того, что это за объект. Мы можем сказать: «Это сериализуемый объект». Но мы не говорим «этот объект это сериализуемый» и не говорим «этот объект имеет сериализуем».

Мне также нравится отвечать Федерико за то, что интерфейс - «CAN-DO».

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

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

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

Интерфейс состоит из методов, но не членов данных.

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

  • Состав - это место, где объект владеет другим объектом. Уничтожение внешнего объекта также разрушает внутренние объекты. Пример: университет состоит из кафедр. Закройте университет, и кафедры исчезнут.

  • Агрегирование - это когда объект включает другой объект, но не владеет им. Уничтожение внешнего объекта не разрушает внутренние объекты. Пример: в университете работают профессора, но закрытие университета не убивает профессоров.

Другие вопросы по теме