Programação Orientada a Objetos

Caio Noronha
6 min readOct 5, 2018

Deseja aprender um novo paradigma de programação mais recorrentes do mercado hoje? Leia abaixo para entender mais!

O que é Programação Orientada a Objetos?

Antes de começarmos, você pode perguntar "Por que outro paradigma de programação se já temos Programação Estruturada?"

Em Programação Estruturada, você cria um programa extenso com algumas partições (com funções), mas o código permanece muito grande e, no futuro, pode ser mais difícil de entender.

Na Programação Orientada a Objetos, você tenta aproximar a vida real da programação, tornando mais intuitivo e fácil de entender, além de poder repartir ainda mais o código, dividindo-o cada vez melhor.

Algumas linguagens em POO:

  • Swift
  • Java
  • Python
  • php

O que é um Objeto?

“Coisa material ou abstrata que pode ser percebida pelos sentidos e descrita através de suas características, comportamentos e estados atuais.”
Ou seja, são objetos materiais (Carro, Celular, Relógio) ou imateriais (Data, Estudante, Conta bancária) que podem ser transmitidos para a programação.

O que compõe um objeto?

Todo objeto pode conter características e ações que o definem, e isso também é passado para a programação. Entre eles estão:

  • Atributos: Características do objeto, como nome, idade, endereço.
  • Métodos: Ações de um objeto, como caminhar, escrever, nadar.

Na programação, quando definimos valores para atributos, os chamamos de “Estado”. Isso pode definir a diferença entre os outros objetos.
Ex: dois carros, têm o mesmo atributo chamado “cor”, mas cada vez que uma cor diferente, use o mesmo atributo, mas com valores diferentes.

Mas devemos criar um “objeto” para cada objeto que vamos criar? Devemos criar um objeto para cada carro, criando os mesmos atributos e métodos para cada um, reescrevendo? Não! Porque nós temos a classe!

O que é uma Classe?

Classes são objetos do mundo real, de maneira “abstrata”, permitindo que um objeto o use com seus atributos e métodos.

Como usar uma classe em um objeto?

Pense na classe como um molde de bolo. Você pode fazer vários bolos com esse molde. Objetos fazem exatamente a mesma coisa, são “instâncias” de classes, e a Classe é o modelo para a criação de objetos.

Ex: Uma fábrica de automóveis está criando um novo modelo de carro, e todos os carros criados podem ser diferentes em cores, rodas, ar-condicionado etc. Mas todos seguem um molde do novo modelo para seguir o mesmo padrão.

Os quatro pilares

Na programação orientada a objetos, temos quatro pilares muito importantes a serem seguidos em seus projetos, facilitando a manutenção, mais protegido e com um código mais otimizado. Os quatro pilares são:

  • Abstração
  • Encapsulamento
  • Herança
  • Polimorfismo

Abstração

Algumas pessoas não o consideram um dos pilares, mas talvez seja o mais importante. Com isso, você a usa para abstrair as coisas relevantes do mundo real para o código e, se você fizer isso errado, poderá adicionar muita informação ou ficar confuso. É por isso que é extremamente importante, mas lembre-se sempre: se não fizer sentido no mundo real, não fará sentido no código.

Ex: você criará um sistema de banco digital. Do que você vai precisar? Nome? Sim! CPF? Sim! Cor dos olhos? Não! É por isso que é tão importante abstrair e identificar apenas o que é NECESSÁRIO para o programa.

Encapsulamento

Encapsulamento é o pilar que protege o código, criando pontes no projeto, dizendo o que pode ser acessado por usuários, objetos diferentes e outros. Imagine criar um carro, sem nenhuma proteção para o motor, 100% exposto ao usuário para modificar tudo o que ele deseja, mesmo que ele não entenda o assunto. Seria perigoso e um problema, certo? Não precisamos entender como o carro funciona, só precisamos saber como dirigir o carro. A programação é a mesma coisa. Há partes muito importantes que precisam ser protegidas de outras pessoas, especialmente se você estiver construindo um projeto com uma equipe.

  • O encapsulamento não é obrigatório, mas é uma boa prática de programação e produz Classes mais eficientes.

Benefícios:
→ Tornar as alterações invisíveis.
→ Facilitar a reutilização de código.
→ Reduza os efeitos colaterais.

Tipos de encapsulamento

  • Público
  • Privado
  • Protegido

Público: Todo mundo tem acesso a esse atributo, função ou classe.
Privado: Somente a própria classe tem acesso ao atributo, função ou subclasse.
Protegido: Somente a própria classe ou classes herdadas (subclasses) dela que podem ser acessadas.

Como obtenho acesso a atributos privados?

Com o encapsulamento — na maioria das vezes — deixamos os atributos de uma classe totalmente privados. Mas como vamos obter acesso à alteração e obter esses atributos em outras partes do código? Com getters e setters.

Getters e Setters são funções que tornam possível OBTER e ALTERAR o atributo.

Métodos Getter, Setter e Construtor:

Getter: Método “GET”, significa “pegar”, ou seja, obter o valor da variável
Ex: “getName”, pegar o nome.

Setter: Método “SET”, altera a variável para novos valores.
Ex: “setNome”, muda o nome de Pedro para João.

Construtor: Método de construção de atributos necessários quando o Objeto é instanciado.
Ex: A conta bancária sempre começa com o nome do proprietário.

Herança

Imagine que uma fábrica de automóveis queira expandir as vendas para novos estilos de veículos, como motocicletas e aviões. Em sua linha de produção, eles passam por várias etapas diferentes, mas depois percebem que, apesar de terem vários produtos e etapas diferentes para cada um, eles repetiram etapas entre os produtos. Todo mundo tem um motor, um número de assentos ou número de rodas, certo? Isso é herança! Quando todas as classes têm uma característica comum, herdadas de uma superclasse.

Ex: As classes “Carro”, “Avião” e “Moto” são herdadas da classe veículo, com os mesmos atributos (rodas, motor, assentos) e estados diferentes.

Benefícios :
→ Faça encapsulamento protegido.
→ Facilitar a reutilização de código.
→ Reduza os efeitos colaterais.

Conceitos

  • Abstrato
  • Final
  • Extender

Abstrato: Uma classe ou método que não pode ser instanciado, apenas herdado.
Final:
Uma classe ou método que só pode ser instanciado, não herdado.
Estender: Quando uma classe herda / se estende de outra classe, utilizando os métodos e atributos.

Polimorfismo

Não podemos pensar em polimorfismo sem herança. Imagine que agora, existem vários animais, diferentes de várias maneiras, mas similares em algumas. Entre as semelhanças, todo mundo emite um som, mas quase todo mundo emite sons diferentes. Isso é polimorfismo! Quando eles herdam de uma classe, mas a implementam de maneiras diferentes para o mesmo método.

Benefícios :
→ Maior clareza.
→ Facilitar a reutilização de código.
→ Manutenção de código.

Tipos de Polimorfismo

  • Sobrepor
  • Sobrecarga

Sobrepor: Substituir funções em subclasses e com diferentes implementações.
Sobrecarga: Funções com o mesmo nome na mesma classe, mas com assinaturas diferentes.

Muito obrigado pela atenção, espero que tenha gostado da leitura! 😄

--

--

Caio Noronha

24, Brazil. iOS Developer — iOS📱 and Game👾 Developer. — Sharing some of the knowledge I’m learning.