Capa do livro

Página Principal | Modo Dark

Engenharia de Software Moderna

Marco Tulio Valente

Perguntas Frequentes sobre Projeto de Software

Neste artigo, respondemos perguntas sobre temas relacionados com projeto de software e que não são abordados no Capítulo 5 do livro.

Segue a lista atual de perguntas:

  1. Princípios de projeto são leis que sempre devem ser seguidas?
  2. O que é uma dependência circular?
  3. Existe diferença entre os conceitos de Ocultamento de Informação e Encapsulamento?
  4. O que é um design doc?

1. Princípios de projeto são leis que sempre devem ser seguidas?

Princípios de projeto, como SOLID e outros princípios que estudamos no Capítulo 5 são recomendações ou diretrizes (ou dicas). Ou seja, geralmente, eles são úteis e válidos, mas não necessariamente devem ser usados em toda e qualquer situação.

Vamos dar dois exemplos para ilustrar melhor:

2. O que é uma dependência circular?

Suponha dois pacotes P1 e P2. Existe uma dependência circular entre eles quando P1 usa P2 e vice-versa.

Nessa explicação, usar significa que P1 declara variáveis, chama métodos, lança exceções ou estende classes implementadas em P2, dentre outros usos possíveis.

Uma dependência circular pode ser indireta também, isto é:

P1 usa P2, que usa P3, que usa P4,…, que usa Pn, que volta a usar P1.

Dependências circulares entre pacotes devem ser evitadas, pois elas tornam o entendimento, manutenção e teste do sistema mais complexo.

O próximo diagrama – extraída do seguinte artigo – ilustra uma dependência circular entre classes dos pacotes awt e swing de Java:

Dependência circular entre dois pacotes da biblioteca de Java. Os retângulos maiores são pacotes (ou módulos) e os menores são classes.

O interessante nesse exemplo é que swing é um pacote para construção de interfaces gráficas mais novo do que awt. De certo modo, seria então esperado que ele usasse código antigo, para facilitar a sua implementação. Mas, por outro lado, o que o diagrama revela é que manutenções no pacote antigo (awt) introduziram também dependências para o pacote novo (swing).

3. Existe diferença entre os conceitos de Ocultamento de Informação e Encapsulamento?

Na prática, os dois conceitos são muito similares. Por exemplo, o livro Object-Oriented Software Construction, de Bertrand Meyer, inclui um glossário de termos sobre orientação a objetos. Nesse glossário, a entrada destinada a encapsulamento simplesmente redireciona o leitor para a entrada sobre ocultamento de informação.

Dito isso, gostaríamos de comentar que o termo ocultamento de informação costuma ser mais usado quando estamos tratando de projeto de software, tal como fizemos no Capítulo 5. Ou seja, ocultamento de informação é uma propriedade de mais alto nível, por assim dizer. Já encapsulamento costuma ser mais usado em textos sobre linguagens de programação.

4. O que é um design doc?

Algumas vezes, antes de iniciar a implementação de um novo sistema ou antes de implementar uma nova funcionalidade mais complexa em um sistema existente, recomenda-se escrever um documento abordando questões de projeto relevantes nessa implementação, o qual é chamado de design doc.

Um design doc deve conter seções como as seguintes:

Um design doc, no entanto, não é um documento extenso. Normalmente, ele possui menos de 5 páginas. Porém, existem exceções, nas quais esse tamanho pode chegar a 15-20 páginas. Ele deve ser discutido, revisado e aprovado por todos os membros do time que ficará responsável pela implementação da nova funcionalidade ou sistema.


Voltar para a página principal.