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

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

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. Vagner Luz do Carmo - Vluzrmos

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

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

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

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

Classe Abstrata e Interface

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

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

POO29004 Programação Orientada a Objetos

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

Linguagem de Programação. Diagrama de classes

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

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

Programação por Objectos. Java

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

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

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

4 Conceito de Herança

Herança e Propriedades

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

Linguagem de Programação III

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

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

Herança e Polimorfismo

POO29004 Programação Orientada a Objetos

Sobrecarga, Sobreposição e Polimorfismo

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Notas de Aula 04: Herança e polimorfismo.

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

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Herança; Sobrescrita, Sobrecarga e Polimorfismo; Classes abstratas e concretas (finais).

Programação Orientada a Objetos SANTOS, Rafael

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

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

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

Programação Orientada por Objetos

Linguagem de Programação II Implementação

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

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

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

POO29004 Programação Orientada a Objetos

Universidade Federal de Uberlândia

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

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

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

extendsé usado para indicar herança em JAVA

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

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

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

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

Professor Leonardo Cabral da Rocha Soares Lattes:

Herança e Polimorfismo - Parte II -

Interfaces. Classes abstratas que possuem apenas métodos abstratos. Na Interface: Métodos são implicitamente. Campos são implicitamente

Aula. Renata Pontin de Mattos Fortes 2006

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

ACH2002. Orientação a Objetos

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

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

Programação Orientada a Objetos

Orientação a Objetos - Herança

Conceitos de Programação Orientada a Objetos

9 Classes Abstractas e Interfaces

Linguagem de Programação II Herança

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

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

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

Linguagens de Programação Aula 12

Orientação a Objetos AULA 06

Encapsulamento. Alberto Costa Neto DComp - UFS

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 II Programação Orientada a Objetos. Orientação a Objetos

Programação Orientada a Objetos

[Desenvolvimento OO com Java] Classes abstratas e interfaces

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

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

Programação por Objectos. Java

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.

Universidade Federal de Uberlândia

COMPORTAMENTOS - Observações

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Programação Orientada a Objetos II

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

Classes e Objetos. Sintaxe de classe em Java

Palavras Reservadas da Linguagem Java

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

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

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

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

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

Transcrição:

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

Sumário Herança Visibilidade de atributos e métodos Extensão e sobreposição Uso de super Referências para objetos Polimorfismo Conceitos Exemplo

Herança "Um dia tudo isso será seu..."

Herança Inspiração no mundo real Pais transmitem aos filhos suas características e comportamento

Herança e POO Permite criar classes que aproveitam atributos e métodos de classes existentes Motivação: reutilização de código com flexibilidade Usos: especialização extensão sobreposição

Herança Exemplo: classe Pessoa (existente) Pessoa nome rg getnome() mostra()

Herança Novas classes: Estudante e Professor Pessoa nome rg getnome() mostra() Estudante curso mostra() Professor departamento ferias marcaferias() mostra()

Herança Terminologia Super-classe (classe-pai, classe-mãe, classe-base) Classe derivada (sub-classe) Estudante curso mostra() Pessoa nome rg getnome() mostra() Estudante e Professor são especializações de Pessoa Professor Classe derivada (sub-classe) departamento ferias marcaferias() mostra()

Herança Atributos são herdados Atributos de Estudante: nome rg curso Estudante curso mostra() Pessoa nome rg getnome() mostra() Estudante e Professor herdam atributos (nome e rg) de Pessoa atributos nome e rg estão implícitos Professor devido à herança departamento ferias marcaferias() mostra()

Herança Métodos (funcionalidades) são herdados Estudante e Professor herdam funcionalidades de Pessoa Funcionalidades de Estudante: getnome() mostra() Estudante curso mostra() Pessoa nome rg getnome() mostra() método getnome() está implícito devido à herança método mostra() de Estudante sobrepõe (override) o método mostra() de Pessoa() Professor departamento ferias marcaferias() mostra()

Herança Novas classes: Estudante e Professor Estudante e Professor herdam funcionalidades de Pessoa Estudante curso mostra() Pessoa nome rg getnome() mostra() Funcionalidades de Professor: getnome() marcaferias() mostra() método marcaferias() é uma funcionalidade somente de Professor Professor departamento ferias marcaferias() mostra()

Herança e UML Diagrama de classes

Herança e UML Diagrama de classes

