Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra



Documentos relacionados
Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 9. Vetores e Matrizes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Técnicas de Programação II

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

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 7. Estruturas de Decisão. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Programação por Objectos. Java

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos (DPADF 0063)

1. Herança. Sobrescrevem métodos - redefinem métodos herdados. Subclasse herda de uma superclasse

Herança. Alberto Costa Neto DComp - UFS

Programação Orientada a Objetos em Java

Módulo 06 Desenho de Classes

Orientação a Objetos com Java

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Capítulo 22. Associações entre Classes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação por Objectos. Java

Orientação a Objetos

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Java 2 Standard Edition Como criar classes e objetos

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Análise e Projeto de Sistemas

Prof. Jhonatan Fernando

Capítulo 8. Introdução UML

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Reuso com Herança a e Composiçã

Desenvolvimento Web TCC Turma A-1 /

2ª Lista de Exercícios Orientação a Objetos

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Profº. Enrique Pimentel Leite de Oliveira

Herança. Algoritmos e Programação II. Aula 5 Herança

Programação Orientada a Objetos (DPADF 0063)

Inscrição do Titular Telas do Sistema e orientações gerais

Encapsulamento de Dados

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Implementando uma Classe e Criando Objetos a partir dela

Capítulo 5 Reuso de Classes

Análise de Programação

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Lição 9 Trabalhando com bibliotecas de classes

Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

JSP - ORIENTADO A OBJETOS

Criando documentação com javadoc

Tipos agregados. Tipos estruturados

Introdução a Java. Hélder Nunes


PROGRAMANDO EM C# ORIENTADO A OBJETOS

Polimorfismo. Prof. Leonardo Barreto Campos 1

Orientação a Objetos

Guia de Fatores de Qualidade de OO e Java

Programação de Computadores - I. Profª Beatriz Profº Israel

Lógica de Programação

Informática I. Aula 6. Aula 6-12/09/2007 1

PHP INTRODUÇÃO CLASSES E OBJETOS

SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1

Módulo 07 Características Avançadas de Classes

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Noções sobre Objetos e Classes

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Capítulo 3. Programação por objectos em Java

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

3 Classes e instanciação de objectos (em Java)

Introdução a POO. Introdução a Linguagem C++ e POO

RUI ROSSI DOS SANTOS PROGRAMAÇÃO DE COMPUTADORES EM. Java

Objetivos do Capítulo

UML Aspectos de projetos em Diagramas de classes

Aula 3 Objeto atual com referencia THIS e Classes com Herança

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

Projeto de Software Orientado a Objeto

Como usar o bluej. Laboratório I Prof.ª Vera Alves

Layout para geração de dados de folha de pagamentos para instituto de previdência

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Análise e Projeto Orientados por Objetos

Lista de Exercícios da 3ª Unidade. ( Ponteiros, Alocação dinâmica, Arquivos, Estruturas de Dados)

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Orientação a Objetos e a Linguagem Java

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Curso de Aprendizado Industrial Desenvolvedor WEB

Começando com Ruby on

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

BSI UFRPE Prof. Gustavo Callou

Exercícios de Revisão Java Básico

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Capítulo 6. Operadores. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Busca. Pesquisa sequencial

Prof. Esp. Adriano Carvalho

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Transcrição:

Capítulo 14 Herança a e Polimorfismo

Objetivos do Capítulo Apresentar os conceitos de herança e de polimorfismo. Explorar os diversos recursos disponíveis no Java para a aplicação da herança e do polimorfismo na construção de estruturas complexas de classes. Analisar o uso conjugado da herança e do polimorfismo. Evidenciar os benefícios que podem ser obtidos através da aplicação da herança e do polimorfismo.

O Conceito de Herança Mecanismo fundamental da POO Possibilita a criação de novas classes a partir das existentes Finalidade: Reusabilidade Manutenibilidade

O Conceito de Herança Papéis: Superclasse Ancestral Mãe Genérica Subclasse Descendente Filha Especialista

A declaração extends Onde Na declaração de uma classe Para que Especificar a superclasse Se omitida Classe java.lang.object é assumida

A declaração extends Sintaxe: [public] class <subclasse> extends <superclasse> { } Exemplo: public class Aluno extends Pessoa { }

