Herança e Polimorfismo

Documentos relacionados
Orientação a Objetos. Leonardo Gresta Paulino Murta.

Subprogramação e Orientação a Objetos

Subprogramação. Vanessa Braganholo

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Java para Desktop. Programação Orientada à Objetos 2 JSE

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Introdução a Orientação a Objetos

Linguagem de Programação III

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Linguagem de programação Programação Orientada a objetos

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Classe Abstrata e Interface

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Programação Orientada a Objetos

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Programação Java (nível intermediário) 4. Polimorfismo

1 Introdução e Conceitos básicos

POO29004 Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

[Linguagem de Programação 3] [Aula 01] [Gustavo Yoshio Maruyama]

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Interfaces e Classes Abstratas

Modelo do Mundo Real. Abstração. Interpretação

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

9 Classes Abstractas e Interfaces

POO29004 Programação Orientada a Objetos

Linguagem de Programação II Herança

Conceitos de Programação Orientada a Objetos

Herança e Propriedades

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Desenvolvimento Web TCC Turma A-1

Polimorfismo. O que é polimorfismo?

Programação Orientada a Objetos JAVA - NETBEANS

Programação Orientada a Objetos

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Classes e Objetos. Sintaxe de classe em Java

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos

Capítulo 2. Orientação a Objetos

Linguagem de Programação. Diagrama de classes

AULA 16 HERANÇA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Programação Orientada a Objetos

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Orientação a Objetos AULA 06

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Linguagens de Programação Aula 12

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos

Introdução ao Java. Prof. Herbert Rausch Fernandes

Laboratório de programação II

C com introdução a OO

PROGRAMAÇÃO ORIENTADA A

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Programação Orientada a Objetos JAVA - NETBEANS

Computação II Orientação a Objetos

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Linguagem de Programação I Apresentação da Disciplina

Introdução à Programação. Encapsulamento e Herança

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Programação por Objectos. Java

Programação Orientada a Objetos. Prof. MsC Sílvio Bacalá Júnior

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Linguagem de Programação IV Introdução

Computação II Orientação a Objetos

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Transcrição:

Herança e Polimorfismo Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Aula de hoje Princípios do paradigma OO Herança Polimorfismo Interfaces Classes Abstratas Leonardo Murta Herança e Polimorfismo 2

Princípios do Paradigma OO Abstração Encapsulamento Modularidade Hierarquia Leonardo Murta Herança e Polimorfismo 3

Abstração A representação computacional do objeto real deve se concentrar nas caracteríshcas que são relevantes para o problema Fonte: livro Object-Oriented Analysis and Design with Applications Leonardo Murta Herança e Polimorfismo 4

Abstração São criados somente os atributos e métodos necessários para o problema em mãos Quais seriam os atributos e métodos para o objeto Carro em cada uma das situações seguintes? Sistema de uma locadora de carros Sistema de uma revendedora de carros Sistema de uma oficina mecânica Sistema do DETRAN Leonardo Murta Herança e Polimorfismo 5

Encapsulamento O objeto deve esconder seus dados e os detalhes de sua implementação Fonte: livro Object-Oriented Analysis and Design with Applications Leonardo Murta Herança e Polimorfismo 6

Atributos e Métodos Encapsulamento Os métodos formam uma cerca em torno dos atributos Os atributos não devem ser manipulados diretamente Os atributos somente devem ser alterados ou consultados através dos métodos do objeto Leonardo Murta Herança e Polimorfismo 7

Encapsulamento Métodos Públicos Chamadas de Métodos Métodos e Atributos privados Leonardo Murta Herança e Polimorfismo 8

Encapsulamento Em uma classe Quadrado, quais métodos devem ser públicos e quais devem ser privados? Transladar Ampliar Mover ponto Girar Adicionar ponto Calcular área Leonardo Murta Herança e Polimorfismo 9

Modularidade Um sistema deve ser decomposto em um conjunto altamente coeso e fracamente acoplado de objetos Fonte: livro Object-Oriented Analysis and Design with Applications Leonardo Murta Herança e Polimorfismo 10

Modularidade Um programa OO é um conjunto de objetos que colaboram entre si para a solução de um problema Objetos colaboram através de chamadas de métodos uns dos outros Carro Freia Motorista Leonardo Murta Herança e Polimorfismo 11

Modularidade Em um sistema acadêmico, há conceitos aluno, professor, disciplina, turma e inscrição. Onde colocar cada um dos métodos a seguir: Exibição do histórico do aluno Cálculo da média do aluno em uma turma Obtenção do horário de uma aula Descrição da ementa de uma disiplina Cálculo do CR de um aluno Leonardo Murta Herança e Polimorfismo 12

Hierarquia Os objetos devem ser organizados no sistema de forma hierárquica Fonte: livro Object-Oriented Analysis and Design with Applications Leonardo Murta Herança e Polimorfismo 13

Hierarquia Objetos herdam atributos e métodos dos seus ancestrais na hierarquia Fonte: livro Object-Oriented Analysis and Design with Applications Leonardo Murta Herança e Polimorfismo 14

Herança Para viabilizar a hierarquia entre objetos, as classes são organizadas em estruturas hierárquicas A classe que forneceu os elementos herdados é chamada de superclasse A classe herdeira é chamada de subclasse A subclasse pode herdar os métodos e atributos de suas superclasses A subclasse pode definir novos atributos e métodos específicos Leonardo Murta Herança e Polimorfismo 15

Polimorfismo Uma subclasse pode redefinir (sobrescrever) um método herdado Este mecanismo é chamado de polimorfismo O polimorfismo se realiza através da recodificação de um ou mais métodos herdados por uma subclasse Em tempo de execução, o Java saberá qual implementação deve ser usada Leonardo Murta Herança e Polimorfismo 16

Exemplo de herança Veículo Bicicleta Automóvel Navio Avião Furgão Carro Caminhão Trator Teste da Leitura: subclasse é um superclasse Ex.: Carro é um Automóvel; Trator é um Veículo;... Leonardo Murta Herança e Polimorfismo 17

