Beruflich Dokumente
Kultur Dokumente
Herana
Conceito:
Herana a capacidade de especializar tipos de objetos (classes), de forma que os tipos especializados contenham, alm de caractersticas estruturais e comportamentais j definidas pelos seus ancestrais, outras definidas para eles prprios.
Forma:
tipo especializado
um tipo de
tipo ancestral
Herana
A especializao pode ser feita tanto a partir de classes j construdas pelo prprio programador, como por classes de terceiros ou classes-padro da linguagem Java.
Composio
Conceito:
a tcnica de construir um tipo no pela derivao partindo de outra classe, mas pela juno de vrios outros objetos de menor complexidade que fornecem ao objeto composto determinada funcionalidade quando em conjunto.
Forma:
tipo composto
formado por
Composio
No h nenhuma palavra-chave ou recurso especial para utilizar composio em Java, visto que esta tcnica nada mais do que um modo particular, para cada situao, de agrupar classes existentes de forma a criar novas classes com novas funcionalidades em determinado arranjo.
Composio
Exemplo de composio
Carro
composto por
Composio
Herana em Java
Em Java, a palavra-chave utilizada para criar uma subclasse extends. A sintaxe para uso de extends a seguinte:
Herana em Java
Uma caracterstica da linguagem Java que qualquer objeto que no herde explicitamente de outra classe, automaticamente ser subclasse direta de java.lang.Object, que a superclasse no nvel mais alto da linguagem.
Herana em Java
Exemplo:
Herana em Java
Implementao:
Herana em Java
Palavra-chave protected
A linguagem Java permite que certos dados sejam encapsulados de forma a estarem disponveis apenas entre classes de uma mesma hierarquia, estando protegidos de acesso pblico. protected a palavra-chave que permite atribuir tal caracterstica de encapsulamento a atributos e mtodos de uma classe.
Herana em Java
Observao: Vale relembrar a semntica relacionada aos smbolos utilizados para representar o nvel de encapsulamento de um atributo ou mtodo, de acordo com a terminologia da linguagem UML[RBJ06].
Herana em Java
Exemplo:
Herana em Java
Construtores em subclasses
Herana em Java
Construtores em subclasses.
Herana em Java
Construtores em subclasses
A subclasse AviaoRadar define um construtor prprio, com o intuito de inicializar os seus prprios atributos. Quando h herana entre classes, ao se criar um objeto da classe derivada, este contm um subobjeto de sua superclasse. Isto significa que este sub-objeto equivalente a criar um objeto puro desta superclasse. AviaoRadar contm um sub-objeto de Aviao.
Herana em Java
Construtores em subclasses
A sequncia de execuo dos construtores sempre acontece no sentido top-down, ou seja, desde a superclasse, passando por todos os nveis da hierarquia, at chegar subclasse em questo, como pode ser visto na Figura 4.5.
Herana em Java
Herana em Java
Construtores parametrizados
A criao de construtores com nomes iguais, mas com diferentes argumentos, equivale sobrecarga de mtodos convencionais. Na prtica, projetar classes com construtores sobrecarregados permite ao programador inicializar objetos de diferentes formas, com diferentes parmetros e opes. Em se tratando de herana em Java, existe uma palavra-chave denominada super que permite s subclasses referenciar suas superclasses.
Herana em Java
Construtores parametrizados
Herana em Java
Construtores parametrizados
No funcionamento do mecanismo de herana com um construtor padro, os construtores da superclasse e subclasses no possuem argumentos, o compilador descobre facilmente que deve chamar implicitamente o construtor da superclasse. Por outro lado, quando h construtores parametrizados, o compilador no faz este trabalho implcito, impondo ao programador que realize uma chamada ao construtor correto atravs da palavrachave super.
Herana em Java
Herana em Java
Construtores parametrizados
Considere agora uma pequena modificao aplicada de forma que o construtor da classe ContaBancaria necessite de um parmetro na inicializao do construtor, conforme o Programa 4.10.
Herana em Java
Herana em Java
Neste caso do Programa 4.10, a chamada ao construtor da superclasse atravs da palavrachave super necessria, caso contrrio no seria possvel inicializar a subclasse da forma definida na superclasse, e haveria um erro em tempo de compilao.
Herana em Java
Sobrescrita de mtodos
Na herana de classes, existe a possibilidade de se redefinir mtodos nas subclasses, mesmo quando estes esto implementados nas superclasses. Isto se chama sobrescrita de mtodos (overriding). A utilidade se d no fato do programador poder criar um comportamento prprio a um mtodo aps sobrescrev-lo, quando o respectivo mtodo da superclasse no suficiente.
Herana em Java
Sobrescrita de mtodos
Herana em Java
Sobrescrita de mtodos
Interfaces
Java possui o recurso de definio de classes abstratas. Uma classe abstrata serve como base para uma hierarquia de classes derivadas, podendo implementar parte do cdigo comum a todas elas. Ao mesmo tempo que pode implementar parte do cdigo, uma classe abstrata no pode ser instanciada. A instanciao deve ser feita sempre em uma classe concreta derivada.
Interfaces
Java possui, alm das classes abstratas, um outro recurso relacionado denominado de interface. Uma interface um contrato onde a classe que a implementa assume uma espcie de compromisso em implementar os mtodos no formato que a interface define. Como define [HC00], uma interface uma maneira de descrever o que a classe vai fazer, ao invs de como ela faria.
Interfaces
Ao contrrio das classes abstratas, as interfaces no podem ter uma implementao prpria. Isso significa que elas no possuem atributos nem implementao de mtodos, apenas as assinaturas dos mesmos.
Interfaces
Uma caracterstica importante das interfaces que uma classe Java capaz de implementar quantas interfaces forem necessrias, enquanto que ao utilizar classes abstratas, o programador est restrito ao fato de herdar de apenas uma classe ancestral. O formato para uso de interface descrito a seguir:
Interfaces
Exemplo:
Herana Mltipla
A herana mltipla o fato de uma classe possuir mais de uma superclasse. Em outros termos, significa construir uma classe que herde as caractersticas de mais de uma classe ao mesmo tempo. Linguagens de programao como C++ permitem tal recurso, embora Java no o permita diretamente. Java permite apenas que haja herana mltipla de vrias interfaces.
Herana Mltipla
Exemplo
Herana Mltipla
Exemplo
Alm da prpria definio e uso de interfaces, Java tambm permite realizar herana entre interfaces. O conceito de herdar uma interface pode parecer estranho primeira vista, j que as interfaces no possuem implementao. Entretanto, justamente por isso, um artifcio de simples compreenso. Uma interface, ao herdar de outra, automaticamente assume os mtodos desta de forma implcita.
Exemplo
Classes Annimas
A linguagem Java permite criar determinadas classes apenas para servir a um contexto muito especfico, como argumento de um mtodo, por exemplo. Para este tipo de situao, Java oferece a opo de se criar as chamadas classes annimas. Uma classe annima, como o prprio nome diz, no tem um nome atribudo.
Classes Annimas
A classe annima criada necessariamente como subclasse de uma outra classe ou como implementao de uma interface, e tem a funo de suprir uma necessidade pontual. Um exemplo corriqueiro e bastante utilizado de classes annimas a programao com janelas visuais em Java
Classes Annimas
Exemplo
Evitando a Herana
A programao em Java envolve algumas situaes peculiares onde alm de no fazer uso de herana, o programador tambm necessita evit-la por motivos diversos, como por exemplo para garantir que determinadas caractersticas da classe base no sejam modificadas por quaisquer subclasses geradas.
Evitando a Herana
Evitando a Herana
Evitando a Herana
Exemplo
Evitando a Herana
Exemplo
Evitando a Herana
Dica:
Mesmo quando uma classe declarada como final, seus atributos continuam mutveis, a menos que declarados explicita e individualmente como finais tambm.
Existem situaes que levam o programador a ter de escolher entre projetar uma classe baseada em composio ou herana. Na maior parte das vezes, a soluo mais comum agrupar classes existentes em novas funcionalidades para criar novas classes, ou seja, utilizar composio. Em outras situaes, uma anlise levar percepo de que o uso de herana ser necessrio.
O programador deve ter em mente que a utilizao de herana no deve ser excessiva, mas que possa atingir a demanda correta que o seu projeto exige.
A utilizao de herana ou composio se perguntar se a classe a ser criada nunca necessitar de um upcast para a suposta superclasse, ou seja, se ela nunca precisar assumir o tipo da superclasse em alguma situao. Lembre-se que quando uma classe herda de outra, ela tambm daquele tipo.
O upcast justamente isso: em qualquer momento, um objeto da subclasse pode ser utilizado como se fosse um objeto da superclasse. O programador, desta forma, deve concluir que se a classe a ser criada nunca precisa assumir o referido tipo da superclasse, provavelmente esta situao ser melhor modelada se esta superclasse for apenas um atributo, caracterizando assim uma situao de uso de composio.
Dica:
Classes ou mtodos abstratos no podem ser definidos como final, j que, obrigatoriamente, so projetados para subclasses os implementarem. Isso significa que as palavras-chave abstract e final so mutuamente excludentes.
Atividades
Explique de que maneira o uso da herana promove a reutilizao de cdigo. Qual a utilidade de se definir mtodos e atributos com o modificador de acesso protected? Qual as principais diferenas entre herdar interfaces e herdar classes? Explique, com suas palavras, as principais diferenas entre composio e herana. Qual a principal diferena entre uma classe final e uma classe convencional?
Atividades
Qual a diferena entre herana simples e herana mltipla? Como Java trata a herana mltipla?
Atividades
Considere o Programa 4.20. Que mudanas seriam aplicadas classe Usuario para que a classe Administrador pudesse implementar um mtodo mostrarDados() de forma a imprimir a senha e o password ? Realize tambm a implementao de um mtodo main() para a classe Administrador que a faa a chamada ao mtodo mostrarDados().
Atividades
Atividades
No possvel compilar o cdigo o Programa 4.23. Qual a modificao que far este cdigo compilar corretamente?
Atividades