Так что да, диаграммы могут быть неуместны время от времени. Когда они неуместны? Когда вы создаете их без кода, чтобы проверить их, а затем намерены следовать им. Нет ничего плохого в том, чтобы нарисовать диаграмму для изучения идеи.
Гибкая разработка программного обеспечения: принципы, шаблоны и практики - Роберт К. Мартин
Что именно он имеет в виду под этим? Разве UML не предназначен для того, чтобы помочь спланировать, как структурировать ваш код перед «погружением»? Какой смысл его использовать, если вы не следуете диаграммам, которые вы придумали?
Контекст: В этой главе дядя Боб создает диаграмму UML для Хранителя счета в игре в боулинг. Затем он продолжает разработку программы в тестовом режиме, не обращаясь к диаграмме UML. Получающаяся программа не похожа на диаграмму UML, и дядя Боб приходит к заключению, приведенному выше.
источник
Ответы:
Чтобы правильно объяснить это, нам нужен короткий урок истории. В первые годы разработки программного обеспечения, часто используемой аналогией было строительство дома. Архитектор и инженер-строитель обсуждают планы с заказчиком и разрабатывают проект. Затем строители следуют этому проекту, чтобы построить настоящий дом. Написание кода было расценено как создание реального дома. Таким образом, была очевидная потребность в предварительном проектировании, прежде чем эта сборка могла иметь место. Были созданы различные инструменты графического дизайна, среди которых UML.
Идея, изначально связанная с UML, заключалась в том, что можно полностью спроектировать систему с использованием UML, а затем передать ее кодировщикам для преобразования этого проекта в код. На самом деле, это просто не работает и привело к тому, что многие годы программисты воспринимались как «разработчики», а не как «дизайнеры», проекты опаздывали, проекты должны постоянно изменяться после того, как они должны были быть завершены и т. Д.
Причина проста. Кодирование это дизайн . При аналогии с домом код - это чертежи архитектора. Компилятор - это сборщик, который берет эти проекты и строит из них программу. Эта реализация привела к появлению гибких технологий, TDD и т. Д. - инструментов, помогающих улучшить качество разработки кода.
Подобно тому, как архитектор может создать предварительные эскизы, чтобы помочь ей и ее команде визуализировать общий дизайн, так и разработчик может использовать UML или другие инструменты, чтобы помочь визуализировать необходимый дизайн. Точно так же, как за этими набросками не следуют вслепую, так и не следует слепо следовать UML. Дизайн кода должен развиваться из гибких итераций и с использованием TDD. Точно так же, как архитектор может построить модель дома, чтобы помочь ей и ее команде визуализировать чертежи, так и UML можно использовать для визуализации структуры кода.
Как говорит дядя Боб, вы не можете проверить UML, вы можете только проверить код. Поэтому код является основной проектной документацией, а UML, если используется, является только вторичной документацией.
источник
Я предполагаю, что не каждая идиома программирования (или дизайн, или код) вписывается в UML (который, я признаю, я не знаю хорошо - только прочитал несколько книг по нему - я никогда не использовал его, и мне, вероятно, он не нравится).
Простой код C (например, исходный код ядра Linux) может быть не совсем смоделирован UML.
Код Ocaml (с его модулями и функторами) или даже код C ++ 11 (с лямбдами и шаблонами) могут не вписываться в UML.
Многоступенчатое программирование в стиле MetaOcaml, вероятно, не вписывается в UML.
Пролог или Common Lisp-код, вероятно, не вписываются в UML.
Смотрите также этот ответ и этот мой вопрос.
Прочитайте книги Скотта " Прагматика языка программирования" и " Концепции, методики и модели компьютерного программирования" Ван Роя , а затем спросите себя, подходит ли каждая модель программирования к UML.
Смотрите также Мартина Фаулера « Дизайн мертв»? блог.
источник