Exemplo de herança (relembrando a classe Carro) public class Carro { private int velocidade; public Carro(int velocidadeinicial) { velocidade = velocidadeinicial; public void acelera() { velocidade++; public void freia() { velocidade--; Leonardo Murta Herança e Polimorfismo 18

Exemplo de herança (criando um carro inteligente) Declaração: public class CarroInteligente extends Carro { public CarroInteligente(int velocidadeinicial) { super(velocidadeinicial); public void estaciona() { // código mágico para estacionar sozinho Uso: CarroInteligente tiguan = new CarroInteligente(10); for (int i = 10; i > 0; i--) { tiguan.freia(); tiguan.estaciona(); De onde veio isso? Leonardo Murta Herança e Polimorfismo 19

Exemplo de polimorfismo (criando um carro de corrida) Declaração: public class CarroCorrida extends Carro { public CarroCorrida(int velocidadeinicial) { super(velocidadeinicial); public void acelera() { velocidade+=5; Uso: CarroCorrida f1 = new CarroCorrida(10); f1.acelera(); Qual a velocidade agora? Leonardo Murta Herança e Polimorfismo 20

CompaHbilidade de Hpos Qualquer subclasse é compaavel com a sua superclasse Contudo, a reciproca não é verdadeira Carro Carro c = new CarroInteligente(20); c.acelera(); c.freia(); CarroInteligente CarroInteligente c = new Carro(20); c.acelera(); c.freia(); c.estaciona(); Leonardo Murta Herança e Polimorfismo 21

Herança em Java Uma classe só pode herdar de uma outra classe (herança simples) Caso não seja declarada herança, a classe herda da classe Object Ela define o método tostring(), que retorna a representação em String do objeto Qualquer subclasse pode sobrescrever o método tostring() para retornar o que ela deseja. Veja os demais métodos da classe Object em hcps:// docs.oracle.com/javase/8/docs/api/java/lang/ Object.html Leonardo Murta Herança e Polimorfismo 22

Exercício de herança Em um sistema de loja, há 3 Hpos de usuário: gerente, funcionário e cliente. Todo usuário tem nome e senha. O cliente possui, além do nome e senha, outros dados cadastrais. O funcionário possui métodos relacionados a venda de produtos. O gerente pode fazer tudo que o funcionário pode e também fechamento do caixa. Como é a hierarquia de herança desse sistema no que se refere a controle de usuários? Leonardo Murta Herança e Polimorfismo 23

Interfaces Tipo especial de classe, que não tem implementação Uma interface define um protocolo Classes podem implementar uma ou mais interfaces Uma interface é um contrato assinado por uma classe A interface define as responsabilidades da classe As responsabilidades são mapeadas em métodos A classe que implementa a interface implementa os métodos A interface contém somente assinatura de métodos e constantes Leonardo Murta Herança e Polimorfismo 24

Interfaces A definição de uma interface é similar a de uma classe UHlizamos a palavra reservada interface A palavra reservada deve ser seguida do nome da interface Uma interface pode herdar de outras interfaces (extends) A interface possui apenas métodos sem implementação (abstratos) e constantes public interface Taxavel { int ANO_INICIO = 1996; double calculataxa (); Fica implícito que é public, static e final Leonardo Murta Herança e Polimorfismo 25

Exemplo public class CarroImportado extends Carro implements Taxavel { <atributos da CarroImportado> <métodos da CarroImportado> <métodos implementados da interface Taxavel> Leonardo Murta Herança e Polimorfismo 26

Programação orientada a interfaces Uso public interface Stack { public Object pop(); public void push(object o); public int size(); Implementação Leonardo Murta Herança e Polimorfismo 27

Programação orientada a interfaces adicionapedido(stack s) { Pedido p = new Pedido(...); s.push(p); Desconhece a implementação public interface Stack { public Object pop(); public void push(object o); public int size(); Implementação Leonardo Murta Herança e Polimorfismo 28

Programação orientada a interfaces Uso public interface Stack { public Object pop(); public void push(object o); public int size(); Desconhece o uso public class MyStack implements Stack { public void push(object o) {... Leonardo Murta Herança e Polimorfismo 29

Classes Abstratas Se uma classe possui algum método sem implementação (abstrato), o modificador abstract deve preceder sua declaração abstract class Carro { <atributos da classe Carro> <métodos comuns da classe Carro> <métodos abstratos da classe Carro> Leonardo Murta Herança e Polimorfismo 30

Classes Abstratas Não podem ser usadas para instanciar objetos Devem ser vistas como templates para subclasses que irão dar uma implementação aos métodos abstratos Exemplo: Classe abstrata Pagamento tem um método abstrato paga(...) Classes concretas PagamentoVisa, PagamentoCheque, PagamentoDinheiro dão comportamento ao método paga(...) Leonardo Murta Herança e Polimorfismo 31

Classes Abstratas public abstract class Pagamento {... public abstract void paga(...); public class PagamentoVisa extends Pagamento {... public void paga(...) { // código de pagamento com cartão Visa Leonardo Murta Herança e Polimorfismo 32

Exercício Refazer o exercício da Agenda, que lista os contatos ordenados por nome e por idade Fazer uma classe abstrata Ordenador com a lógica de ordenação, porém chamando um método abstrato compara(pessoa, Pessoa) Criar duas classes extras, OrdenadorNome e OrdenadorIdade, que herdam de Ordenador e implementam o método abstrato compara(pessoa, Pessoa) Instanciar o ordenador apropriado para listar os contatos por nome e por idade Leonardo Murta Herança e Polimorfismo 33

Exercício Faça uma classe Animal com um método abstrato fala Faça as classes Homem, Cão e Gato, herdando de animal, redefinindo o método fala para retornar Oi, Au au e Miau, respechvamente Crie um vetor de 10 Animais e instancie Homens, Cães e Gatos nesse vetor Faça um loop por todos os animais do vetor, pedindo para eles falarem Animal Homem Cão Gato Leonardo Murta Herança e Polimorfismo 34

Herança e Polimorfismo Leonardo Gresta Paulino Murta leomurta@ic.uff.br