tag:blogger.com,1999:blog-3208941668630248550.post4042731815183324620..comments2024-03-13T10:43:06.615+02:00Comments on 18-ть лет с Delphi: Было дело - я делал одну "штуку" для UML и кодогенерацииAlex W. Lulinhttp://www.blogger.com/profile/08400475846894229767noreply@blogger.comBlogger80125tag:blogger.com,1999:blog-3208941668630248550.post-28814135322409180832013-09-27T22:06:44.218+03:002013-09-27T22:06:44.218+03:00«ок, сегодня уже не успею, но в понедельник думаю ...«ок, сегодня уже не успею, но в понедельник думаю покажу..»<br />-- Ну, пока Вы создаёте пример применения Вашей технологии разработки, не могли бы кратко обозначить: с чего Вы начали, к чему перешли, чем продолжили?<br />Например, Вы начали с создания мета-модели или воспользовались существующей, удалив из неё "всё лишнее"?NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-80340176004714978112013-09-27T22:02:00.647+03:002013-09-27T22:02:00.647+03:00"Я допускаю, что в диаграмме классов для наст..."Я допускаю, что в диаграмме классов для настройки Вы можете предусмотреть соответствующее событие (publisher), но из чего следует, что на это событие следует «подписываться» если между объектом, определяющим настройку и прецедентом, где она потребляется в UML установлена связь использования?"<br /><br />-- из чего следует? из стрелочки dependency - к соответствующим настройкам. Если кто-то заинтересован в знании об изменении настройки - он ставит стрелочку. И получает соответствующий код subscriber'а.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-60652512824576283912013-09-27T21:58:16.868+03:002013-09-27T21:58:16.868+03:00"с конкретной метамоделью, моделью, шаблоном ..."с конкретной метамоделью, моделью, шаблоном и кодом.."<br />-- да, Макс. Для "выдуманного" языка :-)Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-12280771519518785362013-09-27T21:13:16.113+03:002013-09-27T21:13:16.113+03:00Пример порождения стереотипов. Не самый удачный. И...Пример порождения стереотипов. Не самый удачный. И не совсем "раскрутка". Но как уж есть.<br /><br />http://18delphi.blogspot.ru/2013/09/blog-post_5343.html<br /><br />И ЕЩЁ РАЗ - "конечный программист" - подобное не программирует. Он только этим пользуется.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-79517026247445048022013-09-27T20:48:56.441+03:002013-09-27T20:48:56.441+03:00Макс, ты сам можешь пост написать. Я же тебя добав...Макс, ты сам можешь пост написать. Я же тебя добавлял.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-49302336228525182432013-09-27T17:53:28.048+03:002013-09-27T17:53:28.048+03:00Шур, мож я тебе просто матерьял скину тогда, а ты ...Шур, мож я тебе просто матерьял скину тогда, а ты запостишь как новый пост?Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-73767575501408538922013-09-27T17:51:40.392+03:002013-09-27T17:51:40.392+03:00ок, сегодня уже не успею, но в понедельник думаю п...ок, сегодня уже не успею, но в понедельник думаю покажу... единственное, не пойму как тут имиджы прикладывать :(Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-34384944691742653582013-09-27T17:13:18.877+03:002013-09-27T17:13:18.877+03:00Да я не так, чтобы спешу... :-)Да я не так, чтобы спешу... :-)NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-37757856236987258462013-09-27T14:58:17.417+03:002013-09-27T14:58:17.417+03:00в процессе... :)
отвлекаться приходится, разумеетс...в процессе... :)<br />отвлекаться приходится, разумеется, работа, дети )Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-16212956658060798142013-09-27T12:33:14.190+03:002013-09-27T12:33:14.190+03:00«сейчас примерчик сварганю, думаю отталкиваясь от ...«сейчас примерчик сварганю, думаю отталкиваясь от него понятнее весь механизм будет<br />с конкретной метамоделью, моделью, шаблоном и кодом..»<br />-- Да, это было бы ***очень интересно***.NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-65812669593334776032013-09-27T11:47:46.522+03:002013-09-27T11:47:46.522+03:00с конкретной метамоделью, моделью, шаблоном и кодо...с конкретной метамоделью, моделью, шаблоном и кодом..Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-2778186584802290412013-09-27T11:46:42.701+03:002013-09-27T11:46:42.701+03:00А сорри, уже запостил выдержки из него. Впрочем он...А сорри, уже запостил выдержки из него. Впрочем они ключевые имено с тз того почему наш умл не умл вовсе :)<br /><br />Лан, сейчас примерчик сварганю, думаю отталкиваясь от него понятнее весь механизм будетМаксим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-2545932679752459522013-09-27T11:44:44.934+03:002013-09-27T11:44:44.934+03:00По большому счету, UML для нас лишь конкретная нот...По большому счету, UML для нас лишь конкретная нотация знакомая большинству, «форма стрелочек и квадратиков», важен не она, а принцип действия, т.е. то, что мы с ним делаем и как.<br /><br />Основная проблема использования UML в «классических» инструментах в том что, кодогенерация жестко связана с предопределенной статической метамоделью. Вы не можете (или почти не можете) изменить ни одно, ни другое. Ни изменить, ни расширить, ни поменять правила или задать новые специфические. Главное, что классики не раскрыли широкой публике, а «классические инструменты» не реализовали, это потенциал UML именно с точки зрения мета-конструирования. Создания собственных метамоделей со своей специфической кодгенерацией. И вот тут ключевую роль начинает играть понятие <>, о котором говорит Александр. Стереотип позволяет нам определить группу специфических метаклассов с привязкой к ним произвольной кодогенерации. Фактически, с помощью стереотипов, вы формируете произвольную мета-модель, которая автоматически становится вашим собственным DSL, трансформирующим квадратики в код, по любым правилам которые вы реализуете. <br /><br />Собственно UML описывает у нас мета-мета-модель, т.е. правила формирования правил. Дальше мы определяем мета-модель, вводя в нее любые нужные нам понятия. Например, мы можем определить для Delphi возможность множественного наследования. Затем привязываем к этой метамодели правила преобразования ее элементов в код (или любые другие артефакты, например в документацию, вспомогательные файлы и т.д.). В примере с множественным наследованием это может быть трансформацией в одиночное наследование плюс агрегацию, но при этом так, что с точки зрения программиста это будет выглядеть именно как 100% наследование. Наконец, мы создаем реальные модели своей предметной области, но уже оперируя не тем, что нам изначально предложили «классики», а всем тем арсеналом, что мы сами придумали на мета-уровне и получаем из них готовый код произвольной сложности.<br /><br />Те ВЫШЕ то что перечислял Шура, это уже не ВОБЩЕ НЕ UML, это все уже наш DSL, те все эти UseCaseSetting и тд, это уже понятия из метамодели, из которых конечный программист и конструирует приложение.<br /><br />Шура ни как не привел КОНКРЕТНЫЙ пример 2на пальцах" что такое "наш юмль", я ниже попробуюМаксим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-47326034604222024862013-09-27T11:44:10.165+03:002013-09-27T11:44:10.165+03:00«Не знаю, читали ли Вы, скажем так, не удачно опуб...«Не знаю, читали ли Вы, скажем так, не удачно опубликованное на харбре "интервью" со мной и Шурой»<br />-- Я читал интервью Всеволода Леонова (http://blogs.embarcadero.com/vsevolodleonov/2013/08/02/whyumlru/) с Александром и Максимом Крыловым.<br />Как я понимаю, Максим Крылов - это Вы.<br />Интервью читал, моё общение с Александром началось по его мотивам.NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-75169951499347316612013-09-27T11:31:42.568+03:002013-09-27T11:31:42.568+03:00Не знаю, читали ли Вы, скажем так, не удачно опубл...Не знаю, читали ли Вы, скажем так, не удачно опубликованное на харбре "интервью" со мной и Шурой, там много воды, имхо, но есть и полезные вещи, в частности как раз про то что мы подразумваыаем под УМЛ. Не предлагаю Вам ее читать, просто для начала приведу от туда пару цитат, что бы не чипятать текст заново. Но если вы вдруг ее уже видели, то скажите, что бы я не копировал то что вы уже прочитали. А я пока ее постараюсь найти... :)Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-10080216809549474592013-09-27T11:18:26.191+03:002013-09-27T11:18:26.191+03:00«NameRec, Вы еще тут? :)»
-- Нет, я здесь :-)
«Мн...«NameRec, Вы еще тут? :)»<br />-- Нет, я здесь :-)<br /><br />«Мне кажется Шура, упускает из виду тот момент, что у нас, внутри, за много лет использования шаблонной генерации трансформировалось само понятие UML, как такового, и сейчас уже не совсем соответствует тому что принято думать о нем во внешнем мире, поэтому вы с ним как бы немного на разных языках говорите.»<br />-- Да-да, он это точно упускает :-) В этом контексте забавно выглядят его отсылки к Фаулеру по поводу стереотипов UML в ситуации, когда я уже теряюсь: где стандартная терминология UML, а где ваш внутрикорпоративный сленг :-)<br /><br />«Если Вы еще тут и Вам еще интересно, могу попробывать "перевести"»<br />-- Да, я здесь, мне интересно и с моей стороны приветствуются любые разъяснения.<br />В частности, мне было бы очень интересно получить разъяснения, сформулированные здесь (http://18delphi.blogspot.com/2013/09/uml_5682.html?showComment=1380240569192#c3467163963108642300)<br />Особенно, в части того, как "конечный программист" связывает разработанную им часть UML-модели с кодом, который со слов Александра, он создаёт в UML.NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-77674882893583448632013-09-27T11:02:44.650+03:002013-09-27T11:02:44.650+03:00NameRec, Вы еще тут? :) Мне кажется Шура, упускае...NameRec, Вы еще тут? :) Мне кажется Шура, упускает из виду тот момент, что у нас, внутри, за много лет использования шаблонной генерации трансформировалось само понятие UML, как такового, и сейчас уже не совсем соответствует тому что принято думать о нем во внешнем мире, поэтому вы с ним как бы немного на разных языках говорите. Если Вы еще тут и Вам еще интересно, могу попробывать "перевести"Максим Крыловhttps://www.blogger.com/profile/17443805180550384967noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-26507828765555409972013-09-27T03:30:30.920+03:002013-09-27T03:30:30.920+03:00««Особенно про "нового сотрудника" - сло...««Особенно про "нового сотрудника" - сложная тема.» <br />-- Если нужно, я могу рассказать как такой "новый сотрудник" будет решать задачу в нашей организации. <br /><br />--расскажите.»<br />-- Я представлю упрощённую схему, если появятся вопросы — я готов на них ответить.<br />1. Начинается всё с того, что аналитик пишет постановку, в которой излагает требования относительно новой настройки и согласует имя настройки с ответственным на проект.<br />2. Далее, он открывает форму ввода настроек в дизайнере, добавляет в источник данных, соответствующий настройкам новое поле, имя которого было согласовано в предыдущем пункте. Определяет тип поля и параметры его визуализации.<br />3. После чего постановка и форма отдаются в реализацию, как элементы задачи для программистов.<br />4. Программист в соответствующем модуле определяет параметр приложения, соответствующий настройке и публикует его в общем хранилище. В сущности, это создание экземпляра соответствующего класса и его настройка с указанием идентификационного имени, согласованного в первом пункте, типа и значения по-умолчанию. Хранилище — это объект, в котором хранятся параметры. Публикация — включение нового параметра в хранилище.<br />Посредством подписки на соответствующее событие в хранилище изменения значений параметров можно отслеживать.<br />Такие события происходят как при загрузке параметров из внешнего источника (например, конфигурационного файла), так и при изменении параметров интерактивно, пользователем.<br />5. Дальше есть варианты, как обеспечить применение настройки, для которой создан параметр в хранилище. Здесь всё зависит от того, на что эта настройка будет влиять и как она будет проявляться для пользователя. В примере с текстовым редактором достаточно подписаться на событие подготовки контейнера текстового редактора и создать объект обработчик — реализующий нужную функциональность, связанную с настройкой. В приведённом примере эта функциональность будет сводиться к своевременному (т. е. соответствующему моменту изменения параметра хранилища) изменению соответствующего свойства текстового редактора.<br /><br />Собственно, работа программиста (в плане настроек) сводится к:<br />1. определению параметра в хранилище<br />2. реализации обработчика нужной функциональности для применения параметра хранилища и реакции на его изменения<br /><br />Наверное, следует добавить, что относительно формы ввода параметров дополнительных действий обычно не требуется, поскольку основную работу по её изменению сделал аналитик, добавив туда соответствующий контейнер элемента управления, и низкоуровневый по отношению к проекту код, который связывает элементы хранилища с источником данных на форме ввода (упомянут в п.2).NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-34671639631086423002013-09-27T03:09:29.192+03:002013-09-27T03:09:29.192+03:00«"то было бы замечательно увидеть хотя бы оди...«"то было бы замечательно увидеть хотя бы один пример с описанием «раскрутки» его в исходный код." <br /><br />+ spell и DoSpell <br /><br />-- там много чего написано.»<br />-- К сожалению, не убеждён, что понял Вас здесь. Фрагмент "+ spell и DoSpell" у меня никаких ассоциаций не вызывает. Увы, я не могу всего знать и догадываться об очевидных вещах. Если можно - поясните, что Вы имели в виду.<br />«" Где он пишет код?" <br /><br />-- в IDE.»<br />-- А как же он связывает создаваемый им в IDE код с разработанным им же фрагментом UML-диаграммы?<br /><br />«"Что Вы вкладываете в понятие «стереотип» здесь?" <br />-- то же что и в остальных местах. СТЕРЕОТИП - это одно из основных понятий UML.»<br />-- Этого достаточно :-) Я знаю, что такое "стереотип" в UML.<br />Не понимаю только, что Вы имели ввиду, когда сказали "поиск по стереотипу", упомянув к тому же, "много параметров"?NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-56595725111972057192013-09-27T02:50:39.310+03:002013-09-27T02:50:39.310+03:00"Что Вы вкладываете в понятие «стереотип» зде..."Что Вы вкладываете в понятие «стереотип» здесь?"<br />-- то же что и в остальных местах. СТЕРЕОТИП - это одно из основных понятий UML. Тут уж простите - "читайте Лармана" или Фаулера.<br /><br />Стереотип - это стереотип. Краеугольный камень UML.<br /><br />http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D1%80%D0%B5%D0%BE%D1%82%D0%B8%D0%BF_(UML)<br /><br />Настройка это стереотип UseCaseSetting. реализатор настройки - SettingsHolder.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-51889342753668165122013-09-27T02:41:42.966+03:002013-09-27T02:41:42.966+03:00" Где он пишет код?"
-- в IDE." Где он пишет код?"<br /><br />-- в IDE.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-26042497146026284662013-09-27T02:41:07.822+03:002013-09-27T02:41:07.822+03:00"то было бы замечательно увидеть хотя бы один..."то было бы замечательно увидеть хотя бы один пример с описанием «раскрутки» его в исходный код."<br /><br />+ spell и DoSpell<br /><br />-- там много чего написано.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-56678561821794509252013-09-27T02:39:50.886+03:002013-09-27T02:39:50.886+03:00"а реализация — это связанный с фрагментом UM..."а реализация — это связанный с фрагментом UML-модели шаблон."<br />-- Это не так. Есть UseCase. Есть UseCaseRealization. В RUP. Обо они - элементы модели.Alex W. Lulinhttps://www.blogger.com/profile/08400475846894229767noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-68462628672425333702013-09-27T02:36:25.815+03:002013-09-27T02:36:25.815+03:00«"Настройку для начала нужно найти в диаграмм...«"Настройку для начала нужно найти в диаграмме. Как это сделать?" <br /><br />-- если я правильно понял вопрос, то - функцией поиска. По стереотипу. У нас поиск - продвинутый. По многим параметрам умеет искать.»<br />-- Т.е. как я понимаю, у вас реализован поиск по диаграмме, с учётом её иерархичности. Я правильно понимаю?<br />Только что значит «поиск по стереотипу»? Что Вы вкладываете в понятие «стереотип» здесь?<br /><br />«"но какой обобщённый способ анализа Вы видите?" <br />-- я сам бы хотел себе ответить на этот вопрос :-) но если я на него отвечу, то скорее всего - я буду работать в другой организации :-)»<br />-- Это в высшей степени странно. Вероятно, Вы меня не правильно поняли.<br /><br />«"Иными словами, как, имея диаграмму и шаблоны" <br /><br />-- давайте только точки над i поставим. Шаблоны (мета-модель) - первичны. Модель - вторична. <br />"конечному" программисту - "не надо думать" о шаблонах (мета-модели). Они есть. Априори. Они для него - аксиоматика.»<br />-- Хорошо, а о чём ему («конечному программисту») *надо* думать? Если я правильно Вас понял, он при решении конкретных задач по проекту рисует *фрагменты* общей диаграммы UML, описывающей весь проект и связывает их с кодом. Посредством чего он осуществляет это связывание? Где он пишет код? NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.comtag:blogger.com,1999:blog-3208941668630248550.post-47304874736025344602013-09-27T02:35:08.706+03:002013-09-27T02:35:08.706+03:00«"-- да мы это представляем себе. И не раз ст...«"-- да мы это представляем себе. И не раз сталкивались. Более того у нас мета-модель не позволяет прецедентам НАПРЯМУЮ использовать друг-друга. Точнее (РЕАЛИЗАЦИЯМ прецедентов).» <br />Стрелка класса ”uses” мне представляется именно *прямым* использованием." <br /><br />-- "Точнее (РЕАЛИЗАЦИЯМ прецедентов)" - я не зря это написал :-) Прецеденты - друг друга напрямую - МОГУТ использовать (на уровне модели ТЗ) РЕАЛИЗАЦИИ - нет. Реализации прецедентов - это ПРОЕКТНЫЕ классы. Они реализуют прецеденты из ТЗ. Связью realization. И реализации прецедентов друг про друга ничего не знают. Друг про друга знают только прецеденты.»<br />Что Вы понимаете под реализацией прецедентов? Сказанное Вами можно понять так, что прецедент содержится на UML-модели, а реализация — это связанный с фрагментом UML-модели шаблон. Если так, то как же «не знают», если между соответствующими прецедентами установлена связь? Вы кстати, что-то говорили о пространствах имён в этой связи. Можно домыслить это как подключение соответствующих модулей в шаблон реализации модели, приводящий к появлению связи модулей в результирующем коде.<br />Домысливать дальше не хочу — м.б. лучше Вы внесёте ясность?<br /><br />«"Но это опять увеличивает его связность, особенно, если принять во внимание иерархичность его организации." <br /><br />-- а вот тут - нет. Связность не увеличится. Шаблоны- тоже иерархичные. С ДРУГОЙ иерархией.»<br />-- Да какая разница :-) На связность иерархичность никак не влияет. Просто у Вас она становится двумерной: помимо горизонтальной (явные стрелки), появляется ещё и вертикальная (вложенность). И разновидности иерархий, как правило, понимание не упрощают, поскольку усложняются ассоциации между связанными понятиями. Например, мне известно «это», как получить «то», если «это», скажем, элемент модели, а «то» - элемент её реализации.<br />Ну ладно, здесь я спор начинать не собираюсь, поскольку это может быть делом вкуса, привычки, осведомлённости, соглашений и даже технологических подходов.<br /><br />«"Вот и возникают у меня вопросы относительно порога входа, времени, требующегося на изучение существующего, методик и парадигм, а также затрат на ведение UML-кодо-хозяйства." <br />-- у новых сотрудников - затрат "никаких" кроме освоения "мета-модели". Но она - интерактивна. Редактор моделей - сам тебя ведёт. Он не даст сделать что-то отличное от мета-модели. Новым сотрудникам говорят - "ну вот так устроен мир". Если в этом устройстве что-то не так - мы либо правим шаблоны, либо обучаем новых сотрудников - как это сделать самим. Второе - конечно - сложнее.»<br />-- Здесь было бы замечательно проиллюстрировать Ваши слова примером метамодели.<br /><br />«"А в Вашем случае он есть, да ещё и записанный в форме шаблонов." <br />-- одно уточнение. В шаблонах записан не код. А ПРИНЦИПЫ генерации кода. Это ВАЖНО.»<br />-- Это то немногое, что мне известно :-) Я видел примеры ваших шаблонов, понимаю, что там описано то, что Вы обозначаете как «принципы генерации». Но в этих «принципах» участвуют фрагменты кода, которые «при раскрутке» формируют код результирующий.<br />Если же Вы стали сейчас говорить о «принципах генерации кода», то было бы замечательно увидеть хотя бы один пример с описанием «раскрутки» его в исходный код.NameRechttps://www.blogger.com/profile/00070033877714975718noreply@blogger.com