curso java básico - aula 03

38
Java Básico Aula 03 Natanael Fonseca - Arquiteto de Software

Upload: natanael-fonseca

Post on 19-Jul-2015

90 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: Curso Java Básico - Aula 03

Java BásicoAula 03

Natanael Fonseca - Arquiteto de Software

Page 2: Curso Java Básico - Aula 03

Ementa

• Encapsulamento e Construtores;

• Modificador Static e Enumerations;

• Herança, sobrescrita, covariância e polimorfismo;

Page 3: Curso Java Básico - Aula 03

Encapsulamento- Em programação orientada a objetos significa separar o

programa em partes, o mais isoladas possível. A ideia é tornaro software mais flexível, fácil de modificar e de criar novasimplementações.

- Uma grande vantagem do encapsulamento é que toda parteencapsulada pode ser modificada sem que os usuários daclasse em questão sejam afetados.

- Em Java é possível alcançar o encapsulamento simplesmenteprotegendo as variáveis com o modificador private efornecendo métodos de acesso para alteração e consultadessas informações.

Encapsulamento e Construtores 3

Page 4: Curso Java Básico - Aula 03

Getters e SettersSão métodos que permitem a leitura de atributos da classe. Éuma boa prática criá-los para cada atributo que seráencapsulado.Métodos get<modificadores> <tipoAtributo> get + <nomeAtributo> ()

String getNome()

long getRG()

Métodos set<modificadores> void set+<nomeAtributo> (<tipoAtributo> nomeParametro)

void setNome(String nome)

void setRG(long rg)

Métodos isboolean is+<nomeAtributo>()

boolean isConnected()

boolean isOk()

Encapsulamento e Construtores 4

Page 5: Curso Java Básico - Aula 03

EncapsulamentoVejamos o exemplo abaixo:

Encapsulamento e Construtores 5

1) Classe Pessoa

public class Pessoa{private String nome;public String getNome(){

return this.nome;}public void setNome(String nome){

this.nome = nome;}

}

2) Classe Principal

public class Principal{public static void main(String[] args){

Pessoa p = new Pessoa();p.setNome(“Joaozinho”); System.out.println(“Nome :” + p.getNome() );

}}

Page 6: Curso Java Básico - Aula 03

thisConceito que gera muita confusão, mas de um modo geral essa é a palavrareservada que pode ser utilizada para referenciar o objeto corrente.

Dica: O uso do this não é obrigatório, mas ajuda a evitar ambiguidade.

Encapsulamento e Construtores 6

1) Classe Pessoa

public Pessoa{

private String nome;

//Construtor sem argumentopublic Pessoa(){

this.nome = “Pedro”;}

}

2) Classe Principal

public class Principal{public static void main(String[] args){

Pessoa p = new Pessoa();}

}

Page 7: Curso Java Básico - Aula 03

Sobrecarga de métodoCriar vários nomes para métodos que fazem basicamente a mesma coisa não parece uma abordagem interessante, a solução para este problema se chama “sobrecarga”;

Sobrecarregar um método é escrever métodos com nomes iguais, mas com quantidades e tipos de parâmetros diferentes.

Encapsulamento e Construtores 7

1) Classe Calculadora

public class Calculadora {

public int somar(int x, int y){}public int somar(int x, int y, int z){}public int somar(int[] numeros){}

}

2) Classe Principal

public class Principal{public static void main(String[] args){

Calculadora calc = new Calculadora();calc.somar( 4,4 );

}}

Page 8: Curso Java Básico - Aula 03

ConstrutorMétodo especial que serve para inicializar o objeto de uma classe quando oobjeto for criado. Este método não possui declaração de retorno, pois comofoi dito serve para configurar o objeto em questão.

Encapsulamento e Construtores 8

1) Classe Pessoa

public Pessoa{private String nome;

//Construtor sem argumentopublic Pessoa(){

this.nome = “Pedro”;}

//Construtor que recebe o nome como argumento.public Pessoa(String nome){

this.nome = nome;}//....gets e sets

}

2) Classe Principal

public class Principal{public static void main(String[] args){

Pessoa p = new Pessoa();System.out.println(“Nome :” + p.getNome() );Pessoa p2 = new Pessoa(“Kratos”);System.out.println(“Nome :” + p2.getNome() );

}}

