Вы находитесь на странице: 1из 13

Herana e Polimorfismo

1
Curso Tcnico em Informtica
Instituto Federal do Maranho IFMA
Cesrio Jorge Fahd Jnior - jorgefahd @ gmail .com
Rmulo Costa Silva - romulocs@live.com
RESUMO:Pesquisa explicativa sobre o conceito e utilizao da herana e polimorfismo na programao
orientada a objetos. Apresentando por meio de definies, explicaes em cdigos na linguagem Java e
diagramas de Classes. Conclui que esses dois tipos de fundamentos da POO de extrema importncia e
que deve ser analisado dependendo do tipo de projeto a qual sujeito.
PALAVRAS-CHAVE: Orientao a Objetos. Polimorfismo. Herana.
SUMMARY: Explanatory Research on the concept and use of inheritance and polymorphism in object-
oriented programming. Presenting through definitions, explanations in code in the Java language and class
diagrams. Concludes that these two types of fundamentals of OOP is of utmost importance and should be
considered depending on the type of project which is subject.
KEYWORDS: Object Orientation. Polymorphism. Heritage.
1. INTRODUO
Herana um dos principais fundamentos em POO (Programao Orientada a Objeto), que
segundo Guedes (2011, p. 48)
Junto com o polimorfismo, a herana uma das caracteristicas mais poderosas e
importantes da orientao a objetos. Isso devido ao fato de a herana permitir o
reaproveitamento de atributos de mtodos, otimizando o tempo de desenvolvimento,
alm de permitir a diminuio de linhas de cdigo, bem como facilitar futuras
manutenes.
De fato a herana nem sempre nos traz benefcios, alguns desses e outros aspectos ser visto a
seguir.
No polimorfismo, veremos que ele tambm importante na Orientao a objetos, permitindo que
referncias de tipos de classes mais abstratas representem o comportamento das classes concretas
1 Trabalho produzido para a disciplina de Orientao a Objetos, ministrada pelo professor Msc. Gesiel
Rios Lopes.
que referenciam, permitindo que os mesmos atributos e objetos possam ser utilizados em objetos
distintos, porm, com implementaes lgicas diferentes.
2. HERANA
2.1. Conceito
Segundo Medeiros (2004) Herana a possibilidade de uma classe utilizar os atributos e
mtodos de uma outra como se fossem seus. A herana pode acontecer entre classes que tenham
afinidade (o mais comum), por exemplo: Classe Pai e Classe Filho.
J para Deitel (2004), herana o recurso utilizado para criar uma nova classe a partir de uma
classe existente, a nova classe herda os atributos e comportamento dessa classe existente.
Resumidamente, a herana permite que superclasses compartilhe seus atributos, mtodos e outros
membros da classe entre suas subclasses.
Figura 2.1 - Superclasse e Subclasse
A superclasse ou classe pai, representa o conceito mais geral, que ir ser posteriormente
especializado. J as subclasses so as classes que herdam todos os comportamentos e mtodos da
classe base (superclasse), sendo tambm chamadas de classes derivadas.
Figura 2.1.1 - Conceito de Herana
Na figura acima, a classe Pessoa o conceito mais geral, as classes Homem e Mulher o
conceito mais especfico.
2.2. A palavra reservada Extends
Na linguagem Java , para fazermos uma classe herdar as caractersticas de uma outra, usamos a
palavra reservada extends logo aps a definio do nome da classe. Isso significa que a classe
dever extender a funcionalidade de outra classe. Dessa forma:
class Gato extends Animal {
//corpo
}
class Cachorro extends Animal {
//corpo
}
Onde a classe Gato e Cachorro herda caractersticas da classe pai Animal j que satisfaz o teste
-UM. Gato UM Animal e Cachorro UM Animal.
2.3. Tipos de Herana
2.3.1. Herana Simples
Nesse tipo de herana a classe pode ter apenas uma superclasse, embora uma superclasse possa
ter vrias subclasses, ou seja, uma classe pode ter vrias filhas, mas pode ter apenas uma me, a
chamada herana simples.
Figura 2.2.1 - herana simples
Figura 2.3 - herana simples
Na Figura 2.3.1, pode-se observar que as subclasses cachorro, Gato e Tigre herdam de uma nica
superclasse, a classe Animal.
Em Java ficaria:
class Animal {
String tipoDeComida, nome, altura;

public void comer(){
}
public void dormir(){
}
public void fazerBarulho(){
}
}
class Gato extends Animal{
public void comer(){
//Gatos comem coisas diferentes.
}
public void fazerBarulho(){
//Gatos miam
}
}
class Cachorro extends Animal{
public void comer(){
//cachorros comem coisas diferentes.
}
public void fazerBarulho(){
//Cachorros latem
}
}
class Tigre extends Animal{
public void comer(){
//Tigre comem coisas diferentes.
}
public void fazerBarulho(){
//Tigre rosna
}
}
Mas por que o mtodos comer() e fazerBarulho() se repetem se a superclasse Animal j os tem?
A resposta simples, todos os animais comem e fazem barulho, at aqui ok, mas nem todos os
animais comem e fazem barulho da mesma maneira. Cada animal tem seu prprio tipo especfico
de comer e de fazer barulho, um cachorro no pode miar assim como um gato no pode latir,
portanto, necessrio especificarmos esse mtodos sobrepondo-os em cada subclasse para cada
tipo especfico de animal de acordo com suas necessidades.
2.3.2. Herana Mltipla
a capacidade de uma classe herdar de duas ou mais classes, por exemplo a classe rdio-relgio
herdar da classe radio e da classe relgio. (CESTA, Andr, 1996).
Diferente do C++, no Java uma subclasse no pode herdar de duas ou mais classes, ou seja, no
pode ter um filho proveniente de dois pais, portanto s possvel o tipo de herana simples, mas
permite que uma classe implemente vrias interfaces. Basicamente, seria representada da seguinte
forma:
Figura 2.2.2 - Herana Mltipla
Aqui, a classe PenDrive est representando a herana mltipla, pois est herdando caractersticas
de duas (super)classes, Entrada e Sada, que, por sua vez, herda da superclasse Dispositivos.
2.4. Quando usar herana?
fcil confundir quando se deve utilizar a herana, a forma mais simples de se saber utilizando
o termo " um". Usando o diagrama da Figura 2.1.1 possvel observar como empregamos o
termo " um", onde se nota que Homem " uma" Pessoa, com isso possvel ter uma ideia bsica
de quando utilizar a herana.
Se a relao entre as classes for do tipo "tem um" no adequado usar a herana, pois elas podem
herdar propriedades e mtodos inadequados. Nesse caso mais vivel utilizar a composio que
se torna muito mais vantajoso para o projeto tornando mais simples e reutilizvel, j que a
composio permite mudar a associao entre classes durante a execuo e os objetos podem
assumir mais de um comportamento.
2.5. Problemas da Herana
Alguns problemas encontramos na herana:
-Fraco encapsulamento entre classes e subclasses.
-A mudana em uma superclasse pode afetar todas as subclasses.
-A herana um relacionamento esttico que no muda com tempo. s vezes um objeto precisa
ser de uma classe diferente em momentos diferentes.
-O forte acoplamento entre elas onde ao mudar uma superclasse pode afetar todas as subclasses
alm de violar o princpio bsico de projeto OO em que devemos ter sempre um baixo
acoplamento entre as classes. Esse problema pode ser resolvido com a ajuda de Interfaces.
Alm disso, algumas vezes um objeto precisa ser de uma classe diferente em momentos
diferentes o que no possvel com a herana, pois o cdigo no pode sofrer alteraes
facilmente em tempo de execuo, portanto tem-se que a herana um relacionamento esttico.
2.6. Benefcios da Herana
O benefcio que o programador tem com a herana da eliminao do cdigo duplicado,
generalizando o comportamento comum a um grupo de classe e inserindo esse cdigo em uma
superclasse.
Abaixo veremos como a utilizao da herana importante para evitar a duplicao de linhas de
cdigo.
Cdigo sem o uso da Herana
class Animal {
String altura;
String habitat;

public void fazerBarulho(){
}
}
class Gato{
String altura; //Repetio de cdigo...
String habitat;

public void fazerBarulho(){
}
public void assistirAula(){
}
}
Cdigo com uso da herana
class Animal {
String nome;
String endereco;

public void fazerBarulho(){
}
}
class Gato extends Animal{
public void fazerBarulho(){
}
}
class Tigre extends Animal{

public void fazerBarulho(){
class Tigre{
String nome; //Repetio de cdigo...
String habitat;

public void fazerBarulho(){
}
}
}
}
Como se pode ver a herana eliminou o cdigo duplicado graas superclasse, que passou para
suas filhas toda informao necessria (no quer dizer suficiente) para a classe filha funcionar.
Assim, quando uma alterao for feita na classe Pai, ela repercutir instantaneamente em todas as
classes que herdarem esse comportamento, sem ser necessrio mexer as subclasses.
3. POLIMORFISMO
3.1. Conceito
Polimorfismo conhecido como o terceiro pilar da programao orientada a objeto, aps o
encapsulamento e herana.
De forma genrica, polimorfismo significa "vrias formas". Numa linguagem de programao,
isso significa que pode haver vrias formas de fazer uma "certa coisa". Essa certa coisa so as
chamadas de mtodos. Portanto, em Java, o polimorfismo se manifesta apenas em chamadas de
mtodos.
Logo, Polimorfismo significa que uma chamada de mtodo pode ser executada de vrias formas
(ou polimorficamente). Quem decide "a forma" o objeto que recebe a chamada.
3.2. Como usar polimorfismo
Para ver como o polimorfismo funciona vamos examinar como normalmente declaramos uma
referncia e criamos um objeto.
As etapas da declarao e atribuio de objetos so:
1- Declarar uma variavel de referncia.
Cachorro meuCachorro = new Cachorro();
2-Criar um objeto.
Cachorro meuCachorro = new Cachorro();
3- Vincular o objeto e a referncia.
Cachorro meuCachorro = new Cachorro();
O importante que o tipo da referncia e o tipo do objeto sejam iguais.
nesse exemplo, os dois tipos so iguais,
Cachorro meuCachorro = new Cachorro();
Mas com o polimorfismo, a referncia e o objeto podem ser diferentes
Animal meuCachorro = new Cachorro();
Podemos ver acima que o tipo de variavel de referencia foi declarado como Animal, mas o objeto
foi declarado como novo objeto Cachorro().
Quando se declara uma varivel de referencia, qualquer objeto que passar pelo teste -UM
quanto ao tipo declarado para ela poder ser atribudo a essa referncia. Ou seja, qualquer coisa
que estender o tipo declarado para a a varivel de referncia poder ser atribuda a ela.
Exemplo de polimorfismo:
Animal [] animal = new Anima[5];
animal [0] = new Gato(); //pode inserir qualquer subclasse de Animal
animal [1] = new Cachorro();
...
Assim como em - String texto = ol; - o ol uma string, Gato e Cachorro tambm um
Animal, por isso podemos fazer esse tipo de referncia.
Com o polimorfismo, voc pode escrever um cdigo que no tenha que ser alterado quando
novos tipos de subclasse forem introduzidos no programa.
3.3. Exemplos
public abstract class Animal {
String nome; // todo animal tem nome
int idade;
public void fazerBarulho(){
System.out.println("Barulho");
}
}
public class Gato extends Animal{
//Mtodo sobreposto, comportamento diferente
public void fazerBarulho(){
System.out.println("Miauuuu");
}
}
public class Cachorro extends Animal{
//Mtodo sobreposto
public void fazerBarulho(){
System.out.println("Auauauauauauaau");
}
}
ublic class TesataAnimalPolimorfico {
//Faz barulho de acordo com o animal passado
public static void barulho(Animal animal){
animal.fazerBarulho(); // qualquer animal
}
// sem o polimorfismo seria
public static void barulhoSemPolimorfismo(String animal){
if (animal.equals("Gato")){
System.out.println("Miau");
}else if (animal.equals("Cachorro")){
System.out.println("Auau");
}
}
public static void main(String[] args) {
/** Polimorfismo **/
Animal gato = new Gato(); //aqui a variavel de referencia foi declada como animal
Animal cachorro = new Cachorro(); // -um
cachorro.fazerBarulho();
gato.fazerBarulho();
barulho(gato);
barulho(cachorro);
barulhoSemPolimorfismo("Gato");
}
}
4. CONCLUSO
Vimos que a na Orientao a Objetos, dois dos principais pilares da POO so realmente
essenciais para que se possa resolver problemas com duplicao de cdigo e manuteno. A
herana por sua vez, com as classes pais e filhos ajuda na hora de implementar o cdigo sem que
ele fique repetido, estendendo a classe principal. Por outro lado o Polimorfismo tambm um
poderosa funcionalidade na OO, sendo possvel que um determinado objeto possa ter fomas
diferentes, diminuindo a complexibilidade da cdigo.
BIBLIOGRAFIA
BATES, Bert; SIERRA, Kathy. Use a cabea! Java. Rio de Janeiro: ALTA BOOKS, 2 ed.
2010.
CAMARGO, Wellington Balbo De. Conceitos e Exemplos Herana: Programao
Orientada a Objetos Parte 1. Disponvel em:<http://www.devmedia.com.br/conceitos-e-
exemplos-heranca-programacao-orientada-a-objetos-parte-1/18579>. Acesso em: 10 ago. 2014.
CHEMIN, Beatriz Francisca. Guia Prtico da UNIVATES para trabalhos acadmicos.
Lajeado: UNIVATES, 2005.
DEITEL, H. M.; DEITEL, P. J. Java - Como Programar. 8 Ed. 2010.

