Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
9Activity
0 of .
Results for:
No results containing your search query
P. 1
13 - Capítulo 10 - Funções Virtuais e Polimorfismo

13 - Capítulo 10 - Funções Virtuais e Polimorfismo

Ratings: (0)|Views: 1,090 |Likes:
Published by batokas

More info:

Published by: batokas on Apr 01, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as RTF, PDF, TXT or read online from Scribd
See more
See less

05/23/2013

pdf

text

original

 
Funções virtuais e polimorfismoUm Rei para governá-los. Um Rei para encontrá-los.Um Rei para trazê-los e na escuridão guiá-los.John Ronald Reuel Tolkien, The Fellowship ofthe RingO silêncio de pura inocência persuade quando a fala falha. WilliamShakespeare, The Winter’s TaleProposições gerais não decidem casos concretos.Oliver Wendell HolmeseCe Façauillento “um 1 1 cesse/lSões - e, Classrarqujaformas/1/Objetivos• Entender a noção de polimorfismo.• Entender como declarar e usar funções virtual e aplicar o polimorfismo.• Entender a diferença entre classes abstratas e classes concretas.• Aprender como declarar funções virtual puras e criar classes abstratas.• Apreciar como o polimorfismo torna os sistemas extensíveis e mais fáceis demanter.• Entender como funções virtual e a vinculação dinâmica são implementadas emC++ “por baixo dos panos”.Um filósofo de valor incontestável não pensa no vácuo. Mesmo suas idéias mais
 
abstratas são, até certo ponto, condicionadas pelo que é ou não é conhecido naépoca eín que ele vive.Alfred North Whitehead608 C++ COMO PROGRAMARVisão geral ____________ 10.1 Introdução10.2 Campos de tipo e comandos switch10.3 Funções virtual10.4 Classes base abstratas e classes concretas10.5 Polimorfismo10.6 Estudo de caso: um sistema de folha de pagamento usando polimorfismo10.7 Novas classes e vinculação dinâmica10.8 Destruidores virtual10.9 Estudo de caso: herdando a interface e herdando a implementação10.10 Polimorfismo, funções virtual e vinculação dinâmica “vistos por dentro”Resumo . 7’rminologia . Erros comuns de programação Boas práticas deprogramação Dicas de desempenho Observações de engenharia de softwareExercício de auto-revisão Respostas ao exercício de auto-revisão • Exercícios10.1 IntroduçãoCom funções virtuais e polimorfismo é possível se projetar e implementar sistemas que são mais facilmente extensíveis. Os programas podem ser escritospara processar genericamente - como objetos de classes base - objetos detodas as classes existentes em uma hierarquia. Classes que não existemdurante o desenvolvimento do programa podem ser acrescentadas, com poucasou nenhuma modificação, à parte genérica do programa - desde que aquelasclasses sejam parte da hierarquia que está sendo processada genericamente.As ánicas partes de um programa que necessitarão de modificações sãoaquelas partes que exigem conhecimento direto da classe particular que estásendo acrescentada à hierarquia.10.2 Campos de tipo e comandos switchUm meio de lidar com objetos de tipos diferentes é usar um comando switchpara executar a ação apropriada sobre cada objeto, com base no tipo do objeto.Por exemplo, em uma hierarquia de formas, em que cada forma especifica seutipo como um membro de dados, uma estrutura switch poderia determinar qualfunção de impressão chamar baseando-se no tipo do objeto particular.Existem muitos problemas com o uso de lógica de programação que empregaswitchs. O programador pode se esquecer de fazer um teste de tipo quandonecessário. O programador pode esquecer de testar todos os casos possíveisem um switch. Se um sistema baseado em switchs for modificado peloacréscimo de novos tipos, o programador pode se esquecer de inserir os novoscasos em todos os comandos switch existentes. Todas as adições ou exclusõesa uma classe para tratar novos tipos exige que todo comando switch no sistemaseja modificado; localizar todos eles pode consumir tempo e é uma atividadesujeita a erros.Como veremos, funções virtual e a programação polimórfica podem eliminar a
 
necessidade do uso de lógica de programação que emprega switchs. Oprogramador pode usar o mecanismo de função virtual para executar automaticamente a lógica equivalente, evitando deste modo os tipos de errostipicamente associados com o uso de lógica de programação que empregaswitchs.Observação de engenharia de software 10.1 ______ Uma conseqüência interessante do uso de funções virtual epolimorfismo é que os programas adquirem uma aparência mais simples. Elescontêm menos ramificações lógicas, favorecendo o emprego de códigoseqüencial mais simples. Isso facilita o teste, a depura ção e a manutenção deprogramas e evita erros.CAPÍTULO 10 - FUNÇÕES VIRTUAIS E POLIM0RFISM0 609Suponha que um conjunto de classes de formas, tais como Circle, Triangle.Rectangle. Square, etc. sejam todas derivadas da classe base Shape. Naprogramação orientada a objetos, cada uma dessas classes poderia ser dotadada habilidade de desenhar a si própria. Embora cada classe tenha sua própriafunção draw. a função draw para cada forma é bastante diferente. Quandodesenharmos uma forma, qualquer que seja a forma, seria interessante sermoscapazes de tratar todas essas formas genericamente, como objetos da classebásica Shape. Então, para desenhar qualquer forma, poderíamos simplesmentechamar a função draw da classe base Shape e deixar o programa determinar dinamicamente (i.e., durante a execução) qual a função draw de uma classederivada que deve ser usada.Para possibilitar este tipo de comportamento, declaramos draw na classe básicacomo uma função virtual e sobrescrevemos draw em cada uma das classesderivadas para desenhar a forma apropriada. Uma função virtual é declaradaprecedendo-se o protótipo da função pela palavra-chave virtual na classe básica.Por exemplo,virtual void draw() const;pode aparecer na classe base Shape. O protótipo precedente declara que afunção draw é uma função constante, que não aceita nenhum argumento, nãoretorna nada e é uma função virtual.Observação de engenharia de software 10.2 ______ Uma vez que uma função seja declarada virtual, ela permanece virtualpor toda a hierarquia de herança, daquele ponto para baixo, mesmo se não édeclarada virtual quando uma classe a sobrescreve.Boa prática de programação 10.1Embora certas funções sejam implicitamente virtual, por causa de umadeclaração feita mais acima na hierarquia de classes, declarar explicitamenteestas funções como virtual em cada nível da hierarquia melhora a clareza doprograma.Observação de engenharia de software 10.3Quando uma classe derivada escolhe não definir uma função como virtual, aclasse derivada simplesmente herda a definição da função virtual da sua classe

Activity (9)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
SergioChisevo liked this
fvnando liked this
Sabrina Beck liked this
fabio933 liked this
Diego Bueno liked this
Maira Canal liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->