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

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

Atributos e Métodos Estáticos

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

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

Sintaxe Básica de Java Parte 2

Classe Abstrata e Interface

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

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

Tratamento de Exceções

Polimorfismo. O que é polimorfismo?

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

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

Professor Leonardo Cabral da Rocha Soares Lattes:

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

Herança e Propriedades

Programação por Objectos. Java

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

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

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

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

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

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

Conceitos Básicos da Programação OO

Sobreposição de Métodos

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

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

Laboratório de Programação. Aula 2 Java 5COP088. Aula 2 Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Herança e Polimorfismo - Parte II -

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

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

4 Conceito de Herança

Tipos, Literais, Operadores

Tipos, Literais, Operadores

extendsé usado para indicar herança em JAVA

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

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

Linguagem de Programação. Diagrama de classes

Herança (parte 2) Redefinição de métodos AULA 11

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

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

Computação II Orientação a Objetos

Classes e Objetos. Sintaxe de classe em Java

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

Linguagem de Programação III

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

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

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Herança e Polimorfismo

Herança e Polimorfismo -Parte II -

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

POO29004 Programação Orientada a Objetos

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

Introdução à Programação Orientada por Objectos em Java. Enquadramento e Objectivos Abstracção Encapsulamento Herança Polimorfismo Conclusão

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Linguagem de Programação II Implementação

JAVA TÓPICOS ESPECIAIS DE PROGRAMACAO ORIENTADA A OBJETOS

Programação Orientada a Objetos em Java

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Conceitos de Programação Orientada a Objetos

Herança e Polimorfismo - Parte I -

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Disciplina: Programação Orientada a Objetos

Java Básico. Carga Horária: 32 horas. Pré-requisito: Lógica de Programação; JAVA. Conteúdo Programático

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

Programação por Objectos. Java

Relacionamentos entre objetos

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Linguagens de Programação Aula 12

Programação Orientada a Objeto

Linguagem de Programação IV Introdução

