OOP
Orientação a Objetos (OOP):
- Existem três pilares na Orientação a Objetos, Encapsulamento, Herança e
Polimorfismo.
Encapsulamento:
- É o princípio de esconder os detalhes internos de um objeto e expor apenas a parte
essencial dele, no caso, em Java é possível fazer isso usando alguns modificadores
de acesso, como: ‘private’, ‘protected’ e ‘public’. Podemos ver um exemplo disso,
não temos acesso ao nome e nem a idade, então para conseguir acessar isso,
precisa de um método que faz um “get” na idade/nome.
- public class Pessoa {
- private String nome;
- private int idade;
-
- public Pessoa(String nome, int idade) {
- [Link] = nome;
- [Link] = idade;
- }
-
- public void fazerAniversario() {
- idade += 1;
- [Link](nome + " fez aniversário, e agora
tem " + idade + " anos!");
- }
-
- public int getIdade() {
- return idade;
- }
-
- public String getNome() {
- return nome;
- }
-
- }
Herança:
- Herança permite que uma classe herde propriedades e métodos de outra classe.
Fazendo com que reutilize código e crie hierarquia entre certas classes. Abaixo
podemos ver um exemplo onde uma classe Macaco herda propriedades e métodos
da classe Anima usando o ‘extends’.
- A classe que está usando o ‘extends’ é chamada de classe filha ou subclasse, já a
classe que está sendo chamada depois de ‘extends’, é a classe mãe ou superclasse
package Testes;
public class Macaco extends Animal{
public void souUmMacaco() {
[Link]("Fodase eu sou " + nome + " um
macaco.");
}
}
package Testes;
public class Animal {
String nome;
int idade;
String sexo;
}
Polimorfismo:
- Polimorfismo vem de Poli (Vários) e Morfo (Forma)
- Facilita a criação de um código flexível e reutilizável
- É a forma com que conseguimos fazer um objeto se comportar de maneiras
diferentes dependendo de seu input. Abaixo podemos ver como o método ‘‘falar()’’
vai se comportar de acordo com a nacionalidade.
package Testes;
public class Pessoa {
String nome;
public void falar() {
[Link]("Estou falando...");
}
}
package Testes;
public class Brasileiro extends Pessoa{
@Override
public void falar() {
[Link]("Sou brasileiro, estou falando em
PT-BR");
}
}
package Testes;
public class Americano extends Pessoa{
@Override
public void falar() {
[Link]("Sou Americano, estou falando em
EN-US");
}
}
Super Classes x Sub Classes
Principais conceitos:
- Super - outras classes herdam, podem conter atributos e métodos comuns.
- Sub - é uma classe que herda de uma Super Classe, ela herda atributos, métodos,
mas pode adicionar novos ou sobrescrever-los.
- Herança é o conceito que faz uma Sub Classe conseguir herdar atributos e métodos
de uma Super Classe
Enum - Classe especial
Principais conceitos:
- É uma forma de criar um conjunto fixo de constantes que estão relacionadas
- Uma boa prática para a padronização do código
- Ajuda a controlar o fluxo do programa
Exemplo de uso:
package Testes;
public enum DiasDaSemana {
SEGUNDA('Dia útil'),
TERCA('Dia útil'),
QUARTA('Dia útil'),
QUINTA('Dia útil'),
SEXTA('Dia útil'),
SABADO('Dia não útil'),
DOMINGO('Dia não útil');
private String descricao;
DiasDaSemana(String descricao) {
[Link] = descricao;
}
public String getDescricao() {
return descricao;
}
}
Encapsulamento
Principais conceitos:
- É um dos pilares da Orientação a Objetos, envolve proteger atributos de uma classe
- Torna os atributos de uma classe privados e acessíveis apenas através de métodos,
como os métodos Getters e Setters
- Permite controlar como os dados internos são modificados, usando métodos Setters,
protege a Integridade do código
- Garante mais organização e segurança no código
Exemplo de uso:
package Testes;
public class Cachorro {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
[Link] = nome;
}
}
Getters e Setters
Principais conceitos:
- Getters: São métodos públicos, usados para conseguir acessar algum atributo
privado de uma Classe
- Setters: São métodos públicos, usados para conseguir alterar o valor de algum
atributo privado de uma Classe
- Os métodos Setters podem haver validações e verificações antes de modificar
algum dado de uma Classe
Exemplo de uso:
package Testes;
public class Pessoa {
private String nome;
private int idade;
public String getNome() {
return nome;
}
public void setNome(String nome) {
[Link] = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
[Link] = idade;
}
}