POO29004 Programação Orientada a Objetos

Documentos relacionados
POO29004 Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos

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

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 OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

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

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

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

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

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

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

Desenvolvimento Web TCC Turma A-1

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

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

Introdução ao Ambiente Java

Herança e Polimorfismo

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

Classes e Objetos. Sintaxe de classe em Java

Sobrecarga, Sobreposição e Polimorfismo

9 Classes Abstractas e Interfaces

extendsé usado para indicar herança em JAVA

Computação II Orientação a Objetos

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

Linguagens de Programação Aula 12

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

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

Interfaces e Classes Abstratas

Programação por Objectos. Java

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

4 Conceito de Herança

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

Linguagem de Programação. Diagrama de classes

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

Herança e Propriedades

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

Programação Orientada a Objetos

Objetivos. Explorar os conceitos fundamentais acerca do uso herança na linguagem Java

Desenvolvimento OO com Java Classes abstratas e interfaces

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

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

Herança e Polimorfismo

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

1. Por que não utilizar a notação de composição da UML para mostrar que um cachorro é composto de altura, peso, cor e data de nascimento?

Conceitos de Programação Orientada a Objetos

Linguagem de Programação I

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

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

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

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

Auto-Referenciamento e Herança

Programação Orientada a Objetos

Orientação a Objetos AULA 06

Notas de Aula 04: Herança e polimorfismo.

Orientação a Objetos - Herança

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

Unidade: sobrecarga, construtores e herança

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

Polimorfismo. O que é polimorfismo?

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

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

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

Orientação a objetos Disciplina: Linguagens de Programação. Prof. Alexandre Cassimiro Andreani

Programação Orientada a Objetos Relacionamentos entre classes

Programação de Computadores II TCC Turma A-1

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

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

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

Linguagem de Programação II Implementação

Herança - Conceitos Básicos

Python Orientação a Objetos. Introdução à Programação SI2

Programação Orientada a Objetos JAVA - NETBEANS

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

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

Curso: Técnico em Informática Integrado Disciplina: POO Carga horária: 60h Período: 2º Ano Professor: Edmilson Barbalho Campos Neto LISTA 02.

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

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

Atributos e Métodos Estáticos

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

Introdução. Extends e Super. Exercício Prático 5 Herança. Nome:

Programação por Objectos. Java

Generics - Java. Fernando Santos. Programação Orientada a Objetos

COMPORTAMENTOS - Observações

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Programação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

Orientação a Objetos. Vanessa Braganholo

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

PROGRAMAÇÃO I HERANÇA E POLIMORFISMO

Orientação a Objetos (OO)

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

Herança - Conceitos Básicos

5 Reuso de Classes. Desenvolvimento OO com Java. Vítor E. Silva Souza

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

Programação Orientada por Objetos

Programação Orientada a Objetos

