Baixe o app para aproveitar ainda mais
Prévia do material em texto
Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Professor Marcel Melo marcel.melo@ifgoiano.edu.br Programação Orientada a Objetos Herança mailto:marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Problemática Com o desejo de deixar as classes cada vez mais genéricas é necessário omitir informações/detalhes (atributos) da classe, algumas vezes importante para o objeto a ser criado. E/ou adicionar tais informações, mesmo com a certeza que alguns objetos não utilizaram estas informações, e quando não necessário deixar tais atributos em branco (ou nulo). ● E os métodos que são importantes para alguns objetos e não faz nenhum sentido existir para outros? Uma solução muito comum é criar uma classe para cada tipo de objeto. Porém para objetos semelhantes é comum que vários atributos se repitam entre essas classes parecidas. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Reutilização de código A cópia de informação entre classes, muitas vezes é sinal de um projeto mal planejado. Sempre que possível é importante reutilizar código. Uma das principais vantagens do uso do paradigma orientado a objetos é a reutilização de código. Reutilizar código traz várias vantagens para o projeto: ● Facilidade de manutenção; ● Organização e qualidade do código-fonte; ● Diminuição do tempo de desenvolvimento Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Herança A herança é a capacidade de uma classe herdar informações e comportamentos de outra classe previamente existente. ● A herança é aplicada tanto para atributos quanto para métodos. O principal objetivo da herança é criar uma nova classe a partir de uma outra já existente. A partir da herança, a nova classe criada pode aprimorar, ou especializar, a classe original. ● Tal especialização pode ocorrer com a criação de novos atributos e métodos. Herança sempre pode ser traduzida como uma relação: é um(a) Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Herança no Java Para criar uma relação de herança no Java utiliza-se a palavra chave extends na definição da classe. Na criação da classe é informado além do nome da classe, o nome da classe-mãe a qual irá se herdar atributos e métodos. Lembre-se que a classe-mãe já deve existir no projeto para que ela possa ser estendida por outra classe. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br herança Em uma herança, a classe da qual outras classes herdam é chamada classe mãe, base ou superclasse. ● Pode-se dizer ainda que a classe-mãe/superclasse generaliza atributos e métodos comuns de várias outras classes. A classe que herda informações e comportamento de outra classe é chamada de classe filha, derivada ou subclasse. ● Pode-se dizer que as classes-filhas/subclasses são especializações da classe-mãe/superclasse. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br herança A herança deve ser utilizada visando a reutilização de características e comportamentos (atributos e métodos). Ou seja, as classes derivadas devem se comportar como as superclasses. Para isso sempre deve ocorrer uma hierarquia de generalização/especialização entre as classes. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Protected ou private? O modificador de acesso protected permite que atributos e métodos definidos como protegidos sejam diretamente acessados pela classe onde está definidos, classes-filhas e classes do mesmo pacote. Apesar de interessante deve-se ser cauteloso no uso do modificador protected. Além das classes-filhas tais atributos e métodos poderão ser acessados por todas classes do mesmo pacote. É mais interessante que somente a classe que cria os atributos podem manipulá-los, deixando para as demais classes, filhas ou não, manipular tais atributos por meio dos métodos públicos. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br protected ou private? Ainda para evitar os problemas resolvidos pelo encapsulamento, é interessante que as classes filhas utilize os métodos criados pela classe-mãe para modificar qualquer atributos que sejam herdados. Em caso especiais, que seja interessante que classes filhas trabalhem diretamente com os atributos, estes podem ser trabalhados com protected. Em casos de métodos internos, definidos como private, podem ser transformados em protected para que as classes filhas possam utilizar esses métodos, caso seja interessante para o problema. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Construtor e super(); Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br herança múltipla Suponha um sistema para a Federação Brasileira de Atletismo onde precisa-se definir as seguintes classes: ● Nadador ● Corredor ● Ciclista ● Triatleta Analisando o problemas, e de acordo com os conceitos aprendidos de herança, chega-se a conclusão que todos os atletas sem características e comportamentos semelhantes e que pode-se então criar uma classe Atleta. Ainda pode-se entrar mais a fundo no problema e definir a classe Pessoa, com as características e comportamentos comuns a todas pessoas. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Herança Múltipla Então, até o momento teremos uma superclasse Pessoa, da qual herdará a classe Atleta que, por sua vez, tem como subclasses a classe Nadador, Corredor, Ciclista e Triatleta. Mas, note que, um triatleta possui o comportamento de Nadador, Corredor e Ciclista, podendo assim herdar todo comportamento dessas três classes ao mesmo tempo. No caso de triatleta emprega-se o conceito de herança múltipla. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Herança Múltipla A Herança múltipla acontece quando uma subclasse herda comportamento e características de duas ou mais classes. O Java não implementa o conceito de herança múltipla. No Java só é possível aplicar o conceito de herança simples, onde uma subclasse só herda características e comportamentos de uma única superclasse. Porém, em linguagens como Python e C++ este conceito é implementado. Instituto Federal Goiano - Campus Morrinhos - Professor Marcel Melo - marcel.melo@ifgoiano.edu.br Exercício A partir do exemplo apresentado nesta aula, crie a seguintes classes usando o conceito de herança: ● Pessoa - Atributos e métodos comuns a todas pessoas ● Funcionário - Atributos e métodos comuns a todos funcionários ○ Todo funcionário é uma pessoa ● Horista - Atributos e métodos comuns a funcionários horistas ○ Todo Horista é um funcionário ○ Recebe apenas por hora trabalhada ● Assalariado - Atributos e métodos comuns a funcionários assalariados ○ Todo Assalariado é um funcionário ○ Recebe salário fixo; ○ Recebe Hora Extra => Valor da hora deve ser 50% a mais;
Compartilhar