Page 9: Curso Java Básico - Aula 03

ConstrutorAlgumas regras devem seguidas quando estivermoscriando construtores:

• Ter obrigatoriamente o mesmo nome da classe em que são definidos;

• Não possuir nenhum valor de retorno(nem mesmo void);

Além disso, devemos lembrar de que:

• Caso não seja fornecido nenhum construtor a própria JVM irá incluir um padrão sem argumento.

• E caso seja fornecido um construtor para a classe a JVM não irá criar um construtor padrão.

Encapsulamento e Construtores 9

Page 10: Curso Java Básico - Aula 03

Chamando construtoresda própria classe

Para alcançar um nível de reaproveitamento pode-se chamar um construtor já criado a partir de outro.Sintaxe:

this( <zero ou mais argumentos> ); //Deve ser a primeira instrução no construtor

Encapsulamento e Construtores 10

public Pessoa{

private String nome;private String telefone;private String email;

public Pessoa(String nome, String telefone, String email){this(nome, telefone);this.email = email;

}

public Pessoa(String nome, String telefone){this.nome = nome;this.telefone = telefone;

}

}

Page 11: Curso Java Básico - Aula 03

Destrutor em Java ?• Em algumas linguagens é possível encontrar uma parte do código onde o

programador inclui instruções de finalização, normalmente chamado de “destrutor”.

• Em Java outro modelo de programação é utilizado, A JVM assume a responsabilidade de remover os objetos indesejados da memoria valendo-se do mecanismo “Garbage Collector” (Coletor de Lixo).

• Para descartar um objeto, o programador Java deve, no máximo, atribuir valor nulo as variáveis reference que apontam para este objeto, ou atribuir um outro objeto a essas variáveis.

• Um objeto não é necessariamente removido da memória pelo GC no instante em que perde todas as referencias e se torna “descartável”. A especificação formal da JVM permite que o GC decida o melhor momento da remoção dos objetos descartáveis da memoria.

• Em Java existe o método finalize, que pode ser utilizado pelo programador para estabelecer um conjunto de instruções de finalização.

Encapsulamento e Construtores 11

Page 12: Curso Java Básico - Aula 03

Lembre-se

Apesar da linguagem fornecer os métodos System.gc eRuntime.getRumtime.gc a JVM não tem obrigação deaceitar estas sugestões.

Vale a pena ler os artigos:• http://www.ibm.com/developerworks/library/j-leaks/

• http://docs.oracle.com/cd/A97688_16/generic.903/bp/java.htm

• http://www.javaworld.com/article/2077581/learn-java/java-tip-79--interact-with-garbage-collector-to-avoid-memory-leaks.html

Encapsulamento e Construtores 12

Page 13: Curso Java Básico - Aula 03

Exercício

Crie um programa que por meio deJOptionpane receba os atributos daclasse empregado(nome, rg e salário),entretanto, deve-se utilizar as técnicasaprendidas até agora, tais como:construtores e encapsulamento.

Encapsulamento e Construtores 13

Page 14: Curso Java Básico - Aula 03

Modificador StaticUtilizado para indicar que uma variável ou métodopertence a classe e não a instancia.

Se formos entrar no conceito da orientação a objetoseria como dizer que a variável ou método pertence aomodelo e não a implementação em si.

Um modo mais grosseiro de entender esse modificadoré pensar que a variável ou método será compartilhadapor todos os objetos, ou seja, alterar o valor de umavariável estática de um objeto irá fazer com que todosos outros objetos sofram esta alteração.

Modificador Static e Enumerations 14

Page 15: Curso Java Básico - Aula 03

Acessando uma variável com modificador static

Modificador Static e Enumerations 15

1) Classe Pessoa

public Pessoa{public static int id;

}

2) Classe Principal

public class Principal{public static void main(String[] args){

Pessoa p = new Pessoa();System.out.println(“Nome :” + p.getNome() );Pessoa p2 = new Pessoa(“Kratos”);System.out.println(“Nome :” + p2.getNome() );

}}

Vejamos o exemplo a seguir:

Page 16: Curso Java Básico - Aula 03

Métodos estáticos

Modificador Static e Enumerations 16

1) Classe Math

