Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.03.04 16:30
Оценка:
Сабж.
и солнце б утром не вставало, когда бы не было меня
Re: DataSet & OOP
От: _vovin http://www.pragmatic-architect.com
Дата: 05.03.04 16:53
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Сабж.


Некорректный вопрос.
Метаклассы естественным образом возникают в чисто объектных class-based языках. Без них не получилось бы завершенного рекурсивного дизайна системы.
Гибридные языки могут брать их (или отдельные черты, как в дельфи) на вооружение для получения каких-то определенных преимуществ.

--

Владимир.
Re: Нужны ли метаклассы????
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 05.03.04 17:16
Оценка:
Что ты понимаешь под метаклассами?
Re[2]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.03.04 10:19
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Что ты понимаешь под метаклассами?

Метакласс это стнглтон, являющийся наследственной виртуальной сущностью типа (не экземпляра объекта) и все принцыпы ООП распространяются и на него.
Это удобно когда работаешь с иерархией классов и приведение от базового типа, вызов конструкторов и class virtual методов как без создания экземпляра класса так и из него.
Если на данном например в Net С++ у класса могут существовать только статические методы и переменные, то метакласс вводит понятие виртуальных статических методов и переменных таких же как и для экземпляров типа но общие для данного типа
Те кто работал с Delphi знают и применяют так или иначе виртуальные конструкторы, статические виртуальные методы (class virtual) и конструкции языка типа
TVirtClass = class of TBaseVirtClass.
В Delphi метакласс это ссылка на VMT и все виртуальные методы класса (не экземпляра класса) располагаются с отрицательным смещением
И все метаклассы наследуются от
TClass= class of TObject.
{ Virtual method table entries }

vmtSelfPtr = -76;
vmtIntfTable = -72;
vmtAutoTable = -68;
vmtInitTable = -64;
vmtTypeInfo = -60;
vmtFieldTable = -56;
vmtMethodTable = -52;
vmtDynamicTable = -48;
vmtClassName = -44;
vmtInstanceSize = -40;
vmtParent = -36;
vmtSafeCallException = -32 deprecated; // don't use these constants.
vmtAfterConstruction = -28 deprecated; // use VMTOFFSET in asm code instead
vmtBeforeDestruction = -24 deprecated;
vmtDispatch = -20 deprecated;
vmtDefaultHandler = -16 deprecated;
vmtNewInstance = -12 deprecated;
vmtFreeInstance = -8 deprecated;
vmtDestroy = -4 deprecated;

Так не зная точного типа а только имея ссылку на него можно вызывать виртуальные конструкторы и методы класса.
И добавление виртуальных методов класса идет за счет расширения VMT в отрицательную сторону.
Но вводить переменные метакласса в Delphi нельзя.
Интересно как вышли из положения отсутствия метаклассов в Net в Delphi
http://www.rsdn.ru/Forum/Message.aspx?mid=548308&only=1
Автор: Serginio1
Дата: 24.02.04

http://www.rsdn.ru/Forum/Message.aspx?mid=558365&only=1
Автор: Serginio1
Дата: 03.03.04

http://www.rsdn.ru/Forum/Message.aspx?mid=559531&only=1
Автор: Serginio1
Дата: 04.03.04


Но опять же проблема определения данных классов не определена и доступ к метаклассу из объекта идет через хэш таблицу, а по идее адрес метакласса должен быть прописан в VMT.
typeof и GetType из Net возвращает по сути тот же метакласс, но он вопервых не типизирован и только переопределяет виртуальные методы базового класса Type и нет возможности его расширения.
Для меня лично необходимость метаклассов не оспорима, но интересно как к этому относится программистское сообщество. И может лишний раз заострить внимание на этой проблеме разработчиков компиляторов и сред.
и солнце б утром не вставало, когда бы не было меня
Re[3]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.03.04 18:35
Оценка:
Кстати в Net существуют поля readonly значение которого можно определять только в конструкторе. Если для метакласса создать конструктор по умолчанию и ввести такие переменные как поля метаклассов, то такие поля можно было бы вынести из объекта в метакласс тем самым уменьшая расход памяти (но увеличивая время на доступ)
и солнце б утром не вставало, когда бы не было меня
Re[3]: Нужны ли метаклассы????
От: _vovin http://www.pragmatic-architect.com
Дата: 09.03.04 18:53
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, DarkGray, Вы писали:


DG>>Что ты понимаешь под метаклассами?

S> Метакласс это стнглтон, являющийся наследственной виртуальной сущностью типа (не экземпляра объекта) и все принцыпы ООП распространяются и на него.

Какое-то сумасшедшее у тебя определение.
Метакласс это всего-лишь навсего класс, чьим экземпляром является класс обычных объектов.
Является ли он синглтоном — вовсе не обязательно. И к наследованию c виртуальностью имеет такое же отношение как и объект. Собственно в объектной системе все является объектом, в том числе и класс. Поэтому все свойства объекта, включая наличие класса должны быть ему свойственны.

--

Владимир.
Re[4]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.03.04 15:52
Оценка:
Здравствуйте, _vovin, Вы писали:

_>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, DarkGray, Вы писали:


DG>>>Что ты понимаешь под метаклассами?

S>> Метакласс это стнглтон, являющийся наследственной виртуальной сущностью типа (не экземпляра объекта) и все принцыпы ООП распространяются и на него.

_>Какое-то сумасшедшее у тебя определение.

_>Метакласс это всего-лишь навсего класс, чьим экземпляром является класс обычных объектов.
_>Является ли он синглтоном — вовсе не обязательно. И к наследованию c виртуальностью имеет такое же отношение как и объект. Собственно в объектной системе все является объектом, в том числе и класс. Поэтому все свойства объекта, включая наличие класса должны быть ему свойственны.

_>--


_>Владимир.


В данном случае я высказал свое видение метакласса как неотемлеммой части типа. А он должен быть как раз синглтоном.
Если взять Net то для класса существует методы и поля с директивой static, но толку от них мало когда работаем с неизвестным типом, в том числе они и ненаследуемы.
При введении понятия метакласса можно ввести директиву metaclass для полей и методов в том числе и для конструктора метакласса по умолчанию без параметров. И конструирование метакласса неотемлемо от типа как и объекта
Сам же метакласс наследуется от метакласса предка итд. А общим предком может быть Type.
Но у него не может быть метакласса что бы не было рекурсивности поэтому он необычный класс, в том числе и ссылка на него должна хранится в VMT для быстрого доступа к нему из объекта. И по всем вышеописанным причинам должен быть синглтоном.
и солнце б утром не вставало, когда бы не было меня
Re[5]: Нужны ли метаклассы????
От: Аноним  
Дата: 10.03.04 15:57
Оценка: :))) :)
Неее...
Такие метаклассы не нужны!
Re: Нужны ли метаклассы????
От: mihailik Украина  
Дата: 11.03.04 09:11
Оценка: :)
S>Сабж.

Нужны для чего?


Нужны ли Ленд-Роверы?
... << RSDN@Home 1.1.3 stable >>
Re[6]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.04 14:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Неее...

А>Такие метаклассы не нужны!
Аргументируй!!!!
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[7]: Нужны ли метаклассы????
От: Аноним  
Дата: 11.03.04 14:22
Оценка: 1 (1) +2
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:


А>>Неее...

А>>Такие метаклассы не нужны!
S> Аргументируй!!!!

Да твое определение — это сплошная каша.
Причем тут сингелтоны, VMT и прочие вещи?
Ты бы для начала прочитал что-нибудь внятное, что такое метакласс,
и вообще, что означает "мета" применительно к понятиям...

В С++, к примеру, к метаклассам ближе всего шаблоны.
Экземпляром (instance) шаблона является класс.
Экземпляром класса — объект.

В общем метакласс — это просто другой порядок абстракции...
Можно говорить о метаметаклассах, о метаметаметаклассах и далее...
Re[4]: Нужны ли метаклассы????
От: mihailik Украина  
Дата: 11.03.04 15:11
Оценка:
S>то такие поля можно было бы вынести из объекта в метакласс тем самым уменьшая

Readonly ещё не значит, что для всех экземпляров он одинаковый.
... << RSDN@Home 1.1.3 stable >>
Re[8]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.04 15:17
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, <Аноним>, Вы писали:


А>>>Неее...

А>>>Такие метаклассы не нужны!
S>> Аргументируй!!!!

А>Да твое определение — это сплошная каша.

А>Причем тут сингелтоны, VMT и прочие вещи?
А>Ты бы для начала прочитал что-нибудь внятное, что такое метакласс,
А>и вообще, что означает "мета" применительно к понятиям...


Например Python
http://www.getinfo.ru/article357.html

Про Delphi уже писал.
Но еще
http://gurin.tomsknet.ru/delphiobjectinspector.html

Smalltalk
http://www.math.rsu.ru/smalltalk/sml-b.ru.html

SOM
http://os2.in.ru/rdm2/articles/som1.html
А>В С++, к примеру, к метаклассам ближе всего шаблоны.
А>Экземпляром (instance) шаблона является класс.
А>Экземпляром класса — объект.

И чем шаблон отличается от класса, только тем что он раскрывается во врея компиляции????

А>В общем метакласс — это просто другой порядок абстракции...

А>Можно говорить о метаметаклассах, о метаметаметаклассах и далее...
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[9]: Нужны ли метаклассы????
От: Аноним  
Дата: 11.03.04 15:30
Оценка:
В общем, чтобы нормально перейти на новый уровень абстракции (метаклассы),
стоит немного абстрагироваться от деталей реализации...
Re[10]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.04 15:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>В общем, чтобы нормально перейти на новый уровень абстракции (метаклассы),

А>стоит немного абстрагироваться от деталей реализации...
Вернее будет сказать о виртуальности класса. Это самое подходящее определение.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[5]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.04 15:48
Оценка: :)
Здравствуйте, mihailik, Вы писали:

S>>то такие поля можно было бы вынести из объекта в метакласс тем самым уменьшая


M>Readonly ещё не значит, что для всех экземпляров он одинаковый.

