Aula Cloneable 24/03/2011

3

Click here to load reader

description

Aula de java do dia 24/03, Tema Clonagen de objetos

Transcript of Aula Cloneable 24/03/2011

Page 1: Aula Cloneable 24/03/2011

Clonagem Rasa → Altera um, altera outro.Clonagem Profunda → Só altera a si próprio !Na Clonagem Profunda, você cria outros objetos, e cria novas referencias.Para clonarmos um objeto de forma rasa, basta implementarmos serializabeClonagem Profunda → Consome mais memoria.

String é um objeto imutável, pois não existe NENHUM método que modifique a String.Desvantagens de ser imutável:

– Ocupa mais espaço quando necessita-se fazer a alteração do seu conteudoVantagens de ser Imutável:

– Economia de espaço.Quando o objeto é criado e NÃO possui métodos para mudar seu conteúdo, este objeto então é imutável.

(Date) This.nasc.Clone( ); → como é um objeto que implementa Clonable, podemos cloná-lo.

Quando o objeto é imutável, DEVEMOS criar mais uma instancia do mesmo !Ao pedir um clone, enviamos uma mensagem que é seriada e então chega a nós.

Para clonarmos um objeto, precisamos, além de implementar Cloneable.

Trabalhinho para a Aula !

'-'

Clonar Alunoonde: Aluno → Clonagem rápida.Aluno Profundo → Clonagem Profunda

Testar para ver se funcionou !

Page 2: Aula Cloneable 24/03/2011

public class AlunoProfundoTest {

@Testpublic void testClone() {

//=================================> Verifica se a clonagem funcionou !

AlunoProfundo novoAlunoP;novoAlunoP = new AlunoProfundo();novoAlunoP.setCurso("asah");novoAlunoP.setDataNascimento(new Date());novoAlunoP.setNome("Matheus");novoAlunoP.setProntuario("0225154");novoAlunoP.setTurma(123);

AlunoProfundo novoClone;

novoClone = (AlunoProfundo) novoAlunoP.clone();

//Faz a mesma bosta que TUDO LA ENCIMA --'assertEquals(novoClone, novoAlunoP);

//NÃO SÃO OS MESMOS OBJETOSassertNotSame(novoClone, novoAlunoP);

//=================================> Verifica se a clonagem é profunda !

//Modifica a data de nascimentonovoAlunoP.getDataNascimento().setTime(22255L);

//Verifica se as Datas São DoferentesassertNotSame(novoClone.getDataNascimento(),

novoAlunoP.getDataNascimento());

//testando para ver se UM dos alunos se assertFalse(novoAlunoP.equals(novoClone));

//Verifica se as datas nao sao iguais

assertFalse(novoClone.getDataNascimento().equals(novoAlunoP.getDataNascimento()));

//Modificando os atributos de um dos ClonesnovoAlunoP = new AlunoProfundo();novoAlunoP.setCurso("iii");novoAlunoP.setDataNascimento(null);novoAlunoP.setNome("Rafinha");novoAlunoP.setProntuario("5588747");novoAlunoP.setTurma(556);

//Verifica se alterar o clone nao altera o objeto em siassertFalse(novoClone.equals(novoAlunoP));

}

}

Page 3: Aula Cloneable 24/03/2011

public class AlunoProfundo implements Cloneable{

private String prontuario;private String nome;private int turma;private String curso;private Date dataNascimento;

public Object clone(){AlunoProfundo alunoProfundo = new AlunoProfundo();alunoProfundo.setCurso(this.curso);alunoProfundo.setDataNascimento((Date) this.dataNascimento.clone());

// alunoProfundo.setDataNascimento(this.dataNascimento);alunoProfundo.setNome(this.nome);alunoProfundo.setProntuario(this.prontuario);alunoProfundo.setTurma(this.turma);return alunoProfundo;

}