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

Documentos relacionados
Classe Abstrata e Interface

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

Linguagem de Programação III

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

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

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

Interfaces e Classes Abstratas

Classes e Objetos. Sintaxe de classe em Java

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

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

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

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

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

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

O PARADIGMA ORIENTADO POR OBJETOS

Programação Orientada a Objetos

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

Linguagem de Programação IV Introdução

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

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

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

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

Herança e Polimorfismo

Herança e Propriedades

Linguagens de Programação Aula 12

9 Classes Abstractas e Interfaces

POO29004 Programação Orientada a Objetos

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

Conceitos de Programação Orientada a Objetos

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

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

POO29004 Programação Orientada a Objetos

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

Programação por Objectos. Java

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

4 Conceito de Herança

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

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

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

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

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos

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

Laboratório de programação II

6 Polimorfismo. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

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

Polimorfismo. O que é polimorfismo?

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

C com introdução a OO

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

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

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

Linguagem de Programação II Implementação

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

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

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

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

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Programação Orientada a Objetos JAVA - NETBEANS

Visibilidade e Encapsulamento

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

Rafael B. Pereira (

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

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

Desenvolvimento Web TCC Turma A-1

Computação II Orientação a Objetos

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

Interfaces POO. Prof. Marcio Delamaro

Linguagem de Programação II Herança

Notas de Aula 05: Diretivas de atributos, métodos e classes e o uso de Interfaces.

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

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

Atributos e Métodos Estáticos

Unidade: sobrecarga, construtores e herança

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

Programação Orientada a Objetos

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

Programação Orientada a Objetos

Transcrição:

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Professora Sheila Cáceres

Polimorfismo

Polimorfismo Polimorfismo é a característica única de linguagens orientadas a objetos que permite que diferentes objetos respondam a mesma chamada de métodos cada um a sua maneira. 3

Polimorfismo É a capacidade de objetos instanciados de diferentes classes (com uma superclasse comum) responderem à chamada de métodos, de forma diferente (particular) Capacidade de um objeto decidir que método aplicar a si mesmo. Capacidade de assumir formas diferentes. Permite programar de forma genérica para manipular de uma grande variedade de classes.

Exemplo de Polimorfismo public class Figura { public double calculararea( ) { return 0; public class Quadrado extends Figura { double lado; public Quadrado(double lado) { this.lado = lado; public double calculararea( ) { double area = 0; area = lado * lado; return area; UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 5

Exemplo de Polimorfismo public class Circulo extends Figura { double raio; public Circulo (double raio) { this.raio = raio; public double calculararea( ) { double area = 0; area = 3.14 * raio * raio; return area; UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 6

Exemplo de Polimorfismo public class Main { public static void main(string[] args) { Figura f1 = new Quadrado(4); Figura f2 = new Circulo(2); System.out.println("Área da Figura 1 é: " + f1.calculararea( ) + "\n" + "Área da Figura 2 é: " + f2.calculararea( )); UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 7

Outro Exemplo A fila de impressão armazena objetos genéricos do tipo Documento A mensagem transmitida é: imprima todos os Documentos da fila Cada tipo de documento conhece seus detalhes de impressão UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 8

Polimorfismo Tipos diferentes de objetos Implementações diferentes Mesma mensagem um cheque Imprime os dados do cheque imprime() um relatório Imprime relatório uma fotografia Imprime fotografia 9

Vantagens do Polimorfismo Permitir que vários objetos de um mesmo tipo (classe pai) sejam tratados da mesma maneira e possam ter comportamentos diferentes (a traves da implementação nas classes filhas). Uma outra vantagem é permitir aumentar um software de maneira mais controlada, mais localizada. Considere o exemplo da fila de impressão. Se quisermos incrementar o software e permitir que novos tipos de documentos sejam impressos, a classe FilaImpressao não precisa ser alterada. Somente novas classes precisam ser criadas para implementar os novos tipos de documentos. Assim, o trabalho é menor e mais localizado, evitando que erros de programação sejam inseridos na classe FilaImpressao. UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 10

Aspectos a considerar Usa-se uma variável de um tipo único (normalmente do tipo da superclasse) para armazenar objetos variados do tipo das subclasses. O tipo declarado de uma variável é seu tipo estático (Compiladores verificam os tipos estáticos), o tipo de um objeto é seu tipo dinâmico (Tipos dinâmicos são utilizados em tempo de execução). Usa-se uma instancia de um objeto da super-classe (tipo genérico) para chamar a um método que foi reescrito em uma das sub-classes. O tipo específico do objeto não é conhecido até a execução do programa. A escolha do método a ser executado é feita em tempo de execução. É uma das ferramentas mais poderosas e um dos pilares do paradigma orientado a objetos. UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 11

Os métodos da classe Object Métodos em Object são herdados por todas as classes. Qualquer um desses pode ser sobrescrito. O método tostring é comumente sobrescrito: public String tostring() Retorna uma representação de string do objeto.

Modificador final Uma variável ou atributo pode ser marcado como final para se tornar uma constante final double PI = 3.14; Um método pode ser marcado como final para impedir que seja sobrescrito. public final void meumetodo(){ Uma classe pode ser marcada como final para impedir que possa ser estendida com subclasses. public final class Color{ 13

Classes Abstratas 14

Classes Abstratas Ao subir na hierarquia de heranças, as classes se tornam mais genéricas e, provavelmente mais abstratas Em algum ponto, a classe ancestral se torna tão geral que acaba sendo vista mais como um modelo para outras classes do que uma classe com instâncias específicas que são usadas Uma classe abstrata não pode ser instanciada, ou seja, não há objetos que possam ser construídos diretamente de sua definição. Classes abstratas correspondem a especificações genéricas, que deverão ser concretizadas em classes derivadas (subclasses). Uma classe abstrata serve apenas para definir um comportamento comum que todas as classes derivadas devem seguir.

Classes abstratas Classes abstratas são classes que não podem ser instanciadas, mas é possível declarar uma variável (referência) deste tipo. São utilizadas apenas para permitir a derivação de novas classes. Sintaxe: abstract class NomeDaSuperclasse { // corpo da classe abstrata... Portanto: NomeDaSuperclasse f = new NomeDaSuperclasse( ); > Erro

Classes Abstratas X Classes Concretas Uma classe abstrata é uma classe que não tem instâncias diretas. Uma classe concreta é uma classe que pode ser instanciada. As classes abstratas podem possuir métodos abstratos. 17

Métodos Abstratos No exemplo da Figura, se nenhum objeto da classe Figura poderá ser criado, não importa o que esteja implementado no método calculararea, pois esse código nunca será executado. Pelo polimorfismo somente os métodos das classes derivadas serão executados. O Java permite que métodos assim sejam definidos como abstratos e, portanto, sem nenhuma implementação. Para criar um método abstrato, usamos a palavra-chave abstract na assinatura do método e omitimos o seu corpo (já que não há implementação): public abstract class Figura { public abstract double calculararea( ); UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 18

Classes e Métodos Abstratos Um método abstrato promete que todos os descendentes não abstratos dessa classe abstrata irão implementar esse método abstrato Os métodos abstratos funcionam como uma espécie de guardador de lugar para métodos que serão posteriormente implementados nas subclasses Uma classe pode ser declarada como abstrata mesmo sem ter métodos abstratos

Regras sobre Classes Abstratas Toda classe derivada de uma classe abstrata deve obrigatoriamente implementar os métodos abstratos da superclasse, caso contrário um erro de compilação é gerado. Uma classe que tenha um ou mais métodos abstratos deve ser obrigatoriamente definida como abstrata, caso contrário um erro de compilação é gerado. Uma classe abstrata pode conter métodos não abstratos, isto é, com implementação. Se esses métodos não abstratos não forem definidos (sobrepostos) nas subclasses, então, quando um objeto da subclasse realizar a chamada a um desses métodos, o código contido na classe abstrata será executado (devido à herança). UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 20

Exemplo public abstract class Figura { public abstract double calculararea( ); public void imprimearea( ){ System.out.println(calcularArea( )); public class Main { public static void main(string[] args) { Quadrado q = new Quadrado(4); Circulo c = new Circulo(2); System.out.print("Área da Figura 1 é: "); q.imprimearea( ); System.out.print("Área da Figura 2 é: "); c.imprimearea( ); UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 21

Exemplo public class Circulo extends Figura { double raio; public Circulo (double raio) { this.raio = raio; public double calculararea( ) { double area = 0; area = 3.14 * raio * raio; return area; UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 22

Interfaces

Interface de um Objeto/Classe Interface em Java é uma palavra-chave usada para definir uma coleção de definições de métodos e de valores de constantes. São semelhantes as clases abstratas, mas todos os métodos comportam-se como abstratos. Os métodos são qualificados como public por default. Não definem atributos comuns Só definem constantes, ( atributos qualificados como public, static e final). Não definem construtores Não podem ser instanciadas. UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 24

Interfaces Uma interface não pode ser instanciada (Não se pode criar objetos) Definem tipo de forma abstrata, apenas indicando a assinatura dos métodos Os métodos são implementados por classes e, para isso, é utilizada a palavra-chave implements. Mecanismo de projeto podemos projetar sistemas utilizando interfaces projetar serviços sem se preocupar com a sua implementação (abstração)

implements Classe que implementa uma interface deve definir os métodos da interface: classes concretas têm que implementar os métodos classes abstratas podem simplesmente conter métodos abstratos correspondentes aos métodos da interface

Definição de Classes: Forma Geral class C extends C implements I1, I2,..., In { /*... */ C I1 I2... In C

Exemplo de Uso de Interface public interface Figura { public double calculararea( ); public class Quadrado implements Figura { double lado; public Quadrado(double lado) { this.lado = lado; public double calculararea( ) { double area = 0; area = lado * lado; return area; Como a classe Quadrado implementa a interface Figura, então, o método calculararea( ) deve obrigatoriamente ser implementado. UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 28

Exemplo de Uso de Interface public class Circulo implements Figura { double raio; public Circulo (double raio) { this.raio = raio; public double calculararea( ) { double area = 0; area = 3.14 * raio * raio; return area; UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 29

Exemplo de Uso de Interface public class Main { public static void main(string[] args) { Figura f1 = new Quadrado(4); Figura f2 = new Circulo(2); System.out.println("Área da Figura 1 é: " + f1.calculararea( ) + "\n" + "Área da Figura 2 é: " + f2.calculararea( )); Observe que uma interface não pode ser instanciada mas é possível um objeto, declarado como sendo do tipo definido por uma interface, receber objetos de classes que implementam tal interface. UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 30

Multiplos supertipos Java permite somente a herança simples (uma única classe) com a palavra extends para herdar de uma classe (classe concreta ou abstrata). Interfaces são, portanto, um mecanismo simplificado de implementação de herança múltipla em Java, que possibilita que mais de uma interface determine os métodos que uma classe herdeira deve implementar. classe Base extends Derivada implements interface1, interface2,... Uma classe pode implementar mais de uma interface (contraste com classes abstratas...)

Interfaces e Sub-interfaces Uma interface também pode implementar outras interfaces (não classes). Assim como uma classe B pode estender outra classe A, uma interface I2 pode estender outra interface I1. Desse modo, quando uma classe C implementar I2, terá também obrigatoriamente que implementar os métodos definidos na interface I1. interface I extends I1, I2,..., In { /*... assinaturas de novos métodos... */ UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 32

Implementação de Múltiplas Interfaces Arquivo: Printable.java public interface Printable { public byte[ ] getbytestoprint( ); Arquivo: Printer.java public interface Printer { public void print(printable p); Uma classe pode implementar mais de uma interface, assumindo assim vários comportamentos. Arquivo: SendFax.java public interface SendFax { public void transmit(printable p); public class FaxAndPrinter implements Printer, SendFax {... UNIP-Curso: Ciência da Computação (1sem/2009) - Di sciplina: Linguagem de POO - 174L 33

O que usar? Quando? Classes (abstratas) Agrupa objetos com implementações compartilhadas Define novas classes através de herança simples (herda de uma única classe abstrata ou não) Só uma pode ser supertipo de outra classe Podem conter métodos nãoabstratos (com implementação) Interfaces Agrupa objetos com implementações diferentes Define novas interfaces através de herança múltipla (implementa várias interfaces) Várias podem ser supertipo do mesmo tipo. Até java 7, não podiam conter métodos com implementação. Desde Java 8, se permite Default Methods

Bibliografia Programação orientada a objetos com Java. Autores David J. Barnes e Michael Kolling. Java: Como programar. Autores: H. M. Deitel e P. J. Deitel Editora: Pearson 8a Edição Nota: Alguns exemplos desta apresentação foram extraídos das fontes aqui apresentadas.