Форум: "Прочее";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизЧем отличается интерфейс от абстратного класса? Найти похожие ветки
← →
WondeRu © (2006-06-05 15:17) [0]чем больше отличий, тем лучше!
← →
kozhanov © (2006-06-05 15:18) [1]GUID"ом :)
← →
wicked © (2006-06-05 15:19) [2]названием....
← →
wicked © (2006-06-05 15:20) [3]плюс, не во всех языках есть понятие абстрактного класса.... равно как и понятие интерфейса....
так что отличие более концептуальное.... о... :)
← →
Kolan © (2006-06-05 15:23) [4]Интерфейс - контроакт, который должен выполнить класс реализующий его.
абстратный класс - класс методы которого не реализованы.
Я так понимаю..
Кста. до D2006 в Delphi небыло абстрактых классов.
← →
wicked © (2006-06-05 15:27) [5]
> Кста. до D2006 в Delphi небыло абстрактых классов.
были.... класс был абстрактным, если имел хотя бы один метод с пометкой "abstract"....
← →
tesseract © (2006-06-05 15:29) [6]
> Кста. до D2006 в Delphi небыло абстрактых классов.
Надо же а меня так доставало в D6 "Abstract Error"........ своего класса.
← →
Kolan © (2006-06-05 15:30) [7]Нет это абстрактные методы.
А вот такое в D7 не компилится...TDeviceManager = class abstract
end;
← →
Ega23 © (2006-06-05 15:32) [8]
> были.... класс был абстрактным, если имел хотя бы один метод
> с пометкой "abstract"....
Явно не было. Ты мог создать экземпляр такого класса.
← →
McSimm © (2006-06-05 15:36) [9]конструкторы абстрактными сделать :)
← →
Игорь Шевченко © (2006-06-05 15:38) [10]
> Чем отличается интерфейс от абстратного класса?
Тем, что его нельзя создать ?
← →
Lamer@fools.ua © (2006-06-05 16:03) [11]>Тем, что его нельзя создать ?
Это уже особенности реализации. Например, в .NET"е создать экземпляр абстрактного класса нельзя.
По сабджу: абстрактный класс в отличие от интерфейса может содержать некую реализованную функциональность.
← →
jack128 © (2006-06-05 16:07) [12]Ega23 © (05.06.06 15:32) [8]
Ты мог создать экземпляр такого класса.
в win32 и сейчас можно создать абстракный класс...
← →
For kaif (2006-06-05 16:11) [13]Класс может имплементировать несколько независимых интерфейсов, но не являться наследниками нескольких независимых абстрактных классов.
← →
Джо © (2006-06-05 16:20) [14]> [13] For kaif (05.06.06 16:11)
> Класс может имплементировать несколько независимых интерфейсов,
> но не являться наследниками нескольких независимых абстрактных
> классов.
В C++ есть множественное наследование от классов.
← →
wicked © (2006-06-05 16:23) [15]
> В C++ есть множественное наследование от классов.
... и нет интерфейсов....
поэтому после постинга
> Lamer@fools.ua © (05.06.06 16:03) [11]
дискуссия стает флеймообразной..... ;)
← →
Kolan © (2006-06-05 16:32) [16]
> wicked © (05.06.06 16:23) [15]
Вообщем надо ждать Юрия Зотова :)
← →
oldman © (2006-06-05 16:38) [17]
> Чем отличается интерфейс от абстратного класса?
>
> чем больше отличий, тем лучше!
В ОРЕШНИК!!!!!!!!!!!!
← →
tesseract © (2006-06-05 16:41) [18]
> В C++ есть множественное наследование от классов.
До сих пор не въеду зачем это нужно.
← →
Игорь Шевченко © (2006-06-05 17:04) [19]
> До сих пор не въеду зачем это нужно.
Удобно
← →
oldman © (2006-06-05 17:10) [20]
> Игорь Шевченко © (05.06.06 17:04) [19]
>
> > До сих пор не въеду зачем это нужно.
>
>
> Удобно
"Дэвушка, а это Вам кто нибудь-сказал, или вы сами так решили?" (Кин-Дза-Дза ©)
:)))
← →
Игорь Шевченко © (2006-06-05 17:13) [21]oldman © (05.06.06 17:10) [20]
Тебе не с кем пообщаться ?
← →
oldman © (2006-06-05 17:18) [22]
> Игорь Шевченко © (05.06.06 17:13) [21]
Мне, например, удобны совсем другие вещи...
Ну и что?
← →
wicked © (2006-06-05 17:23) [23]
> Мне, например, удобны совсем другие вещи...
> Ну и что?
а то.... возможность есть, а использовать её или нет - дело программиста... множественное наследование удобно, если применено с большим умом и в ограниченном количестве, особенно в качестве "the last resort".... а в некоторых технологиях просто необходимо, например, при программировании COM...
к слову сказать, ни разу его не использовал....
извините, что встреваю....
← →
oldman © (2006-06-05 17:28) [24]
> wicked © (05.06.06 17:23) [23]
По сабжу - невозможно понять, что он имел ввиду...
"Интерфейс" и "класс" вообще-то разные понятия (с точки зрения меня)...
← →
tesseract © (2006-06-05 17:42) [25]
> "Интерфейс" и "класс" вообще-то разные понятия (с точки
> зрения меня)...
интерфейс в преводе с английского "междумордие", Соглашение с помощью которого возможно согласованное взаимодействие между чем-либо.
У каждого класса есть интерфейсная часть.
← →
kaif © (2006-06-05 18:38) [26]Разница такая же, как между грибом несъедобным и грибом ядовитым.
← →
Бурундук © (2006-06-05 19:38) [27]1) управляемое время жизни (для .NET непринципиально, там всё такое)
2) нет множественного наследования интерфейсов (как в .NET - не знаю)
(т.е. IZ = interface(IX, IY){...}; )
3) GUID + IUnknown
4) полное отсутствие данных, невиртуальных методов
и реализации виртуальных методов
(в С++, напр, даже чисто виртуальная ф-я может иметь реализацию)
5) автоматическое приведение к базовому интерфейсу не
поддерживается
(по GUID"ам двух интерфейсов нельзя сделать вывод, находятся ли они
в родстве или нет.)
Объект должен самостоятельно поддерживать как интерфейс-предок,
так и интерфейс-потомок. {Для .NET, скорее всего, это не так. Не знаю}
Больше ничего в голову не приходит.
← →
Юрий Зотов © (2006-06-06 00:09) [28]1. Класс может содержать поля, интерфейс - нет.
2. В терминологии D1-D7, абстрактный класс - это класс, имеющий хотя бы один абстрактный метод, а остальные его методы могут быть реализованы. Интерфейс же никаких реализаций не содержит в принципе.
← →
Sergey Masloff (2006-06-06 06:27) [29]Вопрос вообще некооректен. Надо уточнять что:
1) имеется в виду Delphi.
2) какой именно имеется в виду интерфейс
Потому что в C++ например абстрактный класс от интерфейса не отличается вообще ничем (более того это он и есть по определению). А само слово интерфейс имеет очень много значений и, вобщем-то, часто под интерфейсом понимают например интерфейс модуля (одноименную секцию в модуле паскаля или заголовочный файл в це)
← →
tesseract © (2006-06-06 09:31) [30]
> часто под интерфейсом понимают например интерфейс модуля
> (одноименную секцию в модуле паскаля или заголовочный файл
> в це)
> Соглашение с помощью которого возможно согласованное взаимодействие
> между чем-либо.
← →
Polevi © (2006-06-06 09:56) [31]>Потому что в C++ например абстрактный класс от интерфейса не отличается вообще ничем
???
class SomeClass
{
virtual void SomeMethod();
virtual void SomeAbstractMethod()=0;
};
SomeMethod содержит реализацию, см [28]
← →
Polevi © (2006-06-06 09:57) [32]или в с++ класс считается абстрактным только если все его методы=0 ?
← →
почитатель С++ (2006-06-06 10:16) [33]В C++ вообще понятия «интерфейс» нет. Есть понятие «абстрактный класс», это если хотя бы одна его ф-я описана как в [31]
virtual void SomeAbstractMethod()=0
. Есть соглашение о вызовах, есть смещение в VMT - вот их и можно расценивать как «интерфейс класса».
В Делфях-же (по крайней мере в ранних версиях) ключевое слово interface в том числе компенсировало отсутствие множественного наследования.
← →
kaif © (2006-06-06 10:19) [34]В Java интерфейс может иметь поля. Так в Java народ создает глобальные константы. Довольно смешной способ, на мой взгляд. Хотя почему бы нет?.. Зато всегда знаешь, к какой теме данная константа относится.
А вообще что думает объектно-ориентированный люд о константах?
Константы в ООП-идее могут существовать?
Или все глобальное нужно просто запретить на корню?
Вдруг кому-то константа не нравится какая-нибудь, например, число ПИ.
← →
isasa © (2006-06-06 10:36) [35]почитатель С++ (06.06.06 10:16) [33]
а разве в С описание интф-са не имеет атрибут
NOVMT class ...
← →
почитатель С++ (2006-06-06 12:35) [36]>>а разве в С описание интф-са не имеет атрибут
>>NOVMT class ...
Ни в одном описании стандарта никаких атрибутов типа NOVMT class нет. Это не более чем расширение, поддерживаемое одним из производителей. В данном случае NOVMT является не более чем каким-то макросом, который, по мнению разработчиков оболочки, упрощает(?) жизнь программистам. И от того, что это расширение поддерживается этим производителем, оно не становится стандартом.
"И это правильно, товарищи"(с).
← →
Sergey Masloff (2006-06-06 22:10) [37]Polevi © (06.06.06 09:57) [32]
> или в с++ класс считается абстрактным только если все его методы=0 ?
Формально пока хотя бы одна из функций со спецификатором чистоты - все равно абстрактный.
Но абстрактный класс со всеми чисто виртуальными функциями называется чисто конкрет... тьфу то есть чисто абстрактным.
А вот такой чисто абстрактный класс обзывается интерфейсом как у самого Страуструпа ($12.2) так и у Бокса, Роджерсона и примкнувшего к ним Брокшмидта
← →
DiamondShark © (2006-06-07 00:46) [38]
> Константы в ООП-идее могут существовать?
Дело не в ооп-идее, а в том, что создатели некоторых ооп-языков так увлеклись оопом, что забыли про такую штуку, как Модуль.
И вот от того, что в таких языках не оказалось явного понятия Модуля, вылезают всякие утюги, вот, вроде тех же констант, которые некуда запихать, кроме как в уродство вроде
public static readonly int MySupePuperConstant = 123;
← →
testerq (2006-06-07 09:42) [39]DiamondShark © (07.06.06 00:46) [38]
Модуль не поможет. Уж лучше писать MyClassA.MaxSize и MyClassB.MaxSize, чем MyClassA_MaxSize и MyClassB_MaxSize
← →
testerq (2006-06-07 09:44) [40]А если очень уж хочется, можно в качестве модуля использовать java-класс c вложенными классами, кодом инициализации и пр., причем в таком случае модули могут быть и вложенными, а не ограничиваются только одним уровнем.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.009 c