2. classes, objectos, herança e polimorfismofds/aulas/edados/1314/apontamentos/... ·...

16
2. Classes, Objectos, Herança e Polimorfismo Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 1/1

Upload: hoangkien

Post on 09-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

2. Classes, Objectos, Herança e Polimorfismo

Fernando Silva

DCC-FCUP

Estruturas de Dados

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 1 / 1

Tipo Abstracto de Dados

Como vimos, a programação orientada aos objectos tem como conceitosfundamentais:

as classes que representam a estrutura geral para todos os objectospossíveis que partilham um conjunto comum de característicasdefinidas por atributos e por métodos que intervêm sobre os atributos.e os objectos que são instâncias particulares de uma classe; osatributos constituem o estado do objecto.

Uma classe define, na realidade, um tipo abstracto de dados (TAD).O que é um TAD?

abstracção matemática de uma estrutura de dados,que especifica o tipo de dados armazenados eas condições e as operações que podem manipular esses dados.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 2 / 1

Princípios da Orientação aos Objectos

Encapsulamento: esconder detalhes internos da implementação decomponentes.Modularidade: organizar o código por unidades funcionais distintas.Influencia re-utilização do código.Uma forma natural de organizar componentes é em hierarquias quevão desde o mais específico para o mais geral no topo.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 3 / 1

Herança e subclasses

Herança é um mecanismo que, partindo de uma hierarquia de classes,permite a re-utilização de código.

classe-base ou superclasse é aclasse mais geral da hierarquia.As subclasses especializam ouextendem ou herdam de umasuperclasse.A classe T extende a classe S comnovos atributos e métodos.T herda de S os seus atributos emétodos.

A localização de um método faz-se, percorrendo a hierarquia de classes(dynamic dispatching ou binding).

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 4 / 1

Hierarquia Pessoa-Aluno

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 5 / 1

Polimorfismo - overriding

Polimorfismo refere-se à capacidade de uma variável que representa umobjecto ou de um método poder tomar diferentes formas. O Java admitepolimorfismo de inclusão:

métodos com o mesmo nome e argumentospodem estar em classes diferentes dahierarquia.(overriding) o mecanismo de execuçãoassume a sobreposição e executa o métodoque encontrar primeiro percorrendo ahierarquia de baixo para cima.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 6 / 1

Polimorfismo - overloading

O Java também admite sobre-carregamento de métodos (overloading),associado a polimorfismo paramétrico:

podemos ter na mesma classe, ou emsubclasses, vários métodos com o mesmonome, desde que tenham assinaturasdiferentes.a assinatura de um método refere-se ao tipode dados que retorna e ao número e tipo deargumentos que aceita.Tendo um objecto o da classe T, podemosfazer o.a(x,y);. O mecanismo de execuçãoinvoca o método definido em U.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 7 / 1

Exemplo: Progressões Numéricas

Uma progressão numérica é uma sequência de números onde cadanúmero, com excepção do 1o, depende de um ou mais nos anteriores.prog. aritmética: diferença entre 2 termos consecutivos é constante.

I Exemplo: 1, 3, 5, 7, 9, . . .I Termo geral: an = d + an−1, n > 1 ou an = a1 + (n − 1)d , n > 1 ou

an = am + (n − m)d , n > m onde d = an − an−1, n > 1

prog. geométrica: razão entre 2 termos consecutivos é constante.I Exemplo: 1, 2, 4, 8, 16, . . . ou 1, 21, 22, 23, 24, . . .I Termo geral: an = arn−1, n > 1 ou recursivamente an = ran−1, n > 1.

prog. fibonacci: um termo é a soma dos dois termos anteriores, comexcepção dos dois primeiros.

I Exemplo: 0, 1, 1, 2, 3, 5, 8, . . .I Termo geral: an = an−1 + an−2, n > 2 e a1 = 0, a2 = 1.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 8 / 1

Exemplo de Herança: Progressões Numéricas

Como vimos, para uma progressão é importante conhecer o primeirovalor e o valor corrente para se poder determinar o próximo termo daprogressão.Vejamos a definição de uma classe-geral (secção 2.2.3 do Tamassia):

Progression() constructor da classe.firstValue() re-inicia a sequênciano 1o valor.nextValue() avança para o valorseguinte.printProgression() re-inicia eescreve os 1os n valores.

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 9 / 1

Classe Geral Progressão

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 10 / 1

Classe Progressão Aritmética

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 11 / 1

Classe Progressão Geométrica

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 12 / 1

Classe Progressão Fibonacci

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 13 / 1

Classe Principal para Teste Progressão

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 14 / 1

Exemplo de output do teste da classe progressão

Compilando e executando o programa teríamos como resultado:

Progressão aritmética de razão 1 (default):0 1 2 3 4 5 6 7 8 9Progressão aritmética de razão 5:0 5 10 15 20 25 30 35 40 45Progressão geométrica de razão 2 (default):1 2 4 8 16 32 64 128 256 512Progressão geométrica de razão 3:1 3 9 27 81 243 729 2187 6561 19683Progressão Fibonacci com valores default:0 1 1 2 3 5 8 13 21 34Progressão Fibonacci com valores iniciais 4 e 6:4 6 10 16 26 42 68 110 178 288

O que acontece se um dos valores iniciais da progressão de Fibonacci fornegativo? E se o número de termos da progressão geométrica for elevado ea base também for grande?

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 15 / 1

Hierarquia da classe Progression e suas subclasses

Fernando Silva (DCC-FCUP) 2. Classes, Objectos, Herança e Polimorfismo Estruturas de Dados 16 / 1