03.09.2002, 17:48 | #1 |
Участник
|
Наследование от Object
Добрый день,
Кто-нибудь пробовал создавать классы наследованные от Object ? Я создаю класс наследованный от Object, но при вызове метода super() в его конструкторе, выдается ошибка, что вызов этого метода в данном контексте запрещен. Если не вызывать super или вообще не перегружать конструктор, то при попытке создания экземпляра моего класса выдается ошибка, что объект Object не инициализированн. Может быть кто-то наступал уже на эти грабли? Поделитесь опытом. Заранее благодарен за помощь, программист группы компаний "Счастливый Кроха". |
|
04.09.2002, 13:50 | #2 |
Moderator
|
Вопрос: а какую задачу Вы хотите этим решить?
Вот цитата из хелпа: "Object is the base class that all other classes are derived from." Т.е. вроде как это и есть родитель всех классов.
__________________
Андрей. |
|
04.09.2002, 16:19 | #3 |
Участник
|
Угу, эту строку в хэлпе я видел...
Задача такая: необходимо создать класс, который будет постоянно висеть в памяти, проверяя наличие определенных событий, это делается с помощью метода Object::setTimeOut. Вот для этого я и хочу создать производный от Object класс. С уважением, программист группы компаний "Счастливый Кроха". |
|
04.09.2002, 16:32 | #4 |
Участник
|
У системного класса Object есть действительно есть метод setTimeOut, но он имеет модификатор final, т.е. его нельзя перекрыть. Непонятно, однако, для чего вообще нужно создавать производный класс для того чтобы использовать статический метод setTimeOut ?
|
|
04.09.2002, 19:12 | #5 |
Участник
|
Не уверен, что это метод (SetTimeOut) статический, по крайней мере, в документации это не указано. А вызывать надо для того, что, если я правильно понял, то этому методу должно передаваться имя функции, которая будет вызвана через определенное время. Но функция это должна быть методом того класса для которого вызывается SetTimeOut, иначе не работает. Я пробовал создать какой-нибудь экземляр класса, наследованного от Object, например Query. И в нем вызвать функцию SetTimeOut передавая ей имя метода того класса, в котором был создан этот Query. Что-то типа:
void run() { Query oQuery. oQuery = new Query(); oQuery.setTimeOut("run", 1000, false); } Таким образом это не работает. Наверное и не должно . Поэтому хочется создать своего потомка от Object. С уважением, программист группы компаний "Счастливый кроха". |
|
05.09.2002, 13:33 | #6 |
Участник
|
Цитата:
Изначально опубликовано rumpleteazer
Задача такая: необходимо создать класс, который будет постоянно висеть в памяти, проверяя наличие определенных событий, это делается с помощью метода Object::setTimeOut. Насчет объекта в памяти. Такие уже есть. Называются appl, global. Попробуй подлезть в них, вместо того, чтобы изобретать свой велосипед. Посмотри также на реализацию выполнения пакетов (batch) - они выполняются по запланированному графику. Но надо сказать, что в Аксапте не очень хорошо реализована парадигма агентов. Предполагается, что действия выполняются по требованию пользователя. Единственное, пожалуй исключение, пакеты (кстати, а почему не хочешь воспользоваться ими?) |
|
05.09.2002, 15:03 | #7 |
Участник
|
Цитата:
Изначально опубликовано mazzy
Насчет таймера. См. форму tutorial_timer ...... Единственное, пожалуй исключение, пакеты (кстати, а почему не хочешь воспользоваться ими?) А пакетами не хочу пользоваться потому, что не знаю, что это такое, и в первый раз от Вас слышу ))))))). Если не трудно поясните, plz. Или постараюсь потом разобраться сам, спасибо за маячок . Но мне кажется, что эта задача может быть довольно успешно решена, только с помощью таймера......вот если бы наследовать от Object )) С уважением, программист группы компаний "Счастливый кроха". |
|
05.09.2002, 16:32 | #8 |
NavAx
|
А я всетаки не понимаю, зачем явно наследовать, если любой класс, который ты создаешь, и так наследуется от Object.
И еще, run(), это метод формы, зря ты из него поток делать пытаешься. Лучше вынеси этот код в другой метод, вызови его из run() и пусть он себе в цикле крутится, а ты в это время что нибудь другое делай. P.S. А пакеты тебе освоить все равно придется, удобная вещь и совсем не сложная :-) |
|
05.09.2002, 16:32 | #9 |
Участник
|
пакеты - дело хорошее.
пакеты позволяют выполнить действия в заданное время на сервере. В частности, сервер периодически занимается опросом - нужно ли выполнять какое-либо задание. Эту часть можно взять в качестве примера. Хотя ИХМО лучше просто воспользоваться пакетами См. Главное меню \ Разное \ Пакеты Описание настройки пакетов в руководстве администратора. |
|
05.09.2002, 16:37 | #10 |
----------------
|
Может лучше сделать invisible форму.. у нее setTimeOut точняк работает
|
|
05.09.2002, 16:54 | #11 |
Участник
|
Цитата:
Изначально опубликовано macklakov
А я всетаки не понимаю, зачем явно наследовать, если любой класс, который ты создаешь, и так наследуется от Object. Цитата:
Изначально опубликовано macklakov
И еще, run(), это метод формы, зря ты из него поток делать пытаешься. Лучше вынеси этот код в другой метод, вызови его из run() и пусть он себе в цикле крутится, а ты в это время что нибудь другое делай. А сама Аксапта разве многопоточна? |
|
05.09.2002, 18:01 | #12 |
NavAx
|
Цитата:
Изначально опубликовано mazzy
Может быть я ошибаюсь, но от Object наследуется, если создаешь форму, таблицу, отчет в репозитарии. Если создаешь класс, то вроде автоматически не наследуется. Ты попробуй "...Object is the base class that all other classes are derived from. This means that assignment of an object of any class to a variable of class "object" is always valid, and that the methods in cass Object can be called for any object..." перевожу: a_method{ ClassA a; Object obj; ; a = new ClassA(); obj = a; obj..setTimeOut("a_method", 1000, false); } Цитата:
Изначально опубликовано mazzy
А разве Аксапта работает с потоками? А сама Аксапта разве многопоточна? |
|
05.09.2002, 18:40 | #13 |
Участник
|
Цитата:
Изначально опубликовано macklakov
Object is the base class that all other classes are derived from. Посмотри в перекрестных ссылках кем он используется. Цитата:
Изначально опубликовано macklakov
в tutorial_timer два метода крутятся в параллельных потоках, или я что-то неправильно понял? |
|
05.09.2002, 20:15 | #14 |
NavAx
|
Цитата:
Изначально опубликовано mazzy
Насчет all это они загнули. Посмотри в перекрестных ссылках кем он используется. Цитата:
Изначально опубликовано mazzy
А с чего ты взял, что в потоках? Вроде нигде этого не написано. Или я пропустил? |
|
05.09.2002, 20:52 | #15 |
Участник
|
Хм... У меня тоже.
Но есть ветка System documentation \ Classes. Там находишь Object и вперед по перекрестным ссылкам. Хм... действительно, ПЯТАЧОК. thread of execution... Спасибо. |
|
10.09.2002, 16:29 | #16 |
Участник
|
2macklakov:
Цитата:
Изначально опубликовано macklakov
"...Object is the base class that all other classes are derived from. This means that assignment of an object of any class to a variable of class "object" is always valid, and that the methods in cass Object can be called for any object..." перевожу: a_method{ ClassA a; Object obj; ; a = new ClassA(); obj = a; obj..setTimeOut("a_method", 1000, false); } Вот. С уважением, программист группы компаний "Счастливый Кроха". |
|
13.09.2002, 17:58 | #17 |
NavAx
|
Да, ты прав, в моем примере ClassA должен явно наследоваться от Object. Позор мне, должен был проверить, перед тем, как публиковать... :-(
P.S. Учитесь на моем горьком опыте: не доверяйте документации, все нужно проверять. |
|
26.10.2004, 12:41 | #18 |
Участник
|
Цель: написание агента который висел бы в памяти и выполнял нужные действия с какой-то переодичностью
Вот класс который наследуется от Object: PHP код:
Но! Если добавить вызов main в Application.startupPost() или другие места где выполняется код при старте системы, то метод doWork() отрабатывает один раз и тишина. Где грабли? Подскажите кто знает. Заранее благодарю |
|
26.10.2004, 12:53 | #19 |
Участник
|
Я уже реализовывал эту концепцию (объект принудительно наследованный от Object с целью поиметь методы setTimer()), для реализации драйвера сканнера штрих-кодов, который периодически опрашивает внешний COM-объект на наличие свежих данных и всё прекрасно работает.
Твои грабли кажется заключаются в манипуляциях с globalCache - я просто запоминал ссылку на свой объект в классе appl и всё работает без проблем. |
|
26.10.2004, 12:58 | #20 |
Участник
|
Цитата:
Изначально опубликовано Alks
Твои грабли кажется заключаются в манипуляциях с globalCache - я просто запоминал ссылку на свой объект в классе appl и всё работает без проблем. |
|