parserALT

Про пользовательские классы дураку растолкуйте

#1Sikoz
21.08.04 10:30
www.parser.ru → | ответить → | в избранное →

Про пользовательские классы дураку растолкуйте

Берем пример из мануала (класс guestbook)
1. Чем конструктор отличается от просто метода класса? Что мне мешает создать несколько методов, например @guestbook.show[], и т.д. ? Ведь работа с ними не будет отличаться от работы с классом. Нужно лишь вызывать из них по необходимости ^dbconect[]
2. Встала задача организовать работу с коллекциями: к примеру, есть описание таблицы в текстовом файле, и по нему нужно создать таблицу в БД, получить экземпляр коллекции и обновить его. Если это делать через пользовательские классы, то что будет конструктором? Могу я сделать несолько конструкторов (к примеру, один создает только Collection image,а другой - по нему делает выборку из БД)? Или я вообще всё неправильно делаю?
#2Никита Козин (Wonder)
→ Sikoz [#1] | 21.08.04 11:06 / 11:06
www.parser.ru → | ответить → | в избранное →

@guestbook.show[] — Это что такое?!

#3Sikoz
→ Никита Козин (Wonder) [#2] | 21.08.04 13:13
www.parser.ru → | ответить → | в избранное →

оператор

#4Sumo
→ Sikoz [#3] | 21.08.04 13:20
www.parser.ru → | ответить → | в избранное →

Это метод, а не оператор...

В Парсере классы можно использовать динамически и статически. То, что Вы хотите - это статическое использование класса [синтаксис естественно другой - смотрите в документации].

IMHO статические классы имеет смысл использовать в двух случаях: класс одержит отдельные общеупотребительные функции [пример - класс math в Парсере] или класс является контейнером констант, общих для всего проекта. Я не вижу причин по которым в случае с гостевой книгой у статических классов есть преимущества перед динамическими.
#5Sikoz
→ Sumo [#4] | 21.08.04 13:31
www.parser.ru → | ответить → | в избранное →
Я правильно понимаю, что статические классы(методы) можно вызывать сами по себе, а динамические - только создав объект класса и работая через него?
#6Sumo
→ Sikoz [#5] | 21.08.04 13:35 / 13:37
www.parser.ru → | ответить → | в избранное →

Да.

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

При этом надо помнить, что у статического класса тоже есть конструктор.
#7Sikoz
→ Sumo [#6] | 21.08.04 14:03
www.parser.ru → | ответить → | в избранное →

Re: сделал так

В файле aclass.p:
@CLASS
aclass

@amethod[]
amethod

@amethod2[]
^amethod[]

А потом это вызвал:

^aclass:amethod[]
$avar[^aclass::amethod[]]
^avar.amethod2[]

Всё работает нормально, но почему я после этого почувствовал себя полным дураком?...
Ну, вызвал метод сначала статически, затем динамически. Получил одно и то же...
#8Sumo
→ Sikoz [#7] | 21.08.04 14:18
www.parser.ru → | ответить → | в избранное →

Дело в следующем...

Классы содержат в себе не только методы, но и данные. Есть такое слово в ООП - инкапсуляция [т.е. объединение в данных и методов работы с этими данными]. Так вот эти самые данные могут быть разными, что прекрасно совмещается с динамическими классами - создал экземпляр класса, и работаешь с ним. При этом экземпляров может быть сколько угодно. Статический класс может быть только один. Теперь попробуйте реализоавть с помощью статического класса вывод на одной странице двух [трех, четырех и т.д.] новостных лент из разных источников...
#9Sikoz
→ Sumo [#8] | 21.08.04 14:43
www.parser.ru → | ответить → | в избранное →

^news:show[1,2,3,4]

#10Sumo
→ Sikoz [#9] | 21.08.04 15:16
www.parser.ru → | ответить → | в избранное →

:)))

Дальше обсуждать нечего, пока Вы не решите какой подход вам ближе: процедурный, объектно-ориентированный, фцнкциональный или какой-нибудь другой...
#11Sikoz
→ Sumo [#10] | 21.08.04 15:23
www.parser.ru → | ответить → | в избранное →

вот теперь что-то понял.

спасибо, буду решать, чего больше в коде мне нравится: точек с двоеточиями или точек с запятыми:)
#12Никита Козин (Wonder)
→ Sikoz [#11] | 21.08.04 16:05
www.parser.ru → | ответить → | в избранное →

:) — ;)