public Math {public static int somar(int x,inty){

return x+y;}

}

2) Classe Principalpublic class Principal{

public static void main(String[] args){System.out.println( Math.somar( 4,4 ) );

}}

De maneira semelhante ao que ocorre para atributos, o uso do modificadorstatic em métodos faz sua associação a classe em vez de faze-lo a instancia.

Page 17: Curso Java Básico - Aula 03

Bloco de Inicialização estáticoPara atributos estáticos é possível inicializa-los ou nadeclaração ou por meio de blocos estáticos.

Modificador Static e Enumerations 17

1) Classe Pessoa

public Pessoa{public static int id;

static {id = 40;

}

}

• Um bloco estatico é executado somente uma vez: Imediatamente após a primeira referencia a classe, isto é, no seu carregamento.• Como o bloco de inicialização estático é executadono carregamento da classe, será executado antes doconstrutor da classe.• Dentro do bloco somente são acessados atributos e métodosestáticos;• Não podem lançar exceções checked;• É possível criar vários blocos de inicialização, neste casoserão executados na ordem em que aparecem.

Page 18: Curso Java Básico - Aula 03

EnumerationsUtiliza-se a palavra reservada enum seguida do nome desejado, seguindo a convenção de nomes de classes.

Sintaxe para a declaração de enumerações:

<modificadores> enum nomeEnum { listaValores }

Exemplo:

public class Cliente{public enum TipoCliente{ PESSOA_FISICA, PESSOA_JURIDICA };

}

Modificador Static e Enumerations 18

Page 19: Curso Java Básico - Aula 03

Imprimindo elementos da enumeração

Todas as enumerações tem um método estático values(),que retorna um array com os elementos da enumeração damesma ordem em que foram declarados. Desta forma podeser utilizado um laço for, ou mais facilmente o enhanced forpara imprimir os elementos da enumeração.

Exemplo:

for( Cliente.TipoCliente tipo: Cliente.TipoCliente.values() ){

System.out.println( tipo );

}

Modificador Static e Enumerations 19

Page 20: Curso Java Básico - Aula 03

ExercícioA classe java.util.Arrays contém vários métodos paraordenação, busca, comparação e preenchimento de arrays.E muitos destes métodos são estáticos ! Escreva umprograma em java que crie um array de 100 posições comnúmeros randomicos e teste os diversos métodos existentesna classe Arrays.

Utilize o javadoc para saber mais detalhes sobre esta classe.

Modificador Static e Enumerations 20

Page 21: Curso Java Básico - Aula 03

ExercícioModifique a classe empregado criada durante o cursoadicionando mais um atributo chamado HUMOR, essavariável será do tipo ENUM, podendo ter dois valores: FELIZou TRISTE. Realize um teste condicional no métodosetSalario() para que caso o valor recebido comoargumento seja menor que 100 altere o humor para TRISTE,caso contrário deverá ser FELIZ;

Modificador Static e Enumerations 21

Page 22: Curso Java Básico - Aula 03

HerançaConceito da Orientação a Objetos que permite que uma classe herde características e métodos de outra classe.

Em Java é utilizado a palavra extends para indicar tal relação.

Em Java a classe Object é chamada de superclasse de todas as classes, por que todas as classes são derivadas dela direta ou indiretamente.

Herança, Sobrescrita, Covariância e Polimorfismo

22

1) Classe Pai

public SerHumano{}

2) Classe Filha

public class Pessoa extends SerHumano {}

Page 23: Curso Java Básico - Aula 03

Construtores x Herança

• Construtores não são herdados em hipótese nenhuma !

• Cada classe deve declarar seus próprios construtores;

• Toda classe deve chamar o construtor da superclasse dentro de seupróprio construtor;

• A chamada ao construtor da superclasse deve ser a primeira instrução doconstrutor da classe;

• Caso a chamada não seja feita explicitamente no código da classe, ocompilador irá acrescentar uma chamada implícita ao construtor semparâmetros da superclasse.

Herança, Sobrescrita, Covariância e Polimorfismo

23

Page 24: Curso Java Básico - Aula 03

Sequencia completa de inicialização dos objetos

