Главная страница
    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.041 c
14-1095671996
icebeerg
2004-09-20 13:19
2004.10.10
Вот сподобился


4-1094639889
acidman
2004-09-08 14:38
2004.10.10
зная handle определить класс и имя приложения?


3-1094724364
skif
2004-09-09 14:06
2004.10.10
<B>Как заэкранировать символ ( )</B>


14-1095941853
Knight
2004-09-23 16:17
2004.10.10
Мигает экран при загрузке рабочего стола после чего...


14-1095432622
reticon
2004-09-17 18:50
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский