Projeto de Software – 03 – Projeto Detalhado

Autor(a):

Olá!

Continuamos a nossa jornada pelo mundo do desenvolvimento de software, e hoje o foco é no projeto detalhado. Se você está chegando agora, não deixe de conferir as partes anteriores da nossa saga para ficar por dentro!

O projeto detalhado é uma etapa crucial, pois é aqui que mergulhamos fundo nos projetos e exploramos como eles são estruturados e organizados. Para isso, precisamos de uma linguagem que nos ajude a descrever e visualizar a complexidade dos projetos. Afinal, apenas olhar para o código de um sistema amplo não é suficiente para compreender toda a sua dimensão.

É nesse ponto que entra a UML (Linguagem de Modelagem Unificada), uma ferramenta essencial para descrever sistemas e seus relacionamentos, facilitando assim a elaboração de projetos de software. A UML é rica em diagramas variados, e prometo abordar cada um deles em textos futuros. Por agora, vamos assumir que você já tem uma noção básica sobre o diagrama de classes e o diagrama de sequência.

E por que isso é importante? Porque é exatamente nesses diagramas que se baseia o conceito que vamos explorar hoje: o Grau de Dependência. Preparados para mergulhar nesse tema? Vamos lá!

Grau de Dependência

No mundo do desenvolvimento de software, o conceito de “Grau de Dependência” emerge como uma métrica fundamental, especialmente quando falamos de estrutura e organização de projetos. Essa métrica, similar ao conceito de “Fan-out” em projetos estruturados (que indica o número de módulos acessados por um módulo específico), se divide em duas categorias principais: dependência direta e dependência indireta.

  1. Grau de Dependência Direta Esta métrica foca na quantidade de classes que são referenciadas diretamente por uma classe específica. É uma medida imediata de conectividade e inter-relacionamento no design do seu software.
  2. Grau de Dependência Indireta Por outro lado, o grau de dependência indireta expande a análise, incluindo as classes que são referenciadas de maneira direta e também indireta (de forma recursiva) por uma classe específica. Essa métrica oferece uma visão mais ampla e aprofundada das interconexões dentro do seu projeto.

Entender e analisar esses graus de dependência é crucial para avaliar a complexidade e a manutenibilidade de um sistema de software. Uma alta dependência, seja direta ou indireta, pode indicar um design mais acoplado, o que pode afetar a facilidade de manutenção e expansão do sistema. Portanto, ao projetar e revisar seus sistemas, considere essas métricas como um guia valioso para um design de software mais limpo e eficiente

Essa métrica nos ajuda a entender como as classes dentro de um projeto estão interligadas. Aqui está um exemplo prático:

Considere a classe A e a classe B. A classe A tem uma dependência direta da classe B se:

  • A é uma subclasse direta de B.
  • A possui atributos do tipo B.
  • A utiliza parâmetros de métodos do tipo B.
  • A contém variáveis em seus métodos do tipo B.
  • A invoca métodos que retornam valores do tipo B.

É importante notar que as classes que formam a base do domínio do projeto são consideradas com um grau de dependência zero. Assim, se a classe A apresenta alguma das características acima em relação à classe B, podemos dizer que A depende diretamente de B.

Aplicação Prática do Grau de Dependência

Entender o grau de dependência é vital para avaliar a estrutura de projetos orientados a objeto. Geralmente, espera-se que:

  • As classes em domínios de nível superior, como negócio e aplicação, tenham um alto grau de dependência indireta. Isso significa que essas classes estão frequentemente interligadas com várias outras classes, refletindo a complexidade e a interdependência das regras de negócio e da lógica de aplicação.
  • Por outro lado, classes em domínios de nível inferior, como arquitetura e base, tendem a ter um baixo grau de dependência indireta. Essas classes são mais fundamentais e geralmente fornecem serviços ou funcionalidades básicas, tendo menos interconexões complexas.

Quando observamos diagramas que ilustram as relações de dependência entre classes em um projeto orientado a objeto, é crucial diferenciar as dependências diretas das indiretas. Vamos usar o exemplo:

Dependência Direta

No exemplo, a classe A tem dependência direta das classes B, C e D. Isso significa que A está ligada a essas classes de forma explícita, seja por herança, composição ou utilização direta em métodos e atributos. Em termos de diagrama, isso é geralmente representado por setas ou linhas que conectam diretamente a classe A com as classes B, C e D.

Dependência Indireta

A dependência indireta, por outro lado, engloba não apenas as relações diretas, mas também as relações que essas classes têm com outras. No caso, além das classes B, C e D, a dependência indireta de A inclui todas as classes que estão conectadas a B, C e D, e assim por diante. No total temos 12 classes na dependência indireta, o que sugere uma rede de interconexões mais ampla.