Olá pessoal!
Ganhei um exercício na última aula e estou tendo dificuldades. Minha dúvida é como criar as propriedades associadas dos métodos Carga Horaria e Titulação e criar formas para definir os valores das mesmas via metodos normais ou construtores, como diz na Observação abaixo.
Se alguém puder me dar um auxílio ficarei muito grato.
Implementar as classes e interfaces a seguir. Cada uma das classes terá a sua forma de cálculo de salário. Desafio: Professor também é Colaborador.
Interface Colaborador:
Métodos obtemSalario e cargaHoraria. Contém uma propriedade ?float? estática correspondente ao valor base da hora.
Interface Professor:
Método obtemTitulacao ? serve de base para o adicional
Graduação ? sem adicional
Mestrado ? adicional de 20%
Doutorado ? adicional de 50%
*** Observação: os metodos anteriores possuem propriedades associadas (carga horaria e titulação), que deverão ser criadas, bem como formas para definir os valores das mesmas (via metodos normais ou construtores)
Classes:
Estagiario (implementa Colaborador) ? salário = cargaHoraria * valor base
Funcionario (implementa Colaborador) ? salário = cargaHoraria * valor base * 2
ProfessorTecnico (implementa Professor) ? salário = cargaHoraria * valorBase * 3 * adicional pela titulacao
ProfessorGraduacao (implementa Professor)? salário = cargaHoraria * valorBase * 4 * adicional pela titulação
[quote=junny]Olá pessoal!
Ganhei um exercício na última aula e estou tendo dificuldades. Minha dúvida é como criar as propriedades associadas dos métodos Carga Horaria e Titulação e criar formas para definir os valores das mesmas via metodos normais ou construtores, como diz na Observação abaixo.
Se alguém puder me dar um auxílio ficarei muito grato.
Implementar as classes e interfaces a seguir. Cada uma das classes terá a sua forma de cálculo de salário. Desafio: Professor também é Colaborador.
Interface Colaborador:
Métodos obtemSalario e cargaHoraria. Contém uma propriedade ?float? estática correspondente ao valor base da hora.
Interface Professor:
Método obtemTitulacao ? serve de base para o adicional
Graduação ? sem adicional
Mestrado ? adicional de 20%
Doutorado ? adicional de 50%
*** Observação: os metodos anteriores possuem propriedades associadas (carga horaria e titulação), que deverão ser criadas, bem como formas para definir os valores das mesmas (via metodos normais ou construtores)
Classes:
Estagiario (implementa Colaborador) ? salário = cargaHoraria * valor base
Funcionario (implementa Colaborador) ? salário = cargaHoraria * valor base * 2
ProfessorTecnico (implementa Professor) ? salário = cargaHoraria * valorBase * 3 * adicional pela titulacao
ProfessorGraduacao (implementa Professor)? salário = cargaHoraria * valorBase * 4 * adicional pela titulação
[/quote]
se Professor também pode ser Colaborador, então ProfessorTecnico e ProfessorGraduacao devem implementar as interfaces Colaborador E Professor.
Chame as interfaces de ColaboradorI E ProfessorI por exemplo, para diferencia-las das classes Colaborador E Professor.
pelo que entendi, talvez nem precise da classe Colaborador. Apenas da interface. Teria que ver seu caso de uso para ter certeza.
Pelo que entendi sua dúvida na verdade é saber o que é uma interface, para que serve, como fazer interfaces e como implementa-las.
O que já tem pronto?
public double obtemSalario();
public double cargaHoraria();
public static float valorBaseHora = 10;
}
public interface Professor {
public double obtemTitulacao();
}
public class Estagiario implements Colaborador {
@Override
public double obtemSalario() {
return cargaHoraria() * valorBaseHora;
}
@Override
public double cargaHoraria() {
return 35;
}
}
public class Funcionario implements Colaborador {
@Override
public double obtemSalario() {
return cargaHoraria() * valorBaseHora * 2;
}
@Override
public double cargaHoraria() {
return 40;
}
}[/code]
No final, o exercício ainda pede o seguinte:
Criar uma propriedade NOME nas classes e um construtor para cada classe que irá receber este nome. Exemplo de criação: Colaborador c = new Estagiario(?Eu?)
Em um método principal, criar um vetor de colaboradores (Colaborador[]) e nele incluir diversas pessoas diferentes.
Depois, percorrer o vetor mostrando o nome e o salário de cada pessoa, sendo que para Professores deverá ser exibido um ?*? ao lado do nome.
Só uma dica…
vejo que seu professor não tá sabendo que vc não sabe OO.
Vc deve procurar estudar mais sobre OO pra depois querer entender interface.
Bom, para poder lhe ajudar melhor, quero ter certeza… vc sabe me mostrar um exemplo de cada um destes?
Um construtor
Criar uma propriedade em uma classe
Um vetor
adicionar e remover elementos deste vetor
vc colocou:
public double obtemSalario();
public double cargaHoraria();
por que não usa o padrão java sets e gets?
O que seu professor quer dizer é que está faltando os metodos que sua aplicação irá chamar para pedir o dado (output) e alterar o dado (input):
[code] //output: saida do valor do salario
public double getSalario();
//input: entrada do valor do salario
public void setSalario(double salario);
//output: saida do valor da carga horaria
public double getCargaHoraria();
//input: entrada do valor da carga horaria
public void setCargaHoraria(double carga);
[/code]
Acho que uma forma como está fazendo vai precisar saber que classe é seu colaborador utilizando instanceof.
Boa tarde Luiz Augusto!
Cara, tento entender mas estou cada vez mais confuso.
Você poderia fazer uma parte do exercício para mim tentar entender? Daí vejo se consigo o restante!
Se conseguisse fazer até a parte da criação das classes, depois tento entender e ver se consigo fazer o restante, tipo a parte do vetor.
Classes:
Estagiario (implementa Colaborador) ? salário = cargaHoraria * valor base
Funcionario (implementa Colaborador) ? salário = cargaHoraria * valor base * 2
ProfessorTecnico (implementa Professor) ? salário = cargaHoraria * valorBase * 3 * adicional pela titulacao
ProfessorGraduacao (implementa Professor)? salário = cargaHoraria * valorBase * 4 * adicional pela titulação
Ficarei muito grato e obrigado pela ajuda até agora!