Você está na página 1de 18

Captulo 3 - Herana

1.

HERANA: FILHO DE PEIXE, PEIXINHO ......................................................................................... 1


1.1
O QUE HERANA?..................................................................................................................................... 1
1.2
REFINANDO O CONCEITO DE HERANA ........................................................................................................ 4
1.3
ATRIBUTOS E MTODOS DA CLASSE FILHA................................................................................................... 5
Mtodos e atributos sobrepostos.......................................................................................................................... 8
Novos mtodos e atributos ................................................................................................................................... 9
Mtodos e atributos recursivos ............................................................................................................................ 9
Exemplo de mecanismo de chamada de mtodo .................................................................................................. 9
1.4
TIPOS DE HERANA...................................................................................................................................... 9
Herana para reutilizao de implementao ................................................................................................... 10
Herana para diferena ..................................................................................................................................... 10
1.5
HERANA PARA SUBSTITUIO DE TIPO .................................................................................................... 11
1.6
COMO A HERANA ATENDE OS OBJETIVOS DA ORIENTAO A OBJETOS ................................................... 13
1.7
PERGUNTAS EXERCCIOS ........................................................................................................................ 15

1. Herana: Filho de peixe, peixinho


1.1 O que Herana?
Voc j deve ter o conhecimento de que o encapsulamento, permite escrever objetos
bem definidos e independentes. Esse recurso tambm permite que um objeto use
outro objeto, atravs de mensagens. O uso de trocas de mensagens apenas uma
das maneiras pelas quais os objetos podem se relacionar na POO. A POO tambm
fornece uma segunda maneira de relacionamento entre os objetos: herana.
A herana permite que voc baseie a definio de uma nova classe a partir de uma
classe previamente existente. Quando voc baseia uma classe em outra, a definio
da nova classe herda automaticamente todos os atributos, comportamentos e
implementaes presentes na classe previamente existente. Quando uma classe
herda outra, todos os mtodos e atributos que aparecem na interface da classe
previamente existente, aparecero automaticamente na interface da nova classe.
Actionscript
class Employee {
private var first_name:String;
private var last_name:String;
private var wage:Number;
public function Employee(first_name:String, last_name:String,
wage:Number) {
this.first_name = first_name;
this.last_name = last_name;
this.wage = wage;
}
public function getWage():Number {
return wage;
}
public function getFirstName():String {
return first_name;
}
public function getLastName():String {
return last_name;
}
}

