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

message: Универсального для всех языков программирования понятия «интерфейс» не существует. Поскольку речь в статье, похоже, идёт о COM-интерфейсах, то нужно это явно отразить в определении и в статье. —CodeMonk 21:29, 20 мая 2006 (UTC)
replies: text: Сейчас я сам определение уже переделал. —CodeMonk 22:02, 20 мая 2006 (UTC)
Почему это нет. Интерфейс это и есть интерфейс. Пользовать интерфейсы можно и без COM. 
Дай пояснение что такое COM интерфейс(если сможешь тк я незнаю что ты имел в виду) и сделай сюда ссылку с Интерфейс (программирование)  
поэтому иногда образно говорят, что интерфейс — это контракт, который обязуется выполнить класс. - Ничего не иногда а всегда. Раз класс подписался должен выполнить.  
Интерфейс задаётся абстрактным классом - В Delphi это не так… 
И кста. в Delphi до 2006 вообще небыло абстрактных классов…

text: Но в Delphi были абстрактные методы. С точки зрения OOA&D абстрактным считается класс, имеющий хотя бы один абстрактный метод. Поэтому, как это принято в некоторых языках, при наличии абстрактных методов указывать еще абстрактным и сам класс - тавтология. --Чобиток Василий 20:39, 28 ноября 2006 (UTC)

text: Про COM-интерфейсы хорошо написано в первой главе вот этого документа и вот здесь о программировании COM-интерфейсов. —CodeMonk 19:31, 21 мая 2006 (UTC)

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

message: По-моему, разбить статью поспешили. COM-интерфейсы — это такие же ООП-интерфейсы, как и в ООП-языках, и статья должна была рассказывать об интерфейсах от общего к частному. Муть, написанную в статье Interface (шаблон), надо, почистив, перенести в статью о шаблонах проектирования. С другой стороны, к программированию относится и совсем другое понятие Интерфейс программирования приложений. —М. Ю. 03:26, 23 мая 2006 (UTC)
replies: text: : Я бы взялся доработать статью до нормального вида, начиная с истории интерфейсов и заканчивая почему именно они позволили ООП стать инструментом интеграции систем, открыли ворота для действительно сложных, расширяемых проектов. Конкретные примеры имплементации, ИМХО, несущественны, и должны занимать не больше 30% статьи. Но дайте мне знать, что вы не удалите ее, а то вся работа пойдет насмарку :) Пока сделал набросок локально в текстовом файле, до 1го июня берусь закочить. Exceeder 04:08, 24 мая 2006 (UTC)
replies: text: ::Я мешать не буду Kolan 16:09, 24 мая 2006 (UTC)
thread_title:  По-моему, разбить статью поспешили 

message: Интерфейс (Inter — «взаимо» и face — «поверхность»).
replies: text: Я бы предположил: inter — «между», а face — «лицо».
 Интерфейс определяет границу между спецификацией того, что делает абстракция, и реализацией того,  как она это делает.

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

text: Это относится к COM-интерфейсам. Но это плохо сформулировано.
 Проще говоря, интерфейс — это контракт, который обязуется выполнить класс.

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

text: Эту глупую фразу про «спецификацию того, что делает абстракция» нужно из статьи убрать. Ваш пример про специалиста по коммуникациям иллюстрирует понятие полиморфизма и инкапсуляции, но не оправдывает это абсурдное определение интерфейса. Пожалуйста, подписывайтесь под своими репликами. --CodeMonk 17:47, 27 мая 2006 (UTC)
=== В английской версии ===
An interface defines the communication boundary between two entities - интерфейс определяет границу между двумя сущностями.
Кстати очень похоже на:
Интерфейс определяет границу между спецификацией того, что делает абстракция, и реализацией того, как она это делает.
Только у них это по computer scince, а тут я чисто про ООП написал

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

message: У меня извилин не хватает, чтобы осмыслить эту гениальную фразу. Что это значит? По-моему это глупость какая-то.
Это довольно точное определение.
границу между спецификацией того, что делает абстракция - граница между описание/определением... 
и реализацией того,  как она это делает - и как это на самом деле делается...
Простой пример. Недавна видел рекламу какой-то компаннии, занимающейся междугородей телефонной связью.
Цитирую по памяти: «Чтобы позвонить по телефону ван не нужно быть специалистом по комуникациям».
Тоесть ты знаещь как тыкать в кнопки - это интерфейс, а какт там дальше телефон работает, как работает АТС итд тебя вообще не волнует - это реализация.
Это относится к COM-интерфейсам. Но это плохо сформулировано.
В ООП вообще есть понятие интерфейса. Интерфес COM — это частный случай.
Но не о любом классе и интерфейсе в программировании можно так сказать
Согласен, но статья относится не «программирование», а «объектно-ориентированное программирование»!
Для ясности специально сделал: Интерфейс (программирование).
replies: text: Эту глупую фразу про «спецификацию того, что делает абстракция» нужно из статьи убрать. Ваш пример про специалиста по коммуникациям иллюстрирует понятие полиморфизма и инкапсуляции, но не оправдывает это абсурдное определение интерфейса. Пожалуйста, подписывайтесь под своими репликами. --CodeMonk 17:47, 27 мая 2006 (UTC)
thread_title:  Объясню 

