![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Избыточность данных при наследовании [D5, D6, Win95/98]
MaximatorVeter © (2002-05-12 20:03:00)Класс TPines наследуется от TTrees.
В конструкторе TTrees инициализируются значения общих видовых свойств(например интенсивность укоренения=10, и т.д.). Если создать массив экземпляров класса TPines, то будет повторяться информация об значениях общих видовых свойств.
Можно ли этого избежать?
Бурундук (2002-05-12 23:02:00) [1]Занимаюсь я физикой
(Измерением потенциала плазмы на токамаке Т-10 с помощью HIBP).
мой mail: reonid@yahoo.com
MaximatorVeter (2002-05-12 22:49:00) [2]Большое спасибо.
Чем по жизни занимаешься и как с тобой можно связаться.
Бурундук (2002-05-12 22:10:00) [3]Есть такой вариант:
Для каждого класса создать один специальный объект типа TTreesInfo (или его потомка - так можно добавить общеклассовое свойство), хранящий общеклассовую информацию, а в каждом экземпляре хранить ссылку на него.
MaximatorVeter (2002-05-12 21:44:00) [4]У меня 30-50 деревьев на площадке. И у всех одинаковые значенияобщевидовых.
Глянь http://niist.ntu-kpi.kiev.ua/USP/uod.htmlпункт 2.1.3. Хранение параметров и значений объектов. Там есть варианты А,В и С.
Можно (если да,то как) реализовать в Delphi пункты A и B?
Бурундук (2002-05-12 21:25:00) [5]Если ты хранишь общевидовые свойства в каждом экземпляре,
то никуда не денешься, надо инициализировать их в каждом объекте.
(В принципе, это может быть не так уж накладно).
Много у тебя таких свойств? И их количество постоянно для всех потомков TTrees или могут добавляться новые?
MaximatorVeter (2002-05-12 21:14:00) [6]Т.е. если:
var
Pines: array of TPines;
begin
SetLength(Pines,3);
Pines[1]:=TPines.Create;
Pines[2]:=TPines.Create;
Pines[3]:=TPines.Create;
end;
то только первое дерево сосны будет иметь интенсивность укоренения=10, остальные=0.
Не нарушает ли это объектный подход? Указатели может использовать?
Вопрос видимо не простой!
Бурундук (2002-05-12 20:35:00) [7]Если эти общевидовые св-ва реализаваны через глобальные переменные - то можно инициализацию таких св-в вынести в отдельную классовую процедуру
implemantation
var
TreesClassPropInitialized: Boolean = False;
class procedure TTrees.InitClassProp;
begin
if TreesClassPropInitialized then Exit;
TreesClassPropInitialized := True;
...
{Инициализация}
end;
constructor TTrees.Create(...);
begin
InitClassProp;
end;