A referência this Onde aplicar: Construtores e métodos Para que: Referência ao objeto atual Acessar atributos Executar construtores Quando: Parâmetros e atributos com nomes idênticos Construtor que executa outro construtor

Acessar atributos: sintaxe A referência this this.<atributo> Exemplo: public class Pessoa { private String nome; public void setnome(string nome) { this.nome = nome; } }

A referência this Executar outro construtor: sintaxe this([parâmetros]) Exemplo: public class Amigo { private String nome; private String fone; public Amigo( ) { this(, ); } public Amigo(String nome, String fone) { this.nome = nome; this.fone = fone; } }

A referência super Onde aplicar: Construtores e métodos Para que: Referência à superclasse Acessar atributos Executar construtores Executar métodos

A referência super Acessar atributos e métodos: sintaxe super.<atributo> super.<método> Executar construtores: sintaxe super([parâmetros])

Exemplo de Especialização

Código 14.1 Cliente.java Construtor Cliente( ) Exemplo de Especialização Invocar o construtor Cliente(String,String) Inicializar atributos com: Sem nome e (00)0000-0000 Analisar o uso dos termos: this( ) this.<atributo> Código 14.2 ClientePessoa.java Construtor ClientePessoa( ) Invocar o construtor ClientePessoa(String,String,String,String) Inicializar atributos com strings vazias Construtor ClientePessoa(String,String,String,String) Invocar o construtor da superclasse: super(nome, fone)

Exemplo de Especialização Código 14.3 CadastroClientePessoa.java Crie uma instância da classe ClientePessoa. Utilize o construtor padrão. Inicialize seus atributos com os métodos de escrita. Recupere e exiba o conteúdo de seus atributos. Crie outra instância da classe ClientePessoa. Utilize o construtor alternativo. Recupere e exiba o conteúdo de seus atributos.

Exemplo de Especialização Código 14.4 ClienteEmpresa.java Construtor ClienteEmpresa( ) Invocar o construtor ClienteEmpresa(String,String,String,String) Inicializar atributos com strings vazias Construtor ClienteEmpresa(String,String,String,String) Invocar o construtor da superclasse: super(nome, fone)

Exemplo de Especialização Código 14.5 CadastroClienteEmpresa.java Crie uma instância da classe ClienteEmpresa. Utilize o construtor padrão. Inicialize seus atributos com os métodos de escrita. Recupere e exiba o conteúdo de seus atributos. Crie outra instância da classe ClienteEmpresa. Utilize o construtor alternativo. Recupere e exiba o conteúdo de seus atributos.

O Conceito de Polimorfismo Mecanismo fundamental da POO Possibilita: Múltiplas implementações de um construtor Múltiplas implementações de um método Termo Poli: múltiplas Morfismo: formas

O Conceito de Polimorfismo Tipos Sobrecarga Sobreposição Sobrecarga Variações nos parâmetros Na mesma classe Em subclasses Sobreposição Variações na implementação Implementação nova Implementação complementar Em subclasses

Exemplo de Polimorfismo

Código 14.6 Veiculo.java Construtor Veiculo() Exemplo de Polimorfismo Invocar o construtor Veiculo(String placa,int ano) Inicializar atributos com: e 0 Método exibirdados() Produzir uma mensagem gráfica Exibir os dados do veículo conforme figura abaixo.

Código 14.7 Onibus.java Exemplo de Polimorfismo Construtor Onibus(String placa, int ano, int assentos) Invocar o construtor da superclasse: Veiculo(String placa,int ano) Complementar com a inicialização do atributo assentos Método exibirdados() Produzir uma mensagem gráfica Exibir os dados do ônibus conforme figura abaixo.

Exemplo de Polimorfismo Código 14.8 CadastroOnibus.java Crie uma instância da classe Onibus. Utilize o construtor alternativo. Recupere e exiba o conteúdo de seus atributos. Altera o conteúdo de seus atributos. Utilize os métodos de escrita. Recupere e exiba o conteúdo de seus atributos.

Código 14.9 Caminhao.java Exemplo de Polimorfismo Construtor Caminhao(String placa, int ano, int eixos) Invocar o construtor da superclasse: Veiculo(String placa,int ano) Complementar com a inicialização do atributo eixos Método exibirdados() Produzir uma mensagem gráfica Exibir os dados do caminhão em duas mensagens separadas.

