[Caelum] método demitir() -> eliminar um objeto

7 respostas
F

Olá, pessoal!

Sou iniciante e estou fazendo alguns exercícios da apostila caelum sobre orientação a objetos.

Me deparei com a seguinte situação:

Tenho que criar uma classe funcionário, com seus atributos e 3 métodos: bonifica, calculaGanhoAnual e demite.

Não tenho dúvidas nos atributos e nem nos métodos "bonifica" e "calculaGanhoAnual", mas o método "demite" me pareceu um pouco mais difícil...

Pela minha interpretação, este método deveria apagar qualquer referência do objeto Funcionário que fora instanciado na classe main, certo?

Como eu faço isso?

Código da classe Funcionario:
/* 
 05/10/2012
 */
package Exercicios;

    public class Funcionario {
    
        //Atributos
        String dataEntrada;
        String rg;
        String nome;
        String sobrenome;
        String departamento;
        double salario;
        
        
        //Métodos
        
        //Bonifica
        void bonifica (double percentual) {
            double novoSalario;
            novoSalario = this.salario * (1 + (percentual/100));
            this.salario = novoSalario;
        }
        
        //Ganho anual
        void calculaGanhoAnual() {
            double ganhoAnual;
            ganhoAnual = this.salario * 12;
            System.out.println("Ganho anual do funcionário " + this.nome + " " + this.sobrenome + ": " + ganhoAnual);
        }
       
        
        void demite() {
            // O que coloco aqui?
        }
        
        
}
Código da classe Teste:
package Exercicios;

    public class Teste {
    
        public static void main (String[] args) {
            
            Funcionario f1 = new Funcionario();
            
            f1.salario = 1000;
            
            f1.bonifica(20);
            
            System.out.println(f1.salario);
            
            f1.calculaGanhoAnual();
            
           
        }
        
}

Obrigado!

7 Respostas

Matheus_Paiva

marcar os atributos como nulo resolve ?^

R

Eu já creio que isso seria usado ao trabalhar com persistência de dados, afinal quando você demite um funcionário, teríamos que marcar de alguma forma que o mesmo foi demitido.
Agora eu nunca tentei apagar uma referência a um determinado objeto.

Matheus_Paiva

Tenta ai ....

try {
            EntityTransaction tx = getConexao().getTransaction();

            if (!tx.isActive()) {
                tx.begin();
            }

            vo = getConexao().merge(vo);

            getConexao().remove(vo);

            if (tx.isActive()) {
                tx.commit();
            }

        } catch (Exception ex) {
            ex.printStackTrace();
            if (ex.getCause() instanceof ConstraintViolationException) {
                throw new ConstraintViolationException(null, null, null);
            }
        }

ai tu aponta para o que quer remover ...
Vê se dá certo ai ....

L

Não seria o caso de você implementar um destrutor para o seu objeto?

F

Obrigado pelas ajudas, pessoal…

Talvez o autor do livro tenha sugerido algo mais simples, como fazer um atributo “boolean demitido = false ou true”, não sei, porque está no começo do livro ainda…

Nao citou nada de persistência ou conexão com banco de dados, e eu não sei muito sobre isso ainda.

Eu estava pensando se existe algum modo de destruir o objeto, ou seja, fazer o inverso de “Objeto objeto = new Objeto();”

Existe essa possibilidade?

Será que se eu setar todos os atributos do objeto como null, o garbage collector já elimina este objeto pra mim?

Obrigado!

ErickRAR

Você pode criar um boolean para controlar isso:

boolean admitido=true;

public void demitir(){
admitido = false;
}

ou então simplesmente deixar de utilizar o objeto:

f1 = null;

Enfim, há o caso de tirar de uma lista ou do banco de dados, mas pelo visto você ainda não chegou nisso, então esqueça. :slight_smile:

F

Grato, amigo… Acho que solucionou meu problema :slight_smile:

Criado 5 de outubro de 2012
Ultima resposta 5 de out. de 2012
Respostas 7
Participantes 5