Interface
От: Шестаков Александр  
Дата: 29.05.01 12:14
Оценка:
Подскажите пожайлуста чем интерфейс в C# отличается от абстрактного класса в C++. Можно ли сказать, что итерфейс — подмножежтво абстрактного класса C++.
Re: Interface
От: Ярослав Говорунов Украина http://www.helicontech.com
Дата: 29.05.01 20:21
Оценка:
ША>Подскажите пожайлуста чем интерфейс в C# отличается от абстрактного класса в C++. Можно ли сказать, что итерфейс — подмножежтво абстрактного класса C++.

Пожалуй, нет. Интерфейс в .NET похож на интерфейс в СОМ, а с абстрактным классом тут есть пара серьезных отличий. Во-первых, все методы интерфейса — абстрактные. А во-вторых — в назначении. Интерфейс — это, прежде всего, контракт. Именно благодаря интерфейсам мы сейчас имеем кучу технологий, основанных на СОМ — ActiveX, OLE DB, Automation и т.п. В .NET — то же самое.
WBR,
Yaroslav Govorunov
Re[2]: Interface
От: Шестаков Александр  
Дата: 30.05.01 05:04
Оценка:
Здравствуйте Ярослав Говорунов, вы писали:

ЯГ>Пожалуй, нет. Интерфейс в .NET похож на интерфейс в СОМ, а с абстрактным классом тут есть пара серьезных отличий. Во-первых, все методы интерфейса — абстрактные. А во-вторых — в назначении. Интерфейс — это, прежде всего, контракт. Именно благодаря интерфейсам мы сейчас имеем кучу технологий, основанных на СОМ — ActiveX, OLE DB, Automation и т.п. В .NET — то же самое.