Exemplo de Polimorfismo Código 14.10 CadastroCaminhao.java Crie uma instância da classe Caminhao. Utilize o construtor alternativo. Recupere e exiba o conteúdo de seus atributos.

Classes Finais e Abstratas Classe final (constante, terminal) Último nível de uma hierarquia Não pode ter subclasses Implicitamente, todos os métodos tornam-se constantes Benefício: chamadas dinâmicas de métodos mais eficientes

Classe abstrata Classes Finais e Abstratas Utilizada nos níveis mais altos de uma hierarquia Não pode ser instanciada Pode conter métodos abstratos Benefício: representação de estruturas mais complexas e sofisticadas de classes (extensibilidade, reusabilidade, manutenibilidade)

Classe final: sintaxe Classes Finais e Abstratas public final class <nome> Classe abstrata: sintaxe public abstract class <nome> Exemplos: public abstract class Veiculo public final class Onibus extends Veiculo public final class Caminhao extends Veiculo

Métodos constantes Métodos Constantes e Abstratos Incluem o qualificador final Não podem ser sobrepostos em subclasses Métodos abstratos Incluem o qualificador abstract Não possui um corpo Só é permitido em classes abstratas Precisa ser implementado em todas as subclasses

Manipulação Polimórfica de Objetos Conceitos importantes: objeto Ocupa espaço de memória Mantém o conteúdo de seus atributos Conceitos importantes: referência Ponteiro de memória Aponta para um objeto Possui tipo e nome O tipo pode ser: A classe do objeto Uma das superclasses do objeto

Manipulação Polimórfica de Objetos Exemplo: Veiculo v1 = new Onibus("AAA-3388",2009,46); Veiculo v2 = new Caminhao("BBB-3498",2009,2); Veiculo v3 = v1; JOptionPane.showMessageDialog(null, v1.getclass().getname()); JOptionPane.showMessageDialog(null, v2.getclass().getname()); v3.exibirdados();

Manipulação Polimórfica de Objetos Inspeção de tipo: instanceof Permite testar o tipo de um objeto em tempo de execução Precedido pelo nome do objeto Seguido do nome da classe testada Produz um valor booleano Exemplo: Veiculo v1 = new Onibus("AAA-3388",2009,46); if (v1 instanceof Onibus) System.out.println("Ônibus"); else if (v1 instanceof Caminhao) System.out.println("Caminhão");

Conversão de tipo: Manipulação Polimórfica de Objetos Uma referência pode ser convertida em tempo de execução Só é possível converter para uma de suas subclasses Pode gerar ums ClassCastException Exemplo 1: Veiculo v1 = new Onibus("AAA-3388",2009,46); Onibus bus = (Onibus)v1; String str = "Dados do ônibus: " + "\nplaca: " + v1.getplaca() + "\nano: " + v1.getano() + "\nassentos: " + bus.getassentos(); JOptionPane.showMessageDialog(null, str);

Manipulação Polimórfica de Objetos Exemplo 2: ClassCastException Veiculo v1 = new Onibus("AAA-3388",2009,46); Caminhao cam = (Caminhao)v1; String str = "Dados do ônibus: " + "\nplaca: " + v1.getplaca() + "\nano: " + v1.getano() + "\neixos: " + cam.geteixos(); JOptionPane.showMessageDialog(null, str);

Manipulação Polimórfica de Objetos Código 14.17 CadastroVeiculos.java Crie um vetor capaz de armazenar até 100 cadastros de veículos. Crie algumas instâncias da classe Onibus e grave-as no vetor. Crie algumas instâncias da classe Caminhao e grave-as no vetor. Escreva uma estrutura de repetição que percorra o vetor e recupere o nome da classe de cada objeto. Escreva outra estrutura de repetição que invoque o método exibirdados( ) de cada objeto do vetor.

Estudo de Caso: Folha de Pagamento

Estudo de Caso: Folha de Pagamento Descrição do estudo de caso: Objetivo: cadastrar os funcionários de uma empresa e calcular os proventos devidos a cada um deles por um mês de trabalho. Proventos: representam quaisquer valores devidos aos funcionários a título de remuneração. Serão considerados apenas três tipos de proventos: Salário fixo: devido a todos os funcionários. Comissão: adicional devido pelas vendas realizadas pelos funcionários que são comissionados Produtividade: adicional devido aos funcionários que trabalham diretamente na produção e que recebem determinado valor por unidade produzida

