Обсуждение:Интерфейс (объектно-ориентированное программирование)

Обсуждение:Интерфейс (объектно-ориентированное программирование)

Содержание

О чём статья?

Универсального для всех языков программирования понятия «интерфейс» не существует. Поскольку речь в статье, похоже, идёт о COM-интерфейсах, то нужно это явно отразить в определении и в статье. —CodeMonk 21:29, 20 мая 2006 (UTC)

Сейчас я сам определение уже переделал. —CodeMonk 22:02, 20 мая 2006 (UTC)

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

Дай пояснение что такое COM интерфейс(если сможешь тк я незнаю что ты имел в виду) и сделай сюда ссылку с Интерфейс (программирование)

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

Интерфейс задаётся абстрактным классом В Delphi это не так…

И кста. в Delphi до 2006 вообще небыло абстрактных классов…

Про COM-интерфейсы хорошо написано в первой главе вот этого документа и вот здесь о программировании COM-интерфейсов. —CodeMonk 19:31, 21 мая 2006 (UTC)
Я не понимаю, что значит «Интерфейс это и есть интерфейс». Если имеется в виду просто набор публичных функций и свойств класса, то в статье это не прописано, и вообще не надо об этом отдельную статью писать. И при чём здесь тогда интерфесы в Delphi? А универсального для всех языков программирования понятия «интерфейс» не существует, как я уже писал. Как мне кажется, эта статья либо должна быть переименована и серьёзно переработана, либо удалена. —CodeMonk 19:31, 21 мая 2006 (UTC)

По-моему, разбить статью поспешили. COM-интерфейсы — это такие же ООП-интерфейсы, как и в ООП-языках, и статья должна была рассказывать об интерфейсах от общего к частному. Муть, написанную в статье Interface (шаблон), надо, почистив, перенести в статью о шаблонах проектирования. С другой стороны, к программированию относится и совсем другое понятие Интерфейс программирования приложений. —М. Ю. 03:26, 23 мая 2006 (UTC)

Я бы взялся доработать статью до нормального вида, начиная с истории интерфейсов и заканчивая почему именно они позволили ООП стать инструментом интеграции систем, открыли ворота для действительно сложных, расширяемых проектов. Конкретные примеры имплементации, ИМХО, несущественны, и должны занимать не больше 30% статьи. Но дайте мне знать, что вы не удалите ее, а то вся работа пойдет насмарку :) Пока сделал набросок локально в текстовом файле, до 1го июня берусь закочить. Exceeder 04:08, 24 мая 2006 (UTC)
Я мешать не буду Kolan 16:09, 24 мая 2006 (UTC)

Об определениях

