Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Classe Interface

Eu estava tentando criar classes de funcionários sem usar herança e gostaria de saber se é assim mesmo.

Eu iria fazer uma classe Funcionário (Abstrata) , apenas com atributos : nome, endereço , salario , cpf, com getters e setters mas sem nenhum método.

Depois criaria uma classe Gerente que implementaria uma interface com os métodos respectivos e passaria a classe funcionário como referência na classe Gerente.

Depois sairia criando as outras classes : Diretor , Presidente e quando criasse a classe Auxilar de Produção por exemplo , eu criaria uma outra interface por que ela tem métodos diferentes.

Resumindo : Para não usar herança , tem que abusar entre "", bastante da passagem por referencia e criar interfaces que implemente as classes que tiverem aqueles métodos em comum e quando não tiverem criar uma nova interface ?

Claro que, acredito que cada caso é um caso, mas usando os exercícios da classe funcionário passados ao longo do curso, meu raciocínio para não usar herança , está bem aplicado ou teria outra forma melhor ?

6 respostas

Não entendi muito bem mais vamos lá.

Se você tem uma classe abstrata, você precisa implementar ela para usar. O único modo é através da herança.

Mesmo que você instancie ela no código, o java vai criar uma inner class em tempo de compilação que herda sua classe abstrata.

Existem dois tipos de "associações": Herança e Composição.

Herança é quando você diz o Gerente é um funcionário. Composição é quando você diz Funcionário tem um Gerente.

Você deve pensar: O Gerente é um funcionário ou tem um funcionário. Aí você usa o modo correto.

No seu caso aí, passar o funcionário via parâmetro não é um modo de evitar a herança.

Se você fosse criar o Diretor, Presidente e entre outras, eles teriam os mesmos atributos que a classe Funcionário.

Blz Felipe ? Então... Ficaria assim, vou tentar explicar.

criei uma classe Funcionário abstrata com atributos, como : Nome , endereço e por ai vai, depois fui criando as classes gerente , diretor e por ai vai (Classe normal) , mas sem herança , elas implementavam um interface com métodos, eu passava a classe funcionário como referencia a todos elas. Resumindo: como a classe funcionário tinha atributos incomum com todas..Eu passava ela como referencia e as interfaces , eu criava os métodos. : Exemplo interface AltaDirecao, ela implementava Gerente, diretor , CEO, ai na classe Auxiliar de produção eu criei uma nova interface e as classes que tiram os métodos incomum com ela , eu implementava, mas todas teriam a classe Funcionário dentro dela como referencia.

Fiz isso apenas como desafio para não usar herança , gostaria de saber se é essa linha de raciocínio mesmo. Usando referencias. Claro que , cada caso ,um caso. Mas queria saber se está correto a maneira de pensar ou tem outra forma melhor. Abraço!

solução!

Acho que entendi.

Você está fazendo algo assim certo?

Você tem algumas classes como Funcionário, Presidente, Diretor e etc.

Todos eles trabalham, então você criou uma interface Trabalhador com um método trabalhar e implementou em todas as classes que trabalham.

Se for isso está correto.

Mas a parte de passar o funcionário para a classe Presidente não.

Se você não quer usar herança, as classes Presidente, Diretor e etc precisam ter todos os métodos e atributos.

Até porque não faz sentido ter o funcionário como um atributo de Diretor. Vamos ver o uso:

class Diretor {
    Funcionario funcionario;
    // Gets e Sets omitidos
}

class Funcionario {
    String nome;
}

// Considerando que tudo esteja setado e instanciado
diretor.getFuncionario().getNome(); // <- Meio estranho não concorda?

// Seria até visualmente mais bonito e prático se fosse direto
diretor.getNome(); //<- Lembre-se, o Diretor é um Funcionário da empresa e não tem um funcionário

ficaria assim, O gerente, o presidente e o diretor tem uma interface com métodos , apenas métodos.

Classe Auxiliar de produção implementa uma outra interface com métodos diferentes . Mas todas tem Funcionário dentre dela.

Então, depois ficar assim ex :

"'diretor.funcionario = new Funcionario();"' "'preside.funcionario = new Funcionario();"'

é por ai vai.

Estou fazendo isso, apenas como desafio para não usar herança. Não que herança seja de tudo ruim, em alguns casos não tem jeito tem que usar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software