Подтвердить что ты не робот

Является ли UML языком программирования?

Может ли UML использоваться для программирования компьютерной системы самостоятельно, без поддержки языка реализации, например. диаграммы прямо на машинный код (возможно, через C или С++ и т.д.), без вмешательства в кодирование.

4b9b3361

Ответ 1

Я собираюсь пойти против общей тенденции и поделиться опытом, который показывает, что UML может сделать сегодня, и что может быть следующей версией UML (или другого подхода к моделированию).

Сначала немного истории.

Вернемся, когда люди запрограммировали компьютеры в сборке (не все вернулось сюда). Затем появились языки более высокого уровня, такие как C и Basic. Программисты, которые были очень хороши в сборке, утверждали, что вы не можете полностью выразить все, что процессор способен делать (оптимизированным образом) на языке более высокого уровня. На самом деле они были правы. Некоторые вещи были намного менее оптимальными с точки зрения памяти и производительности на языках более высокого уровня, потому что вы не могли полностью контролировать инструкции, выданные процессору.

Дело в том, что языки более высокого уровня предоставляют гораздо более абстрактную форму выражения. Таким образом, они поймали и через некоторое время, людям все равно, что вы не можете полностью контролировать каждый аспект процессора, потому что разработчики были гораздо более продуктивны (Закон Мура также помог).

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

Развитие, основанное на модели, является более высоким уровнем выражения. Вы не можете полностью представить код, который вы могли бы написать, например, на С# или Java. Особенно не из коробки. Тем не менее, можно создать очень значительную часть приложения непосредственно из UML-модели.

Я возглавил работу по созданию кода на основе UML для нескольких довольно крупных проектов. Во многих случаях мы могли бы генерировать от 30% до 60% всего исходного кода приложений (реального времени, корпоративного класса). И это просто с небольшой командой, пишущей генераторы для определенного домена. В конце концов, целая индустрия будет стоять за инструментами, чтобы генерировать все больше и больше реальных приложений из моделей.

Это следующий шаг в естественной эволюции, который мы видели в нашей отрасли снова и снова, с тех пор, как первые ассемблерные коды абстрагировали коды операций (вероятно, было что-то до этого, но это было до моего времени).

Ответ 2

Короткий ответ: нет. Некоторые инструменты моделирования UML могут генерировать Java, С++ и код на других языках программирования. Однако то, что он генерирует, обычно является интерфейсом и отношениями классов. Эти инструменты генерируют заглушки, для которых реализация еще должна быть предоставлена, поэтому требуется вмешательство человека.

Ответ 3

Есть некоторые инструменты для преобразования диаграмм моделирования UML в код, в частности, диаграммы состояний UML. Например, я использовал инструмент под названием "Rhapsody" (из I-Logix) еще в 2000 году, который преобразует UML-диаграмму в С++. Это было здорово, потому что инструмент мог запускать конечный автомат напрямую, а также мог запускать код на удаленной машине (в этом случае на плате работает vxworks).

Но, вообще говоря, UML лучше всего использовать в качестве инструмента моделирования. Используйте его, чтобы смоделировать вашу систему и предоставить диаграммы для ваших проектных документов или что-то еще. Затем используйте эти знания для организации вашей системы организованным образом.

Ответ 4

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

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

Ответ 5

UML может моделировать конечный автомат. Таким образом, он может представлять собой машину Тьюринга. Компилятор с достаточной изощренностью может прочитать это представление и создать двоичное (исполняемое) представление машины Turing.

Итак, мой ответ - да.

Edit

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

Я думаю, это доказывает, что UML (или некоторое его подмножество) квалифицируется как язык программирования, но, вероятно, не очень хороший.

Ответ 6

Да, возможно, просто проверьте подходы, такие как ExecutableUML (и приближается новый стандарт по тем же линиям), которые полагаются на использование языка действия для выражения деталей поведения системы (вид psedocode с итераторами, условия и создавать, читать, обновлять и уничтожать действия).

Совсем другое обсуждение - это того стоит. Моделирование системы с достаточной точностью и детализацией, чтобы иметь возможность генерировать 100% кода, не всегда окупается. Я предпочитаю придерживаться своего принципа pareto (или правила 80-20) для разработки, основанной на модели: 20% усилий моделирования достаточно для генерации 80% кода приложения

Более подробное объяснение здесь: http://modeling-languages.com/blog/content/pareto-principle-applied-mdd

Ответ 7

В настоящее время существует полностью стандартная семантика OMG, стандартная Turing-complete, семантика для подмножества UML 2.3, известная как "Основанный UML" (fUML). Посмотрите здесь для ссылочной реализации и указателя на спецификацию OMG. Также продолжается работа над стандартным языком действия UML для OMG.

К лучшему или худшему, когда эта работа будет выполнена, fUML будет языком программирования.

- Ed

Ответ 8

Диаграмма классов может быть переведена в язык программирования в зависимости от используемого вами инструмента UML. Я думаю, вам все равно нужно закодировать свою собственную бизнес-логику и т.д.

Ответ 9

Это не так. Совсем нет.

Он не может принимать решения (если есть) или запускать циклы. Это меньше языка программирования, чем конечный автомат. По крайней мере, FSM может принимать решения. UML не имеет состояния.

Ответ 10

Короткий ответ: как сейчас, вы не можете генерировать 100% кода.

Вероятно, вы могли бы сгенерировать структуру классов своих систем через диаграмму классов и, вероятно, часть тела методов через диаграммы взаимодействия и/или диаграммы состояний, но я думаю, что об этом.

Ответ 11

Некоторые ссылки для WeNeedAnswers, так как я был так затронут его комментарием:

Это должно быть начало.

Ответ 12

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

См:

http://abstratt.com/blog/2008/11/02/what-can-uml-do-for-you/

http://abstratt.com/blog/2008/11/07/executable-models-with-textuml-toolkit-12-m1/

Тем, кто говорит "нет": вопрос о UML, а не о "инструментах UML, которые вы используете", люди. UML - это огромный язык, а инструменты реализуют его подмножество, которое часто может быть довольно маленьким.

Ответ 13

UML2 - это просто данные для вашего генератора кода.

Генератор кода обобщает код, используя данные из модели (подобно С++ - шаблоны обобщают код, используя С++ - структуры в качестве модели).

Работая так, вы можете создать полное приложение для создания, замены, обновления, удаления (CRUD) и поиска для любой модели.

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