August 11, 2006

Мета-

В объектно-ориентированном программировании есть термин метакласс. Впервые я столкнулся с ним, изучая творчество Грейди Буча, а именно его "Object-Oriented Analysis and Design with Applications". Метакласс - это класс, экземплярами которого являются классы. То есть эдакая фабрика классов чтоли, но не совсем. Второй раз метаклассы я встретил при знакомстве с языком Python. На самом деле, это был первый язык, из тех, которые я знаю, где они реально были :-)

Потом был Ruby с его блоками кода. Затем много читал про Lisp с его макросами. Возможно, что-то из мной прочитанного написано давно и давно всем известно, что-то совсем недавно, но все эти материалы попались мне в довольно короткий промежуток времени. Всё это по сути механизмы которые позволяют создавать "программы, которые пишут программы".

Надо заметить, что во время прочтения каждой из статей в голове крутилось одно слово, не слово даже, а приставка: "мета-".

Продолжаем обобщать:
Есть интернет магазины, а есть интернет аукционы, которые по сути своей позволяют каждому подльзователю создать свой собственный интернет магазин. (Хотя здесь сравнение, может быть, не совсем правильное). Есть просто контент, который генерируется пользователями интернета, а есть мета-контент, который создаётся разного рода обобщающими ресурсами. Об этом очень точно написано у Михаила Елашкина.

Есть старая поговорка "там где есть 2 уровня, их может быть и N". Что же будет дальше? Мета-мета-классы? Мета-мета-ВСЁ?

Напоследок хочу поделиться очень интересной и одно время безумно популярной ссылкой. Обсуждаемая в статье тема на мой взгляд очень даже перекликается с вышесказанным.

Comments:
Есть старая поговорка "там где есть 2 уровня, их может быть и N". Что же будет дальше? Мета-мета-классы? Мета-мета-ВСЁ?
Элементарно. В Smalltalk, в котором ОО концепция доведена до логического конца, это разрешается так: у экземпляров класса Class должен быть свой класс. Этот класс называется MetaClass, в системе существует единственный экземляр этого класса. Его класс это тот же Class.

 


"Я вам не скажу за всю Одессу", как говорится. В Smalltalk не силён. Но вот совсем недавно познакомился с объектной моделью Ruby. Там оказывается почти так же. Сам по себе класс является объектом класса Class. В свою очередь класс Class -- это объект сам себя. И, естественно, Class -- синглтон.
Но я как раз говорил не конкретно о метаклассах, а о способе, который позволит решать задачи на ещё более высоком уровне абстракции. (Мудрёно как-то сказал.) В качестве примера, как мне кажется, удачного я выбрал мета-классы, как самое родное. Получается что? Сначала задачи решались при помощи классов. Потом этого стало мало и придумали метаклассы, которые формируют классы. Может быть будущим витком будут мета-мета классы, объектами которых будут метаклассы. Как hammer factory factory factory в вышеуказанной статье.

Кстати, спасибо за комент. Благодаря ему открылся косяк в стилях страницы и битая ссылка.

 


Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?