aula cloneable 24/03/2011
DESCRIPTION
Aula de java do dia 24/03, Tema Clonagen de objetosTRANSCRIPT
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 !
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));
}
}
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;
}