2010-03-21 3 views
19

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

+0

Разработка модели Google Model. –

+0

Не говорящие простые люди, генерирующие шаблоны, но полные, штаны ваших штанов, ничего себе, прямо исполняемый код. – WeNeedAnswers

+0

@John Спасибо, John, отличная ссылка, не отставайте от хорошей работы fella, attaboy :) – WeNeedAnswers

ответ

22

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

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

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

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

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

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

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

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

+12

отличный ответ. Был ли он автогенерирован :) – WeNeedAnswers

+0

@ Эрик, только шутя, спасибо, сколько времени занимает 40% кода, который должен быть разработан человеком? Есть ли проблема с переходом между машиной на человека, какова частота ошибок генерируемого кода (смешные символы и т. П.)? – WeNeedAnswers

+0

@WeNeedAnswers: Это заняло много времени (2-3 месяца с 3 людьми) в первый раз, когда мы это делали. В последний раз, когда я это делал (с учетом опыта и ранее разработанных инструментов), это заняло около месяца с 3 людьми. Первые 10% -15% идут очень быстро. Усилия усиливаются более чем линейно (но не экспоненциально), чем больше вы хотите генерировать, потому что сначала вы делаете легкие вещи. –

5

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

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

+1

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

+1

Правда, это отличный момент. Дизайнерские документы и диаграммы - это первое, что нужно забыть, когда код начинает записываться. Но компромисс заключается в том, что вам нужно разработать свой «код» в UML. Подумайте об этом на мгновение. Вам нужно будет использовать инструмент UML для отладки вашего кода, и всем новым разработчикам в команде нужно будет изучить инструмент, который они, вероятно, никогда не использовали раньше. В течение всего срока вашего проекта может быть более практичным просто вернуться и обновить ваши диаграммы UML. –

0

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

+1

@codemeit: за исключением того, что лучшие инструменты UML позволяют указывать поведение операций в диаграммах классов, используя диаграммы активности или последовательности, из которых может быть сгенерирован код. –

+0

@John: Я использую Sparx EA для проектов генерации кода, о которых я упоминаю в своем ответе, потому что у вас есть возможность моделировать поведение, а также потому, что все данные модели находятся в базе данных SQL (и большая часть из них доступна через API). –

+0

@ Эрик J - ROFLMAO. Некоторое время назад у меня был спор с кем-то, кто очень громко заявлял, что Sparx никогда не смог бы сделать все это, и мы могли бы полагаться только на инструмент UML/MDA от «основного» поставщика, который стоит $$$$$$ +++++ ++. Ну, я не должен был говорить, что это был спор, потому что я едва мог даже сказать что-нибудь «привет». –

1

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

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

Редактировать

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

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

+1

Это неосознанно неправильно в много разных способов. 1. Конечный автомат не завершен, поэтому он не может моделировать машину Тьюринга. 2. Просто потому, что вы можете моделировать его в UML, это не значит, что UML может описать, как его запустить. Расскажите, как вы можете перевести диаграмму UML во что-то, что можно было бы запустить. –

+0

@Jeff Meatball Yang: Сколько лет мы говорим там, или это просто теория? – WeNeedAnswers

+0

Я думаю, вы перевернули мой смысл - машина Тьюринга - машина состояния. И мне это кажется парадоксальным: «просто потому, что вы можете моделировать его в UML, это не значит, что UML может описать, как его запустить» .... разве это НЕ ТОЧНО, что делает UML? Он показывает возможные состояния, переходы, значения и т. Д. Мой «волшебный» компилятор превращает его в двоичный, поэтому он может работать на процессоре. Так же, как вы не можете написать gobbledy-gook C++ и ожидать, что он будет компилироваться, вам, вероятно, придется следовать конкретным соглашениям/синтаксису в вашем UML. –

0

Это не так. Не за что.

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

+0

также не имеет функциональных языков программирования, таких как Haskell в теории :). У этого есть петли. смешные вещи, которые можно рисовать, чтобы изобразить петлю. – WeNeedAnswers

+0

, но у них есть функциональные вызовы. UML не определяет даже «основной метод». –

+0

true true, но главное не должно существовать ни на одном языке OO, оно перехватывает процедурный код и до этого Assembler. Как низко ты можешь пасть? Я думаю, что основной подразумевается. – WeNeedAnswers

