Quando se fala em paradigmas de linguagem de programação, a Programação Orientada a Objetos (POO) é, com certeza, um dos modelos mais populares entre os desenvolvedores. Ela possui quatro principais pilares: Abstração; Encapsulamento; Herança; e Polimorfismo.
Neste artigo, vamos falar sobre o conceito Abstração, utilizando um exemplo prático para ressaltar sua importância.
Abstração na Programação Orientada a Objetos
Embora alguns materiais de estudo deixem um pouco de lado a Abstração na Programação Orientada a Objetos para focar nos demais pilares, é importante frisar que a Abstração é o pontapé inicial dentro de qualquer linguagem Orientada a Objetos.
O conceito de abstração consiste em esconder os detalhes de algo, no caso, os detalhes desnecessários. Dessa forma, todos os outros pilares serão desenvolvidos a partir da Abstração.
Como abstrair um modelo/entidade que faça sentido como um objeto?
Para facilitar o processo de abstração na Programação Orientada a Objetos, definimos 3 princípios para uma abstração concisa, são eles:
- O que o objeto precisa ser?
- O que ele faz?
- E o que ele deve ter?
No exemplo a seguir, utilizaremos a linguagem C# para abstrair um personagem de RPG para um objeto.
Primeiro princípio: o que o objeto precisa ser?
public class Personagem { }
Neste caso, queremos que o personagem seja uma entidade que possa causar e sofrer dano.
Segundo princípio: o que o objeto faz?
public class Personagem { public void Atacar(Personagem adversario) { } }
O personagem atacará outro personagem diminuindo a quantidade de vida do adversário com base em seu poder de ataque, e o personagem atacado receberá o dano consequente.
Terceiro princípio: o que o objeto deve ter?
public class Personagem { public string Nome { get; set; } public int PoderDeAtaque { get; set; } public int QuantidadeDeVida { get; set; } public void Atacar(Personagem adversario) { adversario.QuantidadeDeVida -= PoderDeAtaque; } }
O personagem deve ter um nome pelo qual será identificado. Além disso, para atacar, queremos que o personagem possua um medidor de poder e, para receber dano, o personagem terá uma quantidade limitada de vida.
Abstração: criação de objeto de forma sucinta e coesa
Nota-se que, com estes 3 princípios, podemos criar um objeto de forma sucinta e coesa, sem utilizar de atributos os métodos desnecessários para o contexto. É importante que, na hora de utilizar este objeto em um projeto real, o seu código POO deva sempre buscar o baixo acoplamento. Ou seja, a independência entre um objeto e outro.
Neste artigo, fizemos este exemplo básico criando uma classe chamada Batalha, em que movemos o método Atacar para ela. Dessa forma, haverá apenas um objeto responsável por realizar os ataques dos personagens, já que a ideia é que o personagem seja apenas um modelo e que o combate seja gerido por uma classe a parte.
public class Batalha<T> where T : Personagem { public void Atacar(T quemAtaca, T quemRecebeDano) { quemRecebeDano.QuantidadeDeVida -= quemAtaca.PoderDeAtaque; } }
Conclusão
A Abstração na Programação Orientada a Objetos acontece bem antes do código e é muito importante que seja bem definida. Assim, facilitará a arquitetura do projeto como um todo. Para uma ideia ser bem executada, antes ela precisa ser bem estruturada.
Além disso, lembre-se de estudar também sobre os outros pilares da orientação a objetos. Então, aqui vão algumas sugestões de conteúdos sobre este mesmo tema: https://www.macoratti.net/oo_conc2.htm.
Veja também:
Como identificar problemas no código
Conceitos de programação que você precisa conhecer
Autor: Marcelo Wesley.