Estudo de Caso: Folha de Pagamento Código 14.18 EDadoInvalido.java Classe derivada de Exception. Implementar dois construtores: EDadoInvalido() EDadoInvalido(String mensagem)

Classe Funcionario: Estudo de Caso: Folha de Pagamento Representará as características comuns a todos os funcionários. Será abstrata. Representará três atributos do funcionário: A matrícula O seu nome completo O salário fixo O método calcularproventos( ) será um método abstrato. Deverá calcular o valor total a ser pago O método tostring( ) será sobrescrito (observe figura abaixo). Deve invocar o método calcularproventos( )

Classe FPadrao: Estudo de Caso: Folha de Pagamento Representa os funcionários que recebem apenas o salário fixo. Seus proventos equivalem ao valor deste salário fixo. Valor retornado pelo método calcularproventos( ). Classe FComissionado: Representa os funcionários que recebem o salário fixo e um percentual sobre as vendas realizadas. Adiciona dois novos atributos: percentual e vendas. O método calcularproventos( ) soma o salário fixo com o valor devido a título de comissão Classe FProdutividade: Representa os funcionários que recebem o salário fixo e um adicional por cada unidade produzida. Adiciona dois novos atributos: valor e producao. O método calcularproventos( ) deve somar o salário fixo com o que é devido a título de produtividade.

Estudo de Caso: Folha de Pagamento Código 14.23 TesteFolha.java Crie um vetor que suporte até 10 cadastros de funcionários. Crie uma instância de cada uma das seguintes classes: FPadrao, FComissionado e FProdutividade. Grave todas estas instâncias no vetor. Escreva uma estrutura de repetição que percorra o vetor e recupere a representação textual de cada objeto. Exiba todos os dados recuperados através de um diálogo.

Estudo de Caso: Folha de Pagamento Código 14.24 FolhaPagamento.java Crie um vetor que suporte até 1000 cadastros de funcionários. Permita que seja cadastrado qualquer tipo de funcionário. O tipo deverá ser indicado antes de iniciar o cadastro Ao final, gere a folha de pagamento para todos os funcionários cadastrados.

Exercício 1 Suponha que você deve desenvolver um sistema para ser utilizado por empresas que comercializam materiais de construção. O objetivo do sistema é simplesmente permitir o cadastro de seus clientes. Entretanto, estas empresas vendem materiais de construção tanto para pessoas físicas quanto para pessoas jurídicas (outras empresas). O sistema que você deve implementar precisa manter certos dados cadastrais que são comuns a todos os clientes e também precisa manter dados cadastrais que somente as pessoas físicas possuem ou que somente as pessoas jurídicas possuem.

Exercício 1 Os dados que deverão ser registrados nos cadastros de todos os clientes são os seguintes: Código: um número inteiro que servirá para identificar cada cliente no sistema. Nome: será o nome completo no caso de pessoas físicas e o nome fantasia no caso de empresas. Telefone: será o telefone residencial no caso de pessoas físicas e o telefone comercial no caso de pessoas jurídicas. E-mail: será qualquer e-mail que possa ser utilizado para entrar em contato com o cliente. Os dados que somente deverão ser registrados nos cadastros de clientes que são pessoas físicas são os seguintes: o número de seu telefone celular, o número de seu RG e o número de seu CPF. Os dados que somente deverão ser registrados nos cadastros de clientes que são pessoas jurídicas são os seguintes: sua razão social, o número de sua Inscrição Estadual (IE) e seu número no Cadastro Nacional de Pessoas Jurídicas (CNPJ).

Exercício 1 Este sistema não deve permitir que dados inválidos sejam gravados no cadastro de um cliente. Implemente as validações dos dados nos métodos de escrita das classes e utilize a classe EDadoInvalido para a realização desta tarefa. Lembre-se que a classe EDadoInvalido é parte do último exemplo.

