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

Вниз

Смена типа на ходу   Найти похожие ветки 

 
zorik ©   (2009-02-04 12:25) [0]

Имеется 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.


 
Медвежонок Пятачок ©   (2009-02-04 12:32) [1]

маета и бессмыслица какая-то


 
Сергей М. ©   (2009-02-04 12:41) [2]

Задача формализована "на пальцах", оттого и маета)


> zorik


Ты бы привел пример - содержимое этих 3-х файлов ..


 
Медвежонок Пятачок ©   (2009-02-04 12:49) [3]

походу у него список в котором экземпляры трех классов.

три процедуры.
одна идет по всем элементам и сохраняет свойства базового класса.
вторая идет по списку и сохраняет свойства наследника1 в отдельный файл
ну и третья, которая делает тоже самое со вторым наследником.

теперь пишется "собиратель-восстанавливатель" этого добра из трех файлов.


 
zorik ©   (2009-02-04 12:50) [4]

почему?

Реальная задача. Есть карта. Есть список скважин, которые надо нарисовать. В екселевском файле "список скважин для карты такойто" есть список: название скважины, координаты х, у. Еще есть файлы "параметры нефтяных скважин" и "параметры газовых скважин". В этих файлах для всех нефтяных скважин есть информация про: название скважины, добыча нефти, добыча воды, добыча газа; для всех газовых: название скважины, добыча газ, добыча конденсата. Так вот, надо пройтись по всех скважинах которые есть на карте, и в зависимости от того нефтяная или газовая нарисовать кружочки с секторами чего и сколько добыто )))

Неужели такого не было никогда. Что имеется список с елементами общего типа, а потом эти елементи нужно конкретизировать к конкретному типу, походному от общего?

Для конкретно этой задачи можно выкрутится обычным списком, но хочется чтоб красиво, в соответствии с правилами ООП


 
Медвежонок Пятачок ©   (2009-02-04 12:52) [5]

Доигрались.
У нефтяных магнатов нет бабок на программста


 
zorik ©   (2009-02-04 12:53) [6]


> Медвежонок Пятачок ©   (04.02.09 12:49) [3]


Файлы не я формирую. Файл с координатами заполняет юзер вручную, а файли с добычей -- стандартные, нам их присылают предприятия


 
zorik ©   (2009-02-04 12:54) [7]


> Медвежонок Пятачок ©   (04.02.09 12:52) [5]

а по делу ответить? )))


 
Плохиш ©   (2009-02-04 12:55) [8]

is может помочь нефтяным магнатам :-))


 
Медвежонок Пятачок ©   (2009-02-04 12:58) [9]

по делу отвечать пока нечего. ибо придумано уродливое чудище, и спрашивается как его причесать покрасивее.

зы если с файлами все так плохо, я все равно не стал бы их грузить на лету в свои списки-структуры.
предварительная обработка и приведение к своему виду, удобному для программы.


 
Сергей М. ©   (2009-02-04 13:02) [10]


> zorik ©   (04.02.09 12:53) [6]


"Общий список" - это что, объекты-скважины ?


 
zorik ©   (2009-02-04 13:02) [11]

тоже как вариант


 
zorik ©   (2009-02-04 13:06) [12]


> Сергей М. ©   (04.02.09 13:02) [10]


Общий список - список скважин с координатами

"Скважина" - найменование, координаты

"Нефтяная скважина" - походит от скважина + дополнительные параметры: добыча нефти, воды, газа

"Газовая скважина" - походит от скважина + дополнительные параметры: добыча газа, конденсата

Для "скважина" есть виртуальный метод "рисовать", реализация которого в нефтяной и газовой


 
Сергей М. ©   (2009-02-04 13:15) [13]

Чем не походит вот такая схема:

Объект "Некая скважина"

Свойства:

1. Координаты скважины
2. Тип скважины - (ХренЗнаетКакая, Нефтяная, Газовая, Нефтегазовая)
3. Данные о добыче - например, вариантный тип

Методы:

1. Рисовать (реализация ветвится в зависимости от свойства "Тип скважины")

?


 
Сергей М. ©   (2009-02-04 13:17) [14]


> 3. Данные о добыче - например, вариантный тип


Тут можно и объектный тип использовать


 
Dimka Maslov ©   (2009-02-04 13:24) [15]

классы должны иметь виртуальный метод который и вызывается при обработке списка. Вот и будет "в соответствии с правилами ООП"


 
clickmaker ©   (2009-02-04 13:39) [16]

> [12] zorik ©   (04.02.09 13:06)

ну так это и есть в соответствии с ООП
в чем тогда проблема?


 
zorik ©   (2009-02-04 13:40) [17]


> Сергей М. ©   (04.02.09 13:15) [13]


так и было, но это не есть хорошо...

но, как-то так и сделаю. может добавлю новый тип "данные о добыче" и его наследников. На самом деле там больше данных, чем только о добыче )))


 
zorik ©   (2009-02-04 13:43) [18]


> clickmaker ©   (04.02.09 13:39) [16]

В том что на этапе считавания координат я не знаю тип скважины (я их узнаю после того, как считываю другие файлы с параметрами) и соответственно, не знаю объект какого типа добавить в список. Так вот и спрашивал, возможно ли добавить предка, а потом его расширить (изменить) на одиного из наследников.


 
Сергей М. ©   (2009-02-04 13:55) [19]


> их узнаю после того, как считываю другие файлы с параметрами


Вот как узнаешь, так и добавляй.
Зачем сначала добавлять невесть что, а потом менять ? Какой в этом смысл, кроме [1] ?


 
Anatoly Podgoretsky ©   (2009-02-04 13:58) [20]

>   ()  []

> 2. Тип скважины - (ХренЗнаетКакая, Нефтяная, Газовая, Нефтегазовая)

Это не ООПешно


 
zorik ©   (2009-02-04 14:01) [21]


> Зачем сначала добавлять невесть что, а потом менять ? Какой
> в этом смысл, кроме [1] ?

чтобы добавить основные параметры (название и координаты) и сформировать список


 
Медвежонок Пятачок ©   (2009-02-04 14:04) [22]

пишем функцию, возвращающую базовый класс.
в ней открываем главный файл, читаем базовые свойства.
лезем в два оставшихся файла и уточняем, не наследники ли мы.
если нет, создаем базовый и возвращаем.
если да, то создаем сразу наследников, присваиваем свойства и тоже возвращаем.


 
Сергей М. ©   (2009-02-04 14:12) [23]


> zorik ©   (04.02.09 14:01) [21]


Да почему нельзя сразу формировать список конкретных классов ?!

Ведь информация-то для этого есть в тех самых файлах "параметры списка 1" ни "параметры списка 2" !

А если и файлов самих нет, то нафих тогда нужен этот бестолковый "общий список хрен знает каких скважин"  ?

Вот как будудт доступны все исх.данные для построения списка конкретных скважин, тогда и строй этот список)


 
Сергей М. ©   (2009-02-04 14:14) [24]


> zorik


Впрочем тебе видней, ревизия бардака в нефтегазовом бизнесе - штука тонкая и опасная)


 
Юрий Зотов ©   (2009-02-04 14:24) [25]

> сабж

Поскольку TMyItem1 = class(TMyItem) и TMyItem2 = class(TMyItem), то все объекты классов TMyItem1 и TMyItem2 также являются объектами класса TMyItem. Поэтому во "временном" списке и последующем "переприсваивании типа" нет никакой необходимости - можно сразу грузить объекты в постоянный список и все легко рулится на полиморфизме.

Пример - TCollection. Этот класс знает только о типе TCollectionItem, но умеет работать с любыми его потомками даже не зная их реального типа.


 
clickmaker ©   (2009-02-04 14:43) [26]

> на этапе считавания координат я не знаю тип скважины (я
> их узнаю после того, как считываю другие файлы с параметрами)
>

реально непонятно. Что - шеф сказал читать файлы строго последовательно и никак иначе?


 
Сергей М. ©   (2009-02-04 14:55) [27]


> Юрий Зотов ©   (04.02.09 14:24) [25]


> можно сразу грузить объекты в постоянный список


В том-то и дело, что автор и сам не знает что туда добавлять - то ли TMyItem1, то ли TMyItem2, поскольку на момент необходимости формирования "списка скважин" недостаточно инф-ции для дополнительной идентификации каждой из них.


 
Сергей М. ©   (2009-02-04 14:59) [28]


