Главная страница
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.02 c
15-1180109668
ProgRAMmer Dimonych
2007-05-25 20:14
2007.06.24
Подкиньте, пожалуйста, ссылку


10-1134133062
LORN
2005-12-09 15:57
2007.06.24
ексель->панель инструментов


6-1164965704
Novic
2006-12-01 12:35
2007.06.24
Запустить самостоятельный процесс на сервере


2-1180594297
Dimonnnmn
2007-05-31 10:51
2007.06.24
База данных


3-1175245543
Cara
2007-03-30 13:05
2007.06.24
Таблицы DBF.