Про пользовательские классы дураку растолкуйте |
Берем пример из мануала (класс guestbook) 1. Чем конструктор отличается от просто метода класса? Что мне мешает создать несколько методов, например @guestbook.show[], и т.д. ? Ведь работа с ними не будет отличаться от работы с классом. Нужно лишь вызывать из них по необходимости ^dbconect[] 2. Встала задача организовать работу с коллекциями: к примеру, есть описание таблицы в текстовом файле, и по нему нужно создать таблицу в БД, получить экземпляр коллекции и обновить его. Если это делать через пользовательские классы, то что будет конструктором? Могу я сделать несолько конструкторов (к примеру, один создает только Collection image,а другой - по нему делает выборку из БД)? Или я вообще всё неправильно делаю? |
@guestbook.show[] — Это что такое?! |
оператор |
Это метод, а не оператор... |
В Парсере классы можно использовать динамически и статически. То, что Вы хотите - это статическое использование класса [синтаксис естественно другой - смотрите в документации].
IMHO статические классы имеет смысл использовать в двух случаях: класс одержит отдельные общеупотребительные функции [пример - класс math в Парсере] или класс является контейнером констант, общих для всего проекта. Я не вижу причин по которым в случае с гостевой книгой у статических классов есть преимущества перед динамическими. |
| Я правильно понимаю, что статические классы(методы) можно вызывать сами по себе, а динамические - только создав объект класса и работая через него? |
Да. |
Собственно любой класс можно использовать и тем и другим способом, но динамический в подавляющем большинстве случаев предпочтительнее.
При этом надо помнить, что у статического класса тоже есть конструктор. |
Re: сделал так |
В файле aclass.p: @CLASS aclass
@amethod[] amethod
@amethod2[] ^amethod[]
А потом это вызвал:
^aclass:amethod[] $avar[^aclass::amethod[]] ^avar.amethod2[]
Всё работает нормально, но почему я после этого почувствовал себя полным дураком?... Ну, вызвал метод сначала статически, затем динамически. Получил одно и то же... |
Дело в следующем... |
| Классы содержат в себе не только методы, но и данные. Есть такое слово в ООП - инкапсуляция [т.е. объединение в данных и методов работы с этими данными]. Так вот эти самые данные могут быть разными, что прекрасно совмещается с динамическими классами - создал экземпляр класса, и работаешь с ним. При этом экземпляров может быть сколько угодно. Статический класс может быть только один. Теперь попробуйте реализоавть с помощью статического класса вывод на одной странице двух [трех, четырех и т.д.] новостных лент из разных источников... |
^news:show[1,2,3,4] |
:))) |
| Дальше обсуждать нечего, пока Вы не решите какой подход вам ближе: процедурный, объектно-ориентированный, фцнкциональный или какой-нибудь другой... |
вот теперь что-то понял. |
| спасибо, буду решать, чего больше в коде мне нравится: точек с двоеточиями или точек с запятыми:) |
:) — ;) |