Dependência entre classes
Published: 2022-05-23 11:39:49


Durante a implementação de umsoftware é comum nos depararmos com erros. Na alteração de um atributo, método ou uma classe e verficamos que quebram as outras partes do software. Isto para a existência de um alto acoplamento entre classes.

Dependência é o relacionamento que indica a dependência entre um componente e outro. Esta relação indica que um determinado contexto precisa do outro para efectuar as suas operações.
A dependência é um dos relacionamentos mais comuns na construção de um software. Torma-se difícil impossível programar sem utilizar a depedência.

## Representação da Dependência 
Na UML a dependência pode ser representada nos seguintes diagramas:
- Classes;
- Caso de Uso;
- Componentes;
- Implementação.

A depedência entre classes é representada por uma linha tracejada e uma seta. A seta vai da classe dependente para classe independente (classe A ------> classe B).

## Tipos de dependência
- Abstração: classe A e classe B representam o mesmo em diferentes níveis de abstração;
- Ligação: o método da Classe A recebe classe B como parâmetro e liga os objectos a este parâmetro;
- Realização: Classe A é uma implementação de classe B;
- Substituição: Classe A pode substituir a classe B e  deve obedecer o contrato da classe B;
- Uso: Classe A precisa da classe B para relaizar correctamente as operações.


## Cenários da dependência entre classes
- Classe A utiliza  a classe B que possui escopo global;
- Classe A utiliza  a classe B como um parâmetro para uma de suas operações;
- Classe A utiliza  a classe B como uma variável local para uma de suas operações;
- Classe A envia uma mensagem para uma classe B.

## Precauções com a Dependência
- Cada alteração na classe B, deve exigir a alteração na classe A;
- Caso a classe B seja eliminada, pode causar pronlemas na classe A;
- O uso incorrecto pode causar um alto acoplamento no software, causando dificuldades na manutenção.

## Sugestões
- Apesar de ser comum na Orientação a Objectos, a dependência pode ser utlizada em outros paradigmas de programação.
- Para sistemas que não possuem Diagrama de classes é possível visualizar a dependência com a ajuda de uma IDE (Eclipse ou Visual Studio).

## Exemplo
Representação da dependência numa ferramenta de geração de fontes de dados.
Uma fonte de dados é criada a partir de um contexto e permite criar um ficherio com o formato solicitado(.sql, .csv e .xml).
Um contexto ou tabela possui um nome, nº de campos, formato de dados,  lista de campos, tipos de dados lista de valores mínimos e valores máximos.
A geração de fontes dependem do Contexto. No final será gerado um arquivo com a extensão do formato.
Deve ter uma classe que permita chamar as fontes de dados.
Modelagem: Astah UML
Linguagen: Java


**Diagrama de classes**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1hdvkpfmzspti7ehr09s.jpg)

**Context**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g0gaigja9oefaiyjvoay.jpg)

**XMLSource**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1s3lwwj8zyoom03ph33t.jpg)

**DataSourceCaller**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/smkk6hflb9avc6ikmglj.jpg)

**DataSource**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3tr0lr13hyk6uhsmz2ms.jpg)

## Referências
[](https://www.ibm.com/docs/pt-br/rational-soft-arch/9.6.1?topic=diagrams-dependency-relationships)
[](https://www.ateomomento.com.br/orientacao-a-objetosuml-relacionamento-entre-classes-dependencia/)