Главная страница
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.022 c
15-1180280239
No_Dead
2007-05-27 19:37
2007.06.24
То же литература понадобилась, нужен совет


11-1162502592
SKA1997
2006-11-03 00:23
2007.06.24
function WndProc override


2-1180439008
Sasha Sanches
2007-05-29 15:43
2007.06.24
Аппраксимация...


15-1180250518
Koha_New_computer
2007-05-27 11:21
2007.06.24
Помогите излечить от вируса


15-1180505544
Эй.
2007-05-30 10:12
2007.06.24
FreeBSD