Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Lucio Carvalho

Problemas com exercicio de herança

Recommended Posts

Alguem me ajuda, eu decidi testar o exercicio  e me deparei com 2 problemas/dificuldades.

Anexei o uml pra quem quiser conferir  e nele  tem uma regra de negocio que pede pra mostrar uma relação vinculada antes e depois de receber a comissao.

Só que eu nao sei como fazer isso,  e outro problema, por algum motivo meu calculo da comissao da um erro, por exemplo, eu não tava sabendo continuar o exercicio e  tentei somar a parte a remuneração com a comissao pra ver ser o calculo tava dando certo, mas aparece 100.02.0 ao invés de aparecer 102.

public class Cargo {
    private int codigo;
    private String descricao;
    private float remuneracao;
    
    public int getcodigo(){
        return codigo;
    }
    public String getdescricao(){
        return descricao;
    }
    public float getremuneracao(){
        return remuneracao;
    }
    
    public void setcodigo(int codigo){
        this.codigo=codigo;
    }
    public void setdescricao(String descricao){
        this.descricao=descricao;      
    }
    public void setremuneracao(float remuneracao){
        this.remuneracao=remuneracao;
    }
    
    public void concedeBonus(int percentual){
        double bonus=(percentual*this.remuneracao)/100;
        
    }
    
    public String toString(){
        return this.codigo+"  "+this.descricao+"         "+this.remuneracao;
    }
    
}

Aqui vai a super classe

public class Funcionario {
    Cargo carg = new Cargo();
    private String nome;
    private int sexo;
    private String cpf;
    
    public String getnome(){
        return nome; 
    }
    public int getsexo(){
        return sexo;
    }
    public String getcpf(){
        return cpf;
    }
    
    public void setnome(String nome){
        this.nome=nome;
    }
    public void setsexo(int sexo){
        this.sexo=sexo;
    }
    public void setcpf(String cpf){
        this.cpf=cpf;
    }
    
    public String toString(){
        return this.nome+" "+this.cpf;
    }
    
    public float comissao(){
        return this.carg.getremuneracao();
    }
    
    
}

subclasse

public class Medio extends Funcionario{
    private double vMes;
    
    public double getvMes(){
        return vMes;
    }
    public void setvMes(double vMes){
        this.vMes=vMes;
    }
    
    public float comissao(){
        return (float) (+Medio.this.vMes*0.02f);
    }   
    
    public String toString(){
        return super.toString();

        
                
        
        
    }
    
}

classe teste

    public static void main(String[] args) {
        // TODO code application logic here
        Medio medio = new Medio();
        medio.setnome("Lucio");
        medio.setsexo(1);
        medio.setcpf("    111.111.111.15   ");
        medio.carg.setcodigo(111);
        medio.carg.setdescricao("    Nada");
        medio.carg.setremuneracao(100.0f);
        medio.setvMes(100.0);
        System.out.println("---------------------RELAÇÃO DE FUNCIONÁRIOS------------------------");
        System.out.println("NOME:" + "     CPF:   " + "          SEXO:");
        System.out.println(medio+" "+medio.getsexo());
        System.out.println("--------------------- RELAÇÃO DE CARGOS ----------------------------------");
        System.out.println("CODIGO:" + "  DESCRIÇÃO:" + "   REMUNERAÇÃO:");
        System.out.println(medio.carg.toString());
        System.out.println("----------------------RELAÇÃO VINCULADA -----------------------");
        System.out.println("NOME:" + "     CPF:   " + "          CODIGO:" + "  DESCRIÇÃO:" + "   REMUNERAÇÃO:");
        System.out.println(medio+""+medio.carg.toString());
        System.out.println("----------------------RELAÇÃO VINCULADA depois da comissao");
        System.out.println("NOME:" + "     CPF:   " + "          CODIGO:" + "  DESCRIÇÃO:" + "   REMUNERAÇÃO:");
      
        
    }
    
}

 

ExerciciojavaCargo.docx

Compartilhar este post


Link para o post
Compartilhar em outros sites
1bertorc    0
Numeração de ponto flutuante é por natureza imprecisa
, eu não gosto de dar respostas pela metade, mas nesse
caso a explicação é realmente complexa, use BigDecimal 
para valores monetários (procure sobre essa classe no google).

Pelas minhas contas tem umas violações de Encapsulamento 
no seu código. Em suma o ideal é que você declare os 
membros sempre como private (só podem ser acessados 
diretamente por funções da mesma classe) ou protected 
(só podem ser acessados diretamente por funções da 
mesma classe ou classes decendentes). Ou seja, algo como:

private cargo = new Cargo(); 
public getCargo(){ return cargo; }
public setCargo( Cargo novoCargo ){ this.cargo = novoCargo; }

e para acessar depois
medio.getCargo().setCodigo( novoCodigo ) ao invés de medio.carg.setcodigo
(Aliás, esse código está funcionando? porque pelas minhas 
contas carg n seria acessível em main).

Nesse caso você pode usar protected (se já tiverem estudado 
protected obviamente) e cologar o getCargo apenas na classe 
derivada, uma dica é que o seu editor quase certamente gera 
automaticamente os getters e setters, basta declarar os membros.

Eu não sei se o seu professor vai cobrar isso, mas você pode 
melhorar a nomenclatura, procure por padrão de nomenclatura 
java, isso n influencia diretamente no programa, mas melhora 
muito o entendimento, basicamente use sempre:
getNome ao invés de getnome
Verbos no infinitivo (concederBonus ao invés de concedeBonus).
Um esboço...
class MinhaClasse{
   private propriedade = new OutraClasse();
   public NomeClasse getPropriedade(){...
   public void setPropriedade( NomeClasse valor ){...
   public void executarCalculo(){....
   ...
}

Dicas de estudo para você: Encapsulamento em java e 
Camel Case (o dito padrão de nomenclatura).

Deve ter alguns erros aí, é só para te dar umas 
pistas, faz muitos anos que não programo em java.

Boa sorte e que a força esteja contigo.

 

 

Editado por 1bertorc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×