Отправляет email-рассылки с помощью сервиса Sendsay

Бизнес on-line

  Все выпуски  

Softcraft: новости сайта и не только (037)


Информационный Канал Subscribe.Ru

Softcraft: новости сайта и не только(037)

http://www.softcraft.ru

Я приветствую всех своих подписчиков!


На сайте появились статьи, посвященные эволюционному расширеню программ:

  1. Ческис В. Л. Динамическое формирование объектов

  2. Фёдоров А.Л., Казаров А.С., Ческис В. Л. Эмуляция динамического объектно-ориентированного языка на С++

В первой рассмотрены общие принципы динамического формирования объектов. Вторая посвящена практическому решению проблем, возникающих в различных ситуациях. Опираясь на собственный опыт, могу порекомендовать читать их одновременно, так как общность рассуждений, представленных в первом материале, не позволяет сразу въехать в содержание. Для меня лично это было обусловлено тем, что неоднозначность текста приводила к появлению в голове множества альтернативных решений, позволяющих одинаково решать поставленную задачу. Однако вторая статья приземляет мысли авторов в виде конкретного подхода.

Эволюционное программирование - один из перекрестнков, на котором сталкиваются различные методы разработки программ. Именно здесь рассматривается широкий спектр решений для одних и тех же задач. Для безболезненного добавления нового кода предлагаются специальные инструментальные средства, расширяются существующие языки, применяются шаблоны и различные алгоритмические трюки.

В разных работах рассматриваются и различные моменты интеграции добавляемого кода с уже сформированымм программным монстром. Слияине возможно во время макрообработки, компиляции, статической или динамической компоновки, инициализации программных объектов. Возможно оно и во время выполнения программы.

Именно алгоритмические решения, осуществляемые в ходе выполнения программы и определяют библиотечную надстройку над языком программирования C++, рассматривамую авторами. Гибкость методу придает использование ассоциативных контейнеров. Универсальность решения усугубляется созданием специального реестра, хранимого во внешней памяти. Это позволяет выстранивать несколько программ вокруг общего набора объектов.

Не остались в стороне вопросы реализации мультиметодов. Данный подход, опирающийся на использование ассоциативных контейнеров, перекликается с методом, описанным Скоттом Мейерсом (Наиболее эффективное использование C++...) и модифицированным Андреем Александреску (Современное проектирование на C++. - Изд. дом "Вильямс", 2002).

Содержание материала, во многом перекликаются с моими собственными интересами. Поэтому с чувством внутреннего удовлетворения отметил наличие ссылок на ряд соответствующих статей, размещенных на сайте. Вместе с тем, хотелось бы отметить и отличие в восприятии проблемы и методов ее решения. Несмотря на то, что в представленных мною работах предлагаются технические трюки, реализованные на конкретном языке, меня в большей степени интересуют методы их инструментальной поддержки, в частности, разработка языков обеспечивающих контроль эволюционно расширяемой программы до начала ее выполнения. При этом я считаю, что подобный контроль не обязательно должен осуществляться только во время компиляции. Он может проходит также во время статической или динамической компоновки, а также при инициалицации. Думаю, что подобное отличие в подходах во много обуславливается различием в направленности работ. Авторы занимаются решением заданной прикладной задачи с использованием существующих инструментов.

Вполне естественно, что, наряду с достоинствами, предлагаемый подход имеет и определенные недостатки. Ослабляется контроль типов. Появление методов с новыми сигнатурами повышает громоздкость системы. Увеличивается время начальной загрузки и инициализации программы. Перенос же формирования окончательных связей на период выполнения программы ведет к тому, что на программиста возлагается большая нагрузка. Подобную ситуацию история программирования уже наблюдала, когда объектно-ориентированные возможности моделировались с использованием процедурного подхода (упрощенные примеры моделирования представлены в "Разноруком программировании"). Но недостатки существуют практически у любых частных методов реализации, что не мешает использовать их при решении конкретных задач.

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

Завершить же брюзжалки хочется на пафостной ноте: наконец-то сайт пополнился близкими мне по духу материалами конструктивистского толка. Хоть и ОО направленности:).


С наилучшими пожеланиями!

А.Л.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное