Ola pessoal, é um enorme prazer poder fazer parte desta comunidade que tem me ajudado muito em minhas dúvidas
Bom, minha duvida é o seguindo, por exemplo:
se eu estiver desenvolvendo um programa e tenha a classe “Funcionario” e suas subclasses “Secretario”, “Gerente” e “Diretor”
Neste programa eu declaro minha classe mãe (Funcionario) como abstract e faça um método “aumentaSalario” declarado como abstract também
Esse método sera para dar um aumento todo fim de ano por exemplo, no caso a porcentagem sera diferente para cada subclasse
Secretario 5%, Gerente 10% e Diretor 15%.
Neste caso eu teria que reescrever o metodo para cada funcionario, mas e se eles quiserem mudar isso e aumentar a porcentagem, eu teria que mudar uma por uma em todas as subclasses ?
e se depois de um tempo especificassemos mais ainda como GerenteVendas, GerenteManutencao, GerentePCP, e cada gerente tivesse a porcentagem diferente, isso nao foge do conceito de POO ?
Talvez seja uma duvida bem simples, mas é que eu estou começando agora e fiquei me perguntando isso quando estava estudando.
Ja Agradeço pela ajuda
Oi, bom dia!
Uma forma interessante seria criar uma tabela de cargos e salários…
Abraço,
Você terá que aumentar sim, em cada classe específica… mas isso é uma boa coisa, porque fica encapsulado, senão você teria que fazer algo assim [code]
public void aumentaSalario(Funcionario func){
if(func instanceof Secretario){
func.setSalario(func.getSalario * 1.05);
}else if (func instanceof Gerente){
func.setSalario(func.getSalario * 1.10);
}else if (func instanceof Diretor){
func.setSalario(func.getSalario * 1.15);
}
}[/code] Feio, não?
Quando fica encapsulado do jeito que você está modelando, independente de onde estiver no sistema, você simplesmente diz que aquele funcionário terá um aumento, e ele saberá qual método invocar.
E o mesmo ocorrerá para GerentePCP, GerenteVendas, etc. mas aí uma idéia é a classe Gerente também ser abstrata. Depende da sua necessidade.
Olá Roni!
Você esta certo quanto ao fato de que, sempre que você tiver novos cargos ou as porcentagens tiverem que ser alteradas, você terá que redefinir todas as subclasses. Isso não foge da orientação a objetos, veja, você declarando um método como abstrato, esta dizendo que este necessariamente deve ser definido “na subclasse”, assim, com muitas subclasses, muitas definições.
Criar uma tabela de cargos seria interessante mesmo, assim você criaria grupos de cargos com porcentagens definidas sem a necessidade de definir o valor pra cada classe especifica.
Pessoal muito obrigado por mais essa ajuda, e pela rapidez com que responderam
Mais uma duvida solucionada rsrs.
Abraço a todos !
mas isso é uma boa coisa, porque fica encapsulado, senão você teria que fazer algo assim
[quote=rodrigo.ferreira]Oi, bom dia!
Uma forma interessante seria criar uma tabela de cargos e salários…
Abraço,
[/quote]
Eu também acho muito mais adequado. Vale sempre lembrar aquele princípio: favoreça composição à herança. Na minha opinião, um Gerente por exemplo, não é uma extensão de um Funcionário, mas sim um funcionário com cargo específico. Ou seja, Gerente, Diretor, Secretário são atributos de um objeto Funcionario. Pense no tamanho da encrenca quando um Gerente é promovido a Diretor por exemplo … Não há como você alterar a classe do seu objeto, logo, essa seria uma operação indisponível no sistema.
Tente esse abordagem: crie uma classe Funcionario, e uma referência da classe Cargo como atributo de Funcionario. Assim você não precisa criar uma nova classe cada vez que um novo Cargo é criado.