DISPOSITIVOS de Entrada e Sada do Computador. Disponvel em:
<http://www.brcomputador.com/2013/02/dispositivos-de-entrada-e-saida-do.html>. Acesso em: 9
ago. 2014.
GUEDES, Gilleanes T.A. UML 2: Uma abordagem prtica. So Paulo: Novatec, 2. ed. 2011,
p. 479.

GEOVANE, Hudson. Entendendo e Aplicando Herana em Java. Disponvel em:
<http://www.devmedia.com.br/entendendo-e-aplicando-heranca-em-java/24544>. Acesso em: 11
ago. 2014.

___________.HERANA. Disponvel em:
<http://cae.ucb.br/conteudo/programar/labor2/new_heranca.html>. Acesso em: 10 ago. 2014.

__________.HERANA em Java - o que , para que serve, exemplos e quando usar.
Disponvel em: <http://www.javaprogressivo.net/2012/10/Heranca-em-Javao-que-e--para-que-
serve-exemplos--quando-usar.html>. Acesso em: 10 ago. 2014.

__________.HERANA, reescrita e polimorfismo. Disponvel em:
<https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-
polimorfismo/>. Acesso em: 10 ago. 2014.

LEITE, M. et al. Programao Orientada ao Objeto: uma abordagem didtica. Disponvel
em: <http://www.ccuec.unicamp.br/revista/infotec/artigos/leite_rahal.html>. Acesso em: 11 ago.
2014.
MEDEIROS, Ernani. Desenvolvendo Software com UML 2.0. Editora Markon Books, 2004.

MEDEIROS, H. Herana versus Composio: qual utilizar. Disponvel em:
<http://www.devmedia.com.br/heranca-versus-composicao-qual-utilizar/26145>. Acesso em: 10
ago. 2014.
PAWLAN, Monica .Essentials of the Java Programming Language: A Hands-on
Guide.Paperback, 2000.
QUANDO usar a herana. Disponvel em: <http://msdn.microsoft.com/pt-br/library/27db6csx
%28v=vs.90%29.aspx>. Acesso em: 11 ago. 2014.

SAUV, Jacques Philippe. Padro Bsico de Projeto: Herana versus Composio.
Disponvel em:
<http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/pat/herancavscomposicao.htm>. Acesso
em: 11 ago. 2014.

XAVIER, D. W. Herana. Disponvel em:
<http://www.tiexpert.net/programacao/java/heranca.php>. Acesso em: 9 ago. 2014.

Вам также может понравиться