Programação Java III. Prof. Vinicius Rosalen

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

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

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

Classes e Objetos. Sintaxe de classe em Java

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

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

Interfaces e Classes Abstratas

Programação por Objectos. Java

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

Linguagem de Programação III

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

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

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

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

Classe Abstrata e Interface

4 Conceito de Herança

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

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

Laboratório de programação II

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

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

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

Herança e Polimorfismo

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

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

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

Conceitos de Programação Orientada a Objetos

Unidade: sobrecarga, construtores e herança

POO29004 Programação Orientada a Objetos

C com introdução a OO

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

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

9 Classes Abstractas e Interfaces

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

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

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

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

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

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

Linguagens de Programação Aula 12

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

POO29004 Programação Orientada a Objetos

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

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

Linguagem de Programação. Diagrama de classes

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

POO e C++: Herança e Polimorfismo

Herança e Propriedades

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

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

POO29004 Programação Orientada a Objetos

Linguagem de Programação II Implementação

Computação II Orientação a Objetos

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

Programação Orientada a Objetos JAVA - NETBEANS

Linguagem de Programação IV Introdução

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

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

[Desenvolvimento OO com Java] Classes abstratas e interfaces

Herança (parte 2) Redefinição de métodos AULA 11

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

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

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

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

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

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

Polimorfismo. O que é polimorfismo?

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. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

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

Orientação a Objetos Classes Abstratas

Linguagem de Programação II Implementação

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

Lista de exercícios 2

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

Interfaces POO. Prof. Marcio Delamaro

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

Transcrição:

Programação Java III Prof. Vinicius Rosalen

Parte III

Métodos e Classes Abstratas Resumo da aula anterior... Ao criarmos uma classe para ser estendida, Às vezes codificamos alguns métodos para os quais não sabemos dar uma implementação, ou seja, Um método que só subclasses saberão implementar Uma classe deste tipo não pode ser instanciada pois sua funcionalidade está incompleta. É como se tentássemos andar de carro sem ter as rodas construídas... Tal classe é dita abstrata.

Métodos e Classes Abstratas Resumo da aula anterior... Uma classe abstrata é utilizada quando desejase: Fornecer uma interface comum a diversos membros de uma hierarquia de classes. Não se preocupar COMO, apenas QUAL o contrato que deve ser obedecido...

Java Métodos e Classes Abstratas Resumo da aula anterior... Classes Abstratas Método sem corpo { } Características - Abstração : suprimir detalhes para melhor compreensão - Classe abstrata - possui métodos abstratos - Força a implementação para que possa ser instanciada Todos os veículos possuem a ação de abastecer, mas a forma de abastecer (álcool, gasolina ou diesel) só é conhecida pelas filhas da herança

Upcasting e Downcasting Resumo da aula anterior... Outro dois conceitos bastante importantes é sobre: A conversão de tipos na relação das classes em herança. Os conceitos são de o polimorfismo de : Downcasting e Upcasting

Upcasting e Downcasting Em Java, Upcasting é automático A conversão de tipos para o topo da hierarquia é automático Ampliação (upcasting) é a conversão implícita de uma subclasse para uma superclasse Se tenho o tipo Pai e instancio o Filho é automático. O contrário não. Mas Downcasting deve ser explícito A conversão de tipos para as folhas da hierarquia deve ser explicitado. - O Pai está contido no filho. - Mas o filho não está contido no pai - Questão de reserva de memória.

Upcasting e Downcasting Vamos analisar um exemplo... Máscara de visualização Área efetiva alocada Ponto pt = new PontoColorido(0,0,1); PontoColorido px = (PontoColorido)pt; Ponto PontoColorido pt = px // UpCasting (Pai recebe o filho) px = pt; // Erro, filho não recebe o pai diretamente px = (PontoColorido)pt; // Downcast Mas só enxerga as áreas em comum a ambos Ponto pt2 = new Ponto(); PontoColorido py = (PontoColorido)pt2; System.out.println(py.cor); //ERRO de execução espaços de memórias diferentes cor é um atributo de PontoColorido, mas só foi alocado a área de Ponto

