PROGRAMAÇÃO ORIENTADA A OBJECTOS
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 é 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.
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 contra 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 de 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.
Extender: 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.