• Espaço em memória é alocado para o objeto sendo construído;• Cada um dos atributos do objeto é criado e inicializado para seu valor default;• É chamado o construtor da superclasse;• Cada um dos atributos da superclasse é criado e inicializado para seu valo

default;• A inicialização dos atributos via declaração e o código do bloco de inicialização

da superclasse executados na ordem em que aparecem;• O código do construtor da superclasse é executado;• A inicialização dos atributos via declaração e o código do bloco de inicialização

da classe são executados na ordem em que aparecem;• O código do construtor da classe;

Herança, Sobrescrita, Covariância e Polimorfismo

24

Page 25: Curso Java Básico - Aula 03

Referencia implícita superUtilizada para acessar atributos e métodos da superclasse, desde que visíveis de acordo com os modificadores de acesso.

Herança, Sobrescrita, Covariância e Polimorfismo

25

1) Classe Pai

public Pessoa{

protected String nome;protected String rg;

}

2) Classe Filha

public class Funcionario extends Pessoa {

private double salario;

public void impressaoRecibo(){System.out.print(“Eu” + super.nome + “ ” );System.out.print(“Portador do rg -” + super.rg + “ ” );System.out.print(“Declaro que recebi o valor de -” + this.salario );

}}

Page 26: Curso Java Básico - Aula 03

SobrescritaQuando se estende uma classe e se pretende alterar o comportamento de ummétodo herdado, é necessário reescrever o método na classe filha.sobrescrevendo o método herdado da superclasse.

Herança, Sobrescrita, Covariância e Polimorfismo

26

1) Classe Pai

public Pessoa{private String nome;public void imprimir(){

System.out.println(“Aluno - ” + nome ); }

}

2) Classe Filha

public class Funcionario extends Pessoa {

private String matricula;

@overridepublic void imprimir(){

System.out.print(“Funcionario - ” + matricula ); }

}

Page 27: Curso Java Básico - Aula 03

Regras para SobrescritaAs seguintes regras devem ser respeitadas para sobrescrever um método deuma superclasse:

• O novo método deve ter exatamente o mesmo nome daquele que quer sesobrescrever.

• O método deve ter a mesma lista de parâmetros, caso contrário será umasobrecarga e não sobrescrita;

• O tipo do valor de retorno deverá ser o mesmo do método que esta sesobrescrevendo, caso contrário ocorrerá um erro de compilação.

• A partir do Java 5 foi introduzido a covariância de valores de retorno.• Não se pode lançar exceções que não estejam declaradas no método, mas

apenas as mesmas exceções declaradas na assinatura do método ou quesejam subclasses daquela declarada.

• Um método static não pode sobrescrever um método não static e vice eversa;

• Um método não deve ter o modificador de acesso mais restritivos que ométodo sobrescrito.

Herança, Sobrescrita, Covariância e Polimorfismo

27

Page 28: Curso Java Básico - Aula 03

toString()Método existente na classe Object que possui a função de descrever opróprio objeto. Esta representação pode ser utilizada para imprimir o objetono console.

Por padrão ao imprimir o objeto no console será exibido uma msg no formato: <nomeDaClasse>@hashcode

Exemplo:

public class Pessoa{

private String nome;

@override

public String toString(){

return “[Nome - ” + this.nome + “ ]”;

}

}

Herança, Sobrescrita, Covariância e Polimorfismo

28

Page 29: Curso Java Básico - Aula 03

Modificador finalUtilizado na declaração de atributos, métodos e classes,tendo comportamentos diferentes em cada uma dassituações.Na declaração de classes:- Indica que a classe não pode ser estendida por outraclasse, ou seja, não poderá ser herdada.Na declaração de um método:- Indica que o método em questão não pode sersobrescrito.Na declaração de uma variável:- Define que somente uma atribuição deverá ser feita ao

atributo, podendo ser feita na declaração ou noconstrutor. Isto é o equivalente a criação de constantes.

Herança, Sobrescrita, Covariância e Polimorfismo

29

Page 30: Curso Java Básico - Aula 03

Classe AbstrataO modificador abstract é usado para indicar que uma classe nãoestá pronta para ser utilizada e não pode ser instanciada, masapenas estendida.

Sintaxe para declaração de classes abstratas

abstract class NomeDaClasse{

}

O modificador abstract pode ser combinado com outrosmodificadores, em qualquer ordem.

