Exercicio Interfaces

5 respostas
J

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

5 Respostas

Luiz_Augusto_Prado

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

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?

J
O que fiz até agora, mas acho que não está certo!
public interface Colaborador {
   
   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;
    }
}

*************************************************
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.

J

O professor falou que tinha que fazer alguma tipo como está abaixo criar um método para alterar a carga horário, mas não entendi como fazer isso.

public class Estagiario implements Colaborador {
    
    public static double CargaHoraria;
    
    public void alteraCargaHoraria(double ch) {
        CargaHoraria = ch;
     }
    
    @Override
    public double obtemSalario() {
        return cargaHoraria() * valorBaseHora;
       
    }
Luiz_Augusto_Prado
junny:
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):

//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);
- 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.
Acho que uma forma como está fazendo vai precisar saber que classe é seu colaborador utilizando instanceof. http://www.javaprogressivo.net/2012/10/descobrindo-classe-de-um-objeto.html

eu faria diferente:
http://javafree.uol.com.br/artigo/1365/Prefira-o-polimofirmo-a-instanceof.html

J

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!

Criado 12 de outubro de 2013
Ultima resposta 12 de out. de 2013
Respostas 5
Participantes 2