Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Избыточность данных при наследовании [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо