![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП
v2 © (2010-12-13 03:10:00)Можно ли создать (вызвать Create) дочерний объект из базового класса?
Юрий Зотов (2010-12-16 19:28:00) [1]
> v2 ©
Если Вам нужна всего лишь сериализация объектов, то зачем изобретать велосипед, когда в Delphi она есть уже готовая?
Кроме того, Вы идете не только нерациональным, но еще и заведомо неверным путем - та сериализация, которую Вы хотите сделать работать не будет, потому что среди полей объекта запросто могут быть длинные строки, динамические масссивы, объекты или любые другме указатели. Сериализовывать такие поля по принципу смещение+размер просто бессмысленно.
Не вдумались Вы в [9] - а зря, сами себя на три дня наказали.
v2 (2010-12-16 17:22:00) [2]Re: [72],[73]
Вам, наверное, здесь пряники раздают за количество постов, или как.
Ega23 (2010-12-16 17:15:00) [3]
> В итоге имеем очередную сагу об X, Y и Z:
Да, в яблочко.
Amoeba_ (2010-12-16 17:05:00) [4]В итоге имеем очередную сагу об X, Y и Z:
http://www.gunsmoker.ru/2008/10/x-y-z.html
v2 (2010-12-16 17:01:00) [5][0]:
>>Можно ли создать (вызвать Create) дочерний объект из базового класса?
[2]:
>Можно. Но вопрос поставлен некорректно, требуется уточнение.
[3]:
>> Базовый класс должен автоматизировать создание дочерних объектов из потока входящих данных
[4]:
>TChild = class (TAncestor)
>public
> constructor Create; override;
>end;
>TBase = class (.....)
> class procedure Load;
> property AncestorClass: TAncestorClass read FAncestorClass write >FAncestorClass;
>end;
[6]:
>>получаем TChild = class(TAncestor), а хотелось бы TChild = сlass(TBase)
[22]:
>Тебе уже показали, каким образом это делается.
[69]:
>Во, вот теперь всё ясно. Задачка стандартная, по сериализации различных объектов.
Прошу прощения за настойчивость, прокомментируйте кто-нибудь код (D2009) из поста [40]. Спасибо.
Anatoly Podgoretsky (2010-12-16 16:56:00) [6]> icWasya (16.12.2010 16:21:08) [68]
Ну что вы пристали, ну не может он.
icWasya (2010-12-16 16:21:00) [7]>А как бы Вы решали такую задачу?
Ну так задачу ты и неозвучил.
Ega23 (2010-12-16 16:21:00) [8]Во, вот теперь всё ясно. Задачка стандартная, по сериализации различных объектов. Встречается довольно регулярно. Решается тоже довольно просто.
Только вот незадача: последняя попытка была использована.
v2 (2010-12-16 16:06:00) [9]Servy, Спасибо! Воспользуюсь Вашим постом.
>Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла
>требовался минимум усилий.
[63]:
>но снова про то как ты это делаешь
>> Надо вызвать конструктор наследника из базового класса.
Да, и в решении такой задачи меня смущало именно это.
А как бы Вы решали такую задачу?
Inovet (2010-12-16 15:50:00) [10]> [65] v2 © (16.12.10 15:41)
> Увы, рассказали, что все плохо, ничем не помогли, и убежали.
Так ты ничего не рассказал
> [62] Ega23 © (16.12.10 14:05)
> объясни, что за задачу ты решаешь. Простыми словами, без
> своих догадок, как это надо сделать.
но снова про то как ты это делаешь
> [63] v2 © (16.12.10 14:48)
> Надо вызвать конструктор наследника из базового класса.
v2 (2010-12-16 15:41:00) [11]>За сим - откланиваюсь.
Увы, рассказали, что все плохо, ничем не помогли, и убежали.
_Юрий, спасибо!
> Сделайте виртуальные классовые методы, которые возвращают
> в потомках другие экземпляры переменной
Натолкнуло на мысль, которая помогла найти решение, хотя непосредственно Вашим советом и не воспользовался.
Ega23 (2010-12-16 15:09:00) [12]Попытка использована.
За сим - откланиваюсь.
v2 (2010-12-16 14:48:00) [13]>Я уже было понадеялся, что началось адекватное обсуждение.
Я тоже.
>"статичные классовые методы"
поправка:
>>не статичного классового метода
: классового метода без спецификатора static;
>> Self.Create;
работает, и решает задачу, а именно
>Простыми словами:
Надо вызвать конструктор наследника из базового класса.
Ваши комментарии.
Ega23 (2010-12-16 14:05:00) [14]Я уже было понадеялся, что началось адекватное обсуждение.
А нет. Опять бредни про ООП, опять "статичные классовые методы", опять "Self.Create".
Лично мне - уже надоело. Даю последнюю попытку: объясни, что за задачу ты решаешь. Простыми словами, без своих догадок, как это надо сделать.
v2 (2010-12-16 13:47:00) [15]>Это всё понятно и никакого отношения к ООП не имеет
Так я и хочу все это дело завернуть в ООП.
>Ну а вот дальше я нихрена не понял. Кто "мы"? Кого "нас"?
Просили "без кода", - это, один и тот же тип объектов.
>Какие "работяги"?
Базовый класс.
>Хорошая задача могла бы звучать так:
>Хочу уметь сохранять и загружать свои объекты, а именно значения их свойств, в файл.
>Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла
>требовался минимум усилий.
Ага, спасибо за понимание, и чтобы потом все загруженные объекты были под рукой, и при минимуме усилий освобождались при завершении.
>На такой вопрос, к примеру, ответ в ветке был дан.
Вы говорите о "[9]: См. справку по классу TPersistent." ?
Но у меня уже есть "мое, родное", и работает оно. И уже завернуто в ООП.
И мой ответ на мой вопрос [1] такой:
Self.Create; для не статичного классового метода
Но код мой [40] мастерами не признан был.
Вот и вопрос:
Как же такие ("Хорошая задача") задачи решают мастера и что не так в коде [40] ?
Ega23 (2010-12-16 10:00:00) [16]
> Боюсь, вы в очередной раз изложили не задачу, а ваш способ
> решения.
Да не, задача изложена нормально. Процедура, указатель из callback-функции, буфер данных.
Это всё понятно и никакого отношения к ООП не имеет.
> Чтобы вся рутинная работа выполнялась подальше, а 'мы' примазались
> бы к работягам, сказав, что функция теперь работает только
> на `нас`
Ну а вот дальше я нихрена не понял. Кто "мы"? Кого "нас"? Какие "работяги"?
Кто все эти люди?
Servy (2010-12-16 08:35:00) [17]
> Процедура, которой необходимо передать:
> - имя файла;
> - указатель на динамический массив целых со знаком (массив
> смещений);
> - указатель на функцию обратного вызова (должна возвратить
> указатель на блок памяти);
> - указатель, будет передан в функцию обратного вызова.
Боюсь, вы в очередной раз изложили не задачу, а ваш способ решения. Хорошая задача могла бы звучать так:
Хочу уметь сохранять и загружать свои объекты, а именно значения их свойств, в файл. Требуется создать такой класс, чтобы при наследовании от него для сериализации объекта и загрузки его назад из файла требовался минимум усилий. На такой вопрос, к примеру, ответ в ветке был дан.
То, что вы излагаете содержит какие-то массивы, указатели и прочие сущности, а нафига вы хотите их нагородить - не разъяснено. До выяснения, боюсь вам тут никто не поможет.
Германн (2010-12-16 01:57:00) [18]
> v2 © (16.12.10 01:15) [57]
И при чём тут ООП?
v2 (2010-12-16 01:15:00) [19]Что есть:
Процедура, которой необходимо передать:
- имя файла;
- указатель на динамический массив целых со знаком (массив смещений);
- указатель на функцию обратного вызова (должна возвратить указатель на блок памяти);
- указатель, будет передан в функцию обратного вызова.
Процедура открывает файл, проверяет наличие в нем данных и вызывает функцию обратного вызова, которая возвращает ей указатель, с которым дальше и работает процедура.
Примитивно, - копирует в (полученный указатель + смещениям с массива) порции данных с файла. Если массив смещений иссяк, а данные в файле есть – продолжаем с процедуры обратного вызова, переместившись в начало массива смещений. Если же данных в файле больше нет, то и все.
Что нужно:
Как-то записывать все то, что напередавала функция обратного вызова процедуре
Как нужно:
Чтобы вся рутинная работа выполнялась подальше, а 'мы' примазались бы к работягам, сказав, что функция теперь работает только на `нас` и имя файла теперь 'наш', заполнили бы массив смещений и инициировали вызов процедуры.
При этом таких 'мы' может быть много, и они потом желают видеть только 'своих' - записи-результаты функции.
ЗЫ
Словами получилось, четко - нет.
ЗЗЫ
Вот теперь это точно бред, … срочно спать.
KSergey (2010-12-15 22:14:00) [20]> Игорь Шевченко © (15.12.10 10:19) [27]
> а TotalCommander ты тоже купил ?
Предлагаю спросить еще про налоги.