Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить синтаксис паскаля(делфи) 
:(
    Опции темы
MAKCim
Дата 3.6.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
Как в С++ с метаклассами дела обстоят? 

что это в двух словах
типа класса Class в Java?

Добавлено через 2 минуты и 49 секунд
Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
А воспользоваться расширением для рефакторинга, которому надо будет передать имя класса и имя дл поля, и IDE  сформирует "скелет" по шаблону "Observer" - это не круто. аааа.... укусите меня за ногу....

гы  smile 
т. е Delphi IDE и Delphi язык уже неразрывно связаны?  smile 
а если нет у меня IDE, а есть, к примеру, компилятор и vim?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 3.6.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  3.6.2008,  18:26 Найти цитируемый пост)
типа класса Class в Java?

возможно. я практически не знаком с java. в Delphi, объект TClass может иметь значением ссылку на любой класс.
Код

TQuadro = class....
var BaseClass: TClass;
      SomeObject: TObject;
...
BaseClass:= TQuadro;
SomeObject:= BaseClass.Create();

чей-то навроде переменных-функций, только расширенное до класса.
Цитата(MAKCim @  3.6.2008,  18:26 Найти цитируемый пост)
т. е Delphi IDE и Delphi язык уже неразрывно связаны?

та ладно! Это же Религиозные войны  smile 
vim, кстати, вроде славился мощной системой расширений. вроде, на базе скриптов... вот и пишите скрипты smile
Кста, аргумент наводит на грустные размышления. Есть бесплатная среда с отладчиков и тп, но чтоб вот так - vi пользоваться взамен... ууу...
PM MAIL   Вверх
MAKCim
Дата 3.6.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



skyboy, 
не совсем понял про метаклассы
можно не кусок кода, а целостный рабочий пример?

Цитата(skyboy @  3.6.2008,  19:50 Найти цитируемый пост)
Кста, аргумент наводит на грустные размышления. Есть бесплатная среда с отладчиков и тп, но чтоб вот так - vi пользоваться взамен... ууу... 

нормальный пример
как раз показывает бредовость сравнения кодогенерации IDE с возможностями языка  smile 

Цитата(skyboy @  3.6.2008,  19:50 Найти цитируемый пост)
vim, кстати, вроде славился мощной системой расширений. вроде, на базе скриптов... вот и пишите скрипты

VIM и не на такое способен  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 3.6.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  16:49 Найти цитируемый пост)
Ну... это не банальный подсчёт ссылок. Насколько я знаю, ВМ просто хранит информацию о всех объектах и при запуске собрки мусора стоит граф объектов. "Висячие" части (не связанные со статическими полями, локальными переменными и т. д.) удаляются. То есть, это явно не подсчёт ссылок и реализуется это не на уровне отдельных классов (и не на уровне System.Object), а на уровне ВМ.

  На уровне чего происходит это вопрос условный,  <управляющий объект> тоже принадлежит системе, а чисто с объектной точки зрения, никто чужой не может менять внутренние данные объекта, потому все что анализирует внутренние данные объекта правильно считать его методами. Могу залезть в книгу и сказать точнее, но данные по ссылкам точно находятся в управляющем объекте, более того есть даже какие-то методы, которые доступны для использования.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
JackYF
Дата 4.6.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(skyboy @  3.6.2008,  18:18 Найти цитируемый пост)
А воспользоваться расширением для рефакторинга, которому надо будет передать имя класса и имя дл поля, и IDE  сформирует "скелет" по шаблону "Observer" - это не круто

А потом ещё два десятка расширений, чтобы это поддерживать?  smile Это же чистейшего рода копипаст smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
skyboy
Дата 4.6.2008, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(JackYF @  4.6.2008,  00:06 Найти цитируемый пост)
А потом ещё два десятка расширений, чтобы это поддерживать?

в смысле? смотря, какие расширения. мне вот хватает mmx model maker. 
учитывая, что mmx codeExplorer входит в Delphi начиная с какой-то там версии, то рефакторинг стал бесплатноприлагаемой фичей.
MMX CodeExplorer  + CnPack и я сплю спокойно smile

