powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите разобраться с интерфейсами
15 сообщений из 15, страница 1 из 1
Помогите разобраться с интерфейсами
    #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
Помогите разобраться с интерфейсами
    #32129262
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что, никто не использует интерфейсы? Тогда почему?

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


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

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

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

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

Да это и без интерфейсов можно сделать, если ты про наследование, полиморфизм и инкапсуляцию.
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами
    #32129329
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятное дело.
Но, во-первых, использование интерфейсов необходимо осветить.
Во-вторых, все таки охота разобраться с сабж. (первый постинг).
А то похоже, что взялся учить, сам не понимая.
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами
    #32129364
alr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
alr
Гость
А если так:
Код: plaintext
1.
2.
3.
ClassFactory.createMy: IMyInterfaceEx
begin
  Result := class.Create as IMyInterfaceEx;
end;
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами
    #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
Помогите разобраться с интерфейсами
    #32129456
Фотография maloi_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, как хорошо сейчас, когда много водки и пива. А как будет хреново завтра утром, в 7:00 вставать на работу !!!!!!
...
Рейтинг: 0 / 0
Помогите разобраться с интерфейсами
    #32129806
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, но вопрос остался открытым.

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

типа так:

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

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

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

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

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


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