Статистика: Добавлено daesher — 31.10.2015 07:48:34
Статистика: Добавлено скалогрыз — 30.10.2015 15:24:12
Код:
PInterface = ^TInterface;
TInterface = record
obj: pointer;
Metod1: procedure (AObj: pointer; ...);
Metod2: procedure (AObj: pointer; ...);
...
end;
скалогрыз писал(а):Второй пример, почему в С++, описание класса должно идти целиком.
Статистика: Добавлено Mikhail — 30.10.2015 07:42:41
Статистика: Добавлено скалогрыз — 30.10.2015 04:43:48
Статистика: Добавлено скалогрыз — 30.10.2015 00:33:55
Статистика: Добавлено stanilar — 29.10.2015 23:23:04
Статистика: Добавлено скалогрыз — 29.10.2015 23:12:28
скалогрыз писал(а):1 интерфейc обслуживает 1 класс.
Статистика: Добавлено stanilar — 29.10.2015 23:09:04
Статистика: Добавлено daesher — 29.10.2015 23:00:31
Статистика: Добавлено скалогрыз — 29.10.2015 22:59:54
скалогрыз писал(а): Один раз в IMyStuff, второй раз в TMyStuff.
скалогрыз писал(а):дважды
Статистика: Добавлено stanilar — 29.10.2015 22:49:01
Код:
interface
type
IMyStuff = interface()
public
procedure MakeMeHappy;
end;
implementation
type
TMyStuff = class(TObject, IMyStuff)
private
data : TMyHiddenData;
public
procedure MakeMeHappy;
end;
stanilar писал(а):Ну не, это не полный список. Пресловутый полиморфизм, который в этой ветке пытаются реализовать в виде {$IFDEF WINDOWS}/{$IFDEF UNIX}, красивее выглядит именно на них.
Статистика: Добавлено скалогрыз — 29.10.2015 22:38:07
скалогрыз писал(а):они нужнее когда либо... либо...
Mikhail писал(а):а не изменения иначе это жуткое нарушение принципа абстракции
Mikhail писал(а):Вообще, при реализации через интерфейсы есть только один недостаток - более низкая производительность.
Mirage писал(а):и привязки к подсчету ссылок, который редко когда нужен.
Статистика: Добавлено stanilar — 29.10.2015 22:29:45
Mikhail писал(а):Вообще, при реализации через интерфейсы есть только один недостаток - более низкая производительность.
Статистика: Добавлено Mirage — 29.10.2015 22:13:35
Mikhail писал(а):скалогрыз писал(а):Ну как бы interface получится надстройкой над ооп классом.
Нет, просто по другому интерфейс в паскале не сделаешь.
Код:
type
PMyInterface = ^TMyInterface;
TMyInterface = object
procedure DoSomething; virtual; abstract;
function GetFoo: LongInt; virtual; abstract;
end;
PBlablabla = ^TBlablabla;
TBlablabla = object(TFoofoofoo)
public type
PInterface = ^TInterface;
TInterface = object(TMyInterface)
private
FBlablabla: PBlablabla;
public
constructor Init(Blablabla: PBlablabla);
procedure DoSomething; virtual;
function GetFoo: LongInt; virtual;
end;
private
FInterface: TInterface;
public
constructor Init;
procedure DoSomething;
function GetFoo: LongInt;
function AsInterface: PMyInterface;
end;
...
constructor TBlablabla.Init;
begin
FInterface.Init(@Self);
end;
...
function TBlablabla.AsInterface: PMyInterface;
begin
Result := @FInterface;
end;
Статистика: Добавлено Дож — 29.10.2015 10:21:19
скалогрыз писал(а):в тех случаях когда public часть меняется.
Статистика: Добавлено Mikhail — 29.10.2015 08:38:56
Статистика: Добавлено скалогрыз — 29.10.2015 04:32:07
Статистика: Добавлено stanilar — 29.10.2015 01:59:11
Статистика: Добавлено Лекс Айрин — 28.10.2015 11:34:10
как иначе он заменит свойства на вызовы приватных методов и доступ к приватным полям?
Статистика: Добавлено daesher — 28.10.2015 11:32:31
Статистика: Добавлено Дож — 28.10.2015 11:18:29
Статистика: Добавлено daesher — 28.10.2015 10:51:56
Идея разбить описание класса на две части фактически нарушает эту логику: компилятору придётся поднимать в ppu из секции implementation описание класса, как вариант - создавать "дырявое" описание для класса, но что-то надо будет делать со свойствами.
Статистика: Добавлено Дож — 28.10.2015 09:53:22
Статистика: Добавлено daesher — 28.10.2015 07:49:39
Лекс Айрин писал(а):К тому же, если указанный способ решит проблему, то неважно насколько он будет медленным или дилетантским -- он будет работать, а значит профи смогут его улучшить. А не смогут, так придумают новый. А не решит, так я посмотрю где ошибка(и) и сделаю заново, с учетом этого.
Статистика: Добавлено Mirage — 27.10.2015 22:24:06
Дож писал(а):Под АТД такое подразумевается? Такое должно быть разрешено в любом случае.
Дож писал(а):Комментарии для таких генераторов, как правило, очень механически написаны, с излишним синтаксисом и т.д. — ухудшают читаемость и кода, и неочевидной информации редко содержат.
Это уже от автора зависит, а не от системы комментирования. :)
Статистика: Добавлено Дож — 27.10.2015 11:28:57
Дож писал(а):Комментарии для таких генераторов, как правило, очень механически написаны, с излишним синтаксисом и т.д. — ухудшают читаемость и кода, и неочевидной информации редко содержат.
Статистика: Добавлено Mikhail — 27.10.2015 10:27:00
Код:
type
TAbstract = object
protected
procedure DoAbstract; virtual; abstract;
end;
Проблема документирования надуманная, ИМХО, полно средств ее генерации из комментариев и все равно где именно в модуле она расположена.
Статистика: Добавлено Дож — 27.10.2015 10:23:14
Mirage писал(а):А усложнение от этого микроскопическое.
Статистика: Добавлено Mikhail — 27.10.2015 10:03:11