Интерфейс (Inter — «взаимо» и face — «поверхность»).
Я бы предположил: inter — «между», а face — «лицо».
Интерфейс определяет границу между спецификацией того, что делает абстракция, и реализацией того,  как она это делает.
У меня извилин не хватает, чтобы осмыслить эту гениальную фразу. Что это значит? По-моему это глупость какая-то.
Интерфейс — это набор операций, используемых для специфицирования услуг, предоставляемых классом
или компонентом.
Это относится к COM-интерфейсам. Но это плохо сформулировано.
Проще говоря, интерфейс — это контракт, который обязуется выполнить класс.
Так говорят о классах, наследующих COM-интерфейсы. Но не о любом классе и интерфейсе в программировании можно так сказать. —CodeMonk 21:34, 22 мая 2006 (UTC)
А можно пример интерфейса, который не контракт? Хочу быть уверен что я ничего не упустил. Exceeder 16:36, 27 мая 2006 (UTC)
Можно сказать, что если класс наследует COM-интерфейс, то он обязуется, «подписывается» реализовать этот интерфейс. Потому что если абстрактные элементы интерфейса не будут реализованы, то код просто не будет компилироваться. Если под интерфейсом понимать просто совокупность публичных свойств и методов класса, то я не вижу никакого основания называть это контрактом. «Пример интерфейса, который не контракт»: ну, например, с какой стати API называть контрактом? --CodeMonk 17:31, 27 мая 2006 (UTC)
Согласен, API - это точно не контракт. Но любой интерфейс в ООП - контракт. Именно потому что ВСЕ абстрактные элементы интерфейса должны быть реализованы, в соответствии с семантикой языка. Или я что-то сильно упустил. Таким образом важно подчеркнуть, что в этой статье, в контексте ООП, интерфейс - контракт, тогда как в широком смысле интерфейса - нет. Exceeder 02:06, 29 мая 2006 (UTC)
Так что именно вы подразумеваете под интерфейсом в ООП? Наследуемые COM-интрефейсы и какое-то их подобие, или совокупность публичных свойств и методов класса, или get/put методы для всех свойств по теории инкапсуляции? Что именно? Где дано определение? --CodeMonk 17:30, 30 мая 2006 (UTC)
Ничего из этого. Хотя COM-интерфейсы достаточно близки по сути, но решают совершенно другую задачу и не являются языковой конструкцией. И я бы вообще убрал секцию про Дельфи, просто не я ее писал, еще думаю, можно ли ее как-то переработать (в смысле сносок на похожие, но другие конструкции). Интерфейс - это семантическая конструкция в языке, прежде всего. Кроме правил взаимодействия, она определяет тип данных, при этом не являясь корнем дерева наследования классов. Именно поэтому интерфейс решает проблему редактирования базового класса. Точное определение дано в первых двух строках. В настоящий момент C#, VB.NET, Java и еще ряд языков имеют "полноценные" интерфейсы. С++ и Дельфи (до Дельфи.NET) их не имеют. Exceeder 18:47, 30 мая 2006 (UTC)
Ну то есть под интерфейсом вы понимаете просто абстрактный класс. А как же тогда единое для всего ООП понятие интерфейса? --CodeMonk 16:24, 31 мая 2006 (UTC)
Иногда для определения интерфейса действительно применяют определение "полностью абстрагированный абстрактный класс" [1], т.е. абстрактный класс без намека на "как" что-то будет работать, только "что" должно быть предоставлено. Однако я против такого определения, оно запутывает понимание того, что интерфейсы ВСЕГДА вне иерархии наследования классов и являются дополнительной конструкцией, не имеющей аналогов в С++, к примеру. Впрочем, как уточненние, фразу имеет смысл вставить в статью. Exceeder 17:09, 31 мая 2006 (UTC)
В С++ только нет такого ключевого слова, но такую функциональность можно реализовать без проблем. А что Вы подразумеваете под «интерфейсы ВСЕГДА вне иерархии наследования классов»? Они ведь и предназначены для наследования. --CodeMonk 18:47, 31 мая 2006 (UTC)

Объясню

У меня извилин не хватает, чтобы осмыслить эту гениальную фразу. Что это значит? По-моему это глупость какая-то. Это довольно точное определение.

границу между спецификацией того, что делает абстракция - граница между описание/определением...

и реализацией того, как она это делает - и как это на самом деле делается...

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

Цитирую по памяти: «Чтобы позвонить по телефону ван не нужно быть специалистом по комуникациям».

Тоесть ты знаещь как тыкать в кнопки - это интерфейс, а какт там дальше телефон работает, как работает АТС итд тебя вообще не волнует - это реализация.

Это относится к COM-интерфейсам. Но это плохо сформулировано. В ООП вообще есть понятие интерфейса. Интерфес COM — это частный случай.

Но не о любом классе и интерфейсе в программировании можно так сказать Согласен, но статья относится не «программирование», а «объектно-ориентированное программирование»!

Для ясности специально сделал: Интерфейс (программирование).

Эту глупую фразу про «спецификацию того, что делает абстракция» нужно из статьи убрать. Ваш пример про специалиста по коммуникациям иллюстрирует понятие полиморфизма и инкапсуляции, но не оправдывает это абсурдное определение интерфейса. Пожалуйста, подписывайтесь под своими репликами. --CodeMonk 17:47, 27 мая 2006 (UTC)

