Portanto, sim, os diagramas podem ser inadequados às vezes. Quando eles são inapropriados? Quando você os cria sem código para validá-los e pretende segui-los. Não há nada errado em desenhar um diagrama para explorar uma ideia.
Desenvolvimento Ágil de Software: Princípios, Padrões e Práticas - Robert C. Martin
O que exatamente ele quis dizer com isso? A UML não foi projetada para ajudar a planejar como estruturar seu código antes de "mergulhar"? Qual é o sentido de usá-lo se você não seguir os diagramas apresentados?
Contexto: Neste capítulo, o tio Bob faz um diagrama UML para o Score Keeper de um jogo de boliche. Em seguida, ele desenvolve o programa de maneira orientada a testes, sem consultar o diagrama UML. O programa resultante não se parece com o diagrama da UML, e o tio Bob chega à conclusão citada acima.
fonte
Respostas:
Para explicar isso corretamente, precisamos de uma breve lição de história. Nos primeiros dias da engenharia de software, uma analogia frequentemente usada era a construção de uma casa. Um arquiteto e engenheiro estrutural discute os planos com um cliente e cria um design. Os construtores seguem esse projeto para construir a casa real. Escrever código era visto como o equivalente à construção da casa real. Portanto, havia uma necessidade percebida de design antecipado antes que a compilação pudesse ocorrer. Várias ferramentas de design gráfico foram criadas, sendo a UML uma delas.
A ideia originalmente da UML era que alguém projetasse completamente um sistema com a UML e passasse para os codificadores para traduzir esse design em código. Na realidade, isso simplesmente não funciona e levou anos de programadores a serem vistos como "implementadores", em vez de "designers", projetos atrasados, os projetos precisando mudar constantemente depois que deveriam estar completos etc.
O motivo é simples. Codificação é design . Com a analogia da casa, o código são os desenhos do arquiteto. O compilador é o construtor que pega esses designs e cria um programa a partir deles. Essa percepção levou a técnicas ágeis, TDD etc: ferramentas para ajudar a melhorar a qualidade desse design de código.
Assim como um arquiteto pode produzir esboços preliminares para ajudar ela e sua equipe a visualizar o design geral, um desenvolvedor pode usar UML ou outras ferramentas para ajudar a visualizar o design necessário. Assim como esses esboços não são seguidos às cegas, a UML não deve ser seguida às cegas. O design do código deve evoluir a partir de iterações ágeis e usando TDD. Da mesma forma, assim como um arquiteto pode construir um modelo da casa para ajudar ela e sua equipe a visualizar os desenhos, a UML pode ser usada para ajudar a visualizar a estrutura do código.
Como o tio Bob diz, você não pode validar a UML, mas apenas o código. Portanto, o código é a documentação de design principal e a UML, se usada, é apenas uma documentação secundária.
fonte
Eu acho que nem todo idioma de programação (ou design ou código) se encaixa na UML (que eu admito que não conheço bem - apenas li alguns livros sobre ele -, eu nunca o usei e provavelmente não gosto).
O código C simples (por exemplo, o código-fonte do kernel Linux) pode não ser exatamente modelado pela UML.
O código Ocaml (com seus módulos e functores) ou mesmo o código C ++ 11 (com lambdas e modelos) pode não se encaixar na UML.
A programação em vários estágios no MetaOcaml provavelmente não se encaixa na UML.
O código de prólogo ou o código Common Lisp provavelmente não se encaixa na UML.
Veja também esta resposta e esta minha pergunta.
Leia os livros Pragmática da linguagem de programação de Scott e Conceitos, técnicas e modelos de programação de computadores de Van Roy , e pergunte a si mesmo se todos os modelos de programação ali se encaixam na UML.
Veja também Is Design Dead, de Martin Fowler ? blog.
fonte