9

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

+0

Я создал до 60% общего кода в некоторых приложениях корпоративного класса (с использованием создания пользовательского кода). –

+5

@ Эрик: Который оставил вам только 40%, чтобы писать, нет? Не то, чтобы это не победа. – dmckee

+1

@dmckee: Я создал макет пользовательского интерфейса, правила проверки UI, привязку пользовательского интерфейса/бизнес-объекта, правила проверки бизнес-логики (с использованием того же элемента UML для пользовательского интерфейса и бизнес-объекта для гарантированной согласованности), привязки ORM ... в первых 15% , Оставшиеся материалы стали больше создавать рабочие процессы, ограничения безопасности для веб-сервисов/методов бизнес-объектов/элементов пользовательского интерфейса на основе моделей ролей и сложных вычислений (созданных на диаграммах операций со специализированными аннотациями). Для меня это трудная часть, потому что это рутинная и скучная ;-) –

2

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

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

+0

кроме государственных машин не являются частью UML. –

+3

Что ?? Да, они! http://en.wikipedia.org/wiki/UML_state_machine –

0

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

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

+0

хе-хе, и это все, что вам нужно, это Тьюринг-полный :) –

0

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

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

+0

Спасибо, но какой ВАШ ответ на это. Я могу читать google до тех пор, пока корова не вернутся домой, но как насчет вашего опыта, знаний и тому подобного. Это единственное, что я получаю от этих форумов. Его личное прикосновение. Взгляните на комментарии Эрика Джона к реальному мировому решению проблемы, которая началась с обещаний в 80-х годах. Эй ваши комментарии могут не быть ответом VAILD, но ответ по-прежнему действителен, поскольку он исходит от вас, а не многих людей, которые продают идеи в google. – WeNeedAnswers

+0

@WeNeedAnswers: Я редко генерировал код из диаграмм UML. Я однажды использовал Sparx EA, чтобы помочь разработать XML-схему, преобразуя диаграмму классов в XSD, но это все.Этот опыт научил меня, что это будет сделано, но я этого не сделал. –

+0

Спасибо, Джон. сделал ли опыт, чтобы вы почувствовали, что есть еще что можно сделать? Что касается моего опыта, я видел несколько генераторов кода, которые работают с обратной стороны UML, в последний раз я играл с Umbrello или что-то в этом домене с открытым исходным кодом. Он неплохо работал над созданием оболочек Домов из основного Словаря, но он, конечно, был недостаточно полным, чтобы позволить ему писать себя. Я впервые начал изучать этот материал еще в 1998 году, был инструментом, плавающим по названию Select Enterprise, и использовал диаграммы OMT и SSADM. Однако он никогда не генерировал код, но он обещал это сделать! – WeNeedAnswers

1

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

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

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

+0

Вильфредо Парето, который наблюдал в 1906 году, что 80% земли в Италии принадлежит 20% населения. Хм, думаю, что экономика и автоматическое программное обеспечение - это две разные сферы. Эрик Дж указывает на свой пост выше, что больше похоже на 60% авто 40% человек. Мне нравится этот показатель лучше, поскольку он показывает, что, хотя материал был создан автоматически, вам все равно придется вложить несколько часов, но это сэкономило время и деньги. Правило 80/20 было наблюдением, сделанным в то время во время земельного богатства. Люди любят комбо и используют его много, поскольку это звучит кричаще. – WeNeedAnswers

+0

Знаете ли вы, что 20% всех характеристик составлены на месте. Чтобы поддержать это, я когда-то работал с экономистом, который после применения некоторых цифр к данным вопросника возвращения сделал именно это, потому что количество возвратов было настолько низким. Он получил некоторые неприятности с Британской стоматологической ассоциацией :) – WeNeedAnswers

0

Семантика действия 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 - это огромный язык, а инструменты реализуют его подмножество, которое часто может быть довольно маленьким.

1

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

К сожалению, если эта работа будет выполнена, fUML будет be языком программирования.

- ред.

+0

Вы также можете найти последний проект спецификации представления языка действия на http://lib.modeldriven.org/MDLibrary/trunk/Applications/Alf-Reference-Implementation/DOC /. –

Смежные вопросы