Exercício 1 As regras que devem ser implementadas para validar os dados cadastrais dos clientes são as seguintes: Código: deve ser um número inteiro de 1 a 1.000.000. Nome: deve ser um texto contendo pelo menos duas palavras com pelo menos 2 caracteres cada uma. Telefone: deve ser composto pelo código de área, pelo prefixo e pelo número e ser informado exatamente no formato (99)9999-9999. E-mail: deve ser um texto contendo pelo menos dois caracteres separados por um símbolo de arroba e não pode conter mais que um símbolo de arroba. Celular: segue as mesmas restrições descritas para o telefone. RG: deve conter de 5 a 15 dígitos numéricos e o último dígito deve estar separado por um hífen. CPF: deve ser gravado no formato 999.999.999-99. Razão social: segue as mesmas restrições descritas para o nome. IE: deve ser um texto contendo de 1 a 15 caracteres. CNPJ: deve ser informado no formato 00.000.000/0000-00.

Exercício 1 As classes que devem ser implementadas para compor este sistema são aquelas apresentadas através da figura abaixo.

Exercício 2 Suponha que você deve desenvolver um sistema para ser utilizado por farmácias. O objetivo do sistema é permitir o cadastro de três diferentes tipos de parceiros dos quais estas empresas dependem: os funcionários, os clientes e os fornecedores. Considerar-se-á que todos os funcionários e clientes devem ser pessoas físicas e que todos os fornecedores devem ser pessoas jurídicas. O sistema que você deve implementar precisa manter certos dados cadastrais que são comuns a todos os parceiros e também precisa manter dados cadastrais que são específicos para funcionários, clientes e fornecedores.

Exercício 2 Os dados que deverão ser registrados nos cadastros de todos os parceiros são os seguintes: Código: um número inteiro que servirá para identificar cada cliente no sistema. Nome: será o nome completo no caso de funcionários e clientes e o nome fantasia no caso dos fornecedores. Telefone: será o telefone residencial no caso de funcionários e clientes e o telefone comercial no caso dos fornecedores. E-mail: será qualquer e-mail que possa ser utilizado para entrar em contato com o parceiro. Os dados que somente deverão ser registrados nos cadastros de funcionários são os seguintes: o número de sua CTPS (Carteira de Trabalho e Previdência Social) e a série de sua CTPS. Os dados que somente deverão ser registrados nos cadastros de clientes são os seguintes: o número de seu telefone celular, o número de seu RG e o número de seu CPF.

Exercício 2 Os dados que somente deverão ser registrados nos cadastros de fornecedores são os seguintes: sua razão social, o número de sua Inscrição Estadual (IE) e seu número no Cadastro Nacional de Pessoas Jurídicas (CNPJ). Este sistema não deve permitir que dados inválidos sejam gravados no cadastro de um parceiro. Implemente as validações dos dados nos métodos de escrita das classes e utilize o classe EDadoInvalido para a realização desta tarefa.

Exercício 2 As regras que devem ser implementadas para validar os dados cadastrais dos parceiros são as seguintes: Código: deve ser um número inteiro de 1 a 1.000.000. Nome: deve ser um texto contendo pelo menos duas palavras com pelo menos 2 caracteres cada uma. Telefone: deve ser composto pelo código de área, pelo prefixo e pelo número e ser informado exatamente no formato (99)9999-9999. E-mail: deve ser um texto contendo pelo menos dois caracteres separados por um símbolo de arroba e não pode conter mais que um símbolo de arroba. Número da CTPS: deve ser um número inteiro de 1 a 1.000.000.000. Série da CTPS: deve ser um número inteiro de 1 a 30.000. Celular: segue as mesmas restrições descritas para o telefone. RG: deve conter de 5 a 15 dígitos numéricos e o último dígito deve estar separado por um hífen. CPF: deve ser gravado no formato 999.999.999-99. Razão social: segue as mesmas restrições descritas para o nome. IE: deve ser um texto contendo de 1 a 15 caracteres. CNPJ: deve ser informado no formato 00.000.000/0000-00.

Exercício 2 As classes que devem ser implementadas para compor este sistema são aquelas apresentadas através da figura abaixo.

Contato Com o autor: Rui Rossi dos Santos E-mail: livros@ruirossi.pro.br Web Site: http://www.ruirossi.pro.br Com a editora: Editora NovaTerra Telefone: (21) 2218-5314 Web Site: http://www.editoranovaterra.com.br