Добавлено через 9 минут и 17 секунд
Цитата(MAKCim @  3.6.2008,  18:57 Найти цитируемый пост)
а целостный рабочий пример?

признаться чесно, не могу сходу придумать настолько обоснованное применение, чтоб меня не запинали. Металкассы, так же, как и templates(когда немного-немного касался С++) для меня пока - слишком непонятная штука: не могу представить, как использовать: не дорос ещё. Потому пример приводить не буду, извини.
Только замечу, что суть в том, что сам класс тоже является объектом. Который можно хранить в переменной, передавать в функцию в виде параметра(не имя класса, а сам класс - кстати, теряется смысл объектной реализации паттерна Фабрика/Factory: мы и так при желании можем создавать объект любого произвольного класса). Вкупе с RTTI это дает выражения вроде
Код

someClassVar:= getClassByName('Tbutton');
button1:= someClassVar.Create(Form1);
button2:= someClassVar.Create(Form1);
button3:= someClassVar.Create(Form1);

PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)
Вкупе с RTTI это дает выражения вроде

рефлексии в С++ нет



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 4.6.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)

Код

someClassVar:= getClassByName('Tbutton');
button1:= someClassVar.Create(Form1);
button2:= someClassVar.Create(Form1);
button3:= someClassVar.Create(Form1);


такое поведение легко реализовать и без метаклассов smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Lazin @  4.6.2008,  10:38 Найти цитируемый пост)
такое поведение легко реализовать и без метаклассов smile  

как?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 4.6.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



MAKCim, видимо, он имеет в виду шаблон "Фабрика". ведь как раз она и предназначена для создания объектов заранее не определенного класса. Правда, приходится писать "лишний код", но в итоге-то функционал тот же, разве нет?  smile 
PM MAIL   Вверх
Lazin
Дата 4.6.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



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

std::map<std::string, boost::function<Control*(Form*)> > controls_factory;
...
controls_factory["Button"] = &Button.Create;
...
Button * btn = controls_factory["Button"](MainForm);

PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Lazin, 
проблема в том, что все классы придется регистрировать (причем статически)
getClassByName() же возвращает объект метакласса для любого класса (или я не прав?)
т. е полный аналог Class.forName() в Java


Это сообщение отредактировал(а) MAKCim - 4.6.2008, 11:45


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
Как в С++ с метаклассами дела обстоят? 

Плохо обстоят - не спорим smile

Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)
в смысле? смотря, какие расширения. мне вот хватает mmx model maker. 

Это уже мегакостыль. Всё - писать надо на асме фсё + мегаИДЕ, чтоб там генерила мегакод.


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



исправляюсь: getClass, а не getClassByName(редко пользую, не упомнил).
Цитата(MAKCim @  4.6.2008,  10:42 Найти цитируемый пост)
getClassByName() же возвращает объект метакласса для любого класса (или я не прав?)т. е полный аналог Class.forName() в Java

именно smile
вот оно - RTTI smile
впрочем, есть свои сложности - как быть, если конструктор не может быть вызван без параметров? или наоборот - мы вызываем с параметрами, а конструктор должен быть без параметров... нло это частные случае применения smile
это раз.
потом: получаемый т.о. класс должен быть потомком TPersistent(а не базового TObject). это два.
автоматически регистрируются только те классы, поля-объекты которых(в смысле, объекты каких классов) являются полями формы. Остальные классы надо "регистрировать" при помощи RegisterClass(уверен, сделано в целях повышения производительности: класс, который можно получить по имени должен быть в памяти даже если ни одного объекта такого класса не создается; значит, надо указывать явно, какие классы загружать: не размещать же в памяти всю VCL!). это три.

PM MAIL   Вверх
Lazin
Дата 4.6.2008, 12:03 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(MAKCim @  4.6.2008,  11:42 Найти цитируемый пост)
проблема в том, что все классы придется регистрировать (причем статически)

зато как дисциплинирует, плюс платишь только за то, что тебе нужно...
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.