Herança em Java Usa palavra-chave extends na declaração das sub-classes class SuperClasse { private int apriv; public int apub; private void metpriv(); public void metpub(); class SubClasse extends SuperClasse {

Visibilidade de atributos e métodos Atributos e métodos públicos da super-classe podem ser acessados normalmente nas subclasses O código abaixo é um exemplo disso: SubClasse obj = new SubClasse(); obj.apub = 99; obj.metpub();

Visibilidade de atributos e métodos Atributos e métodos privados da super-classe não podem ser acessados nas sub-classes O código abaixo vai dar erro de compilação: SubClasse obj = new SubClasse(); obj.apriv = 10; obj.metpriv();

Exemplo: Pessoa e Estudante

Exemplo: Pessoa e Estudante Construtor de Pessoa é invocado implicitamente

Exemplo: Pessoa e Estudante Método setnome() herdado de Pessoa

Exemplo: Pessoa e Estudante Método mostra() deve mostrar nome e curso

Exemplo: Pessoa e Estudante Mas nome é atributo privado de Pessoa!!! Método mostra() deve mostrar nome e curso

Uso de super (1) Referência para objeto da super-classe (para acessar seus atributos/métodos) Veja isso em: http://download.oracle.com/javase/tutorial/java/iandi/super.html

Uso de super (1) Referência para objeto da super-classe (para acessar seus atributos/métodos) Veja isso em: http://download.oracle.com/javase/tutorial/java/iandi/super.html

Uso de super (2) Para invocar explicitamente um construtor da super-classe Deve estar na primeira linha do construtor da sub-classe Veja isso em: http://download.oracle.com/javase/tutorial/java/iandi/super.html

Visibilidade protected Atributos e métodos protected da superclasse podem ser acessados nas sub-classes, mas não são acessíveis a outras classes Atributo nome acessado normalmente

Sobrescrita ou extensão de métodos Métodos da super-classe podem ser estendidos ou sobrescritos nas sub-classes Método mostra() de Estudante estende o método mostra() de Pessoa

Sobrescrita ou extensão de métodos Métodos da super-classe podem ser estendidos ou sobrescritos nas sub-classes Método mostra() de Estudante sobrescreve o método mostra() de Pessoa

Mais sobre herança em Java Ao contrário de C++, Java não permite herança múltipla Em Java, todas as classes derivam (implicitamente) da classe Object A classe Object possui alguns atributos e métodos úteis: tostring(): retorna uma string representando o objeto clone(): cria e retorna uma cópia do objeto etc.

Sobrescrita do método tostring class Pessoa { private String nome;... String tostring() { return nome; class PessoaApp { public static void main(string[] args) { Pessoa p = new Pessoa("Joao"); System.out.println(p);

Uso de this Referência para o objeto corrente Pode ser usado para invocação explícita de um construtor class Relogio { private int hora, minuto; "this" não tem nada a ver com herança, mas assemelha-se a "super" em seu uso Relogio(int hora, int minuto) { this.hora = hora; this.minuto = minuto; Relogio() { this(0,0); Veja isso em: http://download.oracle.com/javase/tutorial/java/javaoo/thiskey.html

Herança e referências para objetos Uma referência para a super-classe pode apontar para um objeto da sub-classe O contrário não é verdadeiro "Todo estudante é uma pessoa, mas nem toda pessoa é estudante" Pessoa p; Estudante e = new Estudante(); p = e; // e = p; // Errado!

Polimorfismo Significa: muitas formas Um único nome de método, várias implementações Sobrecarga (overloading) e sobrescrita (override) são exemplos de polimorfismo Exemplos: método tostring() método mostra() construtores

Qual método será invocado? class TesteVinculacaoDinamica { public static void main(string[] args) { Pessoa refp; Estudante refe; Pessoa p = new Pessoa("Maria"); Estudante e = new Estudante("Jose", "Direito"); //refe = p; // invalido refp = e; refp.mostra(); refp = p; refp.mostra();

Qual método será invocado? class TesteVinculacaoDinamica { public static void main(string[] args) { Pessoa refp; Estudante refe; Pessoa p = new Pessoa("Maria"); Estudante e = new Estudante("Jose", "Direito"); //refe = p; // invalido refp = e; refp.mostra(); Método mostra() de Estudante refp = p; refp.mostra(); Método mostra() de Pessoa

Polimorfismo dinâmico O exemplo do slide anterior ilustra polimorfismo dinâmico Vinculação dinâmica (dynamic binding): método a ser chamado é determinado em tempo de execução Mecanismo poderoso quando se tem herança e métodos com mesmo nome

Utilidade do polimorfismo classes: Triangulo, Retangulo, etc. objetos: Triangulo tris[], Retangulo rets[], etc. for (Triangulo t : tris) { desenhatriangulo(t); for (Retangulo r : rets) { desenharetangulo(r); // etc. Código repetitivo. Semelhante à programação procedimental.

Utilidade do polimorfismo class Figura { public void desenhafigura() { class Retangulo extends Figura { public void desenharetangulo() { class Triangulo extends Figura { public void desenhatriangulo() { class Polimorfismo { public static void main(string[] args) { Figura figs[] = new Figura[2]; figs[0] = new Retangulo(); figs[1] = new Triangulo(); for (Figura f : figs) { if (f instanceof Retangulo) { f.desenharetangulo(); if (f instanceof Triangulo) { f.desenhatriangulo(); Código repetitivo. Desnecessário.

Utilidade do polimorfismo class Figura { public void desenha() { class Retangulo extends Figura { public void desenha() { class Triangulo extends Figura { public void desenha() { class Polimorfismo { public static void main(string[] args) { Figura figs[] = new Figura[2]; figs[0] = new Retangulo(); figs[1] = new Triangulo(); for (Figura f : figs) { if (f instanceof Retangulo) { f.desenha(); if (f instanceof Triangulo) { f.desenha(); Código repetitivo. Desnecessário.

Utilidade do polimorfismo class Figura { public void desenha() { class Retangulo extends Figura { public void desenha() { class Triangulo extends Figura { public void desenha() { class Polimorfismo { public static void main(string[] args) { Figura figs[] = new Figura[2]; figs[0] = new Retangulo(); figs[1] = new Triangulo(); for (Figura f : figs) { f.desenha(); Graças ao polimorfismo, o código fica bem mais simples!