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.