Java
public class Employee {
private String first_name;
private String last_name;
private double wage;
public Employee( String first_name, String last_name, double wage ) {
this.first_name = first_name;
this.last_name = last_name;
this.wage = wage;
}
public double getWage() {
return wage;
}
public String getFirstName() {
Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 1

return first_name;

public String getLastName() {


return last_name;
}

Instncias de uma classe como Employee podem aparecer em um aplicativo de banco


de dados de folha de pagamento. Agora, suponha que voc precisasse modelar um
funcionrio comissionado. Um funcionrio comissionado tem um salrio-base, mais
uma pequena comisso por venda. Alm desse requisito simples, a classe
CommissionedEmployee exatamente igual classe Employee. Afinal, um objeto
CommissionedEmployee um Employee.
Usando-se o encapsulamento direto, existem duas maneiras de escrever a nova
classe CommissionedEmployee. Voc poderia simplesmente repetir o cdigo
encontrado em Employee e adicionar o cdigo necessrio para controlar comisses e
calcular o pagamento. Entretanto, se voc fizer isso, ter de manter duas bases de
cdigo separadas, mas semelhantes. Se voc precisar corrigir um erro, ter de fazlo em cada lugar. Dessa forma, simplesmente copiar e colar o cdigo no uma boa
opo. Voc precisar tentar outra coisa. Voc poderia ter uma varivel employee
dentro da classe CommissionedEmployee e delegar todas as mensagens, como
getWage() e getFirstName(), instncia de Employee.
Delegao o processo de um objeto passar uma mensagem para outro objeto, para
atender algum pedido.
Entretanto, a delegao ainda o obriga a redefinir todos os mtodos encontrados na
interface de Employee para passar todas as mensagens. Assim, nenhuma dessas
duas opes parece satisfatria.
Vamos ver como a herana pode corrigir esse problema:
Actionscript
class CommissionedEmployee extends Employee {
private var commission:Number;
private var units:Number = 0;
public function CommissionedEmployee(first_name:String,
wage:Number, commission:Number) {
super(first_name, last_name, wage);
this.commission = commission;
}

last_name:String,

public function calculatePay():Number {


return getWage()+(commission*units);
}
public function addSales(units:Number) {
this.units = this.units+units;
}
public function resetSales() {
units = 0;
}
}

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 2

Java
public class CommissionedEmployee extends Employee {
private double commission;
private int
units;
public CommissionedEmployee( String first_name, String last_name,
double wage, double commission )
{
super( first_name, last_name, wage );
this.commission
= commission;
}
public double calculatePay() {
return getWage() + ( commission * units );
}
public void addSales( int units ) {
this.units = this.units + units;
}

public void resetSales() {


units = 0;
}

Dessa forma, CommissionedEmployee baseia sua definio na classe Employee j


existente. Como CommissionedEmployee herda de Employee, getLastName(),
getWage(), first_name, last_name e wage se tornaro todos parte de sua definio.
Embora as variveis internas privadas (private) de Employee no podem ser vistas
pelas suas filhas.
Como a interface pblica de Employee torna-se parte da interface pblica de
CommissionedEmployee, voc pode enviar para CommissionedEmployee qualquer
mensagem que poderia enviar para Employee. Considere o cdigo executor a seguir.
Crie um novo documento Flash na mesma pasta onde se encontra as classes e insira
o cdigo no primeiro frame.
Actionscript
var c = new CommissionedEmployee("Mr.", "Sales", 5.50, 1.00);
c.addSales(5);
Imprime("First Name: "+c.getFirstName());
Imprime("Last Name: "+c.getLastName());
Imprime("Base Pay: $"+c.getWage());
Imprime("Total Pay: $"+c.calculatePay());
function Imprime(str:String) {
trace(str);
}

Java
public class EmployeeExample {
public static void main( String [] args ) {
CommissionedEmployee c = new
CommissionedEmployee("Mr.","Sales",5.50,1.00);
c.addSales(5);
Print( "First Name: " + c.getFirstName() );
Print( "Last Name: " + c.getLastName() );

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 3

Print( "Base Pay: $" + c.getWage() );


Print( "Total Pay: $" + c.calculatePay() );

}
public static void Print(String str)
{
Print(str);
}

A execuo do cdigo acima levaria a esse resultado.

1.2 Refinando o conceito de herana


Herana um mecanismo que permite estabelecer relacionamentos um entre
classes. Esse relacionamento tambm permite que uma subclasse herde os atributos
e comportamentos de sua classe base.
Quando uma classe filha herda uma classe progenitora, a filha obter todos os
atributos e comportamentos que a progenitora possa ter herdado de outra classe.
A classe filha sempre pode ter mais funcionalidades do que a classe me. Mas no o
contrrio.
Se voc verificar que uma filha precisa remover alguma funcionalidade, isso ser uma
indicao de que ela deve aparecer antes da progenitora na hierarquia de herana.
Uma classe pode ter
apenas
uma
progenitora.
Assim
como ns s podemos
ter uma me. Porm,
existem
linguagens
que
permitem
a
herana mltipla, no
o caso do Flash.

Conta Bancria Comum

Poupana

Conta Especial

Conta com cheque

Poupana premiada
Conta com cheque especial
Interface

uma
assinatura
de
mtodos.
Algumas
linguagens permitem uma progenitora e mltiplas interfaces voc obrigado a
implementar os mtodos, mas no herda suas funcionalidades.

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 4

1.3 Atributos e mtodos da classe filha


Quando uma classe herda outra, ela herda a implementao, o comportamento e os
atributos. Isso significa que todos os mtodos e atributos disponveis na interface da
progenitora aparecero na interface da filha. Uma classe construda atravs de
herana pode ter os seguintes tipos importantes de mtodos e atributos:
1. Sobreposto
A nova classe herda o mtodo da progenitora, mas fornece uma nova
definio.
2. Novo
A nova classe adiciona um mtodo ou atributo completamente novo.
3. Recursivo
A nova classe simplesmente herda um mtodo ou atributo da progenitora.
Vamos considerar um exemplo. Em seguida, exploraremos cada tipo de mtodo e
atributo.
As duas prximas classes a serem mostradas usam o princpio bsico para criao de
formas 2D e 3D, os mtodos no esto implementados, porm, a partir desse ponto
podemos ter uma idia de como criar objetos 3D no flash com actionscript, objetos
que so criados dinamicamente por frmulas matemticas pr-definidas em classes.
Actionscript
class TwoDimensionalPoint
{
private var x_coord:Number;
private var y_coord:Number;
public function TwoDimensionalPoint( x:Number, y:Number )
{
setXCoordinate( x );
setYCoordinate( y );
}
public function getXCoordinate():Number
{
return x_coord;
}
public function setXCoordinate( x:Number )
{
x_coord = x;
}
public function getYCoordinate():Number
{
return y_coord;
}
public function setYCoordinate( y:Number )
{
y_coord = y;
}

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 5

public function toString() :String


{
return "I am a 2 dimensional point.\n" +
"My x coordinate is: " + getXCoordinate() + "\n" +
"My y coordinate is: " + getYCoordinate();
}

Java
public class TwoDimensionalPoint
{
private double x_coord;
private double y_coord;
public TwoDimensionalPoint( double x, double y )
{
setXCoordinate( x );
setYCoordinate( y );
}
public double getXCoordinate()
{
return x_coord;
}
public void setXCoordinate( double x )
{
x_coord = x;
}
public double getYCoordinate()
{
return y_coord;
}
public void setYCoordinate( double y )
{
y_coord = y;
}
public String toString()
{
return "I am a 2 dimensional point.\n" +
"My x coordinate is: " + getXCoordinate() + "\n" +
"My y coordinate is: " + getYCoordinate();
}
}

Actionscript
class ThreeDimensionalPoint extends TwoDimensionalPoint {
private var z_coord:Number;
{

public function ThreeDimensionalPoint(

x:Number,

y:Number,

z:Number )

//chama o construtor da classe pai (TwoDimensionalPoint)


super( x, y );
setZCoordinate( z );

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 6

public function getZCoordinate():Number {


return z_coord;
}
public function setZCoordinate( z:Number ) {
z_coord = z;
}
public function toString():String {
return "I am a 3 dimensional point.\n" +
"My x coordinate is: " + getXCoordinate() + "\n" +
"My y coordinate is: " + getYCoordinate() + "\n" +
"My z coordinate is: " + getZCoordinate();
}
}

Java
public class ThreeDimensionalPoint extends TwoDimensionalPoint {
private double z_coord;
public ThreeDimensionalPoint( double x, double y, double z ) {
super( x, y );
setZCoordinate( z );
}
public double getZCoordinate() {
return z_coord;
}
public void setZCoordinate( double z ) {
z_coord = z;
}
public String toString() {
return "I am a 3 dimensional point.\n" +
"My x coordinate is: " + getXCoordinate() + "\n" +
"My y coordinate is: " + getYCoordinate() + "\n" +
"My z coordinate is: " + getZCoordinate();
}
}

Aqui, voc tem duas classes ponto que representam pontos geomtricos. Voc
poderia usar pontos em uma ferramenta para traar grficos, em um modelador
virtual ou em um planejador de vo. Os pontos tm muitos usos prticos.
TwoDimensionalPoint contm coordenadas x e y. A classe define mtodos para obter
e configurar os pontos, assim como para criar uma representao de String da
instncia do ponto.
ThreeDimensionalPoint herda de TwoDimensionalPoint. ThreeDimensionalPoint
acrescenta a coordenada z, assim como um mtodo para recuperar o valor e para
configurar o valor. A classe tambm fornece um mtodo para obter uma
representao de String da instncia. Como ThreeDimensionalPoint herda a classe
TwoDimensionalPoint, ela tambm tem os mtodos contidos dentro de
TwoDimensionalPoint.
Esse exemplo demonstra cada tipo de mtodo.
Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 7

Mtodos e atributos sobrepostos


A herana permite que voc pegue um mtodo ou atributo previamente existente e o
redefina. Dessa forma voc muda o comportamento do objeto para esse mtodo.
Um mtodo ou atributo sobreposto aparecer na progenitora e na filha. Por exemplo,
ThreeDimentionalPoint
redefine
o
mtodo
toString()
que
aparece
em
TwoDimensionalPoint.
TwoDimensionalPoint define um mtodo toString() que identifica a instncia como um
ponto bidimensional e imprime suas duas coordenadas.
ThreeDimentionalPoint redefine o mtodo toString() para identificar a instncia como
um ponto tridimensional e imprime suas trs coordenadas.
Considere o cdigo abaixo inserido no primeiro frame de um novo documento Flash
(FLA)
Actionscript
var two = new TwoDimensionalPoint(1,2);
var three = new ThreeDimensionalPoint(1,2,3);
trace(two.toString());
trace(three.toString());

Java
public static void main( String [] args ) {
TwoDimensionalPoint two = new TwoDimensionalPoint(1,2);
ThreeDimensionalPoint three = new ThreeDimensionalPoint(1,2,3);
Print(two.toString());
Print(three.toString());
}

A figura abaixo ilustra o que voc ver aps testar o documento Flash.

Sobrepor um mtodo tambm conhecido como redefinir um mtodo. Redefinindo


um mtodo, a filha fornece sua prpria implementao ao mtodo, fornecendo um
novo comportamento a ele. Aqui, ThreeDimensionalPoint redefine o comportamento
do mtodo toString(), para que ele seja corretamente transformado em um objeto
String.

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 8

Novos mtodos e atributos


Um novo mtodo ou atributo um mtodo ou atributo que aparece na filha, mas no
aparece na progenitora, ou seja, a classe filha acrescenta novos mtodos ou atributos
em sua interface. No exemplo da classe ThreeDimensionalPoint, so escritos dois
novos mtodos: getZCoordinate() e setZCoordinate(). Com isso, possvel adicionar
novas funcionalidades interface filha.

Mtodos e atributos recursivos


Um mtodo ou atributo recursivo definido na progenitora ou em alguma outra
ancestral, mas no na filha. Quando voc acessa o mtodo ou atributo, a mensagem
enviada para cima na hierarquia, at que uma definio do mtodo seja
encontrada.
Voc viu mtodos recursivos no cdigo-fonte de TwoDimensionalPoint e
ThreeDimensionalPoint. getXCoordinate() um exemplo de mtodo recursivo, pois
definido por TwoDimensionalPoint e no por ThreeDimensionalPoint.
Os mtodos sobrepostos tambm podem se comportar de forma recursiva. Embora
um mtodo sobreposto aparea na filha, a maioria das linguagens orientadas a
objetos fornece um mecanismo que permite a um mtodo sobreposto chamar a
verso da progenitora (ou de algum outro ancestral) do mtodo. Essa capacidade
permite que voc enfatize a verso da superclasse, enquanto define novo
comportamento na subclasse. Na linguagem actionscript e Java, a palavra-chave
super fornece acesso implementao de uma progenitora..

Exemplo de mecanismo de chamada de mtodo

A seguir temos uma ilustrao de mtodo entre os objetos ponto para uma chamada
de getXCoordinate(). Uma chamada para getXCoordinate() percorrer a hierarquia
at encontrar uma definio para o mtodo.

OneDimensionalPoint
getXCoordinate()

OneDimensionalPoint

OneDimensionalPoint

TwoDimensionalPoint

TwoDimensionalPoint
getYCoordinate()

TwoDimensionalPoint

ThreeDimensionalPoint

ThreeDimensionalPoint

ThreeDimensionalPoint
getZCoordinate()

getXCoordinate()

getYCoordinate()

getZCoordinate()

1.4 Tipos de herana


Existem trs maneiras principais de usar herana:
Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 9

1. Herana para reutilizao de implementao


2. Herana para diferena
3. Herana para substituio de tipo
Existem alguns tipos de reutilizao que so mais desejveis que outros. Vamos ver o
porqu a seguir.

Herana para reutilizao de implementao


O objetivo reutilizar cdigo, ou seja, a classe filha j nasce com as funcionalidades
de sua progenitora.
O problema aqui que voc estar preso implementao herdada.
Cuidado! Uma herana pobre o monstro de Frankenstein da programao. Quando
voc usa herana unicamente para reaproveitar cdigo, sem outras consideraes,
freqentemente pode acabar com um monstro construdo a partir de partes que no
se encaixam, pois se lembre de que a classe est presa implementao que herda.

Herana para diferena


Programao por diferena significa herdar uma classe e adicionar apenas o cdigo
que torne a nova classe diferente da classe herdada.
Exemplos
disso
so
dados
pelas
ThreeDimensionalPoint citadas anteriormente.

classes

TwoDimensionalPoint

A programao baseada em incrementos, o que leva a uma especializao.


Especializao o processo de uma classe filha ser projetada em termos de como ela
diferente de sua progenitora.
A definio de classe da filha incluir apenas os elementos que a tornam diferentes
de sua progenitora. A especializao permite apenas que voc adicione ou redefina os
comportamentos e atributos que a filha herda de sua progenitora, porm no permite
que comportamentos e atributos herdados sejam removidos da classe filha. Uma
classe no obtm herana seletiva. A especializao no uma restrio de
funcionalidade, mais sim uma restrio na categorizao de tipo.
Procure no aprofundar muito hierarquicamente. Quanto menor a complexidade de
seu projeto menor o tempo de desenvolvimento, maior e mais rpida a
compreenso dele para com os desenvolvedores, mais gil se tornar o projeto e
mais manutenvel tambm.
O cdigo tem a tendncia de se tornar menor, portanto mais gerencivel e mais
rpido de ser desenvolvido.
A seguir temos alguns termos sobre classe na hierarquia:
1. Ancestral o que antecede
2. Descendente o que precede
3. Folha no possui filhos

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 10

1.5 Herana para substituio de tipo


A substituio de tipo permite que voc descreva relacionamentos com capacidade de
substituio. O que um relacionamento com capacidade de substituio?
Considere a classe Line:
Actionscript
class Line
{
private var
private var

p1:TwoDimensionalPoint;
p2:TwoDimensionalPoint;

public function Line( p1:TwoDimensionalPoint , p2:TwoDimensionalPoint )


{
this.p1 = p1;
this.p2 = p2;
}
public function getEndpoint1() :TwoDimensionalPoint
{
return p1;
}
public function getEndpoint2():TwoDimensionalPoint
{
return p2;
}
public function getDistance():Number
{
var x = Math.pow( (p2.getXCoordinate() - p1.getXCoordinate()),2);
var y = Math.pow( (p2.getYCoordinate() - p1.getYCoordinate()),2);
var distance = Math.sqrt( x + y );
return distance;
}
public function getMidpoint():TwoDimensionalPoint
{
var new_x = ( p1.getXCoordinate() + p2.getXCoordinate() )/2;
var new_y = ( p1.getYCoordinate() + p2.getYCoordinate() )/2;
return new TwoDimensionalPoint( new_x, new_y );
}
}

Java

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 11

public class Line


{
private TwoDimensionalPoint p1;
private TwoDimensionalPoint p2;
public Line( TwoDimensionalPoint p1, TwoDimensionalPoint p2 )
{
this.p1 = p1;
this.p2 = p2;
}
public TwoDimensionalPoint getEndpoint1()
{
return p1;
}
public TwoDimensionalPoint getEndpoint2()
{
return p2;
}
public double getDistance()
{
double x = Math.pow( (p2.getXCoordinate() - p1.getXCoordinate()),2);
double y = Math.pow( (p2.getYCoordinate() - p1.getYCoordinate()),2);
double distance = Math.sqrt( x + y );
return distance;
}
public TwoDimensionalPoint getMidpoint()
{
double new_x = ( p1.getXCoordinate() + p2.getXCoordinate() )/2;
double new_y = ( p1.getYCoordinate() + p2.getYCoordinate() )/2;
return new TwoDimensionalPoint( new_x, new_y );
}
}

Line recebe dois objetos TwoDimensionalPoint como argumentos e fornece alguns


mtodos para recuperar os valores, um mtodo para calcular a distncia entre os
pontos e um mtodo para calcular o ponto mdio.
Um relacionamento que tenha a capacidade de substituio permite que sejam
passados para o construtor de Line quaisquer objetos que herdem a classe
TwoDimensionalPoint. Lembre-se de que, quando uma filha herda sua progenitora,
voc diz que a filha uma progenitora. Assim como um objeto
ThreeDimensionalPoint um objeto TwoDimensionalPoint, voc pode passar um
objeto ThreeDimensionalPoint para o construtor.
Considere o cdigo abaixo digitado no primeiro frame de um novo documento Flash
que se encontra na mesma pasta das classes (FLA)
Actionscript
var p1 = new ThreeDimensionalPoint(12, 12, 2);
var p2 = new TwoDimensionalPoint(16, 16);
var l = new Line(p1, p2);
var mid = l.getMidpoint();
trace("Midpoint: ("+mid.getXCoordinate()+","+mid.getYCoordinate()+")");
trace("Distance: "+l.getDistance());

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 12

Java
public static void main( String [] args ) {
ThreeDimensionalPoint p1 = new ThreeDimensionalPoint( 12, 12, 2 );
TwoDimensionalPoint p2
= new TwoDimensionalPoint( 16, 16 );
Line l = new Line( p1, p2 );
TwoDimensionalPoint mid = l.getMidpoint();
System.out.println( "Midpoint: (" +
mid.getXCoordinate() + "," + mid.getYCoordinate() + ")" );
System.out.println( "Distance: " + l.getDistance() );
}

Voc notar que o mtodo principal passa um objeto TwoDimensionalPoint e um


objeto ThreeDimensionalPoint para o construtor de Line. A figura abaixo ilustra o que
aparecer ao testar o documento Flash.

Capacidade de conexo um conceito poderoso. Como voc pode enviar a uma filha
qualquer mensagem que pode ser enviada para sua progenitora, possvel trat-la
como se ela pudesse ser substituda pela progenitora. Esse o motivo pelo qual voc
no deve remover comportamentos ao criar uma filha. Se voc fizer isso, a
capacidade de conexo ser invalidada.
Um subtipo um tipo que estende outro tipo atravs de herana.
A capacidade de substituio importante, pois ela permite que voc escreva cdigo
genrico. Em vez de ter vrias instrues case ou testes if/else para ver que tipo
de ponto o programa estava usando, voc simplesmente programa seus objetos para
tratar com objetos do tipo TwoDimensionalPoint.

1.6 Como a herana atende os objetivos da Orientao a


Objetos
A herana preenche cada um dos objetivos da POO. Ela ajuda a produzir software que
:
1. Natural
2. Confivel
3. Reutilizvel
4. Manutenvel
5. Extensvel

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 13

6. Oportuno
Ela atinge esses objetivos, como segue:

Natural
A herana permite que voc modele o mundo mais naturalmente. Atravs da
herana, voc pode formar hierarquias de relacionamento complexas entre
suas classes. Como seres humanos, nossa tendncia natural querer
categorizar e agrupar os objetos que esto em torno de ns. A herana
permite que voc traga essas tendncias para a programao.
A herana tambm abrange o desejo do programador de evitar trabalho
repetitivo.

Confivel
A herana simplifica o cdigo. Quando voc programa pela diferena, voc
adiciona apenas o cdigo que descreve a diferena entre a progenitora e a
filha. Como resultado, cada classe pode ter cdigo menor. Cada classe pode
ser especializada no que faz. Menos cdigo significa menos erros.
A herana permite a reutilizao de cdigo bem testado e comprovado, como
a base de suas novas classes. A reutilizao de cdigo comprovado sempre
mais desejvel do que escrever novo cdigo.
Finalmente, o mecanismo de herana em si confivel. O mecanismo
incorporado linguagem, de modo que voc no precisa construir seu prprio
mecanismo de herana e certificar-se de que todo mundo segue suas regras.

Reutilizvel
A base da herana a reutilizao, onde voc pode reaproveitar classes
antigas para construir novas classes.
A herana permite tambm que voc reutilize classes de maneira nunca
imaginada pela pessoa que escreveu a classe. Sobrepondo e programando
pela diferena, voc pode alterar o comportamento de classes existentes e
us-las de novas maneiras.

Manutenvel
A reutilizao de cdigo testado significa que voc ter menos erros em seu
novo cdigo. E quando voc encontrar um erro em uma classe, todas as
subclasses tiraro proveito da correo.
Em vez de se aprofundar no cdigo e adicionar recursos diretamente, a
herana permite que voc pegue cdigo previamente existente e o trate como
a base da construo de uma nova classe. Todos os mtodos, atributos e
informaes de tipo se tornam parte de sua nova classe. Ao contrrio do
recorte e colagem, existe apenas uma cpia do cdigo original para manter.
Isso ajuda na manuteno, diminuindo a quantidade de cdigo que voc
precisa manter.
Se voc fosse fazer alteraes diretamente no cdigo existente, poderia
danificar a classe base e afetar partes do sistema que usem essa classe.

Extensvel
A herana torna a extenso ou especializao de classe possvel. Uma classe
antiga pode ter novas funcionalidades a qualquer momento, apenas pela

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 14

adio de novos mtodos. A programao pela diferena e a herana para


capacidade de conexo estimulam a extenso de classes.

Oportuno
Voc j viu como a reutilizao simples pode diminuir o tempo de
desenvolvimento. Programar pela diferena significa que existe menos cdigo
para escrever; portanto, voc deve terminar mais rapidamente. Capacidade de
substituio significa que voc pode adicionar novos recursos, sem ter de
alterar muito o cdigo j existente.
A herana tambm pode tornar os testes mais fceis, pois necessrio apenas
testar a nova funcionalidade e qualquer interao com a funcionalidade antiga.

1.7 Perguntas Exerccios


1) Quais so algumas das limitaes da reutilizao simples?
2) O que herana?
3) Quais so as trs formas de herana?
4) Por que a herana de implementao perigosa?
5) O que programao pela diferena?
6) Ao herdar uma classe, pode-se ter trs tipos de mtodos e atributos. Quais
so esses trs tipos de atributos e mtodos?
7) Quais vantagens a programao pela diferena oferece?
8) Considere a hierarquia abaixo:

Permission

AllPermission

BasicPermission

UnresolvedPermission

SecurityPermission

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 15

a. Se voc voltar sua ateno para a classe Permission, quais classes so


suas filhas? Quais so descendentes?
b. Considerando a hierarquia inteira, qual classe a classe raiz? Quais
classes so classes folhas?
c. Permission uma ancestral de SecurityPermission?
9) O que herana para substituio de tipo?

Ao terminar de responder as questes acima, envie-as em um


arquivo texto ao seu tutor.

Unidade 6B: Flash utilizando Orientao a Objetos e a linguagem XML.

Pgina 16

Você também pode gostar