Segunda parte do curso introdutório ao Java, onde são apresentados conceitos de objetos, classes, atributos, métodos, coesão, acoplamento, interfaces, elementos estáticos e abstratos, exceções, tratamento excepcional, estruturas básicas como lista (List), conjunto (Set) e mapa (Map).
15. Execução de Métodos
carro.aumentarVelocidade(2);
int v = carro.lerVelocidade();
16. Exercícios
1. Implemente uma classe chamada Cliente que tenha um
código, nome, idade, CPF e e-mail.
2. Implemente um método que:
– Receba dois clientes; e
– Retorne os seus respectivos e-mails separados por vírgula.
19. Exercícios
3. Continue do exercício 2, mas agora implemente um
método que receba três clientes e retorna seus e-mails.
4. Faça o mesmo para um array de clientes
21. Encapsulamento
public class Carro {
int velocidade = 0;
}
meuCarro.velocidade = 1000000000;
meuCarro.velocidade = -7;
22. Métodos de Acesso
• Padrão Java Bean
– Getters, para recuperar valores
– Setters, para definir ou alterar valores
23. Getter e Setter
public class Carro {
int velocidade = 0;
void setVelocidade(int velocidade) {
this.velocidade = velocidade;
}
int getVelocidade() {
return velocidade;
}
}
24. Modificadores de Acesso
public class Carro {
private int velocidade = 0;
public void setVelocidade(int velocidade) {
this.velocidade = velocidade;
}
public int getVelocidade() {
return velocidade;
}
}
25. Modificadores de Acesso
public class Carro {
private int velocidade = 0;
public void setVelocidade(int velocidade) {
if (velocidade >= 0 && velocidade < 160)
this.velocidade = velocidade;
}
}
28. Acoplamento e Coesão
• Acoplamento forte, baixa coesão
– Ruim
• Acoplamento fraco, alta coesão
– Bom
29. Exercícios
5. Altere a classe Cliente e as demais classes dos exercícios
anteriores aplicando os conceitos de encapsulamento,
acoplamento e coesão.
Dica: crie uma outra classe MailUtil com os respectivos
métodos.
6. Implemente uma classe Bicicleta, crie duas instância de
cores e marcas diferentes, faça elas correrem a 20 e
30km/hora.
33. Exercício 7
Modifique o Cliente criado anteriormente de
forma que os valores dos atributos sejam
definidos através de um construtor.
34. Atributos estáticos
public class Carro {
private String marca;
public Carro(String marca) {
this.marca = marca;
}
public void imprimeMarca() {
System.out.println(marca);
}
}
Atributo “comum” de instância
35. Atributos estáticos
Qual o resultado?
Carro gol = new Carro("Gol");
Carro palio = new Carro("Palio");
gol.imprimeMarca();
palio.imprimeMarca();
36. Atributos estáticos
public class Carro {
private static String marca;
public Carro(String marca) {
Carro.marca = marca;
}
public void imprimeMarca() {
System.out.println(marca);
}
}
Atributo estático
37. Atributos estáticos
Qual o resultado?
Carro gol = new Carro("Gol");
Carro palio = new Carro("Palio");
gol.imprimeMarca();
palio.imprimeMarca();
38. Métodos estáticos
public class ConexaoComBanco {
public static Conexao abrirConexao() {
return new Conexao(
servidor, usuario, senha);
}
}
39. Exercícios
8. Crie um método estático que calcule a raiz quadrada de um
número. Utilize o método estático sqrt da classe Math.
9. Altera a classe MailUtil do exercício 5 para que os métodos
sejam estáticos
10. Crie uma classe que conte o número de instâncias criadas
dela mesma.
45. Herança
Carro é um Veículo
Carro c = new Carro();
c.abaixarVidros();
c.acelerar();
46. Herança
Motocicleta é um Veículo
Motocicleta m = new Motocicleta();
m.acelerar();
m.frear();
m.apoiarCavalete();
47. Herança
class Veiculo {
public int velocidade;
protected int velocidade;
private int velocidade;
}
class Carro extends Veiculo {
void acelerar() {
velocidade++;
}
}
Visibilidade nas Subclasses
48. Herança
class Carro{
protected int velocidade;
public void acelerar() {
velocidade++;
}
}
class CarroDeCorrida extends Veiculo {
@Override
public void acelerar() {
velocidade += 10;
}
}
Sobrescrita de Métodos
49. Herança
Executando um Método Sobrescrito
class Carro{
private int velocidade;
public void acelerar() {
velocidade++;
}
}
class CarroDeCorrida extends Veiculo {
@Override
public void acelerar() {
super.acelerar();
}
}
51. Herança
Vários Níveis de Herança
class Veiculo {
}
class Carro extends Veiculo {
}
class Gol extends Carro {
}
52. Herança
class Carro
extends Veiculo, MeioDeTransporte {
}
Herança Múltipla Não Existe
53. Exercício 11
• Crie uma hierarquia de pessoas.
• A superclasse deve chamar-se Pessoa.
• Crie algumas subclasses para diferentes
tipos de pessoas (PF, PJ?).
• Defina atributos e comportamentos gerais
e especializados para cada tipo de
pessoa.
54. Classes e Métodos Abstratos
abstract class Veiculo {
abstract void acelerar();
}
class Carro extends Veiculo {
private int velocidade;
void acelerar() {
velocidade++;
}
}
55. Exercício 12
• Altere a classe Pessoa do exercício 11 de
forma que ela seja abstrata.
56. Classes e Métodos Abstratos
abstract class Ordenacao {
abstract int comparar(
Object a, Object b);
void ordenar(Object[] v) {
//bubble sort
}
}
Strategy Pattern
57. Exercício 13
• Use o método de ordenação Bolha e
implemente uma classe concreta usando
o Strategy Pattern, conforme proposto no
slide anterior.
for (int i = 0; i < v.length; i++) {
for (int x = 1; x < v.length - i; x++) {
if (comparar(v[x - 1], v[x]) > 0) {
Object aux = v[x - 1]; v[x - 1] = v[x]; v[x] = aux;
}
}
}
66. Interfaces
class Papagaio implements Voador, Falador {
public void voar() { }
public void falar() {
System.out.printlmn("Loro!");
}
}
class Cachorro implements Corredor, Falador {
public void correr() { }
public void falar() {
System.out.println("Au! Au!");
}
}
Implementando várias Interfaces
67. Exercício 14
Trabalhando com Abstração
• Crie a interface ContaCliente, com
métodos para consultar o saldo, debitar e
creditar dinheiro.
• Implemente um método transferencia
que receba duas contas e um valor e
execute a transação necessária.
68. Polimorfismo
• A capacidade de um mesmo objeto de se
apresentar de várias formas
Papagaio papagaio = new Papagaio();
Voador bichoQueVoa = papagaio;
Falador bichoQueFala = new Papagaio();
69. Polimorfismo
• Um tipo mais específico sempre pode ser
atribuído a uma variável de tipo mais
genérico, nunca o contrário.
Voador bichoQueVoa = papagaio;
Papagaio papagaio = bichoQueVoa;
70. Polimorfismo
Cast
• Força uma “conversão”
• Não afeta o objeto
• Pode resultar em erro se não for do
mesmo tipo
Papagaio papagaio = (Papagaio) bichoQueVoa;
71. Polimorfismo
Verificando o Tipo
if (bichoQueVoa instanceof Papagaio) {
System.out.println("Sim, é um papagaio!");
} else {
System.out.println("Não é um papagaio!");
}
72. Exercício 15
• Usando o exemplo de polimorfismo com
animais, Implemente um método que
receba um Voador e descubra se ele é
um Papagaio.
• Execute o método duas vezes, uma
passando uma instância de Papagaio e
depois outra subclasse de Voador.
73. Exceções
• Classes que representam erros de
execução
• Criadas pelo Java ou manualmente
• Objeto contém informações do erro
– Descrição, Mensagem, Local
76. Exceções
Hierarquia de Classes
Throwable
Error Exception
RuntimeException
SQLException IOException
ArrayIndexOutOfBoundsException NumberFormatException NullPointerException
Verificadas e Não Verificadas
77. Exceções
• Exception
Categorias
– Erros esperados pelo programa
• RuntimeException
– Erros inesperados do programa
• Error
– Erros anormais, totalmente inesperados
78. Exceções
Tratar uma Exceção
void verificarNome(String nome) throws Exception {
if (nome == null) {
throw new Exception("Nome não preenchido!");
}
}
void meuMetodo() {
try {
verificarNome(null);
} catch(Exception e) {
e.printStackTrace();
}
}
79. Exceções
Repassar uma Exceção
void verificarNome(String nome) throws Exception {
if (nome == null) {
throw new Exception("Nome não preenchido!");
}
}
void meuMetodo() throws Exception {
verificarNome(null);
}
80. Exceções
Ignorar uma Exceção Não Verificada
void verificarNome(String nome) {
if (nome == null) {
throw new RuntimeException(
"Nome não preenchido!");
}
}
void meuMetodo() {
verificarNome(null);
}
81. Exceções
Exceções “Inesperadas”
• Por que ocorrem?
• Causas frequentes:
– Casos não previstos
– Falta de atenção ao codificar
– Suposições “ingênuas” sobre inputs
83. Exercício 16
• Crie duas novas exceções:
– ValidacaoException (verificada)
– ParametroInvalidoException (não verificada)
• Implemente um método validarCPF que receba uma String
e lance a exceção verificada no caso dela não ter 11
caracteres e lance a exceção não-verificada se o parâmetro
for nulo
• Implemente outro método que chame a validação e trate
apenas a exceção verificada
88. Exercícios
17. Implemente uma classe Carrinho, contendo um carrinho
de compras. Use uma lista e tenha métodos para adicionar
itens no carrinho e contabilizar o total.
18. Implemente uma classe que receba dados estatísticos
contendo a idade de N pessoas e totalize as idades por faixas
etárias (0 a 10 anos, 11 a 20 anos, etc.). A classe deve ter um
método para recuperar o total de pessoas de uma
determinada faixa etária.