![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена типа на ходу [D6]
zorik © (2009-02-04 12:25:00)Имеется TMyList = class(TObjectList) и элементы в нем типа TMyItem. Также есть типы TMyItem1 = class(TMyItem) и TMyItem2 = class(TMyItem).
Нужно считать данные из файла "общий список" и заполнить ими TMyList. Потом считать данные из "параметры списка 1", найти в TMyList соответствующий елемент и как-то "изменить ему тип" из TMyItem на TMyItem1, чтоб присвоить доп. свойста которых нет в TMyItem. Тоже надо сделать с файлом "параметры списка 2". Те елементы которые не будут ни в "параметры списка 1" ни "параметры списка 2", но считаются с "общий список" надо добавить в лог и удалить.
Пока приходит в голову:
1. создать временный список для считывания общего списка, а потом его перприсвоивать
2. добавлять в TMyList елементы TMyItem. При считывании "параметры списка 1"создавать TMyItem1, переприсвоить ему значения TMyItem, потом удалять из списка TMyItem и вставлять TMyItem1.
clickmaker (2009-02-04 13:39:00) [21]> [12] zorik © (04.02.09 13:06)
ну так это и есть в соответствии с ООП
в чем тогда проблема?
Dimka Maslov (2009-02-04 13:24:00) [22]классы должны иметь виртуальный метод который и вызывается при обработке списка. Вот и будет "в соответствии с правилами ООП"
Сергей М. (2009-02-04 13:17:00) [23]
> 3. Данные о добыче - например, вариантный тип
Тут можно и объектный тип использовать
Сергей М. (2009-02-04 13:15:00) [24]Чем не походит вот такая схема:
Объект "Некая скважина"
Свойства:
1. Координаты скважины
2. Тип скважины - (ХренЗнаетКакая, Нефтяная, Газовая, Нефтегазовая)
3. Данные о добыче - например, вариантный тип
Методы:
1. Рисовать (реализация ветвится в зависимости от свойства "Тип скважины")
?
zorik (2009-02-04 13:06:00) [25]
> Сергей М. © (04.02.09 13:02) [10]
Общий список - список скважин с координатами
"Скважина" - найменование, координаты
"Нефтяная скважина" - походит от скважина + дополнительные параметры: добыча нефти, воды, газа
"Газовая скважина" - походит от скважина + дополнительные параметры: добыча газа, конденсата
Для "скважина" есть виртуальный метод "рисовать", реализация которого в нефтяной и газовой
Сергей М. (2009-02-04 13:02:00) [26]
> zorik © (04.02.09 12:53) [6]
"Общий список" - это что, объекты-скважины ?
zorik (2009-02-04 13:02:00) [27]тоже как вариант
Медвежонок Пятачок (2009-02-04 12:58:00) [28]по делу отвечать пока нечего. ибо придумано уродливое чудище, и спрашивается как его причесать покрасивее.
зы если с файлами все так плохо, я все равно не стал бы их грузить на лету в свои списки-структуры.
предварительная обработка и приведение к своему виду, удобному для программы.
Плохиш (2009-02-04 12:55:00) [29]
isможет помочь нефтяным магнатам :-))
zorik (2009-02-04 12:54:00) [30]
> Медвежонок Пятачок © (04.02.09 12:52) [5]
а по делу ответить? )))
zorik (2009-02-04 12:53:00) [31]
> Медвежонок Пятачок © (04.02.09 12:49) [3]
Файлы не я формирую. Файл с координатами заполняет юзер вручную, а файли с добычей -- стандартные, нам их присылают предприятия
Медвежонок Пятачок (2009-02-04 12:52:00) [32]Доигрались.
У нефтяных магнатов нет бабок на программста
zorik (2009-02-04 12:50:00) [33]почему?
Реальная задача. Есть карта. Есть список скважин, которые надо нарисовать. В екселевском файле "список скважин для карты такойто" есть список: название скважины, координаты х, у. Еще есть файлы "параметры нефтяных скважин" и "параметры газовых скважин". В этих файлах для всех нефтяных скважин есть информация про: название скважины, добыча нефти, добыча воды, добыча газа; для всех газовых: название скважины, добыча газ, добыча конденсата. Так вот, надо пройтись по всех скважинах которые есть на карте, и в зависимости от того нефтяная или газовая нарисовать кружочки с секторами чего и сколько добыто )))
Неужели такого не было никогда. Что имеется список с елементами общего типа, а потом эти елементи нужно конкретизировать к конкретному типу, походному от общего?
Для конкретно этой задачи можно выкрутится обычным списком, но хочется чтоб красиво, в соответствии с правилами ООП
Медвежонок Пятачок (2009-02-04 12:49:00) [34]походу у него список в котором экземпляры трех классов.
три процедуры.
одна идет по всем элементам и сохраняет свойства базового класса.
вторая идет по списку и сохраняет свойства наследника1 в отдельный файл
ну и третья, которая делает тоже самое со вторым наследником.
теперь пишется "собиратель-восстанавливатель" этого добра из трех файлов.
Сергей М. (2009-02-04 12:41:00) [35]Задача формализована "на пальцах", оттого и маета)
> zorik
Ты бы привел пример - содержимое этих 3-х файлов ..
Медвежонок Пятачок (2009-02-04 12:32:00) [36]маета и бессмыслица какая-то