message: An interface defines the communication boundary between two entities - интерфейс определяет границу между двумя сущностями.
Кстати очень похоже на:
Интерфейс определяет границу между спецификацией того, что делает абстракция, и реализацией того, как она это делает.
Только у них это по computer scince, а тут я чисто про ООП написал
replies: text: Совершенно не похоже. Пожалуйста, подписывайтесь под своими репликами. --CodeMonk 17:35, 27 мая 2006 (UTC)
thread_title:  В английской версии 

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

message: Предлогаю оставлять здесь подходящие определения
* Интерфейс  - тип данных, представляющий абстрактное описание публичных свойств и методов класса.
thread_title:  Другие определения понятия "Интерфейс" 

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

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

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

message: Все же интерфейс и абстрактный класс, это разные семантические сущности.
Говорить о том, что интерфейс, это такой "абстрактный класс", может и верно в каких то случаях синтаксически, но неверно логически.
Абстрактные классы и интерфейсы служат различным задачам.
Если абстрактный класс является обобщением однотипных родственных объектов, которые реализуются в потомках этого класса (отвечает на вопрос кто я?), в том числе позволяя в рамках этой родственной цепи применять повторно используемый код,
то интерфейс по сути лишь является договоренностью между поставщиком и пользователем и отвечает на вопрос (что я могу делать?). При этом интерфейс может быть реализован в крайне разнородных объектах не имеющих между собой никаких родственных связей. Именно поэтому интерфейс никогда не содержит реализацию методов.
Так что предлагаю переписать данный раздел, ввиду того, что интерфейс и абстрактный класс НЕ являются аналогичными сущностями.
— Gigahard 11:21, 21 июня 2009 (UTC)
thread_title:  Раздел "Интерфейсы и абстрактные классы" 

message: Скажите пожалуйста, а что конкретно Вас смущает в данном определении интерфейса, что Вы так настойчиво ставите шаблон "ссылка ни источник" и "АИ"? Вы считаете, что в данном определении что то не так? Поясните пожалуйста.— Gigahard 08:11, 4 августа 2009 (UTC)
replies: text: это семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом. Для начала - какой программы? Fractaler 15:03, 4 августа 2009 (UTC)
replies: text: : Извините, не понял сути вопроса... Вы действительно не понимаете, о какой программе идет речь? Даже в рамках этой статьи? — Gigahard 19:07, 4 августа 2009 (UTC)
*Хорошо, давайте начнём с перечислений. 1) Программа на Си попадает под определение? Fractaler 08:34, 7 августа 2009 (UTC)

text: : А для чего? В данном случае слово программа не привязана к какому либо конкретному языку. Для любого языка, поддерживающего объектно-ориентированный подход, все будет применимо. Вы не начинайте с дальнего края. Что конкретно Вас не устраивает в определении? — Gigahard 10:14, 7 августа 2009 (UTC)
replies: text: ::Ок, подставляем значение в переменную, получаем по вашему определению: Интерфейс - это семантическая и синтаксическая конструкция в коде программы на СИ, используемая для специфицирования услуг, предоставляемых классом или компонентом. Всё верно? Fractaler 00:13, 8 августа 2009 (UTC)
replies: text: ::: Си не является объектно-ориентированным языком. Определение интерфейса в объектно ориентированном контексте к нему не применимо. Но допустим речь идет о C++ то в таком случае определение вполне верно. Что собственно Вас смущает? — Gigahard 22:30, 10 августа 2009 (UTC)
replies: text: ::::Си не является объектно-ориентированным языком - множество код программы включает подмножество "Код программы на языке программирования Си". Но допустим речь идет... - это вы каждому читателю собираетесь объяснять?  Fractaler 07:25, 11 августа 2009 (UTC)
replies: text: ::::: Вы заголовок статьи читали? Понимаете какие языки программирования применимы к данной статье (какое подмножество применимо к статье по теме объектно-ориентированого программирования)? И в четвертый раз спрашиваю, что Вам не нравится в этом определении? Ответьте по пунктам с аргументацией (...не верно, потому что...). Иначе создается впечатление, что Вы просто не в теме обсуждаемого предмета — Gigahard 10:31, 11 августа 2009 (UTC)
*А, понял - вы считаете, что заголовка статьи достаточно для того, что бы потом в определениях ничего уже не уточнять? Fractaler 18:21, 11 августа 2009 (UTC)
* Ага. Вопрос уже задали — добавлю сюда. Откуда такое определение интерфейса, еще и с "семантической конструкцией"? Где определение семантической конструкции? Я подозреваю, что это — чистой воды орисс. РоманСузи 19:38, 11 ноября 2013 (UTC)
thread_title:  Вопрос участнику Fractaler 

message: Благодаря наличию множественного наследования, ничто не мешает реализовать в одном классе несколько интерфейсов, если в этом есть необходимость
Насколько я вижу, конкретно в данном примере множественное наследование никак не рассматривается. RippleSax 13:41, 27 ноября 2015 (UTC)
thread_title:  Поправка про множественное наследование