[quote=brunohansen]Requisito:
Suponhamos que estou desenvolvendo uma aplicação que manipula quadrados. O usuário tem como um de seus objetivos configurar um tamanho, cor, textura e etc… para que seus quadrados já iniciem desta forma.
“Este objetivo já me leva a pensar em usar um prototipo no meu projeto”.
[/quote]
OK! Demonstre o pattern no modelo UML, mas como falei, não é necessário importar classes java na ferramenta UML para demonstrar isso. Uma operação Quadrado.clone():Quadrado é suficiente para demonstrar a solução desse requisito de uma maneira clara e menos amarrada.
[quote=brunohansen]UML para mim é uma ferramenta de análise/projeto.
Por exemplo na fase de analise eu utilizaria a uml para fazer um diagrama de classes conceituais(Modelo de dominio) que estara bem proximo dos meus requisitos, alias este modelo representara meu problema real.
Agora na fase de projeto eu utilizaria a uml para fazer um diagrama de classes de projeto que estara bem proximo da estrutura que eu vou implementar. Esta fase transforma seu proplema real em “computavel”, ou seja, faz com que ele possa ser resolvido com logica computacional. Nesta fase voce pode ate usar uma tecnica como diminuição do hiato de representação, que faz com que seu projeto se aproxime do seu dominio.
[/quote]
Bruno, seja realista, esse modelo de domínio de uma fase de análise em alto nível, próximo do negócio e principalmente “incodificável” (isto é, abstrações que não se aproximam nem um pouco dos componentes de software reais) não se aplica a muitos projetos. Essa técnica gera artefatos difíceis de manter e aumentam muito a distância entre os requisitos e o código. Seria como uma “camada” a mais na documentação, que encaixa mais na análise de negócio e não de sistema.
O que você chama de projeto é o que eu chamo de análise. Minha visão da análise é descobrir como os requisitos (essencialmente os funcionais) são resolvidos por componentes de software. Nisso o uso da UML faz sentido. Você modela a estrutura estática (os dados e relacionamentos) usando um diagrama de classes e descobre como essas classes colaboram entre sí (através de mensagens) usando diagramas de interação. Por isso disse UML=Ferramenta de Análise. Usar a UML só para documentar é um erro.
OK, mas usar a UML só para comunicação também é limitar a UML. Como falei, uso um diagrama de sequência para [color=red][size=18]descobrir[/size][/color] as mensagens que os objetos vão ter que trocar para resolver os requisitos. Não estou fazendo este diagrama só para deixar as idéias claras para a equipe…
[quote=brunohansen]Agora se isso tudo é um exagero ou não é uma outra conversa.
Só fiquei um pouco espantado quando você disse que padrões de projeto fornece uma solução para a implementação e UML=Ferramenta de Análise.
[/quote]
Acho que é exatamente esse exagero que sempre entra em discussão quando falamos sobre uso da UML. 
Sobre padrões, alguns deles podem aparecer no modelo UML, outros não. Por exemplo, Strategy, State, Singleton, Decorators são bons candidatos a aparecerem no modelo UML, um DataMapper seria um exemplo de pattern que não apareceria no modelo UML, ele estaria só no código. Concorda? É essa a idéia que quis mostrar.
No modelo UML, se estamos usando um Entity, assumimos que tudo está a nossa disposição: não nos preocupamos se é remoto, obtemos os dados das associações sem se importar se o Lazy Load funciona ou se a sessão do Hibernate está aberta ou fechada. Essas não são (não deveriam ser) preocupações em tempo de análise. Logicamente é importante que a arquitetura resolva isso. Arquiteturas fortes permitem um modelo mais abstrato.
É preciso tomar cuidado quando as libraries da implementação estão no modelo UML. Teve uma vez que um analista meu modelou tim-tim-por-tim-tim como uma lista vinda do servidor era populada num JComboBox. Trabalho jogado fora, né? Modelos nesse nível são pesados e potencializam um problema da UML que é a dessincronização com o código (não sei se essa palavra existe).
Como falei, nos últimos projetos meus tenho centralizado o uso da UML em descobrir o funcionamento do Domain Model. Uma ótima leitura é o Domain-Driven Design de Eric Evans. Aliás, no endereço abaixo tem um ótimo resumo:
http://domaindrivendesign.org/book/PatternSummariesUnderCreativeCommons.doc
Também é importante ressaltar que a modelagem não é feita somente no modelo UML, a modelagem continua no código.
(definitivamente, não tenho o dom da brevidade)