LINUX.ORG.RU

В защиту UML.


0

1

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

Первое. Как было справедливо замечено, UML-диаграммы и инженерные схемы/чертежи служат в общем идентичным целям. Но есть одно архиважное различие. В электронике без принципиальной схемы можно спаять максимум детекторный приемник; в строительстве без чертежа можно соорудить только сарай-скворечник. Для любой мало-мальски серьезной затеи приходится прибегать к графической нотации, это абсолютно нормально и не вызывает претензий. С software engineering ситуация другая. Спектр программных решений невероятно широк, а UML оправдывает себя в довольно узкой (хоть и очень масштабной) нише. Как правило, это - программные системы уровня предприятия, где: а) существенным образом используется ООП, б) фигурирует большое количество персистентных бизнес-сущностей и связей между ними, в) есть четкое деление системы на «ярусы» (tiers), г) систему разрабатывает большая команда, д) есть строгие требования к документации. Для проектирования игр, музыкальных плееров или научного софта UML мало полезен. Так вот, проблема в том, что подавляющее большинство крикунов о ненужности UML не имеют никакого отношения к разработке ПО уровня предприятия. Точнее, имеют враждебное отношение; одни подсознательно понимают, что эта область для них недостижима (вследствие низкой квалификации); другие презирают enterprise за то, что якобы enterprise «убивает искусство в программировании и поощряет ремесленничество» (позволю себе не комментировать эту точку зрения); третьи не признают все корпоративное (в том числе и ПО) из чистого нонкоформизма. Далее, негативное отношение к корпоративному ПО переносится на UML - вот и разгадка. Добавим сюда так любимый лисперами «Blub paradox»: понимающий UML смотрит «сверху вниз» и видит возможности его успешного применения, непонимающий - смотрит «снизу вверх» и видит угрозу, как от всего непонятного.

Второе. Тезис о том, что лучшим инструментом проектирования/документирования является словесное описание и сам исходный код. Исходный код не годится для этих целей потому, что огромное количество (если не большинство) терминов UML просто не имеют (и не могут иметь) отражения в исходном коде. Так утверждают, опять-таки, лишь те, кто совершенно не владеет UML и счтает, что UML ограничивается лишь одной диаграммой классов. При этом про такие важные вещи как диаграмма вариантов использования (use-case diagram), диаграмма размещения (deployment diagram), диаграмма состояния (statechart diagram) и диаграмма последовательностей/взаимодействия (sequence/collaboration diagram) ВНЕЗАПНО остаются за кадром. Да, кое-что из этого можно кое-как восстановить по исходному коду, но это задача уровня reverse engineering.

Второе с половиной. Верно, что для любой UML-диаграммы возможно изоморфное текстовое описание. Но выразительность UML на много порядков выше. Как говорит один очень уважаемый Java EE специалист, «a clear, accurate, and easy-to-understand picture is truly worth a thousand words.» И я почему-то склонен ему верить. В самом деле, нарисовать диаграмму можно гораздо быстрее, чем описывать все то же словами. А «распарсить» диаграмму человеку еще проще. И не только распарсить, а увидеть «паттерны» (так ненавидимые все теми же крикунами), а также аномалии. Если электронщику сразу покажется подозрительным отсутствие развязывающего конденсатора в цепи транзистора, то опытный проектировщик сразу заметит циркулярные ссылки. Или возможность разнести иерархии интерфейсов и имплементаций в соответствии с паттерном «мост». Я уже не говорю об удобстве навигации по модели, которое предоставляют современные инструменты для моделирования. А сколько времени понадобится на то же самое с использованием только текстового описания?

Третье. Претензии к якобы «статичности» UML, неприменимости к развивающимся системам и неизбежном устаревании не выдерживают никакой критики. Высказывающим подобные претензии рекомендую курить статью о Round-trip engineering до полного просветления. RTE - пройденный этап, давно известная и обкатанная методология, распространяющаяся не только на UML, но и вообще на системы, представленные множеством гетерогенных артефактов. Вопрос поддержания актуальности UML-моделей - исключительно вопрос владения инструментами и правильной постановки процесса разработки. Нетривиальным (и, тем более, критическим) этот момент может показаться только тем, кто впервые слышит о RTE (что еще раз подтверждает мое предположение о главной причине претензий к UML - далекости от промышленной разработки ПО).

Четвертое. Атоматическая верификация по UML-моделям, точнее якобы ее невозможность. Утверждение об этом снова свидетельствует о незнании предмета дискуссии; я бы рекомендовал сперва ознакомиться с текущей ситуацией в этом плане. Однако, никто не спорит о том, что у UML в этом контексте есть свои недостатки, такие как многословность. Они были учтены в более перспективной методологии LePUS3 и соответствующем инструменте моделирования и верификации Two-tier Programming Toolkit.

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

А борцунов с UML слушать не надо. Их претензии, как показывает практика, носят исключительно нетехнический характер.

★★

Ответ на: комментарий от shty

> поясни каким образом тогда «паттерн может быть применён к любом языку поддерживающему парадигму ООП»?

