Escolar Documentos
Profissional Documentos
Cultura Documentos
2 - Java - Orientação A Objetos
2 - Java - Orientação A Objetos
Orientação a Objetos
2
Orientação a Objetos
• Ajudar a se organizar e escrever menos
3
Conceitos Essenciais
Elemento Descrição
4
Exemplo - Conta Bancária
• Ao tentar abstrair o caso de uma conta,
podemos perceber, suas características e
operações, por exemplo:
– Saldo
– Opção de Sacar
– Opção de Depositar
– Número da Conta
– Titular
5
Exemplo - Conta Bancária
• Classe
– Conta Bancária
• Objeto instância
– Conta do Fulano de tal
• Atributo
– Número da Conta
– Titular
– Saldo Atual
• Método
– Sacar
– Depositar
6
UML - Conta Bancária
• É possível mostrar graficamente uma classe através da
UML, utilizando um Diagrama de Classes:
7
Exercício - Identificando cada elemento
• Considere um veículo, modelado no paradigma orientado a
objetos, identifique o que cada elemento abaixo representa:
Veículo
• Classe
Cor
• Instância/Objeto
Ligar o motor
• Atributo
Quantidade de Portas • Método
Acender os Faróis
Carro do Fulano
8
Exercício - Identificando cada elemento
Veículo Classe
Cor Atributo
Ligar o motor Método
Quantidade de Portas Atributo
Acender os Faróis Método
Carro do Fulano Instância
9
UML – Exemplo mais complexo
• Nesse Diagrama de Classes o nível de
abstração é maior:
10
Conta Bancária em Java
1. class Conta{
2. double saldo;
3. String numero;
4. String titular;
5. }
11
Instanciado uma Conta
Para se instanciar um novo objeto usa-se a palavra
reservada “new”.
12
Exercício - Conta Bancária
• Criar a classe Conta.java:
1. class Conta{
2. double saldo;
3. String numero;
4. String titular;
5. }
13
Métodos - Sintaxe
Tipo de retorno. O retorno void
Nome do método. Geralmente
indica que não possui retorno
deve indicar uma ação
Parâmetros do Método
14
Métodos com Retorno - Sintaxe
Tipo de retorno
15
Conta Bancária - Métodos
No exemplo abaixo foram adicionados os métodos “sacar” e “depositar” na
classe Conta.java:
1. class Conta{
2.
3. double saldo;
4. String numero;
5. String titular;
6.
15. }
16
Exercício - Conta Bancária - Métodos
• Adicionar os métodos “sacar” e “depositar” na classe “Conta”:
1. void sacar(double valor) {
2. saldo = saldo - valor;
3. }
4. void depositar(double valor) {
5. saldo = saldo + valor;
6. }
18
Modificadores de Acesso
Modificador Descrição
19
Modificadores de Acesso
private default protected public
Mesma classe X X X X
Mesmo Pacote X X X
Pacotes diferentes
X* X
(sendo subclasse)
Pacotes diferentes (não
X
sendo subclasse)
* Apenas através de Herança
20
Modificadores de Acesso em Java
classe X X
atributo X X X X
método X X X X
21
Modificadores de Acesso nas Classes
Nas declaração das classes apenas o public ou o default é
permitido:
22
Modificando a Classe Conta
Adicionando os modificadores de acesso privados nos campos e
public classe Conta:
Sem modificadores de acesso:
1. class Conta{
2. double saldo;
3. String numero;
4. String titular;
5. }
Com modificadores de acesso:
1. public class Conta {
2. private double saldo;
3. private String numero;
4. private String titular;
5. }
23
Modificadores de Acesso
Importante!
Na orientação a objetos, é prática muito recomendada proteger
seus atributos com private.
24
Encapsulamento
• Encapsulamento, é uma das práticas da
orientação a objetos que consiste em separar
o programa em partes, o mais isoladas
possível.
• A idéia é tornar o software mais flexível, fácil
de modificar e de criar novas implementações
25
Encapsulamento - Getters e Setters
São métodos que acessam ou atribuem os
valores aos campos de uma classe.
1. public class Conta {
2.
3. private double saldo;
4.
5. public double getSaldo() {
6. return saldo;
7. }
8. public void setSaldo(double saldo) {
9. this.saldo = saldo;
10. }
11.}
26
Encapsulamento – Getters e Setters
Como os atributos estão private, não é possível acessar
diretamente seus valores assim:
27
Encapsulamento - Getters e Setters
1. public class Conta {
2.
3. private double saldo;
4. private String numero;
5. private String titular;
6.
7. public double getSaldo() {
8. return saldo;
9. }
10. public void setSaldo(double saldo) {
11. this.saldo = saldo;
12. }
13. public String getNumero() {
14. return numero;
15. }
16. public void setNumero(String numero) {
17. this.numero = numero;
18. }
19. public String getTitular() {
20. return titular;
21. }
22. public void setTitular(String titular) {
23. this.titular = titular;
24. }
25. }
28
Exercício - Modificar a classe Conta
• Modificar a classe Conta.java
– Adicionar modificador de acesso public na declaração da classe
– Adicionar modificadores de acesso private aos campos
– Criar Getters e Setters
• Utilizar atalhos da IDE NetBeans Alt+Insert
1. class Conta{
2. double saldo;
3. String numero;
4. String titular;
5. }
29
Getters e Setters
Importante!
Não é uma boa prática criar getters e setters para todos os
atributos, sem antes analisar. Devem ser criados apenas caso
haja necessidade.
30
Exercício – Teste Conta Bancária
Alterar a classe TesteConta.java e considerar os gets e sets criados na
classe Conta:
1. public class TesteConta {
2. public static void main(String[] args) {
3.
4. Conta conta = new Conta();
5. conta.setSaldo(10000);
6. conta.setNumero("2000");
7. conta.setTitular("Fulano de Tal");
8. //sacar
9. conta.sacar(5000);
10. System.out.println(conta.getSaldo());
11. //depositar
12. conta.depositar(20000);
13. System.out.println(conta.getSaldo());
14.
15. }
16. }
31
Construtores
Sempre quando o new é chamado, ele executa o construtor da classe.
O construtor da classe é um bloco declarado com o mesmo nome que a
Classe:
32
Construtor que recebe argumento
Sempre quando o new é chamado, ele executa o construtor da classe.
O construtor da classe é um bloco declarado com o mesmo nome que a
Classe:
33
Múltiplos Construtores
Mais de um construtor podem ser declarados na classe:
1. public class Conta {
2.
3. private double saldo;
4. private String numero;
5. private String titular;
6.
7. //construtor 1
8. public Conta() {
9.
10. }
11. //construtor 2
12. public Conta(double saldo, String numero, String titular) {
13. this.saldo = saldo;
14. this.numero = numero;
15. this.titular = titular;
16. }
17.
18. //getters e setters
19. }
34
Exercício - Construtores
Adicionar 2 construtores na classe Conta:
1. Construtor Vazio (Sem argumentos)
2. Construtor que recebe saldo, numero e titular
35
Exercício - Construtores
Resposta:
1. public class Conta {
2.
3. private double saldo;
4. private String numero;
5. private String titular;
6.
7. public Conta() {
8.
9. }
10.
11. public Conta(double saldo, String numero, String titular) {
12. this.saldo = saldo;
13. this.numero = numero;
14. this.titular = titular;
15. }
16.
17. //getters e setters
18. }
36
Padrão Java Bean
Quando criamos uma classe com todos os atributos privados, seus
getters e setters e um construtor vazio (padrão), na verdade estamos
criando um Java Bean.
1. public class Conta {
2.
3. private double saldo;
4. private String numero;
5. private String titular;
6. public Conta() {
7.
8. }
9.
10. public double getSaldo() {
11. return saldo;
12. }
13. public void setSaldo(double saldo) {
14. this.saldo = saldo;
15. }
16. //outros getters e setters
17. }
38
Método “toString()”
11. }
12. }
39
Definindo o “toString()” da classe Conta
7. }
40
Exercício “toString()”
Criar o toString() na classe Conta como mostrado abaixo:
1. public String toString() {
2. return "Número: "+numero+" Titular: "+titular+" Saldo: "+saldo;
3. }
41
Pacotes
42
Pacotes
• Exemplo de pacotes do JavaSE:
43
Exercício - Pacotes
• Criar o pacote chamado br.com.curso.modelo
• Clicar com o direto em cima do projeto
• Selecionar novo - > Pacote Java
• Criar a classe Veiculo.java dentro do pacote
br.com.curso.modelo
• Clicar com o direito em cima do pacote
• Selecionar novo -> Classe Java
44
Exercício - Criação de classes
• Criar o pacote br.com.curso.modelo
• Criar as 4 classes mostradas no diagrama de classes
– Veiculo, Cor, Pessoa e TipoCombustivel
• Criar as classes com seus atributos, respectivos getters e setters
45
Exercício - Criação de classes
Classe Cor: Classe TipoCombustivel:
1. package br.com.curso.modelo; 1. package br.com.curso.modelo;
2. 2.
3. public class Cor { 3. public class TipoCombustivel {
4. 4.
5. private long id; 5. private long id;
6. private String descricao; 6. private String descricao;
7. 7.
8. //getters e setters 8. //getters e setters
9. } 9. }
47
Imports
No exemplo abaixo, a classe Produto “importa” a classe
java.math.BigDecimal:
1. package br.com.curso.modelo;
2.
3. import java.math.BigDecimal;
4.
5. public class Produto {
6.
7. private String nome;
8. private BigDecimal valor;
9.
10. }
48
Imports - pacote java.lang
• As classes do pacote java.lang não precisam ter
imports explicitados.
• A classe String é um exemplo disso:
1. package br.com.curso.modelo;
2.
3. public class Produto {
4.
5. private String nome;
6. }
49
Imports
Ao fazer o import, é possível ainda fazer import não apenas
da classe, mas de todas as classes de um pacote:
1. package br.com.curso.modelo;
2.
3. import java.math.*;
4.
5. public class Produto {
6.
7. private String nome;
8. private BigDecimal valor;
9.
10. }
50
Exercício - Imports
• Criar a classe Produto no pacote br.com.curso.modelo
• Criar o atributo nome do tipo String
• Criar o atributo valor do tipo java.math.BigDecimal
• Criar os getters e setters da classe
1. package br.com.curso.modelo;
2.
3. import java.math.BigDecimal;
4.
5. public class Produto {
6.
7. private String nome;
8. private BigDecimal valor;
9.
10. }
51
Imports - Desempenho
Importante!
Fazer import de um pacote não afeta o desempenho
52
Exercício de Fixação - Método Main
Quais maneiras abaixo apresentam a sintaxe correta para se criar a um
método “main” em java:
1. public static void main(String[] args) {
a) 2.
3. }
1. public static void main(String... args) {
b) 2.
3. }
1. private static void main(String[] args) {
c) 2.
3. }
1. public static void main(String args[]) {
d) 2.
3. }
1. public static void main(String args) {
e) 2.
3. }
53
Exercício de Fixação - Método Main
Quais maneiras abaixo apresentam a sintaxe correta para se criar a um
método “main” em java:
1. public static void main(String[] args) {
a) 2.
3. }
1. public static void main(String... args) {
b) 2.
3. }
1. private static void main(String[] args) {
c) 2.
3. }
1. public static void main(String args[]) {
d) 2.
3. }
1. public static void main(String args) {
e) 2.
3. }
54
Exercício de Fixação - Classes
Quais maneiras abaixo não apresentam erro de compilação ao se criar a
classe Pessoa.java?
1. public class Pessoa {
a) 2.
3. }
1. void class Pessoa {
b) 2.
3. }
1. private class Pessoa {
c) 2.
3. }
1. default class Pessoa {
d) 2.
3. }
1. class Pessoa {
e) 2.
3. }
55
Exercício de Fixação - Classes
Quais maneiras abaixo não apresentam erro de compilação ao se criar a
classe Pessoa.java?
1. public class Pessoa {
a) 2.
3. }
1. void class Pessoa {
b) 2.
3. }
1. private class Pessoa {
c) 2.
3. }
1. default class Pessoa {
d) 2.
3. }
1. class Pessoa {
e) 2.
3. }
56
Exercício de Fixação - Atributos
Considerando a classe pessoa:
1. public class Pessoa {
2. }
Para criar o atributo nome do tipo String, quais maneiras abaixo são consideradas
corretas e não apresentariam erro de compilação?
d) 1. String nome;
57
Exercício de Fixação - Atributos
Considerando a classe pessoa:
1. public class Pessoa {
2. }
Para criar o atributo nome do tipo String, quais maneiras abaixo são consideradas
corretas e não apresentariam erro de compilação?
d) 1. String nome;
58
Exercício de Fixação - Construtores
Considerando a classe pessoa:
1. public class Pessoa {
2. private String nome;
3. private String cpf;
4. }
1. public Pessoa() {
d) 2. }
1. public Pessoa(String nome) {
e) 2. this.nome = nome;
3. }
60
Exercício de Fixação - Getters
Considerando a classe pessoa:
1. public class Pessoa {
2. private String nome;
3. private String cpf;
4. }
Seguindo os padrões de nome dos getters e setters, como ficaria um getter válido para
o atributo “nome”?
Seguindo os padrões de nome dos getters e setters, como ficaria um getter válido para
o atributo “nome”?
Seguindo os padrões de nome dos getters e setters, como ficaria um setter válido para
o atributo “nome”?
Seguindo os padrões de nome dos getters e setters, como ficaria um setter válido para
o atributo “nome”?
65
Atributos Estáticos
• A classe Funcionario apresenta um atributo estático:
Importante!
Utilize os nomes de constantes em caixa alta
68
Métodos Estáticos
• Quando um método é estático dizemos que
ele é um atributo de classe e não um atributo
de instância
• Assim como os atributos, para tornar um
método estático deve-se usar a palavra chave
static
• Métodos estáticos não conseguem acessar
variáveis não estáticas
69
Métodos Estáticos
O atributo nome se for acessado por um método estático abaixo apresentará
erro de compilação:
1. public class Funcionario {
2.
5. public Funcionario() {
6. }
7.
12. }
13.
14. }
70
Métodos Estáticos
7. }
71