Você está na página 1de 8

es em Java e C++ Heranc a Simples e Multipla: Conceitos e Aplicac o

Carlos Akcelrud Cony o em Computac o Aplicada Programa Interdisciplinar de P os-Graduac a a Unisinos carlos.cony@terra.com.br

Abstract
Atualmente os conceitos que est ao envolvidos na Orientac a o Objetos tem sido tema de diversos estudos e an alises. Uma das principais caracter sticas da OO e o suporte ao conceito de Heranc a. A heranc a tem apresentado diversos benef cios para o desenvolvimento de softwares mais concisos, robustos e con aveis mas isto tem seu custo. J a no que diz respeito as linguagens de programac a o que d ao suporte a tal conceito, existem algumas diverg encias quanto o seu uso, estes temas ser ao abordados com mais e nfase neste artigo.

o Introduc a

ainda especializar estes membros em determinados casos. Al em do encapsulamento de dados, heranc a traz outros be` reutilizac o de software em nef cios, tais como: permite a a que novas classes s ao criadas a partir de classes pr e-existentes, absorvendo seus atributos e comportamentos adicionando novos recursos as classes antigas. o de software apresenta algumas vantagens, A reutilizac a por exemplo, economiza e facilita no desenvolvimento de o de c novos programas, incentiva a reutilizac a odigos de alta qualidade j a testados e depurados, reduzindo poss veis o software nal. problemas depois da instalac a o entre classes do tipo A heranc a dene uma relac a eum, onde uma classe compartilha a estrutura e o comportamento denidos em uma ou mais classes. A partir do reconhecimento da similaridade entre as classes denem uma hierarquia de classes, subdividida em: es Superclasses (classes bases): Representam abstrac o mais gerais e se subdividem em duas: Direta: A subclasse herda explicitamente da superclasse. herdada de dois ou mais n Indireta: E veis acima na hierarquia de classes. es Subclasses (classes derivadas) Representam abstrac o em que os atributos e os servic os espec cos s ao adicionados, modicados e/ou removidos. Para interligar as classes usa-se estruturas como: gene o e especializac o, fazendo com que os atributos e ralizac a a servic os comuns quem claros em uma hierarquia de Classes. Ent ao quando se disp oe de mecanismos de heranc a, a o de uma classe pode ser retirada de uma bibespecicac a lioteca existente e uma nova classe (Subclasse) pode ser criada a partir de uma classe pai (superclasse), atrav es do pro o. A classe lha pode especicar as suas cesso de derivac a caracter sticas que diferem da classe pai. que uma subUm problema apresentado pela heranc a e classe pode herdar m etodos (na maioria das vezes) que n ao

Neste artigo discutimos uma das tecnologias mais im o objetos suporta: Heranc portantes que a orientac a a, que al em de ser uma forma satisfat oria de aperfeic oar e orga uma t o da nizar o c odigo fonte, e ecnica ecaz na reduc a complexidade dos softwares. Al em disso, ser a apresentado um comparativo entre Heranc a Simples e Heranc a M ultipla. uma t til para ampliar a abstrac o de Heranc a e ecnica u a dados, apesar desta ser uma t ecnica efetiva para se denir nico e claro, ela pode n um conceito u ao ter o suporte devido o completa do problema. para a soluc a o recebimento, por um componente Para [1], heranc a E de programa, de propriedades ou caracter sticas de outro o escomponente de programa, de acordo com uma relac a pecicada entre os dois componentes.

Heranc a

utilizada para se representar a similaridade enHeranc a e o de tre diferentes classes, com isso se simplica a denic a Classes semelhantes a outras previamente denidas. Com poss isso e vel que membros comuns, m etodos e atributos sejam denidos somente uma vez (encapsulamento), e

necessita ou que n ao deveria os possuir, ent ao o projetista deve assegurar que os recursos fornecidos por uma classe s ao apropriados para futuras subclasses. Contudo, ent ao, a melhor id eia seria que um programador possu sse um conjunto de bibliotecas de classes (por ` sua exemplo, Java API) com c odigo j a implementado, a o, e ent teis para disposic a ao deniria quais destas seriam u o do novo software, tornando a implementac o a confecc a a mais simples. Um exemplo de heranc a pode ser observado como na gura 1 onde se tem que um: uma Pessoa Estudante e uma Pessoa. Professor e Um objeto da classe Estudante, tem os atributos e servic os de Estudante, e tamb em os atributos herdados da classe Pessoa. um estudante e tem os atributos Por exemplo, Carlos e e servic os de Pessoa, como: Nome, Enderec o, Dirigir, Viajar. Al em destes possui atributos e servic os que expressam o comportamento espec co de estudante, como: Curso, Nota, Estudar e Realizar Prova. reconhecida como uma generalizac o A classe Pessoa e a o, a qual herda e Estudante como uma classe especializac a os servic os e atributos de Pessoa. Al em disso, uma classe o) pode incluir novos servic derivada (uma especializac a os e atributos ou redenir os servic os herdados.

2.1

Subclasse por Especializa c ao

o tipo mais trivial de construc o de subclasses, e Este e a o da nova classe tem como objetivo central a especializac a tornando-a mais espec ca que a classe pai, satisfazendo em es do pai. Este todos os aspectos relevantes as especicac o a mais comum e mais utilizada. A seguir tipo de heranc a e um exemplo deste tipo de heranc a: Uma classe janela, es gerais de janela como mover, redimendisp oe de operac o sionar,... Uma subclasse especializada janela de texto es de janela e em adic o fornece ainda herda as operac o a outras facilidades que permitem, por exemplo, fazer o display de texto, editar texto,..., mas mant em as propriedades de uma janela em geral. [7]

2.2

Subclasse por Especica c ao

utilizado de maneira freq Este m etodo tamb em e uente se faz quando as classes pai e derivadas mant em um interface apresentam os mesmos m comum, isto e etodos, ou seja, a uma combinac o de operac es implementadas classe pai e a o es que s e operac o o ser ao implementadas nas classes lhos. o da interface entre a classe Muitas vezes n ao h a alterac a pai e a classe lho, o lho que implementar a o comportamento descrito, j a que este n ao implementado no pai. Nestes casos as subclasses n ao s ao renamentos dos tipos es de uma especicac o que existem, mas antes realizac o a abstrata incompleta. o podem ent Subclasses por especicac a ao ser reconhecidas quando, a superclasse n ao implementa o comporta implemenmento atual, mas descreve-o simplesmente e e tado nas subclasses.

2.3

Subclasse por Generaliza c ao

Figure 1. Classe Pessoa e Seus Herdeiros Dessa forma, Funcion ario pode incluir atributos como Sal ario e Pross ao e servic os como CalcularSal ario, que podem n ao ser relevantes ou apropriados para Pessoa em geral.

o de subclasses por generalizac o e de certa A construc a a forma o contr ario de heranc a por subclasses por especializa o. c a Neste tipo, uma subclasse estende o comportamento da muitas vezes classe pai para criar um objeto mais geral, e aplic avel quando se quer construir a partir de uma base existente que n ao se quer ou n ao se pode alterar, por exemplo, um sistema de display de gr acos em que a classe janela foi denida para fazer o display com fundo branco e preto. Quando se cria um subtipo, classe colorida, que permita que o fundo seja de outra cor que n ao branco e preto, juntase um campo adicional para guardar a cor e sobre-se ao desenhado c odigo da janela herdada em que o fundo e nessa cor. o ocorrem mais freq Subclasses por generalizac a uencia baseado em dados e coloca para 2o lugar quando o projeto e quest oes de comportamento.

2.4

Subclasses por extens ao

o modicam ou Enquanto as subclasses por generalizac a expandem as funcionalidades de um objeto, subclasses por extens ao juntam funcionalidades completamente novas. A diferenc a entre esta forma de heranc a da anterior e o fato que esta sobrep oe algum m etodo da classe pai enquanto em subclasses por extens ao, s ao agregados novos m etodos aos do pai, j a as funcionalidades s ao menos ligadas aos m etodos do pai, por exemplo, pretende-se manter os objetos de certa classe numa lista, para isto, pode-se, ent ao, construir uma subclasse em que se unem os campos o de uma lista encadeada. [7] necess arios para a construc a Com isso a funcionalidade do pai permanece intoc avel.

O nome da classe pai pode ser precedido pelas palavras chave private ou public. Se as palavras chaves n ao existirem, a classe derivada ser a por padr ao, privadamente derivada. (gura 2) Se a classe lho for declarar de maneira p publica, ent ao o que e ublico aos que usam a classe base, ser a p ublico para os utilizadores da classe lha, a n ao ser que um m etodo seja sobrecarregado na lha. J a se o lho e uma classe privada, ent ao nada do pai pode ser p ublico para os usam a classe lha.

2.5

Subclasses por Limita c ao

menor, ou cont Quando a classe lha e em mais es que a classe pai, ent restric o ao heranc a de subclasse o ocorre. Semelhantemente a subclasse por por limitac a o, a subclasse por limitac o aparece no mogeneralizac a a o da nova classe a partir de classes mento da programac a pr e-existentes e percebe-se que n ao se quer alterar ou n ao se pode, por exemplo, uma classe que traduzia uma la de espera dupla em que os elementos podiam ser juntos ou retirados de cada um dos lados da estrutura. O programador quer representar uma classe pilha, reforc ando a propriedade de que os elementos s o podem ser adicionados ou retirados de um dos lados da pilha. [7] Como resultado, surge uma subclasse que modicou ou sobrep os alguns m etodos e eliminou outros que n ao interessavam mais.

Figure 2. A classe derivada n ao pode ascender aos dados privados o da classe n da classe pai, para que a protec a ao seja que o. Pode, no entanto, ser brada s o pelo processo de derivac a especicamente autorizada para isso. Assim, existem dois processos: o de func es friend (ou a classe inteira ou Construc a o alguns m etodos). Membros declarados na parte protegida que s ao acedidos pelas classes derivadas. criado uma maneira diferente para o acesA partir disto e so, protected. Um m etodo ou atributo protegido comporta conse como um membro p ublico para a classe lha, mas e siderado privado para o resto do programa. (Figura 3) Desta es membro do lho podem ascender, por maneira as func o exemplo, a uma vari avel declarada na zona protegida da classe pai, mas os utilizadores da classe pai ou da classe lho n ao podem o fazer. Uma melhor compreens ao considere o exemplo a seguir: uma classe base designada pelo pai, deriva-se duas outras subclasses, lho1, privadamente e lho2, publicamente. o Ent ao, sempre que uma classe derivada redene uma func a membro p ublica da classe base, se pretende fazer atuar sobre um objeto da classe derivada, o m etodo da classe pai

2.6

Subclasses por Combina c ao

M etodo semelhante ao utilizado pela heranc a m ultipla, o entre duas ou mais classes, um ou seja, uma combinac a professor Assistente tem caracter sticas representativas das duas seguintes classes: Professor e Aluno. [7]

3
3.1

Heranc a Simples
Heran ca Simples em C++

o em C++ de uma classe derivada pode A declarac a fazer-se do seguinte modo: classnome da classe derivada:nome da classe pai classnome da classe derivada:privatenome da classe pai classnome da classe derivada:publicnome da classe pai

3.2

Heran ca Simples em Java

Heranc a Simples em Java se vale dos mesmos conceitos que na linguagem C++, ent ao ser a mostrado um exemplo para implementar um applet, que utiliza-se a seguinte nota o: c a public class HelloApplet extends JApplet { ...... } uma A palavra chave extends indica que HelloApplet e classe lha de JApplet. Isso signica que a classe HelloApplet herda por exemplo, os m etodos init() e start() de JApplet. Em um applet, pode-se denir novos atributos e m etodos, bem como sobrescrever os m etodos herdados de JApplet, como o init(). Um exemplo de c odigo fonte de heranc a simples em Java: Figure 3. public class Student extends Person { private String grade; private int classes; ... public Student(String n, String g) { super(n); grade = g; classes = 0; } public String toString() { return super.toString() + : + grade; } } o de uma subclasse StuA classe acima ilustra a criac a dent que herda os atributos e m etodos de Person. Uma subclasse n ao herda os construtores de sua superclasse, mas pode invoc a-los atrav es do comando super [8]. A chamada o deve ser a primeira instruc o no construtor a essa func a a da subclasse, sen ao ocorrer a erro. Caso a chamada ao construtor base n ao tivesse sido feita explicitamente em Student(String n, String g), uma chamada ao construtor default (sem argumentos) da classe base seria realizada.

mbito de que foi redenido, tem-se que usar o operador de a o. resoluc a feito o c No exemplo, abaixo, mostra-se como e odigo de heranc a simples em C++, onde a classe planos herda os m etodos p ublicos de Vetores. class Vetores { private: struct vetor v,p; public: void cria(oat,oat,oat,oat,oat,oat); void cria(vetor,vetor); void vetores (oat, oat, oat); oat escalar (vetor,vetor); vetor vetorial (vetor,vetor); oat projecao(vetor,vetor); oat modulo(vetor); vetor produto (oat,vetor); vetor subtracao (vetor,vetor); }; class Plano: public Vetores { private: vetor normal; void set pontos(oat, oat,oat); void set normal(vetor, vetor); public: void cria (vetor, vetor, vetor); void cria (oat,oat,oat,oat,oat); vetor get normal(); };

Heranc a Multipla

a capacidade de uma classe herdar de duas ou mais E ` classe r classes, por exemplo a adio-rel ogio herdar da classe r adio e da classe rel ogio. [9] Vantagens: Reuso de classes Simula o pensamento humano, por exemplo, um es um estudante e um funcion tagi ario e ario ao mesmo tempo

Desvantagens: Perda da simplicidade conceitual Diculdade em implementar o da regra de ativac o de m Denic a a etodos herdados Ambig uidade ocorre quando as superclasses possuem hom onimos e a subclasse n ao redene esses membros es, causando problemas para o comem suas declarac o pilador. (Figura 4) Conclu -se que, como regra geral, deve-se evitar o seu uso, exceto para inclus ao de diferentes interfaces independentes.

construtor da classe derivada aparecer a: [9] D :: D (int x,int y, int z, int w, int t) : B1 (z) , B2 (w,t) Caso uma classe lha declare um m etodo igual a um o da classe lha pr e-existente na classe pai, ent ao a func a o da classe pai, mesmo que tenham arguesconde a func a mentos de tipos diferentes (overriding). Um exemplo retirado de [6] de c odigo fonte de heranc a m ultipla em C++: class B1 {int atr b1;}; class B2 {int atr b2;}; class D: public B1, public B2

4.1

Heran ca M ultipla em C++

o de conceitos diferHeranc a M ultipla permite a inserc a entes, tais como, uma classe pode ser combinada com mais de uma superclasse para formar uma nova classebase, por exemplo a Figura 5. [2]

4.1.1

Heranc a Multipla Virtual em C++

quando existem dois slots de O problema da duplicidade e mem oria que est ao referenciando a mesma vari avel, ou dois o, e com caminhos diferentes para a chamada de uma func a heranc a m ultipla esse tipo de problema pode surgir [5], para resolver isto o C++ d a suporte a um recurso que se chama superclasse virtual. (Figura 6)

Figure 4. Ambiguidade em Heranc a O C++ suporta heranc a m ultipla, permitindo que uma classe seja derivada de v arias classes base. [3] o da classe derivada, ter Para tal, a denic a a a seguinte o: congurac a class nome da classe : [public] nome da classe,..., [public] nome da classe o do Ao utilizar construtores, quando se faz a declarac a construtor da classe derivada, listam-se os construtores das classes base com os valores dos argumentos, por exemplo: A classe derivada D ter a como classes base a classe B1, cujo construtor tem um argumento e B2 cujo construtor tem, por exemplo, dois argumentos. O construtor da classe D tem dois argumentos. Assim quando se dene o

Figure 5. Conceito de Heranc a Multipla o virtual soluciona o problema da amA declarac a big uidade da duplicidade de atributos, apenas eliminando o de dois enderec a criac a os de mem oria para atributos na superclasse. Um exemplo, retirado de [6], de c odigo fonte de Heranc a M ultipla Virtual: class B0 {int atrb 0; }; class B1: virtual public B0 {int atrb 1; }; class B2: virtual public B0 {int atrb 2; };

class D: virtual public B1, virtual public B2 {int atr dl};

Ent ao, Java por motivos de simplicidade, abandona a id eia de heranc a m ultipla, cedendo lugar ao uso de interfaces. Os m etodos denidos na interface s ao ocos ou de o. sprovidos de implementac a Classes podem dizer que implementam uma interface, estabelecendo um compromisso, uma esp ecie de contrato, com seus clientes no que se refere a prover uma implemen o para cada m tac a etodo da referida interface. Ao cliente, o da interface, por pode ser dada a denic a em, ele acaba n ao , mas sabe o que faz. sabendo o que a classe e Um exemplo de heranc a m ultipla em Java: public class Analyse extends Runnable{ private Words[] arrayWord; private POS[] arrayPOS; private Chunks[] arrayChunks; ... } Thread implements

Figure 6. Heranc a Multipla Virtual

4.2

Heran ca M ultipla em JAVA

Da mesma maneira que C++, Java suporta heranc a de objetos, mas n ao suporta heranc a m ultipla. Em seu lu o chamada interface. gar Java admite uma nova construc a As interfaces especicam o comportamento de um ob o. [4] Java suporta a jeto sem denir a sua implementac a heranc a m ultipla de interfaces com isso ganha-se muitos dos benef cios da heranc a m ultipla de classes sem seus inconvenientes. uma colec o de denic es de m Interface e a o etodos (sem o) e constantes. Na declarac o de uma classe implementac a a pode constar que ela implementa uma ou mais interfaces. Algumas caracter sticas das interfaces s ao: poss N ao e vel herdar vari aveis; poss o de m N ao e vel herdar implementac a etodos; independente da hierar A hierarquia de Interfaces e quia de Classes. Duas classes que implementam a mesma Interface n ao s ao necessariamente relacionadas na hierarquia de Classes. Vejamos uma utilidade das interfaces. Suponhamos que queremos fazer refer encia a um certo conjunto de classes que possuem o m etodo func(), mesmo que n ao tenham uma superclasse comum a n ao ser a classe base Object. Para isso, primeiro declaramos uma interface que especica o m etodo func(). Em seguida criamos subclasses dessas classes, que implementam essa interface. ` s classes, basta fazer Agora, para fazer refer encia a ` interface comum Uma interface e utilizada refer encia a quando n ao existe a necessidade das classes derivadas herdarem m etodos j a implementados, e s ao um conjunto de m etodos e constantes (n ao cont em atributos).

Java versus C++

Neste t opico ser ao mostradas algumas das principais o Java e C++, diferenc as entres as linguagens de programac a para isso, observe a tabela 1:

Conclus oes
Reusabilidade de c odigo. Quando comportamento e herdado de uma outra classe, o c odigo que o fornece importante, j n ao precisa ser reescrito. Isto e a que os programadores perdem seu do tempo reescrevendo c odigo. Por exemplo, para encontrar um padr ao em uma lista ou inserir um novo elemento em uma tabela. es podem ser escritas Com t ecnicas de OO, estas func o apenas uma vez e reutilizadas. Compartilhamento de c odigo. Ocorre em muitos n veis com t ecnicas OO. Uma forma se d a quando diversos programadores ou softwares podem usar as mesmas classes. Uma outra ocorre quando duas ou mais classes desenvolvidas por um programador como parte nica classe pai. Quando de um projeto herda de uma u isto acontece, dois ou mais tipos de objetos compartilhar ao o c odigo que eles herdaram. Consist encia de interface. Quando duas ou mais classes herdam da mesma classe pai, podemos estar certos de que o comportamento que elas herdaram ser a o mesmo em todas as classes. garantido que as interfaces para obLogo, e jetos semelhantes sejam, de fato, semelhantes.

C ++ o da classe Denic a o em e implementac a cheiros separados. es e m Usa func o etodos. o Caso especial: func a main(). o de objetos Construc a em modo din amico e n ao din amico. Especicador de acessibilidade: Os atributos com omiss ao de especicador s ao privados. Se uma classe n ao declara explicitamente o construtor por defeito ent ao o compilador criar a automaticamente um, exceto se j a existir mais algum construtor. Necess ario implementar construtor c opia, destrutor e fazer a sobrecarga do operador o quando de atribuic a composta a classe e por atributos do tipo apontador. Arrays de objetos: Na o de um array de criac a invocado autoobjetos, e maticamente o construtor sem par ametros para inicializar cada um dos objetos do array. Passagem de par ametros: por valor, por apontador e por vari avel refer encia. Tabela 1

Java o da classe Denic a o no e implementac a mesmo cheiro. (Estrutura de classe.) S o m etodos. O m etodo main() ter a de estar inclu do numa classe. o de objeConstruc a tos sempre em modo din amico. Os atributos com omiss ao de especi`s cador s ao acess veis a classes dentro do mesmo package. Id entico ao C++

software podem ser gerados mais facilmente e mais rapidamente. o. Um programador que re Ocultamento de informac a utiliza um componente de software necessita apenas entender a natureza do componente e sua interface. reLogo, a interconex ao entre sistemas de software e reduzida. duzida e a complexidade tamb em e o OO Embora os benef cios de heranc a em programac a sejam grandes, este mecanismo, n ao possui custo zero. Por isso, devemos considerar o custo de t ecnicas OO e, em particular, o custo de heranc a: o. Dicilmente, ferramentas Velocidade de execuc a de software de prop osito geral s ao t ao r apidas quanto aquelas desenvolvidas cuidadosamente para um prop osito espec co. Logo, m etodos herdados, que devem lidar com subclasses arbitrarias s ao frequentemente mais lentos do que c odigo especializado. Tamanho do programa. O uso de qualquer biblioteca de software em geral acarreta o aumento de tamanho do programa, o que n ao acontece com sistemas constru dos atrav es de um projeto espec co. Overhead de envio de mensagens. Muito do que tem por nasido feito do fato que envio de mensagens e o mais custosa do que chamada de tureza uma operac a procedimento. o Complexidade do programa. Embora a programac a o para a complexidade OO seja tida como uma soluc a do software, o uso demasiado de heranc a pode simplesmente substituir uma forma de complexidade por outra. Entender o uxo de controle de um programa que utiliza heranc a pode requerer v arias varreduras no grafo de heranc a. o a heranc o Em relac a a nas linguagens de programac a Java e C++, a discuss ao deve ser feita de maneira cautelosa. Enquanto o Java tem por caracter sticas a simplicidade, robustez, seguranc a e portabilidade, o C++ apresenta conceitos mais complexos, a mais tempo no mercado e, ainda, mais r na maioria dos casos e apida por n ao possuir uma m aquina virtual. o ca a Portanto, o uso da linguagem de programac a cargo do programador, e na an alise de seu problema.

preciso impleN ao e mentar qualquer um dos m etodos referidos. No entanto, o uso do m etodo clone() em Java deve ser usado sempre que se pretende c opia de um objeto. Um array de objetos e o criado com a instruc a new e cada um dos seus objetos necessita tamb em de ser criado de modo expl cito (new). Por c opia da refer encia do objeto (equivalente ` passagem por valor a de um apontador em C++/C).

Componentes de software. Heranc a permite que programadores construam componentes de software reuti es noliz aveis com o objetivo de desenvolver aplicac o o. vas que requeiram pouca ou nenhuma codicac a o r Prototipac a apida. Quando um sistema de software constru e do com base em componentes reutiliz aveis, o tempo de desenvolvimento pode ser concentrado em entender a parte nova do sistema. Logo, sistemas de

References
[1] PRATT, T. W.; ZELKOWITZ, M.V., 2001 [2] DEITEL, H.M.; DEITEL, P.J. C++: Como Programar. Bookman.

[3] GRAHAM, Neill. Learning C++. McGraw-Hill, 1991 [4] DEITEL, H.M.; DEITEL, P.J. Java: Como Programar. [5] MONTENEGRO, Fernando; PACHECO, Roberto. o Objetos em C++. Editora Ci Orientac a encia Moderna, 1994. o em C++, [6] BUENO, Andr e. Apostila de Programac a 2002. Helena. http://www.dei.isep.ipp.pt/ hleitao/ [7] LEITAO, [8] BITENCOURT, Tatyana. Grupo de Usu arios Java http://www.guj.com.br [9] CESTA, Andr e. TUTORIAL: A LIN GUAGEM DE PROGRAMAC AO JAVA, 1996, http://www.dcc.unicamp.br/ aacesta

Você também pode gostar