А где тут противоречие?

anonymous
()
Ответ на: комментарий от anonymous

> поясни каким образом тогда «паттерн может быть применён к любом языку поддерживающему парадигму ООП»?

А где тут противоречие?

ок, давай на примерах, начнём с простого - приведи любой паттерн проектирования

shty ★★★★★
()
Ответ на: комментарий от shty

Ну, например, if-then-else в нетипизированном лямбда-исчислении с нормальным порядком. Что дальше?

anonymous
()
Ответ на: комментарий от shty

> поясни каким образом тогда «паттерн может быть применён к любом языку поддерживающему парадигму ООП»?

Где там ересь, укажи конкретно.

anonymous
()
Ответ на: комментарий от anonymous

Ну, например, if-then-else в нетипизированном лямбда-исчислении с нормальным порядком. Что дальше?

это по-твоему паттерн проектирования???

:lol:, да ты ж упорот наглухо

shty ★★★★★
()
Ответ на: комментарий от shty

> это по-твоему паттерн проектирования???

Для лямбда-исчисления - безусловно, паттерн. Так же как «наследование» или «инкапсуляция» - паттерны для не-ОП языков. Ты не знал? Это же в ГоФ в самом начале написано, специально для дебилов вроде тебя. Но ладно, раз уж на то пошло возьмем паттерн «мост».

anonymous
()
Ответ на: комментарий от anonymous

> это по-твоему паттерн проектирования???

Для лямбда-исчисления - безусловно, паттерн. Так же как «наследование» или «инкапсуляция» - паттерны для не-ОП языков. Ты не знал? Это же в ГоФ в самом начале написано, специально для дебилов вроде тебя.

для одарённые личностей в ОП написано - «UML оправдывает себя [..] (там) где существенным образом используется ООП», но ты не стесняйся пожалуйста, продолжай изображать клоуна

Но ладно, раз уж на то пошло возьмем паттерн «мост».

я жду описания шаблона

shty ★★★★★
()
Ответ на: комментарий от shty

> для одарённые личностей в ОП написано - «UML оправдывает себя [..] (там) где существенным образом используется ООП»

Ты мне сказал «давай паттерн» безо всяких ссылок на ОП-пост

я жду описания шаблона

Чего ждешь-то? Гугл в зубы и полетел к светлому будущему.

anonymous
()
Ответ на: комментарий от shty

>какой следующий шаг, признать тебя ушлёпком, который не умеет читать

Ну, я бы на твоём месте признал бы себя ушлёпком, который поленился рассмотреть смысл, скрытый заученными лозунгами.

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

>по-этому паттерн - бойлерплейт

Не согласен. Возьмём задачу рисования на заборе. паттерн - это трафаретка, задающая отношения между элементами букв й, у и х, и ничего не говорящая о том, какого цвета/плотности/etc будут сами буквы. boilerplate - большой штамп, макаешь в краску, стукаешь по забору, и почти всегда одинаковый результат, ±свойства забора и краски. «Кустари» делают это от руки, результат не гарантирован, может получиться хоть Джоконда, хоть полная *ня.

А нужно всё это тому, кому инструмент не позволяет применять готовые функции в условиях реальной жизни :)

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

> для одарённые личностей в ОП написано - «UML оправдывает себя [..] (там) где существенным образом используется ООП»

Ты мне сказал «давай паттерн» безо всяких ссылок на ОП-пост

это тебе не толксы, блджад, читай ОП пост сцуко!

> я жду описания шаблона

Чего ждешь-то?

после твоего высера про if-then-else - да хоть ядерной войны, уже ничего не испугает

shty ★★★★★
()
Ответ на: комментарий от shty

>признать тебя ушлёпком ... не могу, мне воспитание не позволяет

ок, признаю тебя ушлёпком :)

Очевидно ты врёшь.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

к вопросу «признания»/«непризнания» не применима пара «врать»/«не врать»

и, кстати, почему? ты вот написал, что и сам так на моём месте бы сделал, я, так сказать, по твоей рекомендации :)

shty ★★★★★
()
Ответ на: комментарий от shty

>и, кстати, почему?

выключай уже тормоза. Если A говорит, что он не может сделать Б, потому что воспитание, и потом говорит, что он это Б делает - он врёт, в первом или втором случае или в обоих.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Если A говорит, что он не может сделать Б, потому что воспитание, и потом говорит, что он это Б делает - он врёт, в первом или втором случае или в обоих.

Вы не точны в формулировках, отсюда Ваше непонимание

я говорил что моё воспитание не позволяет, то есть я не хочу вешать ярлыков, не зная Вас как человека, а даже если бы и знал - не стал бы выражаться, ибо то Ваше личное дело, но уж коли Вы сами себя во-всеуслышание назвали, я просто констатировал факт

а вообще - «наш налим, Никодим...» (с)

shty ★★★★★
()
Ответ на: комментарий от DonkeyHot

Заинтересовался

Дальше то что мнеж интересно чем срач кончится.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.