Форум: "Потрепаться";
Текущий архив: 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