Desvendando a Orientação a Objetos — Parte 1

Andre Santarosa
3 min readNov 17, 2019

Essa série de posts tem como objetivo explicar os conceitos e pilares da orientação a objetos de uma forma simples e objetiva, visando passar um pouco sobre esse paradigma de programação que é a base de tantas linguagens de mercado e tão requisitado nos dias de hoje. Estou começando um pouco ao contrário do fluxo normal pois creio que esses são os dois assuntos onde vejo mais pessoas com dúvidas e como estão chegando as provas de fim de semestre, pode servir para esclarecer algumas dúvidas antes das provas.

Herança e Polimorfismo

Herança e Polimorfismo são dois dos principais pilares da orientação a objetos e também dois assuntos que causam certa dúvida e medo nos estudantes de desenvolvimento de software. Esse artigo tem como finalidade elucidar da maneira mais clara possível o que é cada coisa, porque e como utilizar.

Agora vamos ao ponto.

Herança

Para entender o polimorfismo é necessário primeiro entender o que é herança.

O dicionário Michaelis define herança como: Aquilo que se herda por disposição testamentária ou por via de sucessão e que também inclui dívidas e encargos; espólio, herdade, herdamento, sucessão.; Caracteres ou qualidades que o ser recebe por transmissão de qualquer dos genitores.

Para facilitar, pense nos seus pais. Eles passaram uma carga genética para você que trouxe algumas características deles como cor dos olhos, cabelos, altura e etc. Na orientação a objetos uma classe herdada passa aos seus filhos suas características (propriedades e métodos) assim como o queixo com furinho que seu pai possa ter passado a você.

Vou deixar o caso dos pais de lado para fim de exemplo prático pois gosto de utilizar veículos como forma de exemplificar melhor esse conceitos devido ao n número de possibilidades atreladas a eles.

Imagine a classe veículo (um veículo em geral, não um carro). Um veículo tem como premissa a quantidade de passageiros e se mover, certo?

Então podemos definir da seguinte forma:

Repare que implementamos os métodos que fazem o veículo ir para frente, ir para a direita e ir para a esquerda mas por que não implementamos o MoverParaTras? Lembre-se que todos os veículos possíveis herdarão dessa classe, agora imagine um avião, ele não se move para trás, mas ainda é um veículo, certo? Se implementássemos o método MoverParaTras na classe Veiculo, teríamos um problema de herança pois existiria um comportamento não característico na cadeia de herança.

Agora vamos especificar essa classe, ou seja, criar classes derivadas menos genéricas. Começaremos criando uma classe para veículos terrestres, aéreos e marítimos.

Todos os veículos terrestres tem roda e se movem para trás também, então implementamos essas propriedades e comportamentos.

Já todos os veículos aéreos possuem uma quantidade de motores, até o planador que não possui motor algum pode ter essa propriedade pois ela receberá 0. Implementamos também os métodos que fazer o veículo aéreo subir e descer, assim como a propriedade que contem sua altitude máxima. Repare que não existe o método MoverParaTras nesse filho de Veiculo

Agora vamos ao ultimo modelo de veículo, o marítimo.

Repare que implementamos a quantidade de coletes e o método de mover para trás. Mas todo veículo marítimo não precisa ter botes salva vidas? Não! Lembre-se que o submarino é um veículo marítimo e não possuí botes salva vidas, além de poder submergir e emergir. Nesse caso temos que especificar mais um pouco para descrever um submarino corretamente. Também faremos uma classe Navio.

Ficamos nesse caso com a seguinte árvore

As setas para cima indicam que a classe de baixo deriva/herda da classe acima

Considerando essa hierarquia, um Submarino por exemplo teria:

Parâmetros:

  • QuantidadeDePassageiros
  • QuantidadeDeColetes

Métodos:

  • MoverParaFrente
  • VirarEsquerda
  • VirarDireita
  • MoverParaTras
  • Submergir
  • Emergir

Já um VeiculoAereo teria

Parâmetros:

  • QuantidadeDePassageiros
  • QuantidadeDeMotores
  • AltitudeMaxima

Métodos:

  • MoverParaFrente
  • VirarEsquerda
  • VirarDireita
  • Subir
  • Descer

O reaproveitamento de código que a herança nos permite é um dos grandes trunfos da orientação a objetos. Se quisermos por exemplo, adicionar uma cor a todos os veículos, bastaria acrescentar a propriedade Cor na classe Veiculo que todas as classes que herdam de Veiculo e todas as que herdam dessas herdeiras também teriam a propriedade Cor sem a necessidade de acrescentar a nova propriedade a cada classe. No caso poderíamos atribuir a cor Preto a um submarino, pois ele herda de VeiculoMaritimo que herda de Veiculo.

Bom, pessoa. Essa foi a primeira parte do artigo, pretendo ainda essa semana disponibilizar a segunda parte com o conteúdo de polimorfismo.

--

--

Andre Santarosa

C#/.Net Senior Developer @Viatel Ireland. Likes to cook on the weekends and to play old songs on the guitar.