POO29004 Programação Orientada a Objetos

Documentos relacionados
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; }

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

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

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

Interfaces e Classes Abstratas

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

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

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

Programação Orientada a Objetos

Sobrecarga, Sobreposição e Polimorfismo

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

Desenvolvimento Web TCC Turma A-1

Computação II Orientação a Objetos

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

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

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

Linguagens de Programação Aula 12

Programação Orientada a Objetos Relacionamentos entre classes

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

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

9 Classes Abstractas e Interfaces

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

Programação Orientada a Objetos

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

Herança e Polimorfismo

Herança e Propriedades

Linguagem de Programação. Diagrama de classes

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

TIMTec. Introdução à programação em linguagem JAVA

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

Unidade: sobrecarga, construtores e herança

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

Notas de Aula 04: Herança e polimorfismo.

extendsé usado para indicar herança em JAVA

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

Orientação a Objetos - Herança

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

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

Java na Prática. Célio Silva Aula 3

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

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

Programação Orientada a Objetos

Linguagem de Programação I

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

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

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Desenvolvimento OO com Java Classes abstratas e interfaces

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

Programação por Objectos. Java

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

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

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

Herança - Conceitos Básicos

4 Conceito de Herança

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Atributos e Métodos Estáticos

Herança - Conceitos Básicos

Orientação a Objetos Classes Abstratas

LISTA DE EXERCÍCIO 7 Interfaces

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

Capítulo 2. Orientação a Objetos

Programação C# + ASP.NET

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

LEIC-A / MEIC-A 2007/2008 (1º

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos em Java

Modelagem de Processos

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 a Objetos (POO) João Paulo Q. dos Santos

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

Interface vs. Implementação Herança vs. Composição

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Subprogramação. Vanessa Braganholo

PROGRAMAÇÃO ORIENTADA A OBJETOS: HERANÇA

Programação Orientada a Objetos para Redes de Computadores

Programação Java III. Prof. Vinicius Rosalen

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

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Programação Orientada a Objetos. Prof. MsC Sílvio Bacalá Júnior

Construtores. Introdução

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 18 de setembro de 2017 1/21

Classe abstrata Métodos concretos possuem implementação Métodos abstratos não possuem implementação Classe abstrata Não é possível instanciar objetos de uma classe abstrata Pode conter métodos concretos e métodos abstratos 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 2/21

Exemplo: Aplicativo para desenho vetorial Faça um diagrama de classes UML para representar as formas geométricas: Ponto, Círculo, Cilindro, Retângulo e Triângulo. Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. 3/21

Exemplo: Aplicativo para desenho vetorial Faça um diagrama de classes UML para representar as formas geométricas: Ponto, Círculo, Cilindro, Retângulo e Triângulo. Todas as classes deverão ter obrigatoriamente um método desenhar, que uma vez invocado, fará com que a forma seja desenhada. 3/21

Exemplo: Aplicativo para desenho vetorial Faça um diagrama de classes UML para representar as formas geométricas: Ponto, Círculo, Cilindro, Retângulo e Triâ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: criar classes para representar um Triangulo e um Cubo 3/21

Exemplo: Aplicativo para desenho vetorial Faça um diagrama de classes UML para representar as formas geométricas: Ponto, Círculo, Cilindro, Retângulo e Triâ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: criar classes para representar um Triangulo e um Cubo 3/21

Exemplo: Aplicativo para desenho vetorial Faça um diagrama de classes UML para representar as formas geométricas: Ponto, Círculo, Cilindro, Retângulo e Triâ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: criar classes para representar um Triangulo e um Cubo É possível garantir que as novas classes terão obrigatoriamente o método desenhar? 3/21

Exemplo: Aplicativo para desenho vetorial 4/21

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/21

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/21

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/21

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/21

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/21

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/21

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/21

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/21

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/21

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/21

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

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/21

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

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/21

Polimorfismo 16/21

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/21

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/21

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/21

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/21

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/21

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/21

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/21