Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Операции с данными класса - как организовать ?   Найти похожие ветки 

 
Ганна Юхимівна   (2007-04-23 15:38) [0]

Уважаемые Мастера !
Подскажите как лучше организовать в Delphi множество операций над данными класса.

Поясняю подробнее - есть классы с общим предком, инкапсулирующие неккоторые данные. Нужно сделать суммирование, вычитание и т.п. операции над полями класса. Аналог в C - class Complex - для работы с комплексными числами.

Но поскольку перегрузки операторов в Delphi 7 нету - помогите выбрать лучший способ :)

Будет ли это набор функций, может функции класса или еще что-то - затрудняюсь с выбором.


 
Reindeer Moss Eater ©   (2007-04-23 15:57) [1]

Сделать самый обычный виртуальный метод суммирования.


 
Джо ©   (2007-04-23 15:58) [2]

Я бы наследовался от TInerfacedObject и реализовал нужный интерфейс. Преимущество — автоматический учет ссылок и уничтожение. Ну, и использовал бы методы, принимающие параметры того же интерфейсного типа, т.е., в духе такого
 IMyComplex = interface
   function Add (Another: IMyComplex): IMyComplex;
   function ...
 end;

Ну, в таком роде...


 
Reindeer Moss Eater ©   (2007-04-23 15:59) [3]

может функции класса или еще что-то - затрудняюсь с выбором.

Функция класса здесь точно лишняя. К полям экземпляра ей доступ запрещен, значит данные передавать в параметрах. А в таком случае сойдет и обычная функция.


 
Ганна Юхимівна   (2007-04-23 16:28) [4]


> Reindeer Moss Eater ©   (23.04.07 15:57) [1]
> Сделать самый обычный виртуальный метод суммирования.


Поясните пожалуйста...

На данном этапе это реализовано примерно так

procedure XXXSum(Return: TDailyXXX; const Items: array of TDailyXXX);
var
 i, j: integer;
begin
 for i := Low(Return.Values) to High(Return.Values) do begin
   Return.Values[i] := 0;
   for j := Low(Items) to High(Items) do begin
     Return.Values[i] := Return.Values[i] + Items[j].Values[i];
   end;
 end;
end;


но отдельными процедурами некрасиво - хотелось бы эти функции сделать членами какого-то класса...

Джо ©   (23.04.07 15:58) [2]
Интерфейсы - хорошая мысль. Подумаю...


 
Юрий Зотов ©   (2007-04-24 13:44) [5]

type
 TComplex = packed record
   Re: extended;
   Im: exrended
 end;

function Add(X, Y: TComplex): TComplex;
begin
 ...
end;

И т.п.

И при чем тут объекты, интерфейсы, методы, поля и пр., если речь идет о самой обычной математике? Функцию для вычисления 2+2 тоже через объекты реализовывать будем?

Можно и так, конечно. Но возникает маленький вопрос: а при длинных цепочках вычислений, когда требуется высокое быстродействие (что в математических расчетах встречается вовсе не редко) - сколько лишнего времени сожрут накладные расходы на создание и уничтожение объектов, выделение и освобождение памяти... и пр., и пр.?

Объекты - они все же не для таких задач. Можно, конечно, забивать гвозди и вазой, но молотком - гораздо проще, быстрее и удобнее.



Страницы: 1 вся ветка

Текущий архив: 2007.06.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
3-1175522974
Stenfit
2007-04-02 18:09
2007.06.24
Запрос на выбор месяца по текущему месяцу


3-1175246867
Slava
2007-03-30 13:27
2007.06.24
DESCRIBE в FibPlus Script


2-1180679385
сирх
2007-06-01 10:29
2007.06.24
немогу разобраться с мемо


6-1164715186
-=MAXIMUS=-
2006-11-28 14:59
2007.06.24
как отправить на URL файл XML и получить ответ?


3-1175089999
Oleg_teacher
2007-03-28 17:53
2007.06.24
Копирование базы на парадоксе