Herança, sobrescrita, covariância e polimorfismo;

30

Page 31: Curso Java Básico - Aula 03

Método AbstratoUm método abstrato é utilizado quando o desenvolvedor ou projetista percebe que:

• É possível implementar um método de varias maneiras interessantes;

• Ainda não existem requisitos bem definidos para decidir por uma implementação de método.

Sintaxe:

Abstract <tipoRetorno> nomeDoMetodo(<parametrosDeMetodos>);

Regras:

• Sempre que se declara um método abstrato, a classe deve também ser abstrata;

• todas as classes filhas deverão implementar o método abstrato ou declara-lo como abstrato.

Herança, sobrescrita, covariância e polimorfismo;

31

Page 32: Curso Java Básico - Aula 03

Interface

Define um contrato de comunicação entre classes. A interface é um protótipo de classe, com umaestrutura semelhante a de uma classe abstrata. Uma diferença importante é que uma classe abstratapode definir métodos concretos e uma interface só pode definir métodos abstratos.

<modificadores> interface nomeDaInterface{//Definição de constantes//Definição de métodos abstratos

}

Exemplo:

public interface Transportavel{

public String UNIDADE_PESO = “kg”

public double getVolume();public double getPeso();

}

Herança, sobrescrita, covariância e polimorfismo;

32

Page 33: Curso Java Básico - Aula 03

Implementando uma InterfacePara implementar uma interface em uma classe utiliza-se ainstrução implements, sendo obrigatório implementar todos osmétodos definidos pela interface, e respeitar a assinatura dosmétodos.

Sintaxe para implementação de interfaces<modificadores> class nomeDaClasse implements NomeDaInterface{}

Dica: Uma classe abstrata pode implementar uma interface sem implementar todos os seus métodos.

Herança, sobrescrita, covariância e polimorfismo;

33

Page 34: Curso Java Básico - Aula 03

Estendendo uma InterfaceUma interface pode ser estendida por outras,fazendo com que a interface filha herde todos osmétodos definidos pela super-interface, ou seja, asclasses que implementam a interface filha terãoque implementar todos os métodos definidos nasduas interfaces.

Exemplo:

public interface Inflamavel extends Transportavel{public int getTemperaturaMaxima();

}Herança, sobrescrita, covariância e

polimorfismo;34

Page 35: Curso Java Básico - Aula 03

PolimorfismoO polimorfismo é um conceito de orientação a objetos que permitever um objeto de várias formas. Polimorfismo pode ser usado emdiferentes situações: na criação de objetos, nos parâmetros de métodoe etc.

Vejamos o exemplo abaixo:

//criando uma instância da classe clienteCliente cliente = new Cliente();

//vendo a instância de cliente como pjPessoaJuridica pJuridica = cliente;

//vendo cliente como pj, e a pj como pessoaPessoa pessoa = pJuridica;

Herança, sobrescrita, covariância e polimorfismo;

35

Page 36: Curso Java Básico - Aula 03

CovariânciaO retorno covariante é uma funcionalidade adicionada na plataforma Java a partir da versão 5 que permite utilizar a hierarquia das classes no retorno de métodos. A ideia é permitir que em uma sobrescrita seja retornado um objeto mais especifico e compatível com o retorno declarado na classe pai.

Vejamos o exemplo abaixo:

Herança, sobrescrita, covariância e polimorfismo;

36

1) Classe Pai

public X{

public Object getValue(){ }

}

2) Classe Filha

public class Y extends X {

@overridepublic String getValue(){ }

}

Page 37: Curso Java Básico - Aula 03

ExercícioPadrões GoF ('Group of Four')

• Os padrões "GoF" são organizados em 3 famílias :• Padrões de criação : relacionados à criação de objetos• Padrões estruturais : tratam das associações entre classes e

objetos.• Padrões comportamentais : tratam das interações e

divisões de responsabilidades entre as classes ou objetos.

Com base no que foi aprendido durante a aula, tente implementar em Java os padrões FACTORY, DAO, SINGLETON e TEMPLATE METHOD.

Herança, sobrescrita, covariância e polimorfismo;

37

Page 38: Curso Java Básico - Aula 03

Fim da Terceira Aula

Obrigado !