Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
Ганна Юхимівна   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
15-1180461773
antonn
2007-05-29 22:02
2007.06.24
вопрос по .htaccess (наверное)


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


2-1180696771
Kolan
2007-06-01 15:19
2007.06.24
Далать что-то, если N раз возникнет исключение, то raise его.


4-1168944023
lead-in
2007-01-16 13:40
2007.06.24
CreateWindow, стили окна


2-1180622471
Bullfrog
2007-05-31 18:41
2007.06.24
Создание содержания к электронному учебнику





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский