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 chave 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 Nível Alto 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 Diretriz do Produto de Trabalho: Subsistema de Design para obter as diretrizes
relacionadas às especificações e realizações do subsistema e quando elas devem ser utilizadas.
|