package heranca; class Mamifero { public int a; protected int b; int c; private int d;

Linguagem de Programação II Herança

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

Lição 11 Herança, polimorfismo e interfaces

AULA TEÓRICA 9. Tema 8. Herança (continuação) Ø Sobreposição de métodos. Ø Variáveis e métodos estáticos. Ø Hierarquia de classes.

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Herança e Polimorfismo (Universal)

Interfaces e Classes Abstratas

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

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

Notas de Aula 06: Programação para tipos versus Programação para interfaces

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

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

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

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

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Programação Orientada a Objetos II

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

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

Transcrição:

Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira

Possibilita o reuso de classes (código-fonte) Usar quando: Desejamos estender funcionalidades ou características a partir de um tipo de dado (classe) existente no sistema; Identificamos no sistema vários tipos de dados (classes) com características e funcionalidades comuns porém, cada um deles contendo também suas características e funcionalidades particulares. Programação Orientada a Objeto - Márcio Bueno 2

Exemplo 1: Acrescentando funcionalidades Programação Orientada a Objeto - Márcio Bueno 3

Exemplo 2: Acrescentando características Programação Orientada a Objeto - Márcio Bueno 4

Quando dizemos que: Uma classe B herda de uma classe A ou Uma classe B é subtipo de uma classe A ou Uma classe B é subclasse de uma classe A Significa dizer que todos os atributos e métodos que foram definidos em A também fazem parte de B. A palavra reservada utilizada para expressar o conceito de herança em Java é extends. Programação Orientada a Objeto - Márcio Bueno 5

Exemplo 1: Acrescentando funcionalidades extends Programação Orientada a Objeto - Márcio Bueno 6

Exemplo 2: Acrescentando características extends Programação Orientada a Objeto - Márcio Bueno 7

Exemplo 2: Código Fonte public class ClientePessoaFisica extends Cliente { // IMPLEMENTAR CORPO DA CLASSE AQUI. public class ClientePessoaJuridica extends Cliente { // IMPLEMENTAR CORPO DA CLASSE AQUI. Programação Orientada a Objeto - Márcio Bueno 8

Como construir um objeto de uma classe que herda de outra? Encadeamento de construtores Primeiramente, no construtor da subclasse deve-se fazer uma chamada ao construtor da superclasse. Em seguida, faz-se a inicialização dos atributos da própria subclasse. Uso da palavra reservada super. Referenciar explicitamente definições (construtores, métodos, atributos) que foram implementadas na superclasse. Programação Orientada a Objeto - Márcio Bueno 9

Exemplo 2: Código Fonte (cont.) public Cliente(String nome, String endereco) { this.setnome(nome); this.setendereco(endereco); public ClientePessoaFisica(String n, String end, String cpf) { super(n, end); this.setcpf(cpf); Programação Orientada a Objeto - Márcio Bueno 10

Exemplo 2: Aplicação public class AplicacaoCliente { public static void main(string[ ] args) { ClientePessoaFisica cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime(clientepessoafisica c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + c.getcpf( )); Programação Orientada a Objeto - Márcio Bueno 11

Exemplo 2: Aplicação public class AplicacaoCliente { public static void main(string[ ] args) { ClientePessoaJuridica cli = new ClientePessoaJuridica( Emp X, Rua tal, 456 ); AplicacaoCliente.imprime(cli); public static void imprime(clientepessoafisica c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + c.getcpf( )); Programação Orientada a Objeto - Márcio Bueno 12

e Polimorfismo Qualquer elemento, tal como um atributo, variável ou parâmetro de método, que pode referenciar valores de tipos diferentes durante o curso de execução de um programa pode ser considerado como polimórfico. Os tipos diferentes que podem ser referenciados por um elemento polimórfico são, exatamente, o supertipo e todos os seus subtipos. subtipo supertipo Programação Orientada a Objeto - Márcio Bueno 13

e Polimosfismo ClientePessoaFisica Cliente ClientePessoaJuridica Cliente Programação Orientada a Objeto - Márcio Bueno 14

e Polimosfismo Voltando ao exemplo 2 Aplicação: public class AplicacaoCliente { public static void main(string[ ] args) { ClientePessoaFisica cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime (ClientePessoaFisica c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + c.getcpf( )); Programação Orientada a Objeto - Márcio Bueno 15

e Polimosfismo Voltando ao exemplo 2 Aplicação (cont.): public class AplicacaoCliente { public static void main(string[ ] args) { Cliente cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime(cliente c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + c.getcpf( )); Programação Orientada a Objeto - Márcio Bueno 16

e Polimosfismo Problema da Perda de Informação O que acontece é que o compilador toma as suas decisões com base apenas no tipo declarado para a variável. Contudo, Java dispõe de mecanismos que permitem contornar este problema: Conversão de tipos: cast O operador instanceof Permite determinar qual o tipo de um objeto que está sendo referenciado por uma variável. Programação Orientada a Objeto - Márcio Bueno 17

e Polimosfismo Voltando ao exemplo 2 Aplicação (cont.): public class AplicacaoCliente { public static void main(string[ ] args) { Cliente cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime (Cliente c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + c.getcpf( )); ERRO DE COMPILAÇÃO!!! 18

e Polimosfismo Voltando ao exemplo 2 Aplicação (cont.): public class AplicacaoCliente { public static void main(string[ ] args) { Cliente cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime (Cliente c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + ((ClientePessoaFisica)c).getCpf( )); NÃO CAUSA ERRO DE COMPILAÇÃO. PORÉM, NÃO EVITA UM EVENTUAL ERRO EM TEMPO DE EXECUÇÃO!!! 19

e Polimosfismo Voltando ao exemplo 2 Aplicação (cont.): public class AplicacaoCliente { public static void main(string[ ] args) { Cliente cli = new ClientePessoaJuridica( Sun, Rua 2, 456 ); AplicacaoCliente.imprime(cli); public static void imprime (Cliente c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); System.out.println( CPF: + ((ClientePessoaFisica)c).getCpf( )); ERRO EM TEMPO DE EXECUÇÃO!!! 20

e Polimosfismo public class AplicacaoCliente { public static void main(string[ ] args) { Cliente cli = new ClientePessoaFisica( Fulano, Rua tal, 123 ); AplicacaoCliente.imprime(cli); public static void imprime (Cliente c) { System.out.println( Nome: + c.getnome( )); System.out.println( Endereço: + c.getendereco( )); if (c instanceof ClientePessoaFisica) { System.out.println( CPF: + ((ClientePessoaFisica)c).getCpf( )); else if (c instanceof ClientePessoaJuridica) { System.out.println( CNPJ: + ((ClientePessoaJuridica)c).getCnpj( )); O TESTE DO OPERADOR instanceof GARANTE QUE NÃO OCORRA ERRO EM TEMPO DE EXECUÇÃO! 21

Exercício 1: Implementar as classes do seguinte modelo: Programação Orientada a Objeto - Márcio Bueno 22

Exercício 1 (Cont.): Atributos: string não podem receber valores nulos ou string vazia. Métodos de acesso aos atributos (get / set); Um construtor que receba valores para todos os atributos das classes. OBS: Usar a técnica de encapsulamento sugerida no curso. Programação Orientada a Objeto - Márcio Bueno 23

Exercício 1 (Cont.): Implemente um programa chamado Aplicacao que cria dois objetos: um do tipo Cachorro e outro do tipo CachorroAdestrado. Ao final, o programa deve imprimir na tela os dados dos objetos criados fazendo chamadas ao método estático imprime implementado na classe Aplicacao: public static void imprime (Cachorro c); Programação Orientada a Objeto - Márcio Bueno 24