|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Заинтересовала возможность генерации C++ (Java и т.п.) кода из UML модели. Посмотрел как это делает MS Visual Modeler, StarUML и не пришёл в восторг. Неприятность в том, что концы ассоциаций генерятся как простые указатели, тогда как хотелось бы получать STL коллекции. Конечно всё это можно явно изобразить в модели, но хотелось бы абстрагироваться от таких подробностей. Интересует также возможность преобразования поведенческих UML моделей и OCL ограничений в методы на C++, C#, Java, PL/SQL, SQL. Сейчас пробую писать на JScript генератор спецификаций классов C++ для StarUML. Может быть изобретаю велосипед, но могу поделиться. У кого есть опыт использования или разработки подобных генераторов, поделитесь пзл. впечатлениями. Интересует современное состояние дел в этой области. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 11:42 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
т.к. все пишут код по разному, то и генератор кода тоже лучше написать под себя... Времени это занимает намного меньше, чем кажется, а экономит намного больше... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 12:23 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
sergey888т.к. все пишут код по разному, то и генератор кода тоже лучше написать под себя... Времени это занимает намного меньше, чем кажется, а экономит намного больше... На счёт времени, соглашусь. По крайней мере для генерации спецификаций классов C++ задача не сложная, тем более, что API для работы с моделью стандартизован OMG, полуенные скрипты без больших доработок можно будет использовать и с другим CASE. Про "все пишут код по разному" это, наверное, не совсем так. Есть достаточно устоявшиеся рекомендации. Если ближе к теме, чтобы проектировщик и кодер одинаково понимали модель, нужны чёткие правила отображения модели в код. Например, стрелочка - это указатель на объект, плюсик - public член, 0..* - используем список, зависимость - #include и т.п.. Стандартных правил, как я понял, нет. Правила, которые я видел далеки от моего идеала. Какие ещё правила существуют? Может быть есть C++ библиотеки, поддерживающие конструкции UML? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 13:19 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Может быть в С++ есть устоявшиеся правила, но в Дельфи для решения одной задачи можно использовать разные компоненты у которых разные свойства, возможности, соответственно код получается разный. Можно использовать или не использовать наследование форм, модальность форм или выносить формы в отдельные DLL и т.д. вариантов масса.... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 15:31 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
sergey888Может быть в С++ есть устоявшиеся правила, но в Дельфи для решения одной задачи можно использовать разные компоненты На таком уровне и для C++ рецептов нет. Под разные библиотеки и код будет разный. Для MFC такой, для STL эдакий. Пока я рассматриваю только STL. Даже в этом случае для реализации конструкции UML можно выбрать один из многих шаблонов, что создаёт нежелательную неоднозначность в понимании модели. Скорее всего поверх STL, чтобы упростить генератор кода, придётся создать небольшую UML ориентированную надстройку. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 16:03 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Про "все пишут код по разному" это, наверное, не совсем так. Есть достаточно устоявшиеся рекомендации. -------------------- Правила, которые я видел далеки от моего идеала. Какие ещё правила существуют? -------------------- так все одинаково или по разному? 8) Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 16:05 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
sergey888Может быть в С++ есть устоявшиеся правила, но в Дельфи для решения одной задачи можно использовать разные компоненты у которых разные свойства, возможности, соответственно код получается разный. Можно использовать или не использовать наследование форм, модальность форм или выносить формы в отдельные DLL и т.д. вариантов масса.... +1 Эти генераторы - утопия , если конечно не писать всё ручками, да на С++. Генераторы не учитывают библиотеки. Взять тот ваш "список". На С++ он начнёт генерить код или класс для него. А на Delphi это готовый компонент-класс TList ли немножко_другой_для_другой_задачи TObjectList или ...... и так далее. Поэтому очень далеко "это" от народа (от программистов :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 16:22 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
1024так все одинаково или по разному? Пишут по разному но не все. В конторах, где приняты стандарты кодирования все пишут одинаково, или по крайней мере стремятся к этому. Одна из моих целей - генерить преимущественно стандартный код. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 18:26 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123 sergey888Может быть в С++ есть устоявшиеся правила, но в Дельфи для решения одной задачи можно использовать разные компоненты у которых разные свойства, возможности, соответственно код получается разный. Можно использовать или не использовать наследование форм, модальность форм или выносить формы в отдельные DLL и т.д. вариантов масса.... +1 Эти генераторы - утопия , если конечно не писать всё ручками, да на С++. Генераторы не учитывают библиотеки. Взять тот ваш "список". На С++ он начнёт генерить код или класс для него. А на Delphi это готовый компонент-класс TList ли немножко_другой_для_другой_задачи TObjectList или ...... и так далее. Поэтому очень далеко "это" от народа (от программистов :)) Утопия? Не согласен. Oracle Designer генерит пригодный для работы код. Конечно инструмент не универсальный, но в свою задачу решает. Есть ряд хороших генераторов схем БД, точнее кода для их создания. Delphi в значительной степени избавляет програмииста от кодирования. Я сам писал приложения без единой строчки кода, только соединяя компоненты. Генераторы не учитывают библиотеки? Из того немногочисленного, что я видел могу с этим согласиться, но все ли генераторы кода столь несообразительны? Я знаю тупое, но рабочее решение - указывать классы компонетов в тэгах, как правило нестандартных. Сомневаюсь, что в ближайшее время генераторы кода научатся различать "немножко_другие_задачи" без посторонней помощи. Конкретно, выбрать между TList и TObjectList можно полагаясь на требования к интерфейсу объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 18:52 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
mcureenabOracle Designer генерит пригодный для работы код. Конечно инструмент не универсальный, но в свою задачу решает. Есть ряд хороших генераторов схем БД, точнее кода для их создания. Delphi в значительной степени избавляет програмииста от кодирования. Я сам писал приложения без единой строчки кода, только соединяя компоненты. вы сами показали, что генератора универсального нет, а для Delphi - сама Delphi IDE генератор ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2006, 19:13 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
авторЗаинтересовала возможность генерации C++ (Java и т.п.) кода из UML модели. авторУ кого есть опыт использования или разработки подобных генераторов, поделитесь пзл. впечатлениями. Кратко об опыте генерации кода. Занимались этой проблемой очень плотно с 1996 по 2003 год. Использовали очень приличные генераторы. Разрабатывали сами. На генераторах реализованы коммерческие системы. Генераторами пользуются заказчики. До сих пор. Из чего генерировали? Westmount I-CASE, RR, MS Visio, ObjetTeam, Telelogic. Под что: C++, I-4GL, MS Basic, DOORS. Что можно сгенерировать? Сгенерировать можно всё, окна, классы, методы, запросы, проекты, сборку, документацию. Генерировали всё. Сегодня - не пользуемся генераторами. Плюсы генераторов: - работают неквалифицированные программисты. - соблюдается стандарт кодирования и GUI. - легко вносить изменения в общие части кода – поменял и перегенироровал систему. - модель консистентна коду. - и т.д. Минусы генераторов: - квалифицированные программисты связаны генератором. - внесение изменений в общие части требует изменения генератора или перегенерации. - изменения в код вносятся только через модель. - модель нельзя проверить «налету», только после генерации-компиляции. - и т.д. Почему перестали пользоваться? Есть более адекватные средства и практики, сохраняющие плюсы генерации и устраняющие её минусы. Если кратко, то это: - интегрированная среда разработки; - изменения в коде и отладка; - использование шаблонов проектирования; - рефакторинг; - модульное тестирование; - использование framework; - практики XP, наконец. Более подробно можно пообщаться через личку, ну или здесь же, если интерес общий. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 08:49 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
asafreeПочему перестали пользоваться? Есть более адекватные средства и практики, сохраняющие плюсы генерации и устраняющие её минусы. ... Т.е., разработка кодогенератора стала неактуальной, поскольку вы отказались от практики моделирования системы на UML и т.п. языках моделирования в пользу программирования в IDE и XP? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 11:53 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
mcureenab asafreeПочему перестали пользоваться? Есть более адекватные средства и практики, сохраняющие плюсы генерации и устраняющие её минусы. ... Т.е., разработка кодогенератора стала неактуальной, поскольку вы отказались от практики моделирования системы на UML и т.п. языках моделирования в пользу программирования в IDE и XP? все смешано - кони, лошади. ================ на UML проектируется модель системы, интерфейс её составных частей. Далее не генерируется код, а отдаётся программистам для реализации. Хоть и говорят, что программирование это не творчество а рутина, но как видно не так . ЗЫ. и ХР тут ещё причём? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 12:43 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123 mcureenab asafreeПочему перестали пользоваться? Есть более адекватные средства и практики, сохраняющие плюсы генерации и устраняющие её минусы. ... Т.е., разработка кодогенератора стала неактуальной, поскольку вы отказались от практики моделирования системы на UML и т.п. языках моделирования в пользу программирования в IDE и XP? все смешано - кони, лошади. ================ на UML проектируется модель системы, интерфейс её составных частей. Далее не генерируется код, а отдаётся программистам для реализации. Хоть и говорят, что программирование это не творчество а рутина, но как видно не так . ЗЫ. и ХР тут ещё причём? Кодированием модели, конечно, могут заниматься программисты, но речь то не об этом, а о том, что, ИМХО, в модель можно внести достаточно данных, чтобы автоматически создать компилируемый код, или, хотя бы его часть. asafree пишет про тоже. В настоящее время наблюдается разделение труда проектировщиков и кодеров. Чем меньше творчества будет в работе кодера, тем более предсказуемым будет результат его работы. Собственно чего я и пытаюсь добиться. Про XP. Когдато кодеры писали дырками на перфоленте, потом были изобретены многочисленные языки программирования, программы стали понятны широкому кругу специалистов, но не конечных пользователей. Зачастую, программисты и пользователи не могут найти точки соприкосновения. XP в позволяет общаться с пользователем на языке прототипов системы не тратя время на создание томов проектной документации. При определённых условиях этот подход вполне приемлем, но с автоматической генерацией кода не совместим. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 13:51 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
авторКодированием модели, конечно, могут заниматься программисты, но речь то не об этом, а о том, что, ИМХО, в модель можно внести достаточно данных, чтобы автоматически создать компилируемый код, или, хотя бы его часть. asafree пишет про тоже. ========= эта часть стремится к нулю, т.к. нельзя формализовать разброс языков-технологий-библиотек-компиляторов В настоящее время наблюдается разделение труда проектировщиков и кодеров. Чем меньше творчества будет в работе кодера, тем более предсказуемым будет результат его работы. Собственно чего я и пытаюсь добиться. ====== если сумеешь, т.к. модель аналитика очень далека от физического кода. И сам аналитик должен быть кодером, т.е. делать его работу самому Про XP. XP в позволяет общаться с пользователем на языке прототипов системы не тратя время на создание томов проектной документации. При определённых условиях этот подход вполне приемлем, но с автоматической генерацией кода не совместим. ============= ХР не запрещает построение моделей. Он говорит, что делай это быстрее - утром модель, в обед - прототип для обкатки. Прототип не заменяет наглядную модель, как эскиз-набросок не заменяет модель из пенопласта. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 15:10 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
mcureenabТ.е., разработка кодогенератора стала неактуальной, поскольку вы отказались от практики моделирования системы на UML и т.п. языках моделирования в пользу программирования в IDE и XP? Мы моделируем на UML, в том числе. Но не делаем с некоторого момента модельно-управляемый код. Мы просто реализуем эти модели квалифицированными специалистами в том числе в IDE и применяем XP практики. Для нас это эффективнее. Однако, сама модельно-управляемая разработка имеет право на жизнь. И для кого-то это ожет быть очень эффективно. Я уже говорил, что мы ей пользовались. Она была оправдана. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:01 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123ЗЫ. и ХР тут ещё причём? Использование кодогенераторов даёт определённые преимущества, например: - стандартные блоки генерируем, ошибок в них не будет, тестировать не надо; - вундеркинд-программист разработал блок, блок разместили в генераторе, программист поплоше его не испортит - код появися автоматом на основании решения проектировщика (аналитика) и т.п. Эти плюсы оборачиваются минусами при определённых условиях. Теперь про XP. XP предлагает практики, которые дают аналогичные плюсы за счёт организационных моментов и инструментов отличных от генераторов, например тесты, рефакторинг, ОО и фреймворки. Вместе с тем, они и минусы генераторов снимают. Хочу заметить, XP - не альтернатива генераторам. Это один из вариантов организации процесса разработки. Привёл его только для сравнительного примера. Скорее всего, возможны варианты, когда генерация и XP могут сосуществовать. Это решать компании разработчиков ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:09 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
mcureenab В настоящее время наблюдается разделение труда проектировщиков и кодеров. Чем меньше творчества будет в работе кодера, тем более предсказуемым будет результат его работы. Собственно чего я и пытаюсь добиться. Немного пугает такое отношение к кодерам - в смысле творчества. Хотя, вполне понимаю причины. Боюсь, что этого не добиться. Мы себе представляем это примерно так: - аналитик (проектировщик) - условный представитель интересов заказчика. Если в XP - заказчик. Он определяет чего надо. Определяет суть предмета и концепцию предмета. Говоря другими словами - формализует требования. Он не навязывает программисту способ решения. - программист - у нас он и проектировщик кода, классов и т.п. принимает решение о том, как эффективнее реализовать требования. Он отвечает за внутренний дизайн. При таком подходе - места для творчества с избытком. Есть конечно небольшой минус :( - требуется квалифицированный программист. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:15 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123[quot автор]Кодированием модели, конечно, могут заниматься программисты, но речь то не об этом, а о том, что, ИМХО, в модель можно внести достаточно данных, чтобы автоматически создать компилируемый код, или, хотя бы его часть. asafree пишет про тоже. ========= эта часть стремится к нулю, т.к. нельзя формализовать разброс языков-технологий-библиотек-компиляторов Я и не ставлю задачи генерить код для всех языков-технологий-библиотек-компиляторов из любой модели. Меня интересует генерация для C++, <с технологией не вижу связи>, STL, Visual C++. Для других языков тоже есть потребность генерить код. Понятно, что модель реализации должна быть заточена под целевую среду, и модель для C++ не будет автоматически переносима на PL/SQL . Petro123[quot автор]В настоящее время наблюдается разделение труда проектировщиков и кодеров. Чем меньше творчества будет в работе кодера, тем более предсказуемым будет результат его работы. Собственно чего я и пытаюсь добиться. ====== если сумеешь, т.к. модель аналитика очень далека от физического кода. И сам аналитик должен быть кодером, т.е. делать его работу самому Над поектом последовательно трудятся многие люди, последовательно от модели к модели приближаясь к результату. По аналитической модели невозможно сразу написать код, для этого аналитическую модель нужно преобразовать в модель реализации, и только из неё сгенерить код. Petro123[quot автор]Про XP. XP в позволяет общаться с пользователем на языке прототипов системы не тратя время на создание томов проектной документации. При определённых условиях этот подход вполне приемлем, но с автоматической генерацией кода не совместим. ============= ХР не запрещает построение моделей. Он говорит, что делай это быстрее - утром модель, в обед - прототип для обкатки. Прототип не заменяет наглядную модель, как эскиз-набросок не заменяет модель из пенопласта. Это понятно, ИМХО, в XP основной упор в работе с заказчиком делается на обсуждение и согласование прототипа, тогда как RUP предполагает работу с моделью. Если проект маленький, проще быстро сделать и обсудить прототип, чем поводить скурпулёзный анализ. В большом и сложном проекте этот номер не пойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:25 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
asafree Petro123ЗЫ. и ХР тут ещё причём? - вундеркинд-программист разработал блок, блок разместили в генераторе, программист поплоше его не испортит - код появися автоматом на основании решения проектировщика (аналитика) и т.п. что такое "блок"? При процедурном проектировании это кусок кода? IMHO программист должен разработать функциональный класс/объект/компонент/COM/пакет, который используют другие. А вот кодогенератор его использовать не сможет. Например, в Delphi ModelMaker при импорте модели из кода совсем не видит файлы *.dfm где расположены визуальные классы IDE Delphi. Кодогенератору не объяснишь: - бросить таблицу на форму - бросить на форму ADOConnection и указать строку подключения к БД - связать источник данных и таблицу показа данных - ВСЁ - ФОРМА ПОКАЗА ИНФЫ ИЗ БД ГОТОВА. imho либо визуальное проектирование в IDE компилятора, либо кодогенераторы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:32 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
mcureenab Это понятно, ИМХО, в XP основной упор в работе с заказчиком делается на обсуждение и согласование прототипа, тогда как RUP предполагает работу с моделью. Если проект маленький, проще быстро сделать и обсудить прототип, чем поводить скурпулёзный анализ. В большом и сложном проекте этот номер не пойдёт. XP сам по себе не ограничивает размер проекта. RUP сам по себе не даёт гарантии скурпулёзного анализа. XP работает на большом проекте. Прототип требует не менее скурпулёзного анализа, чем модель. Выбирать надо то, что эффективнее. Мы пробовали работать именно так как и говорит автор: продвигались по модели к коду. Шаг за шагом. Модельно-управляемая фабрика, заточенная под конкретную среду, под конкретные библиотеки. Наш опыт показал - это хуже, чем гибкая разработка. Поэтому кодогенераторы умерли. Хотя, в них что-то было :). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:36 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
авторМеня интересует генерация для C++, тогда понятно, это другой мир проектирования. Удачи! ЗЫ. Кстати, для Delphi есть Bold , в котором работает вся цепочка: - модель -> кнопка -> создать код и структуру БД -> Приложение.exe Но неприжилось это "внебрачное" дитя (программист не контролирует ситуацию и не знает даже скока таблиц в этой БД). ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:38 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123что такое "блок"? При процедурном проектировании это кусок кода? IMHO программист должен разработать функциональный класс/объект/компонент/COM/пакет, который используют другие. А вот кодогенератор его использовать не сможет. Попробую объяснить про блок. Термин выбрал неудачный. Им может быть всё, что угодно из перечисленного выше. Даже процесс типовой. Если этот "блок" типовой, его превращают в стереотип. Аналитик использует стереотип в моделе. Кодогенератор (он может всё! :)), "обучен" этому стереотипу. И он, кодогенератор, используя этот стереотип, встроенный в модель, создаёт соответствующий код. Примерно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:42 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
asafree Petro123что такое "блок"? При процедурном проектировании это кусок кода? IMHO программист должен разработать функциональный класс/объект/компонент/COM/пакет, который используют другие. А вот кодогенератор его использовать не сможет. Попробую объяснить про блок. Термин выбрал неудачный. Им может быть всё, что угодно из перечисленного выше. Даже процесс типовой. Если этот "блок" типовой, его превращают в стереотип. Аналитик использует стереотип в моделе. Кодогенератор (он может всё! :)), "обучен" этому стереотипу. И он, кодогенератор, используя этот стереотип, встроенный в модель, создаёт соответствующий код. Примерно так. стереотип: - бросить таблицу на форму ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 17:55 |
|
Генерация кода из модели
|
|||
---|---|---|---|
#18+
Petro123стереотип: - бросить таблицу на форму На UML, это может быть ассоциация класса доступа к таблице с классом формы. На более высоком уровне абстракции, это может быть зависимость класса формы от класса таблицы или, если речь идёт об SQL запросе из многих таблиц, БД в целом. Как договоримся. ИМХО, из того и из другого можно сгенерить код. Естественно, графическая нотация UML может быть менее наглядна, чем нотация IDE Delphi, тут, несомненно, универсальные системы моделирования будут уступать специальным. Вопрос только в том, на каком этапе начать перенос данных из одной системы в другую. Иногда это стоит сделать уже на этапе анализа. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2006, 18:41 |
|
|
start [/forum/topic.php?fid=33&fpage=59&tid=1549356]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 397ms |
0 / 0 |