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

Documentos relacionados
9 Classes Abstractas e Interfaces

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

Programação por Objectos. Java

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

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

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

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

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

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

Linguagem de Programação III

4 Conceito de Herança

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

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

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

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

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

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

Palavras Reservadas da Linguagem Java

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

Classe Abstrata e Interface

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

Conceitos de Programação Orientada a Objetos

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

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

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

Classes e Objetos. Sintaxe de classe em Java

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

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

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

Programação Orientada a Objetos

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

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

Interfaces e Classes Abstratas

Linguagem de Programação III

Unidade: Classes Abstratas, Polimorfismo, Sobreposição 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.

COMPORTAMENTOS - Observações

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

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

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

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 Implementação

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

Programação Orientada a Objetos II Java Décima primeira aula

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

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Polimorfismo. O que é polimorfismo?

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

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

Programação Orientada a Objetos

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Interfaces POO. Prof. Marcio Delamaro

Orientação a Objetos e Java

Linguagem de Programação. Diagrama de classes

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

Linguagem de Programação II Herança

Rafael B. Pereira (

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

Programação Orientada por Objetos

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

Linguagem de Programação IV Introdução

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

Sobrecarga, Sobreposição e Polimorfismo

Transcrição:

9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract double perimetro(); UBI, Departamento de Informática T09-1

Não é possível criar instâncias de uma classe abstracta; Mecanismo de herança mantém-se; Princípio da substitutividade mantém-se; Se uma subclasse de uma classe abstracta implementar todos os métodos, passará a ser uma classe concreta (não abstracta). Para que servem? Definir uma linguagem comum a um conjunto de classes que herdam a classe abstracta. UBI, Departamento de Informática T09-2

Exemplos: Forma Círculo Rectângulo Triângulo public class Circulo extends Forma {... UBI, Departamento de Informática T09-3

Exemplos: Number Integer Float Double Long UBI, Departamento de Informática T09-4

Notas: Variáveis não são abstractas; Construtores não são abstractos; Métodos de classe não são abstractos; Métodos privados não são abstractos. UBI, Departamento de Informática T09-5

Interfaces (em Java) Interface : - especificação sintáctica de um conjunto de métodos e constantes Permite definir um comportamento comum a duas ou mais classes que não possuam qualquer relação hierárquica entre si UBI, Departamento de Informática T09-6

Declaração de uma interface (exemplo): public abstract interface Ordem{ public abstract boolean igual (Ordem elemento); public abstract boolean maior (Ordem elemento); public abstract boolean menor (Ordem elemento); Uma interface é (implícita e) obrigatoriamente abstracta. Os métodos declarados numa interface são (implícita e) obrigatoriamente públicos e abstractos. UBI, Departamento de Informática T09-7

Uma classe que implemente uma dada interface tem obrigatoriamente que implementar todos os métodos declarados na interface. public class MyInteger implements Ordem{... public boolean igual (Ordem e){ public boolean maior (Ordem e){ public boolean menor (Ordem e){ // outros métodos Todas as classes que implementam a interface Ordem têm em comum o comportamento definido em Ordem. UBI, Departamento de Informática T09-8

As interfaces têm a sua própria hierarquia: public interface Amovivel { void movimento ( double x, double y); public interface ComMotor extends Amovivel public static final int limitevel = 120; public abstract String motor(); As constantes declaradas numa interface são implícita e obrigatoriamente: public static final UBI, Departamento de Informática T09-9

-Uma classe que implemente a interface ComMotor terá obrigatoriamente que implementar: - todos os métodos da interface e - todos os métodos de todas as superinterfaces public class Veiculo implements ComMotor { public String motor () { public void movimento (double x, double y){ UBI, Departamento de Informática T09-10

Uma interface pode ser sub-interface de várias interfaces: public interface Transformável extends Escalável, Rodavel, Desenhavel {... A interface Transformavel herda todas as definições sintácticas das 3 interfaces especificadas. Mecanismo de herança múltipla UBI, Departamento de Informática T09-11

Classes Abstractas versus Interfaces - uma classe abstracta pode ter métodos implementados - numa interface todos os métodos são abstractos - uma subclasse de uma classe abstracta pode ser ou não uma classe abstracta - numa subinterface todos os métodos são abstractos UBI, Departamento de Informática T09-12

Classes Abstractas versus Interfaces - uma classe abstracta pode ser usada para escrever software genérico, cada subclasse vai fazendo a sua implementação num processo de especialização sucessiva. - uma interface serve para especificar um comportamento comum a todas as classes que a implementam. UBI, Departamento de Informática T09-13

Compatibilidade entre Interfaces e Classes Seja a interface Ordem: public interface Ordem{ boolean igual (Ordem elemento); boolean maior (Ordem elemento); boolean menor (Ordem elemento); UBI, Departamento de Informática T09-14

Compatibilidade entre Interfaces e Classes Seja a interface Ordem: public interface Ordem{ boolean igual (Ordem elemento); boolean maior (Ordem elemento); boolean menor (Ordem elemento); Identificadores de interfaces podem ser usados na declaração de variáveis: Ordem ord1, ord2; - os referências ord1 e ord2 podem ser associadas a quaisquer instâncias que implementem a interface Ordem. UBI, Departamento de Informática T09-15

Supondo a classe ClasseA: public class ClasseA implements Ordem { // implementação dos métodos da interface Ordem (igual, maior e menor) // outros métodos public void m1 () { public void m2 () { UBI, Departamento de Informática T09-16

e a declaração: ClasseA A1 = new ClasseA(); ord1 = A1; ord1.m1 (); ord1.m2 (); ord1. igual (ord2) // correcto //errado m1() não é método da interface //errado m2() não é método da interface // correcto UBI, Departamento de Informática T09-17

Herança de interfaces Exemplos retirados de [Martins] Programação Orientada aos Objectos em Java 2, F. Mário Martins, FCA, Setembro de 2000. O que acontece quando há sobreposição de constantes e métodos? 1) Herança simples de constantes UBI, Departamento de Informática T09-18

public interface I1 { // constantes int x = 1; int y = 2; int z = 3; // métodos int soma(); public interface I2 extends I1 { // constantes int x = 10; int y = 20; // as constantes podem ser // redefinidas UBI, Departamento de Informática T09-19

public class Classe1 implements I1 { public class Classe2 implements I2 { public int soma(){ return ( x + y + z ); public int soma(){ return ( x + y + z ); UBI, Departamento de Informática T09-20

public class Teste { public static void main (String args [] ){ Classe1 C1 = new Classe1(); Classe2 C2 = new Classe2(); System.out.println ( C1.soma() ); System.out.println ( C2.soma() ); Qual o output deste programa? UBI, Departamento de Informática T09-21

Resposta: 6 33 Como aceder ao x e ao y da super-interface? public class Classe3 implements I2 { public int soma(){ return ( I1.x + y + z ); - prefixar a constante com o nome da interface UBI, Departamento de Informática T09-22

2) Herança múltipla de constantes public interface I3 extends I1, I2 { // redefine as constantes int x = 100; int y = 200; int z = 300; // válido // métodos int soma(); // sobrepõe o método public interface I4 extends I1, I2 { //válido UBI, Departamento de Informática T09-23

public class Classe3 implements I3 { public int soma() { return (x + y + z ) ; //válido public class Classe4 implements I4 { public int soma() { return (x + y + z ) ; // errado - ambíguo UBI, Departamento de Informática T09-24

public class Classe4 implements I4 { public int soma() { return ( I1.x + I2.y + z ) ; // correcto UBI, Departamento de Informática T09-25

3) Herança simples de métodos public interface I1 { // constantes int a = 1; int b = 2; public interface I2 extends I1 { // constantes int b = 20; //redefinição // métodos int soma(); int prod(); // métodos int soma() //sobreposição * int soma (int x); int prod (int x); * tal como na herança de classes, a sobreposição de métodos obriga a igual tipo de resultado UBI, Departamento de Informática T09-26

public class C1 implements I1 { public int soma() { return a + b; public int prod() { return a * b; public class C2 implements I2 { // métodos de I2 public int soma() { return a + b; public int soma (int x) { return x + a + b; public int prod (int x) { return a * x * b; //métodos de I1 public int prod() {return a * b; UBI, Departamento de Informática T09-27

Qual o output do seguinte programa? public class TesteInterface{ public static void main (String args [] ) { C1 c1 = new C1(); C2 c2 = new C2(); System.out.println ( c1.soma() ); System.out.println ( c1.prod() ); System.out.println ( c2.soma() ); System.out.println ( c2.soma(10) ); System.out.println ( c2.prod() ); System.out.println ( c2.prod(5) ); UBI, Departamento de Informática T09-28

4) Herança múltipla de métodos public interface I11 { // constantes int a = 1; int b = 2; // métodos int soma(); int prod (); ** public interface I22 { // constantes int b = 20; //métodos int soma(); int soma (int x); float prod (); ** float div (int x, int z); boolean prod (int x, int y); UBI, Departamento de Informática T09-29

public interface I33 extends I11, I22 { int soma (int x); //sobreposição float prod (int x, int y); // errado, sobrepõe o método com um diferente tipo de resultado boolean prod (int k); // sobrecarga ** ao implementarmos I33 ocorrerá um erro de compilação: sobreposição com diferentes tipos de resultados. UBI, Departamento de Informática T09-30

Observações: 1) Se uma interface declara um método, esse método sobrepõe todos os métodos com a mesma assinatura nas suas superinterfaces; Se um método sobrepõe outro, terá que ter o mesmo tipo de resultado que o primeiro. 2) Se um método sobrepõe outro então a sua cláusula throws não pode entrar em conflito com a dos métodos que sobrepõe. UBI, Departamento de Informática T09-31

3) Os métodos são sobrepostos com base na sua assinatura; Se uma interface declara dois métodos com o mesmo nome, e uma interface sobrepõe um deles, a interface herda na mesma o outro método. 4) Uma interface herda das suas super-interfaces todos os métodos que não sejam sobrepostos por declaração na interface. UBI, Departamento de Informática T09-32

5) É possível uma interface herdar mais do que um método com a mesma assinatura, desde que com o mesmo tipo de resultado.!! Na classe que implementa essa interface ocorrerá um erro. UBI, Departamento de Informática T09-33

5) É possível uma interface herdar mais do que um método com a mesma assinatura, desde que com o mesmo tipo de resultado.!! Na classe que implementa essa interface ocorrerá um erro. UBI, Departamento de Informática T09-34

Supondo a classe Aluno, construída nas aulas anteriores, Construa uma pequena aplicação que permita as seguintes opções: 1 - Criar aluno 2 Consultar aluno, dado o seu número 3 Consultar aluno, dado o seu nome 4 Listar todos os alunos 5 Apagar um aluno 6 Corrigir o nome de um aluno 7 Guardar alunos num ficheiro UBI, Departamento de Informática T09-35

- Os alunos criados deverão ser armazenados num objecto do tipo java.util.vector<aluno>. - A opção 7 deverá escrever num ficheiro (fichalunos) o vector com os alunos existentes no vector de alunos. - Quando o programa é executado deverá começar por ler o conteúdo desse ficheiro. Duas versões: - um só programa e uma função para cada opção. - as várias funções numa classe separada. UBI, Departamento de Informática T09-36