Aplicando a Orientação a Objetos: Operações dos métodos [3/10]🧶
Tags: beginners, programming, tutorial, csharp
Published: 2023-06-07 18:07:15

`Os métodos são manipuladores de informações que executam operações importantes para o funcionamento dos nossos programas orientados a objetos. Sabemos que eles possuem dois tipos conhecidos como construtores e destrutores responsáveis pela instanciação do objeto. Nesta publicação, veremos encapsulamento e sobrecarga para concluir a introdução dos métodos.`

`Construtores são métodos utilizados para instanciar objetos passando valores iniciais a ele. Destrutores são métodos que destroem um objeto em determinado momento da aplicação.`
##‎ 
## SOBRECARGA
## ‎ 
Quando vimos [construtores](https://dev.to/majuliah/aplicando-a-orientacao-a-objetos-os-metodos-2eed), pudemos perceber que podem haver vários desde que fossem passados parâmetros diferentes, e isso é a sobrecarga de um método. Em diversas situações nos vemos com a necessidade de atribuir a um método parâmetros diferentes para executar operações específicas em contextos distintos. A sobrecarga de método se aplica a métodos em geral, não sendo limitada apenas aos construtores. A seguir vemos um exemplo de uma classe Area. 


![exemplo de sobrecarga de método](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8d2c1cpenzu1yc4z1mrn.png)


- Para criar sobrecargas de métodos, devemos sempre preservar o nome em questão. No exemplo o método se chama CalculaArea;

- Quando uma sobrecarga é feita, mudamos apenas os parâmetros, podendo acrescentar ou retira-los. No exemplo acima, a sobrecarga que calcula o quadrado possui apenas um parâmetro denominado altura enquanto a sobrecarga que calcula o retângulo possui dois determinados como valorBase e valorAltura. Os parâmetros podem ter diferentes tipos (int, double, etc.)

- Como vamos saber de qual sobrecarga de método estamos utilizando ao realizar determinada ação? As sobrecargas devem ser criadas de forma cautelosa e, basta atribuir ao objeto a mesma sequência de parâmetros presentes na sobrecarga criada. Ao calcular a área do quadrado, passaremos apenas um parâmetro que representa a altura, e área do retângulo informaremos a base e a altura.


Conhecendo sobrecargas, conseguimos aplicar o conceito de reuso anteriormente citado, já que com a elas nós só alteramos a assinatura dos métodos e evitamos a geração de código repetida e desnecessária.
‎ ‎ 

## ENCAPSULAMENTO
‎ 

Em certos momentos, nós precisamos proteger atributos de  possíveis alterações que possam atingir a integridade do programa. Como antes visto, o encapsulamento é uma forma de privar membros sensíveis aos contatos externos, protegendo códigos sensíveis de manipulações indesejadas. O encapsulamento é dedicado a manter estados consistentes de nossos objetos. No C#, o ele pode ser feito manualmente, especificado a seguir, com _properties_ e _autoproperties_, assuntos futuros. 
‎ 

![Exemplo de encapsulamento](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/veftcfkimb0lpj6v621t.png)

- Na classe produto, temos três atributos privados. Isso quer dizer que apenas a classe destes atributos podem modificar seus valores. Por este motivo, existem quatro métodos. 

- Atributos privados não podem ser alterados e por esta razão, foram criados quatro métodos a fim de obter e atribuir valores dos atributos.

- Os chamados GetNome e GetPreco são membros que fornecem os valores dos objetos, já que os valores estão privados. Quando um objeto for instanciado, basta chamá-los para que a operação seja realizada.

- Os chamados SetNome e SetPreco são responsáveis por atribuir novos valores aos atributos. 
##‎ 

Com o encapsulamento efetuado, se tornou necessário utilizar métodos para acessar os valores. O encapsulamento manual é utilizado geralmente quando existem condições e verificações que precisam ser atendidas para que o valor possa ser alterado, aumentando o nível de segurança e respeitando a regra de negócio. 

Um exemplo disso é se colocássemos uma condição de integridade para validar o SetNome. 

Como este método altera o nome do produto, poderíamos inserir uma verificação de quantidade de caracteres. A alteração só poderia ser feita se o novo nome que está sendo atribuído tivesse mais de 5 caracteres ou não fosse nulo, por exemplo. 
‎ 
Você pode ler mais sobre níveis de acessibilidade no C# [aqui](https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/accessibility-levels).


Agora conseguimos realmente entender como os métodos são ferramentas poderosas quando bem utilizadas, capazes de otimizar, definir e proteger nossas aplicações. Com esta perspectiva poderemos prosseguir em outros pilares da orientação a objetos.