Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Чем отличается интерфейс от абстратного класса?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.054 c
2-1150449400
Тимофей Юрьевич
2006-06-16 13:16
2006.07.02
условие


2-1149882602
and31
2006-06-09 23:50
2006.07.02
Визуализация компонентов в цикле


15-1149682538
Vlad Oshin
2006-06-07 16:15
2006.07.02
Телевизор


3-1146726113
VadimSpb
2006-05-04 11:01
2006.07.02
Изменение типа поля


15-1149139763
Ega23
2006-06-01 09:29
2006.07.02
С Днём рождения! 1 июня