В английской версии

An interface defines the communication boundary between two entities

- интерфейс определяет границу между двумя сущностями.

Кстати очень похоже на:

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

Только у них это по computer scince, а тут я чисто про ООП написал

Совершенно не похоже. Пожалуйста, подписывайтесь под своими репликами. --CodeMonk 17:35, 27 мая 2006 (UTC)

Помогите правильно структурировать

Я еще новичек в Wiki, поэтому прошу гуру правильно структурировать знания по Интрефейсу.

Нужно начать с самого Интрефейса, дальше Интерфейс (программирование), а это понятие для ООП считаю верным.

Другие определения понятия "Интерфейс"

Предлогаю оставлять здесь подходящие определения

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

Объединение со статьей COM-интерфейс

К сожалению, у меня нет сейчас времени заняться определениями, но я уверен, что эта статья должна быть "крышей" и для COM-интерфейсов, предлагаю подумать над объединением. Может, удастся позаимствовать определение из той статьи и не говорить в определении о коде и о синтаксисе. Интерфейс - это абстракция с методами и свойствами, а синтаксис неважен. --М. Ю. 10:22, 31 мая 2006 (UTC)

Вот у меня точка зрения, что как раз интерфейс в ООП - это синтаксическая конструкция какого-нибудь языка (хотя конкретный синтаксис неважен, действительно). А СОМ - это что-то совершенно иное, потому что OLE - это наборы указателей на интерфейсы плюс GUIDы. С точки зрения ООП, в COMе нет ООП части. Инкапсуляция не требуется и не регламентируется, наследование отсутствует, полиморфизм невозможен. Скорее, я бы перенес из ООП-интерфейса многое в СОМ. Но я еще поищу материалы, подтверждающие или опровергающие мою точку зрения. Exceeder 12:31, 31 мая 2006 (UTC)
Ну, не совсем так. COM - не вполне полноценное ООП, но понятия "класс" и "интерфейс" играют в нем роли, аналогичные тем, что в ООП, и различаются только способом внутренней реализации. Например, нельзя использовать интерфейс без объекта класса. Наследование интерфейсов в какой-то мере тоже есть, и класс может "наследовать" (реализовывать) один или более интерфейсов, точно как в каком-нибудь C#. В общем, в этом понятии в языках и в COM есть что-то концептуально общее, а разница - в его реализации. --М. Ю. 13:01, 31 мая 2006 (UTC)
Я покопался в литературе, возможно вы правы. И кажется, эти две статьи есть смысл объединить. В общем, начинать нужно в любом случае с матчасти - источников и ссылок. Английская версия всего того же (набора статей про интерфейсы) мне не нравится совсем - там неразбериха. Немецкая лучше, но тоже нуждается в доработке. Остальные вряд ли прольют свет, так что я занимаюсь подборкой литературы. Одна из моих любимых статей на эту тему(нем., PDF) [[2]] которую я частично переводил [[3]] Exceeder 15:54, 31 мая 2006 (UTC)

Интерфейсы в Delphi

[Учаснег: Тестер]. Народ, скажите в статье нормально мою мысль (править боюсь). В Delphi (и не только в ней!) интерфесы не привязаны к COM, термин "интерфейс" в ПО появлися раньше COM. Просто концепция COM построена на интерфейсах. В начале статьи дано грамотное описание интерфейса. А в статье про Delphi говорится, что интерфейсы в ней являются следствием необходимости поддержки COM :(. Это далеко не так. Т.е., надо сказать, что интерфесы [в Delphi] отдельно, а COM - отдельно, но, в силу своей организации, COM их юзает. Кстати, интерфейсы есть и в Kylix, где COM'а "нет" :)

Описание интерфейсов

[Учаснег: Тестер] А где что-нибудь в этом разделе сказано про IDL? Все конструкции в разделе, насколько я понял, наны на нем. К аффтару: жжешь. Писши на Rider1982@mail.ru. Обсудим тонкости

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home