Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами / 15 сообщений из 15, страница 1 из 1
28.03.2003, 16:24
    #32129218
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Вечер, пятница, голова не варит. Извините, если что элементарное спрашиваю.
Честно искал в форуме, но не нашел.

Не могу понять, че я не так делаю.
Подозреваю, что неправильно понял концепцию интерфейсов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
IMyInterface = interface
 [{...}]
 procedure proc1;
end;

IMyInterfaceEx = interface(IMyInterface)
  [{...}]
  procedure procex;
end;

class = class(TInterfacedObject, IMyInterfaceEx)
public
  proc1;
  procex;
end;


ClassFactory = class
  class function createMy: IMyInterfaceEx;
end;
...

ClassFactory.createMy: IMyInterfaceEx
begin
  Result := class.Create;
end;

...

var a: IMyInterface;
begin
  a := ClassFactory.createMy; --Exception :((((

В чем проблема?
...
Рейтинг: 0 / 0
28.03.2003, 16:58
    #32129262
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Что, никто не использует интерфейсы? Тогда почему?

Или все уже подались грибочки с портвейном кушать?
...
Рейтинг: 0 / 0
28.03.2003, 17:08
    #32129271
maloi_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
ClassFactory.createMy
Перед тем как использовать мотоды класса нужно создать экземпляр класса.
Похоже у тебя сегодня был тяжелый рабочий день. :)
...
Рейтинг: 0 / 0
28.03.2003, 17:12
    #32129276
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Это же метод класса. Зачем его создавать?
...
Рейтинг: 0 / 0
28.03.2003, 17:31
    #32129302
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
>Что, никто не использует интерфейсы? Тогда почему?


Если скажешь какую-нибудь конкретную вишку от использования (точнее создания своих) интерфейсов, тока практическую пожалуйста, тогда мож и я попробую. А то проплывала тут одна книга, типа построение COM приложений в Delphi, так там примеры типа оптимальной загрузки машин. Это я и без интерфейсов сделаю. Прошу не считать меня критиком всего нового.
...
Рейтинг: 0 / 0
28.03.2003, 17:40
    #32129311
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
>>построение COM приложений в Delphi
Это совсем не COM приложение

>>критиком всего нового.
да и совсем не новое.

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

А, не, есть один пример.
Одно из приложений (не у нас :(( ) разрабатывается несколькими людьми и использует некоторые общие механизмы, типа security, persistence и т.п. Так разработчик этих механизмов написал интерфейсы, и если кто-то из других юзает эти его механизмы, то, соответственно, их классы должны реализовывать его интерфейсы. Я хоть и не учавствовал в разработке, но мне идея понравилась.
...
Рейтинг: 0 / 0
28.03.2003, 17:48
    #32129326
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
>Просто пытаюсь привить коллегам объектно-ориентированное мышление

Да это и без интерфейсов можно сделать, если ты про наследование, полиморфизм и инкапсуляцию.
...
Рейтинг: 0 / 0
28.03.2003, 17:51
    #32129329
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Понятное дело.
Но, во-первых, использование интерфейсов необходимо осветить.
Во-вторых, все таки охота разобраться с сабж. (первый постинг).
А то похоже, что взялся учить, сам не понимая.
...
Рейтинг: 0 / 0
28.03.2003, 18:50
    #32129364
alr
alr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
А если так:
Код: plaintext
1.
2.
3.
ClassFactory.createMy: IMyInterfaceEx
begin
  Result := class.Create as IMyInterfaceEx;
end;
...
Рейтинг: 0 / 0
28.03.2003, 23:39
    #32129448
maloi_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Честно говоря, я так и не понял для чего Вам нужна конкретная реализация интерфейсов и ручное создание фабрики классов. Просто привожу работоспособный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
program InterfaceTest;
uses Windows;

type

IMyInterface = interface
 ['{DF34FD7A-2921-4028-A894-BFE0895D5783}']
 procedure proc1; stdcall;
end;

IMyInterfaceEx = interface(IMyInterface)
  ['{923D24C4-65E8-46FF-8E7F-64D2C1B30F95}']
  procedure procex; stdcall;
end;

// Зарезервированные слова типа Class, стараюсь не использовать.
TMyClass = class(TInterfacedObject, IMyInterfaceEx)
public
  procedure proc1; stdcall;
  procedure procex; stdcall;
end;


var a: TMyClass;


{ TMyClass }

procedure TMyClass.proc1;
begin
  MessageBox(GetDesktopWindow, 'proc1', '', MB_ICONINFORMATION);
end;

procedure TMyClass.procex;
begin
  MessageBox(GetDesktopWindow, 'procex', '', MB_ICONINFORMATION);
end;

begin
  // Создаем экземпляр класса
  a:=TMyClass.Create; 
  // Вызываем процедуру № 1 
  a.proc1;
  // Вызываем процедуру №  2 
  // Если не использовать приведение типа, то это 
  //вызовет ошибку компиляции...
  IMyInterfaceEx(a).procex;
end.
...
Рейтинг: 0 / 0
29.03.2003, 00:47
    #32129456
maloi_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Блин, как хорошо сейчас, когда много водки и пива. А как будет хреново завтра утром, в 7:00 вставать на работу !!!!!!
...
Рейтинг: 0 / 0
31.03.2003, 08:12
    #32129806
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Интересно, но вопрос остался открытым.

Как же мне произвести восходящее преобразование?

типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var a:IMyInterface;

a := IMyInterface(ClassFactory.createMy);
      //В это месте ругается, что class не релизует интерфейс IMyInterface.
      //понятно, что не реализут, но ведь наследует путем реализации
      //IMyInterfaceEx!
      //Приведение интерфейсов, получается, невозможно так, как классов?
...
Рейтинг: 0 / 0
31.03.2003, 09:31
    #32129846
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Странно. А сегодня все получилось.

Видимо, трабл был в том, что была пятница, вечер.

Спасибо всем, кто ответил.
...
Рейтинг: 0 / 0
31.03.2003, 10:02
    #32129866
maloi_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Артем1

Сорри за сабж. Не увидел что там у тебя метод класса (с перепою). :)
...
Рейтинг: 0 / 0
31.03.2003, 10:18
    #32129881
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с интерфейсами
Да я сам, походу, с перепою это в пятницу делал.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]