Java Métodos e Classes Abstratas e Casting Pra que usar isso...exemplo das figuras e classe Composta: Os atributos F1 e F2 da classe Composta pertencem à classe Pai Figura E no exemplo, eles recebem valores pertencentes às classes Filhas Circulo, Quadrado e Composta: class Composta extends Figura { Figura F1, F2;. void Composta(Figura f1,f2) { F1 = f1; F2 = f2; }.. }... Composta comp1 = new Composta(c1,q); Composta comp2 = new Composta(comp1,c2);... Olha que legal, ele pode inclusive receber uma figura composta qualquer, não importa o formato, afinal ela também é uma Figura Isso é possível graças conversão implícita de tipo (upcasting), que é uma propriedade inerente aos objetos com relação de herança.

Métodos e Classes Abstratas Hoje nós vamos ampliar o nosso conhecimento em OO, conversando sobre: A palavra reservada SUPER Herança Múltipla e Interfaces Exercícios Vamos lá. Primeiramente vamos falar sobre a palavra reservada super...

Palavra reservada super Super pode ser utilizado explicitamente para: Referenciar o construtor da superclasse Para se referir ao construtor da classe pai, basta usar o operador super( ). Referenciar um outro método ou atributo da classe pai Para se referir a elementos da classe pai, basta usar o operador super

Construtores de subclasse Chamada Explícita ao construtor base 1: public class Circle 2: { 3: public double x,y,r; 4: public Circle(double x, double y, double r) { 5: this.x = x; 6: this.y = y; 7: this.r = r; 8: } 9: public Circle(double r){ 10: this(0.0,0.0,r); 11: } 12: } 1: public class GraphicCircle extends Circle 2: { 3: Color color; 2: public GraphicCircle 2b: (double x, double y, double r, Color color) { 3: super(x,y,r); 4: this.color = color; 5: } 6: }

Herança em Java Livro possui autor e paginas (definidos na própria classe); Livro possui nome e preço (definidos na superclasse); Livro pode receber mensagens ehgrande() (definida na própria classe); Livro pode receber mensagens ehcaro() (definida na superclasse). O que será impresso?

Construtores de subclasse No caso de uma hierarquia de classes, O que acontece se não chamar explicitamente o construtor da classe pai???

Ordem de construção Relembrando... Quando construímos um novo objeto, os seguintes passos são efetuados: 1º: Os atributos da classe são zerados inicializados com seus valores default: 0, false ou null; 2º: Se a classe participa de alguma hierarquia, o construtor da superclasse é chamado; Primeiro constrói o pai, depois o filho» Você existiria sem seus pais 3º: Os atributos da classe recebem os seus valores iniciais (se especificados), na ordem em que foram definidos na classe; 4º: O corpo do construtor da classe é chamado.

Ordem de construção No caso de não haver chamada explícita, A linguagem Java chama o construtor padrão da superclasse. Característica intrínseca de herança Java chama implicitamente o construtor default da superclasse. Se não existir um construtor default na superclasse, haverá um erro de compilação No entanto, o finalizador da superclasse não é invocado. Deve ser feito de forma explícita

Construtores de subclasse Chamada Implícita ao construtor base O que será impresso?

O que será impresso? Construtores de subclasse

IMPORTANTE... Pode-se redeclarar um atributo ou método de mesmo nome numa classe derivada. Apesar do atributo ou método oculto ainda ser acessível, essa construção gera confusão sem trazer nenhum benefício. Evite essa prática Atributos e Métodos Ocultos

class Super { Super() { Chamada Explícita e Implícita System.out.println("Construtor Super"); } O que será impresso? } void teste() { System.out.println("Metodo Superclasse");} class Subclasse extends Super { Subclasse() { System.out.println("Construtor Subclasse"); } void teste() { super.teste(); System.out.println("Metodo Subclasse"); } } class ProgramaSuperExplicito { public static void main (String arg[]) { System.out.println( Heranca 2 ); Subclasse sub = new Subclasse(); sub.teste(); } } Métodos sobrescritos podem chamar sua versão na superclasse usando a palavra super < (super.método() >

O que será impresso? Atributos Ocultos

Herança Múltipla Em algumas linguagens de programação OO: As classes podem ter mais de um superclasse, Herdando variáveis e métodos combinados de todas essas superclasses Isto é chamado de herança múltipla Herança Múltipla fornece margem para praticamente qualquer comportamento imaginável Contudo complica bastante as definições de classes e o código para produzi-la, além do entendimento

Herança Múltipla Exemplo de utilização de herança múltipla ObjetoColorido obtemcor() mudacor() liga() acelera() Carro CarroEsporteColorido

Herança Múltipla Outro exemplo de utilização herança múltipla extends extends

Herança Múltipla Outro exemplo de utilização de herança múltipla Um gerente de banco pode assumir características de: Funcionário, Acionista e Cliente em diferentes instantes.

Herança Múltipla Java simplifica a herança Permitindo diretamente apenas a herança simples ou única das classes Java NÃO permite múltipla herança de classe, Pois foi verificado em outras linguagens que sua implementação é muito confusa Um dos problemas que podem surgir... É o conflito de nomes de atributos ou métodos herdados desse tipo de herança, além de heranças repetidas Problemas de códigos

Herança Múltipla Herança múltipla de classe não é permitida em Java ObjetoColorido obtemcor() mudacor() liga() acelera() Carro extends extends CarroEsporteColorido Como construir então essa característica em Java?

Interfaces Em Java, os objetos podem implementar uma interface... As interfaces são como classes, mas não têm nenhuma implementação. Define apenas as assinaturas de operações externamente visíveis que uma classe pode implementar, sem conter nenhuma especificação ou estrutura interna Interfaces não possuem implementação, somente assinaturas de operações (100% abstratas); Interfaces suportam herança, mesmo herança múltipla. Interfaces podem herdar de outras interfaces, e suportam herança múltipla (enquanto classes suportam herança simples); Mecanismo para prover flexibilidade devido à ausência de herança múltipla de classes; Interfaces definem subtipos, enquanto a herança define as subclasses.

Java Herança Múltipla Solução para herança múltipla Escolha uma das classes para herdar; Para as demais, crie interfaces e implemente-as; Use composição ou agregação para fazer reuso. extends extends extends implements

Interfaces Características Gerais Importantes Estabelece a interface (o contrato) de um conjunto de classes; Permite a construção de código genérico: Trabalha com qualquer objeto que implemente a interface; Obriga programadores a implementar determinados métodos em suas classes para usar seu código. São públicas (mesma regra das classes); Classes utilizam implements ao invés de extends para implementar uma interface. Todos os métodos são public & abstract; Todos as variáveis são final & static, inicializados isto é, apenas constantes

Java - Class x Interface Sintaxe para Classe e Interface em Java Interfaces não permitem declaração de atributos variantes (somente estáticos), enquanto que classes permitem outros. Interfaces estão mais ligadas a comportamento, enquanto que classes estão mais ligadas a implementação.

Java - Interface Resumindo: Membros da Interface Métodos definidos na interface são automaticamente públicos e abstratos; Atributos definidos na interface são automaticamente públicos e estáticos. Método sem corpo { }

Interface ou classe abstrata? Importante: Classes Abstratas X Interfaces Você deve estar achando que classes abstratas e interfaces são conceitos parecidos e que podem ser usados com objetivos semelhantes. Cuidado! Uma classe pode estender uma única classe (que pode ser abstrata ou não), mas pode implementar várias interfaces. Além disso, interfaces não permitem declaração de atributos variáveis (somente estáticos), enquanto que classes abstratas permitem. Interfaces estão mais ligadas a comportamento, enquanto que classes abstratas estão mais ligadas a implementação. Sempre que possível, use interfaces

Blz, Interface ou classe abstrata? Tudo isso é bonito e legal, mas pra que eu tenho que ver isso...?? Vamos analisar um exemplo para entender melhor porque a gente deve entender e usar interfaces

Interface ou classe abstrata? Imagine que temos um Hierarquia dos animais, e devemos simular animais em um ambiente. Se analisarmos as relações ao lado, a classe Dog para um programa de ciências está OK..... Mas e para programa que simule um Pet Shop???

Interface ou classe abstrata? 1ª Opção: Métodos que simulam os comportamentos de um Pet (Animal de Estimação) implementados em Animal. Prós: Todas as subclasses possuirão esses comportamentos. Uso do polimorfismo. Contras: Existem subclasses de Animal que não precisam desses comportamentos (Hippo, Lion, Tiger, Wolf)

Interface ou classe abstrata? 2ª Opção: Métodos abstratos que simulam os comportamentos de um Pet (Animal de Estimação) implementados em Animal. Prós: Todas as subclasses possuirão esses comportamentos; Uso do polimorfismo; Cada subclasse com seu próprio comportamento. Contras: Todas as subclasses concretas devem implementar os métodos abstratos.

Interface ou classe abstrata? 3ª Opção: Comportamentos de animais de estimação nas subclasses Dog e Cat. Prós: Comportamento de animal de estimação somente onde necessário; Cada subclasse implementa o comportamento que quiser. Contras: Pode não haver uma padronização dos comportamentos Pet em uma subclasse. Ex.: Se as classes forem implementadas por programadores diferentes. Não pode usar polimorfismo para os comportamentos (métodos) dos animais de estimação.

Interface ou classe abstrata? 4ª Opção: Nova classe com comportamentos de animais de estimação Prós: Garante que todos os animais de estimação terão as mesmas definições de métodos; Polimorfismo

Interface ou classe abstrata? 4ª Opção: Nova classe com comportamentos de animais de estimação Contras: Duas Superclasses; Java NÃO implementa herança múltipla.

Solução: INTERFACE Interface ou classe abstrata? É como uma classe abstrata, mas só tem: Métodos abstratos, públicos Campos finais estáticos, públicos

Interfaces Outra coisa legal que a gente pode fazer com interfaces está ligado ao polimorfismo... Interfaces permitem a construção de código genérico Ou seja trabalhar com qualquer objeto que implemente a interface; Em outras palavras... Posso passar qualquer objeto que implementa essa interface Imagine as possibilidades...

Interfaces Lembram do nosso exemplo... Com a utilização de interface para herança múltipla em Java, ele ficaria assim.. <<interface>> ObjetoColorido Color obtemcor() void mudacor(color cor) liga() acelera() Carro implements extends CarroEsporteColorido Color cor

Java Herança Múltipla Implementação do Carro e Objeto Colorido Métodos sem corpo { } A implementação do método não está na interface mas sim na classe que a implements

O que será impresso? AplicacaoDeCor Java - Herança Múltipla Interface (utilização) Posso passar qualquer objeto que implementa essa interface.. Imagine as possibilidades... Como o parâmetro da função ehazul é uma interface... O mail legal é que interface permitem a construção de código genérico: Trabalha com qualquer objeto que implemente a interface;...qualquer classe que implementa esta interface pode ser passada como parâmetro

Interfaces e Heranças Outro conceito importante é que Interfaces suportam herança, mesmo herança múltipla. Interfaces podem herdar de outras interfaces, e suportam herança múltipla (enquanto classes suportam herança simples); Mecanismo para prover flexibilidade devido à ausência de herança múltipla de classes;

Java - Interface Hierarquias de interfaces Uma interface pode estender outra Uma classe pode implementar várias interfaces Pessoa é uma outra interface Método Pedala é abstract O método Pedala deve ser implementado nesta classe

Java - Interface Hierarquias de interfaces Uma interface pode estender outra:

Java - Interface Importante: Uma interface pode implementar uma classe abstrata A implementação dos métodos abstratos da interface e da classe fica para os filhos

Java - Interface O que o código está fazendo? Mensuravel.java Compara.java Interface - Permitindo a compatibilidade entre duas classes diferentes MainCompara.java

Exercícios Blz... Agora é hora de exercitar... Tente resolver ou analisar os seguintes problemas... Em dupla Apresentar ao professor no final da aula Pontuação em Atividades em sala de aula... Faça o JAVADOC de todos os exercícios!!!

8. Sempre podemos optar por herança simples ou implements? Exercício 1. Crie um projeto e copie o conteúdo da classe do próximo slide para um arquivo chamado Mostra.java; 2. Compile e execute o código; 3. Analise os resultados; 4. Retire os marcadores de comentários //, e compile; 5. Por que o código não compila? 6. Utilizando implements, o que pode ser feito para que o método Nome das classes Cicrano e Beltrano sejam evocadas? 7. Utilizando herança simples, o que pode ser feito para que o método Nome das classes Cicrano e Beltrano sejam evocadas?

class Fulano { } public String Nome() { return "Fulano da Silva"; } class Cicrano { public String Nome() { return "Cicrano da Veiga"; } } class Beltrano { public String Nome() { return "Beltrano da Slovinsky"; } } class Mostra { static void MostraNome(Fulano r) { System.out.println("***> "+r.nome()+" <***"); } public static void main(string[] arg) { Fulano f=new Fulano(); Cicrano c=new Cicrano(); Beltrano b=new Beltrano(); MostraNome(f); //MostraNome(c); //MostraNome(b); } }

Exercício O que o código está fazendo? Analise o código, modifique, veja o que acontece.. Aplique as ideias que vimos... Musica.java Exercicio6.java

Exercício 1/2 Implemente o cenário abaixo Definir atributos, métodos, etc...

Exercício 2/2 Utiliza e implementa uma interface para um robô Exemplo: abstract class RoboCop extends Pessoa implements Robo Faça com que esse robô também implemente a interface Relógio

Exercício Implementar Hierarquia abaixo, com métodos simplificados Definir atributos, métodos, etc... Olhar nos slides anteriores da aula... Interface Classes

Exercício Considere o diagrama de classes do slide seguinte: a) Crie uma interface de nome Motorizado onde são declarados os métodos void ligarmotor() e void abastecer(int numlitros). b) Implemente a interface Motorizado nas classes Aviao e Carro. c) Escreva um pequeno programa de teste capaz de verificar a implementação anterior. d) Crie uma interface de nome Conduzivel onde é declarado o método void curvar(float angulo). e) Implemente a interface Conduzivel nas classes Aviao, Carro e Bicicleta. f) Complete o programa de teste efetuado anteriormente por forma a testar estas últimas implementações.

