Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
1-1095660056
П7
2004-09-20 10:00
2004.10.10
TTreeNode.Data - как правильно использовать?


14-1095926430
DiamondShark
2004-09-23 12:00
2004.10.10
Деловая игра "Инквизиция"


6-1091728035
Лёва З.
2004-08-05 21:47
2004.10.10
Кодировка сообщений в TNMSMTP


14-1095829330
YurikGL
2004-09-22 09:02
2004.10.10
1С и сеть


1-1096249314
Ryoko
2004-09-27 05:41
2004.10.10
Проверка буфера обмена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский