Olá pessoas! Hoje vou abordar um assunto bem batido acredito que para a maioria dos programadores: a Orientação a Objetos.
Mas eu acredito que seja útil para a galera que está iniciando na área e gostaria de aprofundar nos conceitos.
Vou abordar ou tentar abordar o assunto de uma maneira prática, com alguns códigos em C# (se você é Javeiro não tem problema, vai dar na mesma).
Se estas dicas têm sido úteis ou encontrou algo que pode acrescentar, deixa o seu comentário abaixo. Vou ter o enorme prazer em respondê-lo.
Aperte os cintos, vamos lá.
Introdução e Conceito
Uma parte teórica não pode ser deixada de lado. Quando falamos em orientação a objetos ou programação orientada a objetos podemos definir como um modelo ou um padrão de software baseado na interação e composição entre diversos objetos.
Conceitos essenciais
Classe – Um item que precisamos lembrar também e gera uma certa confusão é o conceito de classe. Uma classe é uma estrutura que abstrai um conjunto de objetos com características similares.
Uma classe define o comportamento de seus objetos, através de métodos, e os estados possíveis destes objetos através de atributos ou propriedades.
Objeto / instância de uma classe – Como citado anteriormente, um objeto é capaz de armazenar estados através de seus atributos e devolver o resultado de ’mensagens’ enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos.
Exemplo de objetos da classe Cliente: João, Maria, José.
Atributo – são características de um objeto ou basicamente a estrutura de dados que uma classe irá representar.
Método – definem as ações ou habilidades de um objeto. Exemplo: Classe Carro tem os métodos Buzinar(), Ignição(), Acelerar().
O código abaixo demonstra uma classe em C#:
Principais vantagens
Não lembro a ultima vez que pensei em uma solução procedural ou mais conhecida como programação estruturada, mas devo ressaltar que são inúmeras as vantagens de se utilizar a orientação a objetos.
Dentre elas vou ressaltar as principais:
- reaproveitamento de código (eis aqui o motivo mais nobre para utilizar a abordagem);
- código mais próximo da realidade do que no modelo estruturado, isto porque quando pensamos nos objetos, eles representam o mais próximo possível do mundo real (abstração);
- padronização e maior clareza do código, pois diferente da programação estruturada, você terá métodos mais específicos aqui, fazendo o que realmente devem fazer e com poucas linhas.
Os pilares da programação Orientada a Objetos
Existem quatro pilares que a linguagem deve atender para ser orientada a objetos e que são muito importantes. São eles: abstração, encapsulamento, herança e polimorfismo.
Irei abordar detalhadamente a seguir cada um deles para que fique bem claro. Vamos lá.
Abstração
Um dos pontos mais importantes de qualquer linguagem orientada a objetos esta na abstração, que seria a capacidade de um objeto representar um item do mundo real e transformá-lo em uma classe.
Da mesma forma como ocorre no mundo real, teremos objetos com identidade (nome), características e que executem ações afim de prover o funcionamento do sistema como um todo.
Encapsulamento
O encapsulamento na orientação a objetos consiste na separação de aspectos internos e externos de um objeto.
Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente os métodos que acessam (getters) e alteram (setters) estes estados.
Herança
Uma das grandes vantagens da orientação a objetos se dá por este recurso. Essa característica aperfeiçoa o reaproveitamento de código e te poupa algumas linhas de escrita de código.
Como o próprio nome já diz, a herança pode ser exemplificada como na sua família: uma criança, por exemplo, herda características de seus pais. Nesta hierarquia, poderíamos estender para os avós, por exemplo, e assim por diante.
Polimorfismo
O polimorfismo ou capacidade deste objeto ter diferentes comportamentos sem modificar sua estrutura. Um exemplo prático seria a da representação de uma classe Aparelho Eletrônico, que pode ser herdada por outras como Televisão, Geladeira. Na classe base Aparelho Eletrônico, temos o método Ligar(), que será reescrito em cada classe filha (Televisão e Geladeira), pois ambas têm comportamento diferente.
Vale lembrar que para implementar polimorfismo no C# faz uso de método virtuais (com a palavra-chave virtual) que podem ser reimplementados (com a palavra-chave override) nas classes filhas.
Conclusão
Esses quatro pilares são essenciais no entendimento de qualquer linguagem orientada a objetos e da orientação a objetos como um todo. Cada linguagem irá implementar esses pilares de uma forma, mas essencialmente é a mesma coisa.
Apenas a questão da herança, como comentado, que pode trazer variações mais bruscas, como a presença de herança múltipla. (Como é o caso do C++).
Até a próxima!
Conheça o Mini curso gratuito de Vue.Js e as séries de artigos que estou escrevendo sobre o framework javascript.