Молодец а я думал когда наконец то обратят на это внимание.
Я имел ввиду такие конструкции
public readonly int икс=0;
То есть одинаковые значения поля для всех экземпляров класса. То есть если мы заранее знаем, что что для всех экземпляров эти данные будут одинаковы то мы можем вынести эти данные в метакласс.
Прошу прощение за неправильные высказывания. 9 марта было однако.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[9]: Нужны ли метаклассы????
От: _vovin http://www.pragmatic-architect.com
Дата: 11.03.04 16:39
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:


А>>Здравствуйте, Serginio1, Вы писали:


S>>>Здравствуйте, <Аноним>, Вы писали:


А>>>>Неее...

А>>>>Такие метаклассы не нужны!
S>>> Аргументируй!!!!

А>>Да твое определение — это сплошная каша.

А>>Причем тут сингелтоны, VMT и прочие вещи?
А>>Ты бы для начала прочитал что-нибудь внятное, что такое метакласс,
А>>и вообще, что означает "мета" применительно к понятиям...


S> Например Python

S> http://www.getinfo.ru/article357.html

S> Про Delphi уже писал.

S> Но еще
S> http://gurin.tomsknet.ru/delphiobjectinspector.html

S> Smalltalk

S> http://www.math.rsu.ru/smalltalk/sml-b.ru.html

В Smalltalk метаклассы присутствуют уже лет тридцать.
Сделано там как всегда все просто в духе рекурсивного дизайна.
Каждый объект имеет класс. Класс это тоже объект, который может обладать своими переменными и методами. Соответственно у класса как объекта тоже должен быть свой класс, хранящий информацию о его строении. Такой класс назван метаклассом. Никаких новых сущностей больше придумывать и не нужно. Класс, как любой полноценный объект, получает все преимущества от рождения — переменные экземпляра (класс это экземпляр потомка класса Class), методы (нормальные методы объекта, а статические процедуры, не имеющие this), полиморфизм и т.д.

Соответственно для шаблона Factory не нужно придумывать ничего лишнего:
doSometing: aClass
    " ... "
    obj := aClass new.
    " ... "


Используем:
self doSomething: MyClass


--

Владимир.
Re[10]: Нужны ли метаклассы????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 11.03.04 17:03
Оценка:
Здравствуйте, _vovin, Вы писали:

_

S>> Например Python

S>> http://www.getinfo.ru/article357.html

S>> Про Delphi уже писал.

S>> Но еще
S>> http://gurin.tomsknet.ru/delphiobjectinspector.html

S>> Smalltalk

S>> http://www.math.rsu.ru/smalltalk/sml-b.ru.html

_>В Smalltalk метаклассы присутствуют уже лет тридцать.

_>Сделано там как всегда все просто в духе рекурсивного дизайна.
_>Каждый объект имеет класс. Класс это тоже объект, который может обладать своими переменными и методами. Соответственно у класса как объекта тоже должен быть свой класс, хранящий информацию о его строении. Такой класс назван метаклассом. Никаких новых сущностей больше придумывать и не нужно. Класс, как любой полноценный объект, получает все преимущества от рождения — переменные экземпляра (класс это экземпляр потомка класса Class), методы (нормальные методы объекта, а статические процедуры, не имеющие this), полиморфизм и т.д.

В общем мы говорим об одном и том же. И странно что метаклассов нет в Net (вернее он есть Type но не расширяемый). Из за этого в общем то и мой вопрос.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[8]: Нужны ли метаклассы????
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.03.04 23:22
Оценка:
Дело в том, что он начитался споров о важности "виртуальных статических методов" (которые есть в Дельфи) и не может понять как рефлекшон в дотнете (да и не только) может жить без них.

Ну, и естествнно, что при таком подходе в понятие "мета" вкладывается только матаданные в рантайме. Про то, что их можно исползовать и в других стадиях (дизайнтайм, компайлтайм) он просто не задумывлася.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Python,Smalltalk for Net
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.03.04 10:41
Оценка:
Здравствуйте, _vovin, Вы писали:

_
_>В Smalltalk метаклассы присутствуют уже лет тридцать.
_>Сделано там как всегда все просто в духе рекурсивного дизайна.
_>Каждый объект имеет класс. Класс это тоже объект, который может обладать своими переменными и методами. Соответственно у класса как объекта тоже должен быть свой класс, хранящий информацию о его строении. Такой класс назван метаклассом. Никаких новых сущностей больше придумывать и не нужно. Класс, как любой полноценный объект, получает все преимущества от рождения — переменные экземпляра (класс это экземпляр потомка класса Class), методы (нормальные методы объекта, а статические процедуры, не имеющие this), полиморфизм и т.д.

_>Соответственно для шаблона Factory не нужно придумывать ничего лишнего:

_>
_>doSometing: aClass
_>    " ... "
_>    obj := aClass new.
_>    " ... "
_>


_>Используем:

_>
_>self doSomething: MyClass
_>


Интересно как оргнизованы метаклассы в Python,Smalltalk for Net. Наверняка как в Delphi но все равно интересно посмотреть на их реализацию в Net.
... << RSDN@Home 1.1.0 stable >>
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.