Exercício envolvendo classes e polimorfismo

9 respostas
gRoOve
5 Resolva a seguinte situação utilizando os conceitos aprendidos. Uma empresa quer manter o registro da vida acadêmica de todos os funcionários, o modelo deve  ontemplar o registro das seguintes informações, de forma incremental:

5.1 Para o funcionário que não estudou, apenas o nome e o código funcional;

5.2 Para o funcionário que concluiu o ensino básico, a escola;

5.3 Para o funcionário que concluiu o ensino médio, a escola;

5.4 Para o funcionário que concluiu a graduação, a Universidade;

6 Estenda o modelo implementado no exercício anterior de forma que todo funcionário possua uma renda básica de R$ 1000,00 e:

6.1 Com a conclusão do ensino básico a renda total é renda básica acrescentada em 10%;

6.2 Com a conclusão do ensino médio a renda total é a renda do nível anterior acrescentada em 50%;

6.3 Com a conclusão da graduação a renda total é a renda do nível anterior acrescentada em 100%;

6.4 Todos os cálculos são efetuados sempre sobre a última renda obtida.

7 Crie um programa que simule uma empresa com 10 funcionários, utilize um array, sendo que a escolaridade dos funcionários é distribuída da seguinte forma: 40% ensino básico, 40% ensino médio e 20% nível superior. Calcule os custos da empresa com salários totais e por nível de escolaridade, utilize a classe funcionário desenvolvida no exercício anterior.

To com dificuldade em começar esse exercício, nesse caso terei que criar apenas uma classe? Ou uma classe para cada escolaridade diferente?

9 Respostas

B

Se é para estudar polimorfismo, então é uma classe diferente para cada escolaridade, e cada uma dessas estendem uma da outra:

Funcionario ≥ FuncionarioEnsinoBasico ≥ FuncionarioEnsinoMedio ≥ FuncionarioEnsinoSuperior.

Não precisa reescrever o nome, código, etc para cada uma, a herança já vai fazer isso.

Obs: pelo que entendi, vai ter uma escola para ensino básico e outra pra médio.

gRoOve

Entendi…e pra calcular a renda total vou ter que usar a sobreescrita nos métodos né?

Lavieri
gRoOve:
Entendi...e pra calcular a renda total vou ter que usar a sobreescrita nos métodos né?

é uma das soluções possiveis... uma outra é manter um método protected, na classe para ajustar a taxa

public class Funcionario {
    private double taxa = 1;
    
    public Funcionario() {
        
    }

    protected void setTaxa(double taxa) {
        this.taxa = taxa;
    }
}

Ai para FuncionarioBasico

public class FuncionarioBasico extends Funcionario{
    
    public FuncionarioBasico() {
        super.setTaxa(1.1); //10% de taxa
    }
}

etc ...

gRoOve

Não entendi…pq vc cria esse método?

public Funcionario() {

}

dexa eu tentar resolver usando a sobreposição dos métodos primeiro…tipo, como eu faço pra saber o custo de todos os funcionarios de uma determinada classe? Eu tenho na classe principal(onde está o metodo main) meus 10 objetos do tipo Funcionario…a única forma que pensei de fazer é passar pra um método que faça o calculo geral a quantidade de funcionarios daquela classe, será que é isso que o exercício pede?

Lavieri
gRoOve:
Não entendi...pq vc cria esse método?
public Funcionario() {

}
isto não é um método, é um Construtor, por padrão o Java implicitamente já escreve esse construtor, que libera o new Funcionario(), porem caso vc crie outro construtor como new Funcionario(String nome, int id), vc precisa definir o primeiro para que se possa usar o construtor vazio...
gRoOve:
dexa eu tentar resolver usando a sobreposição dos métodos primeiro...tipo, como eu faço pra saber o custo de todos os funcionarios de uma determinada classe? Eu tenho na classe principal(onde está o metodo main) meus 10 objetos do tipo Funcionario...a única forma que pensei de fazer é passar pra um método que faça o calculo geral a quantidade de funcionarios daquela classe, será que é isso que o exercício pede?

na verdade é algo assim

public class Funcionario {
    private double rendaBasica = 1000; // no exercicio é dito, que a renda é de 1000 para todos 
    public double getRendaTotal() {
         return getRendaBasica() * getTaxa();
    }

    public double getRendaBasica() {
         return rendaBasica;
    }

    public double getRendaTotal() {
        return getRandaBasica();         
    }
}

public FuncionarioBasico extends Funcionario{
     public double getRendaTotal() {
         return super.getRendaTotal() * 1.1 //matematicamente 1.1 = 110% .... o acrescimo é de 10% 
     }
}

a cada classe... vc invoca a rendaTotal da classe anterior, e multiplica por 1 + taxa

gRoOve

o que esse super faz exatamente? Cara não consegui entender o que vc fez nesse último code, tem dois métodos com o mesmo nome…eu já isso, chama-se sobrecarga né? Mas ai não ta mudando nada, são exatamente iguais…

Lavieri

sim é sobrecarga sim, não não faz a mesma coisa não…

super é uma referencia a classe superior na linha da herança… ou seja, em FuncionarioBasico, quando falo de super.algumaCoisa() eu estou querendo falar da classe Funcionario, falando que estou referenciando a classe que eu extendi…

public FuncionarioBasico extends Funcionario{ public double getRendaTotal() { return super.getRendaTotal() * 1.1; //matematicamente 1.1 = 110% .... o acrescimo é de 10% } }

esse trecho quer dizer que para FuncionarioBasico a renda total será a renda total de Funcionario multiplicada por 1.1, ou seja, salario 10% maior que o de funcionario…

return super.getRendaTotal() * 1.1

gRoOve

No caso do método:

getRendaTotal

Como o compilador vai saber qual return usar? Pelas expressões no return? Tentei fazer assim aqui e o eclipse ta apontando erro dizendo que tem um método duplicado…

gRoOve

Estou tentando dar continuidade neste exercício porém parei no item 7. Tipo, consegui criar o método que calcula os gastos totais da empresa, não estou conseguindo fazer o que separa por nível de escolaridade "/

public class Empresa {
	Funcionario[] qtdFunc = new Funcionario[10];
	private double gastoTotal;
	
	public void contratarFuncionario(int id, Funcionario func)
	{
		qtdFunc[id-1] = func;
	}
	
	public double gastoTotal()
	{
		for(Funcionario obj : qtdFunc)
		{
			if(obj==null)
				break;
			gastoTotal += obj.getRendaTotal();
		}
		return gastoTotal;
	}
	
	public double gastoNivelEscolaridade()
	{
		for(Funcionario obj : qtdFunc)
		{
			if(obj.getClass().)
		}
	}
}
Criado 13 de março de 2009
Ultima resposta 28 de jun. de 2009
Respostas 9
Participantes 3