Если мои абстрактные классы содержат только абстрактные методы и есть договоренность называть их, предположим с I (IFoo, например), и не измененять с момента опубликования (т.е. контракт) мы и получим ИНТЕРФЕЙС?
Если так, то не совсем понятно зачем эта игра слов и зачем вводить в язык (C#) дублирующие понятия. Ведь ЛЮБОЙ класс имеет ИНТЕРФЕЙС, а точнее несколько интерфейсов (сам класс и его друзья видят один интерфейс, производные классы другой и т.п.).
Re[3]: Interface
От: Edward Россия  
Дата: 30.05.01 06:42
Оценка:
Здравствуйте Шестаков Александр, вы писали:

ША>Здравствуйте Ярослав Говорунов, вы писали:


ЯГ>>Пожалуй, нет. Интерфейс в .NET похож на интерфейс в СОМ, а с абстрактным классом тут есть пара серьезных отличий. Во-первых, все методы интерфейса — абстрактные. А во-вторых — в назначении. Интерфейс — это, прежде всего, контракт. Именно благодаря интерфейсам мы сейчас имеем кучу технологий, основанных на СОМ — ActiveX, OLE DB, Automation и т.п. В .NET — то же самое.


ША>Если мои абстрактные классы содержат только абстрактные методы и есть договоренность называть их, предположим с I (IFoo, например), и не измененять с момента опубликования (т.е. контракт) мы и получим ИНТЕРФЕЙС?

ША>Если так, то не совсем понятно зачем эта игра слов и зачем вводить в язык (C#) дублирующие понятия. Ведь ЛЮБОЙ класс имеет ИНТЕРФЕЙС, а точнее несколько интерфейсов (сам класс и его друзья видят один интерфейс, производные классы другой и т.п.).

Есть много книг в которых доходчиво описано зачем нужна эта "игра слов"
например "Технологии ActiveX и OLE" Дэвида Чеппела, или "Inside OLE" Kraig Brockschmidt'а
имхо не стоит браться изучать .NET не изучив хотя бы основных положений COM
Re[4]: Interface
От: Шестаков Александр  
Дата: 30.05.01 07:25
Оценка:
Здравствуйте Edward, вы писали:

E>Есть много книг в которых доходчиво описано зачем нужна эта "игра слов"

E>например "Технологии ActiveX и OLE" Дэвида Чеппела, или "Inside OLE" Kraig Brockschmidt'а
E>имхо не стоит браться изучать .NET не изучив хотя бы основных положений COM


Книги действительно замечательные я их читал некоторое время назад, но давайте разделим понятия.
Есть технологии в которых используется понятие интерфейса для простоты восприятия (хотя в глубине все интерфейсы и IUnknown в частности — это обычный чисто абстрактный клас С++) и есть язык программирования (С#) в который это понятие введено синтаксически.
Прочитав спецификацию языка мне вдруг стало интересно:
1. зачем это (interface) нужно, если есть абстрактные классы
2. если интерфейс это контракт — почему нет встроенного контроля версий интерфейсов (или я не нашел ссылки что он есть?)
3. почему множественное наследование возможно только для интерфейсов
Re[5]: Interface
От: Odissey Россия http://malgarr.blogspot.com/
Дата: 30.05.01 08:02
Оценка:
Здравствуйте Шестаков Александр, вы писали:

ША>Прочитав спецификацию языка мне вдруг стало интересно:

ША>1. зачем это (interface) нужно, если есть абстрактные классы

инрефейс может быть реализован на VB, FoxPro, Java, Delphi и т.д. Там -то с какого бока абстрактные классы C++?

ША>2. если интерфейс это контракт — почему нет встроенного контроля версий интерфейсов (или я не нашел ссылки что он есть?)


он вроде как есть — см. http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/midl/mi-laref_1df2.htm
но нифига не работает, не понятно, где тут собака порылась.

А вообще в книжках по основам COM пишут, что никаких версий у интерфейса нет, что-то поменял, меняй GUID и это уже другой интерфейс
Re[6]: Interface
От: Шестаков Александр  
Дата: 30.05.01 08:15
Оценка:
Здравствуйте Odissey, вы писали:

O>Здравствуйте Шестаков Александр, вы писали:


ША>>Прочитав спецификацию языка мне вдруг стало интересно:

ША>>1. зачем это (interface) нужно, если есть абстрактные классы

O>инрефейс может быть реализован на VB, FoxPro, Java, Delphi и т.д. Там -то с какого бока абстрактные классы C++?


ША>>2. если интерфейс это контракт — почему нет встроенного контроля версий интерфейсов (или я не нашел ссылки что он есть?)


O>он вроде как есть — см. http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/midl/mi-laref_1df2.htm

O>но нифига не работает, не понятно, где тут собака порылась.

O>А вообще в книжках по основам COM пишут, что никаких версий у интерфейса нет, что-то поменял, меняй GUID и это уже другой интерфейс



Спасибо, но я говорил о понятии интерфейса в языке C#.
interface iFoo
{
void Method1();
void Method2();
} и т.п.
Должен ли разрботчик на этом языке догадываться о механизмах работы VB или FoxPro?
Re[7]: Interface
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.05.01 19:42
Оценка:
Здравствуйте Шестаков Александр, вы писали:

O>>А вообще в книжках по основам COM пишут, что никаких версий у интерфейса нет, что-то поменял, меняй GUID и это уже другой интерфейс


Ага! Вот только с GUID-ми в шарпе туго :).

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

Абстрактный класс есть класс, все методы которого не определены. Физически для реализации интерфейсов была взята MS-ная реализация VTbl-а то есть абстрактный класс может использоваться для реализации COM-интерфейсов а может и не являться. Улавливаете?

Стандарт C++ не гарантирует ни то, что методы в VTbl будут расположены в соответствии с их расположением в описании класс ни саму реализацию виртуальных функций через VTbl. C++ — это не бинарный стандарт, а Interface в COM бинарный. То что большинство современных компиляторов похоже на VC, это уж следствие лидерства MS и популярности COM

Идея интерфейсов вообще не подразумевает ни классов, ни наследования (они поддерживаются даже в голом C).

.Net пока что не поддерживает множественного наследования. А по мне, чем замораживаться с абстрактными классами, лучше использовать простую и понятную концепцию интерфейса. Причем интерфейса как абстракции, а не как конкретной реализации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Interface
От: MagOnRSDN  
Дата: 08.08.01 06:08
Оценка:
Здравствуйте VladD2, вы писали:

VD>Здравствуйте Шестаков Александр, вы писали:


O>>>А вообще в книжках по основам COM пишут, что никаких версий у интерфейса нет, что-то поменял, меняй GUID и это уже другой интерфейс


VD>Ага! Вот только с GUID-ми в шарпе туго :).


VD>По делу же могу сказать, что читайте описания в первоисточника...

VD>Интерфейс (в COM) есть некая абстракция (для человека) и бинарный стандарт, гарантирующий местоположение методов и описывающий стандарт укладки параметров в стек (или регистры).

VD>Абстрактный класс есть класс, все методы которого не определены. Физически для реализации интерфейсов была взята MS-ная реализация VTbl-а то есть абстрактный класс может использоваться для реализации COM-интерфейсов а может и не являться. Улавливаете?


VD>Стандарт C++ не гарантирует ни то, что методы в VTbl будут расположены в соответствии с их расположением в описании класс ни саму реализацию виртуальных функций через VTbl. C++ — это не бинарный стандарт, а Interface в COM бинарный. То что большинство современных компиляторов похоже на VC, это уж следствие лидерства MS и популярности COM



Привет всем! Я могу сказать что имеено это написанно в такой книжечке как "Основы COM" [Дейл Роджерсон].
Она не толстая и понятная, хотя не новая.



VD>Идея интерфейсов вообще не подразумевает ни классов, ни наследования (они поддерживаются даже в голом C).


VD>.Net пока что не поддерживает множественного наследования. А по мне, чем замораживаться с абстрактными классами, лучше использовать простую и понятную концепцию интерфейса. Причем интерфейса как абстракции, а не как конкретной реализации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.