Sie sind auf Seite 1von 59

Herana

Tiago Eugenio de Melo tiago@comunidadesol.org

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

tipo fundamental ou tipo composto

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

{Motor, Som, Pneu, Chassi}

Composio

Exemplo de composio em Java

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

A classe Aviao tem o seu construtor.

Herana em Java

Construtores em subclasses.

A subclasse AviaoRadar tem o seu prprio construtor.

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

A palavra-chave super permite acessar a superclasse atravs de duas formas:


Um objeto implcito que representa a prpria superclasse. Um mtodo que representa uma chamada aos construtores da superclasse.

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

A linha 15 do Programa 4.9 desnecessria.

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

Herana entre Interfaces

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.

Herana entre Interfaces

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

A palavra-chave final possui basicamente trs tipos de utilizao na linguagem Java:


1.Criao de atributos constantes em classes, de forma que ao ser declarado como final, o atributo tem de receber um valor no ato da declarao, que no vai poder ser modificado ao longo do programa (esta a forma que a linguagem permite definir constantes). 2.Marcao de mtodos de tal forma que eles que no possam ser sobrescritos em subclasses, ou seja, o comportamento do mtodo permanece o mesmo em qualquer subclasse derivada da classe que o definiu.

Evitando a Herana

A palavra-chave final possui basicamente trs tipos de utilizao na linguagem Java:


3.Marcao de classes para que as mesmas no possam servir como base de uma herana. Isso significa que uma classe final no pode ser superclasse de nenhuma outra.

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.

Composio versus Herana

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.

Composio versus Herana

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.

Composio versus Herana

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.

Composio versus Herana

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.

Composio versus Herana

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

Das könnte Ihnen auch gefallen