Conceitos: Mapeamento para Código a partir do Design.
Tópicos
O design deve definir o sistema o suficiente para que possa ser implementado sem ambigüidade.
A idéia do que é suficiente varia de um projeto para outro e de uma empresa para outra.
Em alguns casos, o design remonta um esboço, elaborado apenas o suficiente para
assegurar que o implementador possa continuar (uma abordagem de "esboço e código").
O grau de especificação varia conforme o conhecimento do implementador, a
complexidade do design e o risco de que o design possa ser construído erroneamente.
Em outros casos, o design é elaborado até o ponto em que o design pode ser
transformado automaticamente em código. Isso geralmente envolve extensões para a UML
padrão para representar a semântica específica da linguagem e/ou ambiente.
O design também pode ser hierárquico, conforme a seguir:
- um modelo de design de alto nível que esboça uma visão geral do sistema global
- um modelo de especificação de subsistema que especifica com exatidão as interfaces
e o comportamento necessários dos principais subsistemas do sistema
- um modelo de design detalhado para as partes internas dos subsistemas
O Caso de Desenvolvimento deve definir
como o Modelo de Design é realizado no processo específico do projeto e como/se
o modelo está relacionado a outros modelos e à implementação. Os detalhes devem ser
capturados nas Diretrizes Específicas do Projeto.
As seções a seguir descrevem algumas opções diferentes para relacionar um design e uma
implementação e discutir as vantagens e desvantagens dessas abordagens.
Uma abordagem comum para o design é esboçar o design em um nível completamente
abstrato e, em seguida, mover diretamente para o código. A manutenção do modelo de design é manual.
Nesta abordagem, deixamos uma classe de design ser uma abstração de várias classes de
nível de código. É recomendável mapear cada classe de design para uma classe "principal"
que, por sua vez, pode utilizar várias classes "assistentes" para desempenhar seu
comportamento. Você pode utilizar as classes "assistentes" para implementar um atributo complexo
ou para construir uma estrutura de dados necessária para a implementação de uma operação.
No design, você não modela as classes "assistentes" e modela apenas os
atributos, relacionamentos e operações essenciais definidos pela classe principal.
A finalidade desse modelo é a abstração dos detalhes que podem ser completados
pelo implementador.
Essa abordagem é estendida para aplicar-se aos outros elementos do modelo de design. Você
pode ter interfaces de design que sejam mais abstratas que as interfaces de nível de
código e assim por diante.
Em ambientes de engenharia round-trip, o modelo de design evolui para um nível de
detalhe em que torna-se uma representação visual do código. O código e sua
representação visual são sincronizados (com o suporte a ferramentas).
A seguir estão algumas opções para representar um Modelo de Design em um contexto
de engenharia round-trip.
Modelo de Design de Alto Nível e Modelo de Design Detalhado
Nesta abordagem, há dois níveis de modelo de design mantidos. Cada elemento de
design de alto nível é uma abstração de um ou mais elementos detalhados no modelo
round-trip. Por exemplo, uma classe de design pode ser mapeada para uma classe "principal"
e várias classes "assistentes", exatamente como na abordagem de "esboço e
código" descrita anteriormente. A rastreabilidade dos elementos do modelo de
design de alto nível para elementos do modelo round-trip pode ajudar a manter a consistência
entre os dois modelos.
Embora possa ajudar a abstrair detalhes menos importantes, esse benefício
deve ser equilibrado com o esforço necessário para manter a consistência entre os
modelos.
Modelo de Design de Evolução Única
Nesta abordagem, há um único Modelo de Design. Os esboços iniciais dos elementos de
design evoluem para o ponto no qual podem ser sincronizados com o código. Os diagramas,
como aqueles utilizados para descrever realizações de casos de uso de design, referenciam
inicialmente as classes de design esboçadas, mas às vezes referenciam classes específicas da linguagem.
As descrições de alto nível do design são mantidas conforme necessário, tais como:
- diagramas da estrutura lógica do sistema,
- especificações de subsistema/componente,
- padrões / mecanismos de design.
Esse modelo é mais fácil de se manter consistente com a implementação.
Uma abordagem relacionada é definir o design em termos de especificações para os
principais subsistemas, detalhados ao ponto em que as implementações podem ser compiladas
em relação a eles.
O design detalhado da realização do subsistema pode ser modelado e mantido
separadamente a partir desse modelo de especificação.
Consulte Diretrizes: Subsistema de Design para
obter as diretrizes relacionadas às especificações e realizações do subsistema e quando
elas devem ser utilizadas.
|