Rafael B. Pereira (

Transcrição:

POO29004 Programação Orientada a Objetos Classe abstrata, interface e polimorfismo Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/poo 19 de abril de 2018 1/26

Exemplo: Aplicativo para desenho vetorial Representar as formas geométricas: Ponto, Círculo, Cilindro e Retângulo Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. 2/26

Exemplo: Aplicativo para desenho vetorial Representar as formas geométricas: Ponto, Círculo, Cilindro e Retângulo Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. 2/26

Exemplo: Aplicativo para desenho vetorial Representar as formas geométricas: Ponto, Círculo, Cilindro e Retângulo Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. Nova necessidade: Classes Triangulo e Cubo 2/26

Exemplo: Aplicativo para desenho vetorial Representar as formas geométricas: Ponto, Círculo, Cilindro e Retângulo Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. Nova necessidade: Classes Triangulo e Cubo 2/26

Exemplo: Aplicativo para desenho vetorial Representar as formas geométricas: Ponto, Círculo, Cilindro e Retângulo Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. Nova necessidade: Classes Triangulo e Cubo Como garantir que as novas classes terão obrigatoriamente o método desenhar? 2/26

Classe abstrata Não é possível instanciar objetos de uma classe abstrata Pode conter métodos concretos e métodos abstratos Métodos concretos possuem implementação Métodos abstratos não possuem implementação Todo método abstrato deve ser obrigatoriamente sobrescrito pelas subclasses, métodos concretos não precisam ser sobrescritos Uma subclasse que não prover implementações para os métodos abstratos herdados, deve obrigatoriamente ser abstrata 3/26

Exemplo: Aplicativo para desenho vetorial 4/26

Exemplo: Aplicativo para desenho vetorial 1 public abstract class FormaGeometrica{ 2 public abstract void desenhar(); 3 } 4 public class Ponto extends FormaGeometrica{ 5 private int x; 6 private int y; 7 8 @Override 9 public void desenhar(){ 10 System.out.println("Desenhando ponto: " + x +"," + y); 11 } 12 } 5/26

Exemplo: Classe abstrata Personagem 13 public abstract class Personagem{ 14 private int id; 15 private String nome; 16 17 public Personagem(int i, String n){ 18 this.id = i; 19 this.nome = n; 20 } 21 22 public String obternome(){ 23 return this.nome; 24 } 25 26 public void imprimirdados(){ 27 System.out.println("Id:" + this.id + ", Nome: " + this.nome); 28 } 29 30 public abstract void atacar(float intensidade); 31 } 6/26

Exemplo: Classe concreta Arqueiro 32 public class Arqueiro extends Personagem{ 33 private int habilidade; 34 35 public Arqueiro(int i, String n, int h){ 36 super(i,n); 37 this.habilidade = h; 38 } 39 40 public void imprimirdados(){ 41 super.imprimirdados(); 42 System.out.println("Habilidade: " + this.habilidade); 43 } 44 45 @Override 46 public void atacar(float intensidade){ 47 System.out.println("Disparando flechas com a intensidade: " + intensidade); 48 } 49 } 7/26

Exercício 1 Crie uma classe abstrata Pessoa e duas classes concretas, Aluno e Professor, que herdam da classe Pessoa Cada classe deve ter no mínimo 2 atributos específicos e um método construtor que inicia todos atributos Classe Pessoa deverá possuir 1 método concreto e 1 método abstrato 2 Crie uma classe Principal e nesta crie uma instância para cada classe e invoque alguns de seus métodos 8/26

Interface Para alguns projetos de software, desenvolvido por diferentes pessoas em diferente instantes, é necessário criar contratos para que os códigos desenvolvidos por um time possam interagir com os códigos desenvolvidos pelo outro time, sem que ambos os times precisem ter conhecimento sobre o código que está escrito pelo outro 9/26

Interface Para alguns projetos de software, desenvolvido por diferentes pessoas em diferente instantes, é necessário criar contratos para que os códigos desenvolvidos por um time possam interagir com os códigos desenvolvidos pelo outro time, sem que ambos os times precisem ter conhecimento sobre o código que está escrito pelo outro Exemplo: Jogo de corrida Um fabricante de jogo de corrida gostaria de permitir que seu jogo fosse estendido por outras pessoas de forma que possam criar seus próprios carros. Contudo, deve-se garantir que todos os carros possuam os mesmos métodos (i.e. frear, acelerar, etc) 9/26

Interface Uma Interface é Java é semelhante a uma classe abstrata, porém só pode conter constantes, métodos abstratos, métodos default e métodos estáticos Por padrão todos atributos são public, static e final Uma Interface não pode ser instanciada e o principal objetivo é servir como referência para ser implementada por classes Somente métodos estáticos ou default poderão conter implementação 10/26

Exemplo: Interface Carro 34 public interface Carro{ 35 // ilustrando o uso de constantes em uma interface. 36 public static final String nome = "Carro"; 37 38 // todo método é abstrato por padr~ao 39 public void frear(int intensidade); 40 } 11/26

Exemplo: Interface Carro 34 public interface Carro{ 35 // ilustrando o uso de constantes em uma interface. 36 public static final String nome = "Carro"; 37 38 // todo método é abstrato por padr~ao 39 public void frear(int intensidade); 40 } 40 public class Fusca implements Carro{ 41 private String modelo; 42 43 public Fusca(String m){ 44 this.modelo = m; 45 } 46 47 public void frear(int intensidade){ 48 System.out.println("Encostando a lona no tambor de freio"); 49 } 50 } 11/26

Herança múltipla em Java Java não permite que uma classe seja derivada de mais de uma outra classe Para evitar as complicações relacionadas a herança múltipla de estados habilidade de herdar atributos de múltiplas classes O conceito de herança múltipla pode ser obtido em Java fazendo uso de Interfaces herança múltipla de tipos uma classe pode implementar mais de uma interface herança múltipla de implementação habilidade de herdar as definições de métodos de múltiplas interfaces 12/26

Exemplo: Herança múltipla para obtermos um Triatleta Corredor pode correr Ciclista pode pedalar Nadador pode nadar 13/26

Exemplo: Herança múltipla para obtermos um Triatleta Corredor pode correr Ciclista pode pedalar Nadador pode nadar Desenhe um diagrama de classes UML 1 Uma classe para representar cada atleta, sabendo que todos devem possuir um nome e um CPF Robson Caetano, Miguel Indurain e Cesar Cielo 2 Uma classe para representar um Triatleta, que pode correr, pedalar e nadar. Este também possui um nome e CPF 13/26

Exemplo: Herança múltipla para obtermos um Triatleta 14/26

Exercício: Herança múltipla com Interfaces 1 Faça um diagrama UML com classes e interfaces que permitam representar animais e suas habilidades (aquilo que são capazes de fazer) Arara, Avestruz, Baleia, Cachorro, Gato, Leão, Lobo, Macaco, Morcego, Pinguim, Ornitorrinco 2 Implemente as classes em Java e faça um aplicativo Java para instanciar alguns objetos dessas classes 15/26

Polimorfismo 16/26

Polimorfismo A palavra polimorfismo significa muitas formas Permite desenvolver e implementar sistemas que sejam facilmente extensíveis de forma que novas classes possam ser adicionadas ao sistema exigindo pouca ou nenhuma modificação nas partes gerais do sistema Novas classes devem obrigatoriamente fazer parte de uma hierarquia de classes já existente no sistema Deve-se programar pensando somente nas classes mais genéricas, não se preocupando com as classes mais específicas, haja visto que os métodos existentes na superclasse também estarão presentes nas subclasses 16/26

Exemplo:Java of Empires Existem três personagens: Aldeão, Arqueiro e Cavaleiro Todos compartilham algum tipo de informação e comportamento, logo, todos herdam da classe Personagem Todo personagem possui um id único no jogo e todo personagem poderá se mover pelo cenário Aldeão por 1 unidade Arqueiro por 2 unidades Cavaleiro por 10 unidades 51 Aldeao a = new Aldeao(); 52 Arqueiro b = new Arqueiro(); 53 Cavaleiro c = new Cavaleiro(); 54 55 // invocando o método mover de cada objeto 56 a.mover(); 57 b.mover(); 58 c.mover(); 17/26

Exemplo: Jogo Java of Empires No jogo é possível instanciar até 300 personagens, sendo assim seria mais adequado fazer uso de vetores 55 Aldeao veta[] = new Aldeao[100]; 56 Arqueiro vetb[] = new Arqueiro[100]; 57 Cavaleiro vetc[] = new Cavaleiro[100]; 58 59 //omitindo a criaç~ao dos objetos 60 61 // invocando o método mover de cada objeto 62 for(int i = 0; i < 100; i++){ 63 veta[i].mover(); 64 vetb[i].mover(); 65 vetc[i].mover(); 66 } 18/26

Exemplo: Jogo Java of Empires No jogo é possível instanciar até 300 personagens, sendo assim seria mais adequado fazer uso de vetores 55 Aldeao veta[] = new Aldeao[100]; 56 Arqueiro vetb[] = new Arqueiro[100]; 57 Cavaleiro vetc[] = new Cavaleiro[100]; 58 59 //omitindo a criaç~ao dos objetos 60 61 // invocando o método mover de cada objeto 62 for(int i = 0; i < 100; i++){ 63 veta[i].mover(); 64 vetb[i].mover(); 65 vetc[i].mover(); 66 } E se criarmos um novo personagem Navio? Será necessário modificar o código dentro do laço de repetição 18/26

Exemplo: Jogo Java of Empires Com o polimorfismo é possível incluir novos personagens no jogo sem que seja preciso modificar boa parte do código Sempre programar para o geral e nunca para o específico. 67 // O vetor da superclasse pode armazenar objetos das suas subclasses 68 Personagem vetp[] = new Personagem[4]; 69 70 vetp[0] = new Aldeao(); 71 vetp[1] = new Arqueiro(); 72 vetp[2] = new Cavaleiro(); 73 vetp[3] = new Navio(); 74 75 // o método mover existe na superclasse. No tempo de execuç~ao s~ao invocados os métodos de cada subclasse 76 for(int i=0; i < 4; i++){ 77 vetp[i].mover(); 78 } 19/26

Prática No exercício anterior foram criadas as classes Pessoa, Aluno e Professor Faça uso do conceito de Polimorfismo e: Crie um vetor de Pessoas de tamanho 10 e dentro desse vetor crie 5 instâncias da classe Aluno e 5 instâncias da classe Professor Imprima os dados de todos Alunos e Professores 20/26

Exercício: Java of Empires 1 Implementar classes para representar Arqueiro e Cavaleiro 2 Estudar o código e propor uma solução que faça uso dos conceitos de Herança e Polimorfismo https://github.com/poo29004/java-of-empires 21/26

Tipos genéricos em Java 22/26

Motivação Exemplo: classe para armazenar instâncias de qualquer classe 79 public class Caixa{ 80 private Object dado; 81 public void set(object obj){ this.dado = obj;} 82 83 public Object getdado(){ return this.dado;} 84 } 85 public class Principal{ 86 public static void main(string[] args){ 87 Caixa c = new Caixa(); 88 String s = "Olá mundo"; 89 c.set(s); 90 String outra = (String) c.getdado(); // cast obrigatório 91 } 92 } 22/26

Motivação Exemplo: classe para armazenar instâncias de qualquer classe 97 public class Caixa{ 98 private Object dado; 99 public void set(object obj){ this.dado = obj;} 100 101 public Object getdado(){ return this.dado;} 102 } 111 Caixa c = new Caixa(); 112 Pessoa p = new Pessoa("Joao"); 113 c.set(p); 114 String outra = (String) c.getdado(); // só dará erro durante a execuç~ao É mais fácil detectar bugs em tempo de compilação do que em tempo de execução. Tipos genéricos possibilita que bugs possam ser detectados já na fase de compilação 22/26

Tipos genéricos em Java Permite que tipos (Classes ou Interfaces) sejam passados como parâmetros durante a definição de Classes, Interfaces ou métodos Parâmetros de tipos permite reutilizar a mesma classe diante de diferentes entradas Entradas de parâmetros formais são obrigatoriamente valores 115 public void metodo(int parametro){... } 116... 117 objeto.metodo(123); Entradas de parâmetros de tipos são tipos Exemplo de tipos: String, Pessoa, Carro, etc. 23/26

Reescrevendo classe Caixa para usar tipos genéricos 118 public class Caixa<T>{ 119 private T dado; 120 public void set(t obj){ this.dado = obj;} 121 122 public T getdado(){ return this.dado;} 123 } 124 public class Principal{ 125 public static void main(string[] args){ 126 Caixa<String> c = new Caixa<>(); 127 String s = "Olá mundo"; 128 c.set(s); 129 String outra = c.getdado(); // n~ao precisa do cast 130 } 131 } 24/26

Reescrevendo classe Caixa para usar tipos genéricos 135 public class Caixa<T>{ 136 private T dado; 137 public void set(t obj){ this.dado = obj;} 138 139 public T getdado(){ return this.dado;} 140 } 149 Caixa<String> c = new Caixa<>(); 150 Pessoa p = new Pessoa("Joao"); 151 c.set(p); // erro de compilaç~ao, tipos errados 24/26

Parâmetro de tipo limitado É possível restringir quais tipos são aceitos Somente as classes ou interfaces da hierarquia seriam permitidas 152 public class Caixa<T extends Personagem>{ 153 private T personagem; 154... 155 } 156 public class Principal{ 157 public static void main(string[] args){ 158 159 // ok, pois Aldeao herda de Personagem 160 Caixa<Aldeao> c = new Caixa<>(); 161 162 Caixa<String> n = new Caixa<>();// erro! 163 } 164 } 25/26

Convenção de nomes Nomes dos parâmetros de tipos devem ser uma única letra maiúscula E para elementos T para tipos K para chaves V para valores N para números A API Collections do Java faz uso do nome E Veja mais informações na documentação oficial https://docs.oracle.com/javase/tutorial/java/generics 26/26