Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Category:

Моделирование и программирование опять сближаются. Назад в будущее!

Мы немного пообсуждали в Бекасово, что объект-ориентированность была введена давным-давно (еще с SIMULA, 60-е годы 20 века -- http://en.wikipedia.org/wiki/Simula) как способ моделирования и программирования. Беда в том, что с тех пор ООП стало именно ООПрограммированием, но не ООМоделированием или ОООнтологизированием. Про функциональное или логическое моделирование я вообще молчу (хотя OCL к UML это явно шаг в данном направлении, а в самом свежем апрельском 2010 выпуске Communications of ACM сказано "functional logic programming supports specification, prototyping, and application programming within a single language. it is the basis of a practical and convenient approach to produce high-quality software." -- спецификация тут явно должна читаться, как "моделирование").

Традиционно объединенное программирование-моделирование развивается в скандинавских странах, и именно оттуда идут инициативы "назад в будущее" единого программирования-моделирования. Оттуда и SIMULA, и следующий язык этой серии (меньше, но выразительней) BETA (http://www.daimi.au.dk/~beta/, история вопроса с многочисленными рассуждениями о связи программирования и моделирования -- http://www.daimi.au.dk/~olm/index.html/PUB/BETA-HOPL-V4.7_ref.pdf -- читать и перечитывать!). Сейчас тема становится остромодной, попала даже в keynotes конференции по моделированию 2010 -- http://models2010.ifi.uio.no/keynotes.shtml (сама конференция MODELS 2010 будет в Осло, Норвегия 3-6 октября 2010, http://models2010.ifi.uio.no/). На всякий случай, различия ‘Scandinavian School’ and the ‘U.S. School’ of object-orientation именно в различном отношении к моделированию/программированию были введены Steve Cook в 1988г.

К этой же линии рассуждений можно отнести и имитационные программы/модели (Modelica, объект-ориентированный язык имитационного моделирования).

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

Лично моя точка зрения в том, что все это -- игры словами, возникшие в разных школах мысли. Суть же одна и та же. Недаром в языки моделирования срочно вводят "исполняемость", например тот же xUML. И эту одну и ту же суть "отражения мира" в описании и исполнении нужно срочно восстановить, исходя из совершенно практических потребностей системной инженерии.

Так, если делается имитационная модель системы (реактора, турбины, телекоммуникационного оборудования -- например, на Modelica, или даже ModelicaML) -- в какой мере она может рассматриваться как одна из архитектурных (связь функции и конструкции, т.е. репрезентирующей имитационно не только функционирование и его характеристики, но и конструкцию) моделей? В какой мере можно использовать технико-экономическую имитационную модель системы для начальных прикидок конструкции? Как связаны plant breakdown structures (по группам декомпозиции оборудования, по размещению, по функциям) и имитационные модели? Сошелся ли клином свет на объект-ориентированности моделирования, или нужны мультипарадигмальные модели/программы (подсказка: фраза из "истории BETA" -- There were supporters (or followers) of object-orientation who started to claim that the world is object-oriented. This is of course wrong – object orientation is a perspective that one may use when modeling the world. There are many other perspectives that may be used to understand phenomena and concepts of the real world)?

Кстати, я сам время от времени принимаю решения вполне в русле скандинавской традиции: они тоже предпочитают термин description вместо получившего распространение modeling (как они пишут в истории BETA, The term modeling [в программировании] is perhaps somehow misleading since the model eventually becomes the real thing – in contrast to models in science, engineering and architecture. We originally used the term description, in SIMULA and DELTA terminology, but changed to modeling when OOA/OOD and UML became popular).

История моделирования и программирования (как и любая история в языках, судя по всему) -- это история не столько идей (которые производятся одними людьми), сколько история инструментов (которые производятся другими людьми). Так, в ВЦ РГУ (где я работал в 1980-1982г.г.) разрабатывался компилятор SIMULA67 для Эльбруса. А если бы этот компилятор был разработан хотя бы для ЕС ЭВМ, не говоря уже об СМ4 или -- ужас, ужас -- для появившегося в 1980г. Личного Компьютера IBM? А если бы этот компилятор получился хорошим (быстрым, безглючным, хорошо расширяемым, с обширной библиотекой, мощным отладчиком)?! Придумать хороший язык -- упражнение для одного талантливого человека на десяток лет. Сделать для него хорошую исполняющую среду и портировать ее на разные платформы -- кувыркание минимум десятка совершенно других по компетенциям человек на десяток лет. Идеи, конечно, имеют значение. Но хорошие организационные способности часто выигрывают у хороших идей (хотя тут тоже не все так просто, как можно прочесть в этих моих строках).

Нужно отдельно, конечно, помянуть самые разные обсуждения, смешанные в кучу в данном постинге:
-- программирование vs концептуальное моделирование (BETA и UML, BETA и Java)
-- программирование vs имитационное моделирование (Modelica)
-- концептуальное vs имитационное моделирование (ModelicaML -- http://www.openmodelica.org/index.php/developer/tools/134, хотя тут не столько смешение парадигм, сколько попытка выразить Modelica в терминах UML).

Более того, это все пока только объект-ориентировано, а не мультипарадигмально. Итого: обсуждение программирования/моделирования разного рода/онтологизирования пока представляет собой разные и не связанные исследовательские истории, но эти истории уже начинают рефлексивно осмысляться, и мне кажется, что в ближайшее время можно ожидать быстрого развития событий на теоретическом (а по мере развития IDE в сторону language workbenches и на практическом) фронте.

Также стремительно врываются онтологические языки, противопоставляемые Конрадом Боком сотоварищи языкам моделирования -- после чего можно будет повторить всю историю с этими сочетаниями программирования/симулирования вычислительного/описания концептуального уже с онтологическими языками. Напомню, что онтологические языки позволяют выражать самые разные типы отношений (в том числе самые разные типы meta-отношений, которых базовых штук шесть. Не могу повторно найти ссылку на статью с перечислением этих разных типов мета-отношений! Помогите!).

Кажется, идейный застой в программировании в связи с развитием всяческого моделирования и онтологизирования стремительно заканчивается. Мы еще посочиняем языки! Возьми надежду всяк сюда входящий, computer science наконец-то пошла назад в будущее.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 41 comments