> zorik


А можно поинтересоваться, к чему вся эта затея со списком ?
Ну, положим, сформировал ты этот список - что дальше ?


 
zorik ©   (2009-02-04 15:19) [29]

Можно и сразу все файлы считать, но в списке только выбранные скважины, которые нужны, а в файлах все скважины что есть - нефтяные в одном, газовые в другом. Плюс, там данные о добыче за весь период, а мне надо выбирать на определенную дату.

Вручную алгоритм такой:
1. открываю файл общего списка. смотрю название и координаты скважины (х, у)
2. открываю нефтяной файл, ищу эту скважину. если нашел, то ищу данные на определенную дату. Нашел - записываю значения добычи нефти, газа, .... Если не нашел, то то самое с газовым файлом. Если нет ни там ни там, то лог или исключение. Если в 2-х файлах, то исключение.
3. Рисую "кружочки" добычи с цетрами в х, у и радиусом равным значениям добычи * коефициент (т.е. в масштабе). Рисуется разными цветами, заливкой и т.д. в зависимости от типа


 
MsGuns ©   (2009-02-04 15:19) [30]

>Медвежонок Пятачок ©   (04.02.09 12:52) [5]
>Доигрались. У нефтяных магнатов нет бабок на программста

Насколько я знаю у нефтегазконтор есть "большие" софт-подрядчики, которые разрабатывают весьма "крутое" ПО (иногда даже без кавычек крутое), которое деплоится по периферии. Но там оно не всегда "приживается" как надо либо не покрывает всех местных потребностей. Вот тогда местные и приглашают "программиста". А так как финансов на это "центр" не дает, то его зарплата обеспечивается собственными фондами, а они весьма невелики - отсюда и уровень.


 
zorik ©   (2009-02-04 15:20) [31]

и так в цикле по скважинах общего списка


 
Медвежонок Пятачок ©   (2009-02-04 15:24) [32]

Можно и сразу все файлы считать, но в списке только выбранные скважины, которые нужны, а в файлах все скважины что есть - нефтяные в одном, газовые в другом. Плюс, там данные о добыче за весь период, а мне надо выбирать на определенную дату.

и что мешает читать все файлы и выбирать только нужные данные?


 
zorik ©   (2009-02-04 15:27) [33]

Крутое по чаще покупается зарубежное, чем разрабатывается. Но это по хочет строгих входных данных в определенных форматах. Но у нас, входная информация хорошо если в екселе есть, а чаще на бумажке и совсем не структуризированая. Приходится выкручиватся самим. Центру по-барабану, он же ж купил крутое по.

Это лирический отступ не по этой теме. О наболевшем )))


 
Медвежонок Пятачок ©   (2009-02-04 15:42) [34]

я и сам было дело участвовал в качестве аутсорсера для нефтяных магнитов. Была написана некая надстройка над msproject.
Скважины там всякие, гидроразрывы пласта...
Была форма настройки параметров. Потом говорят: не хотим вводит наши хорошие параметры в ваши плохие формы, хотим параметры вводить в книгу ёкселя, а вы ее читайте.


 
zorik ©   (2009-02-04 15:45) [35]

ага, и еще можно в одну ячейку несколько данных вбивать, разделенных "/" или словами писать, там где числа должны быть


 
Сергей М. ©   (2009-02-04 16:24) [36]


> zorik ©   (04.02.09 15:19) [29]



> в списке только выбранные скважины, которые нужны


Хорошо.
Проделал ты всю эту петрушку.
Что дальше ?
В след.раз при старте программы опять будешь заново строить список заново и шариться по файлам исх.данных ?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.039 c
2-1233414166
SkyN
2009-01-31 18:02
2009.03.29
получить содержимое и нажать кнопку страницы открытой в браузере


15-1231098857
Kerk
2009-01-04 22:54
2009.03.29
Реконкиста


15-1233117545
Slider007
2009-01-28 07:39
2009.03.29
С днем рождения ! 28 января 2009 среда


2-1233154388
flaxe
2009-01-28 17:53
2009.03.29
Вопрос про работу с opengl


4-1207237164
Stan
2008-04-03 19:39
2009.03.29
Mapped файл





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский