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

Вниз

Кто и как использует интерфейсы ?   Найти похожие ветки 

 
inic ©   (2004-09-20 18:04) [0]

речь идет не об OLE, где они нужны, а о других "сферах применения" ?


 
Гаврила ©   (2004-09-20 18:08) [1]

Класс реализуется и создается в DLL, наружу передается интерфейс
таким образом имеем одну экспортируемую функцию вместо кучи
или
"обучение" компонент (предка уже не изменть) каким то дополнительным действиям, например, поддержке механизма "UNDO"


 
inic ©   (2004-09-20 18:13) [2]


> "обучение" компонент (предка уже не изменть) каким то дополнительным
> действиям, например, поддержке механизма "UNDO"


Не очень понял :(


 
Суслик ©   (2004-09-20 18:13) [3]

1) имитация множественного наследования
2) разделение продукта на уровни абстракции


 
Суслик ©   (2004-09-20 18:14) [4]


> Не очень понял :(

Этта, а ты про интерфейсы что знаешь, сразу расскажи :)


 
Dimka Maslov ©   (2004-09-20 18:15) [5]

Я использую повсеместно, где это удобно


 
inic ©   (2004-09-20 18:18) [6]

> Суслик [4]

Знаю очень мало (это в мои-то годы :( ), и не надо сразу RTFM мне, ибо буду читать и его, но просто привык рассматривать что-то новое (и не очень) на примерах, а уже потом читать.


 
Суслик ©   (2004-09-20 18:26) [7]


>  [6] inic ©   (20.09.04 18:18)

Да ладно, забей.

Постановка твоего вопроса подразумевает знаниение предмета.
Имхо.


 
inic ©   (2004-09-20 18:28) [8]

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


 
Суслик ©   (2004-09-20 18:43) [9]

Вот

http://www.books.ru/shop/books/6414

Немного устаревшая книга, но про интерфейсы как таковые там рассказано хорошо. Советую прочесть (всего 185 руб и неделя ожидания доставки).


 
jack128 ©   (2004-09-20 18:50) [10]

inic ©   (20.09.04 18:28) [8]

Есть несколько форм, все должны уметь открывать/сохранять файлы. Но наследники у всех формы разные и это нельзя изменить.

Объявляем интерфейс
type
 IFileActions = interface
 {здесь GUID}
   procedure Open(AFileName: string);
   procedure Save;
   procedure SaveAs(AFileName: string);  
 end;

и реализуешь этот интерфейс в нужных формах
Под иммитацией множественного наследования, как я понимаю, имеют в виду создание класса имплементирующего этот интерфейс TFileActionsImpl и делегирование реализации интерфеса от форм этому классу с помощью зарезервированного слова implements.

теперь при нажатии кнопки SaveAs

procedure TMainForm.miSaveAsClick(Sender: TObject);
var
 fa: IFileActions;
begin
 // Предпологаю, что у нас MDI интерфейс
 if OpenDialog1.Execute and Assigned(ActiveMDIChild) and ActiveMDIChild.GetInterface(IFileActions, fa) then
    fs.SaveAs(OpenDialog1.FileName);
end;

Кстати, тут в недавней ветке Delphi vs C++ много говорили про то что подмешивать интерфейсы в классы(когда НЕ используешь счетчик ссылок интерфейса) - это жуть как плохо.. Хотя мое ИМХО, не все так страшно как описывают ;-)


 
jack128 ©   (2004-09-20 18:50) [11]

jack128 ©   (20.09.04 18:50) [10]
Но наследники у всех формы разные и это нельзя изменить

ПРЕДКИ разные, ессесено :-)


 
суслик ©   (2004-09-20 18:57) [12]


> Хотя мое ИМХО, не все так страшно как описывают

мое имхо такое же


 
vuk ©   (2004-09-20 22:07) [13]

to jack128 ©   (20.09.04 18:50) [10]:
>Кстати, тут в недавней ветке Delphi vs C++ много говорили про
>то что подмешивать интерфейсы в классы(когда НЕ используешь
>счетчик ссылок интерфейса) - это жуть как плохо..
Кстати, когда НЕ используется счетчик - как раз ничего страшного. А вот если используется - могут быть проблемы.


 
iZEN ©   (2004-09-20 23:43) [14]

to inic ©   (20.09.04 18:04).
Интерфейсы - суть КОНТРАКТ класса/объекта. Так что использование интерфейса - это абстрагирование от реализации с сохранением синтаксиса и семантики.

Ну, например, интерфейсы широко используются в построении расширяемых GUI-библиотек и PlugIn-движков.
Я стараюсь везде использовать обращения к объекту по интерфейсу, а не реализации и это неплохо получается: передавать в качестве параметра не объект какого-то класса, а объект, реализующий интерфейс - так гибче:

interface MyRemoteObject {
  //...
}
class MyRemoteImplObject implements MyRemoteObject {
  //...
}

class Test {
  void someMethod(MyRemoteObject obj) {
     //...
  }
  void testMethod() {
     MyRemoteImplObject myobj = new MyRemoteImplObject();
     someMethod(myobj);
  }
}



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
4-1094469016
Mamed
2004-09-06 15:10
2004.10.10
umensit size JPG fayla


9-1084737397
Жириновский_
2004-05-16 23:56
2004.10.10
как лучше сделать бой в рпг?


14-1095777825
ISP
2004-09-21 18:43
2004.10.10
Землетрясение в прибалтике...


1-1096053766
fatal
2004-09-24 23:22
2004.10.10
Событие "Скролл колесика мыши" в DBGrid


14-1095858515
Mike B.
2004-09-22 17:08
2004.10.10
Модератор на рыбалке