Exercício

Exercício Crie a seguinte hierarquia de classes: Uma interface para representar qualquer forma geométrica, definindo métodos para cálculo do perímetro e cálculo da área da forma; Uma classe abstrata para representar quadriláteros. Seu construtor deve receber os tamanhos dos 4 lados e o método de cálculo do perímetro já pode ser implementado; Classes para representar retângulos e quadrados. A primeira deve receber o tamanho da base e da altura no construtor, enquanto a segunda deve receber apenas o tamanho do lado; Uma classe para representar um círculo. Seu construtor deve receber o tamanho do raio. No programa principal, crie quadrados, retângulos e círculos com tamanhos diferentes e armazene num vetor. Em seguida, imprima os dados (lados ou raio), os perímetros e as áreas de todas as formas.

Exercício Implementar classes Pessoa, Liquido e classes filhas desta; Pessoa deve implementar o método beber(liquido); Criar outros atributos e métodos que se julgue necessários; Imprimir estado da pessoa ao beber diferentes tipos de líquido;

Exercício

Exercício Desenvolva as classes ao lado. Crie uma classe ExemploBanco que faça operações nesse banco. Pegue as informações via teclado ContaDeBanco saldo contadebanco() deposito() retirada() mostrasaldo() ContaPoupança diaaniversário correção contapoupança() corrigesaldo() mostrasaldo() ContaEspecial limite contaespecial() mostrasaldo()

Exercício

Exercício

Exercício

Exercício Identifique e explique o(s) erro(s) na classe a seguir. Implemente as correções Implemente uma classe que cria uma instância de EntradaNaAgenda e acesse o método tostring()

Exercício

Exercício Identifique e explique o(s) erro(s) na classe a seguir. Implemente as correções Implemente uma classe que cria uma instância de DiscoOtico e acesse os métodos tostring() e capacidadeemmegabytes()

Exercício

Exercício O que o código está fazendo?

Exercício O que o código está fazendo?

Exercício O que o código está fazendo? Exercicio5.java

O que será impresso? Exercício

O que será impresso? Exercício

Exercício Considere o diagrama de classes do slide seguinte: Crie as relações... Escreva um pequeno programa de teste capaz de verificar a implementação anterior.