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

Documentos relacionados
Definição de classes em Java (introdução) PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Classes e objectos em Java (introdução) PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

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

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

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

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

Palavras Reservadas da Linguagem Java

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

1 Introdução e Conceitos básicos

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

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

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

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

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

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

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

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

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

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

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

Programação Orientada a Objetos

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

Programação por Objectos. Java

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

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

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

Classe Abstrata e Interface

Computação II Orientação a Objetos

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

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

9 Classes Abstractas e Interfaces

Herança e Polimorfismo - Parte II -

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

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

A Relação de Subtipo e Tipos Genéricos

Linguagem de Programação III

Programação Orientada por Objetos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Introdução à Programação Orientada por Objectos em Java. Enquadramento e Objectivos Abstracção Encapsulamento Herança Polimorfismo Conclusão

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

Linguagem de Programação II Implementação

Herança e Polimorfismo -Parte II -

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

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

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

Computação II Orientação a Objetos

Criando documentação com javadoc

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

Introdução à Programação. Encapsulamento e Herança

4 Conceito de Herança

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

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

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

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

Computação II Orientação a Objetos

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

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

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

Programação por Objectos. Java

Notas de Aula 09: Tratamento de exceções

Linguagem de Programação III

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

Programação Orientada a Objetos SANTOS, Rafael

Linguagem de Programação II Herança

Linguagem de Programação II Implementação

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

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

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

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

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

Métodos Genéricos. Prof.: Michele Nasu Tomiyama Bucci

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Laboratório de programação II

Programação por Objectos. Java

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Herança e Polimorfismo

Classes e Objetos. Sintaxe de classe em Java

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

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

No final deste curso, saberás criar programas através da linguagem de programação Java.

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

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Paradigmas da Programação PPROG GENÉRICOS. (Livro Big Java, Late Objects Capítulo 18) Nelson Freire (ISEP DEI-PPROG 2014/15) 1/23

Visibilidade e Encapsulamento

Conceitos de Programação Orientada a Objetos

Professor Leonardo Cabral da Rocha Soares Lattes:

[Desenvolvimento OO com Java] Classes abstratas e interfaces

Programação Orientada a Objetos

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Threads. O que é uma Thread? Paralelismo

Modificadores de Acesso JAVA

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

Transcrição:

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

Conteúdo Noções elementares de extensão de classes Exemplo: classe TimeOfDaySecs Declaração de subclasse usando extends. Implementação de construtores. Extensão, herança e reutilização de funcionalidade. Redefinição de métodos. Referência à super-classe com super. Restrições à herança com final. A anotação @Override. 2

Extensão de classes??? public class TimeOfDaySecs... { public TimeOfDaySecs(int h, int m, int s) { public int getseconds() { public void setseconds(int s) { public String tostring() { Exemplo introdutório: definição da classe TimeOfDaySecs por extensão da classe TimeOfDay TimeOfDaySecs estende a funcionalidade de TimeOfDay, representando a hora do dia com a precisão de segundos. 3

extends public static final int SECONDS_PER_MINUTE = 60; public TimeOfDaySecs(int h, int m, int s) { public int getseconds() { public void setseconds(int s) { public String tostring() { A relação de herança entre classes em Java é definida por pelo uso da palavra-chave extends na declaração de uma classe. No exemplo: TimeOfDaySecs, designada por subclasse, estende TimeOfDay, designada por super-classe. 4

Hierarquia de classes package java.lang; public class Object { package pco.time; public class TimeOfDay { Uma classe pode estender uma e uma só super-classe. Não podemos declarar mais do que uma super-classe com extends. Por omissão a super-classe é java.lang.object (extends java.lang.object implícito em TimeOfDay), de que iremos falar nas próximas aulas Apenas java.lang.object não tem super-classe: é a classe raiz da hierarquia de objectos em Java. 5

TimeofDaySecs campos de instância private int seconds; public TimeOfDaySecs(int h, int m, int s) { A classe TimeOfDay já representa o tempo em horas e minutos Declaramos em TimeOfDaySecs apenas um campo de instância (seconds) para representar adicionalmente os segundos. 6

TimeofDaySecs - construtor private int seconds; //@ requires h >= 0 && h < HOURS_PER_DAY //@ requires m >= 0 && m < MINUTES_PER_HOUR //@ requires s >= 0 && s < SECONDS_PER_MINUTE public TimeOfDaySecs(int h, int m, int s) { super(h, m); // Call superclass constructor. seconds = s; // Initialize value for seconds. Este construtor de TimeOfDaySecs inicializa o objecto em dois passos: A invocação de um construtor da classe-pai TimeOfDay. Inicialização do valor dos segundos (seconds). A palavra-chave super é usada para referência à super-classe. Um construtor de uma subclasse começa sempre por invocar o construtor da super-classe. 7

package java.lang; public class Object { public Object () { public class TimeOfDay { private int hours; private int minutes; public TimeOfDay(int h, int m) { super(); hours = h; minutes = m; Obs: super() implícito quando omitido) private int seconds; public TimeOfDaySecs(int h, int m, int s) { super(h, m); seconds = s; TimeOfDaySecs t = new TimeOfDaySecs(12, 30, 59); 8

Definição de nova funcionalidade em subclasses private int seconds; public TimeOfDaySecs(int h, int m, int s) { public int getseconds() { return seconds; //@ requires s >= 0 && s < SECONDS_PER_MINUTE public void setseconds(int s) { seconds = s; Podemos definir agora nova funcionalidade na subclasse getseconds() / setseconds() no exemplo 9

Herança de métodos public class TimeOfDay { public int gethours() { return hours; public int getminutes() { return minutes; public int getseconds() { return seconds; TimeOfDaySecs t = new TimeOfDaySecs(12, 30, 59); int h = t.gethours(); int m = t.getminutes(); int s = t.getseconds(); e reutilizar funcionalidade da super-classe 10

Reutilização de funcionalidade public void advanceonesecond() { seconds ++; if (seconds == SECONDS_PER_MINUTE) { advanceoneminute(); // in TimeOfDay public class TimeOfDay { public void advanceoneminute() { minutes ++; if (minutes == MINUTES_PER_HOUR) { minutes = 0; advanceonehour(); advanceonesecond e m TimeOfDaySecs c h a m a advanceoneminute em TimeOfDay 11

Redefinição de métodos tostring - versão 1 public class TimeOfDay { public String tostring() {. HH:MM public String tostring() { StringBuilder sb = new StringBuilder(); if (gethours() < 10) sb.append('0'); sb.append(gethours()); sb.append(':'); if (getminutes() < 10) sb.append('0'); sb.append(getminutes()); sb.append(':'); if (seconds < 10) sb.append('0'); sb.append(seconds); return sb.tostring(); Método tostring redefinido em TimeOfDaySecs HH:MM:SS 12

Redefinição de métodos (tostring) - versão 2 public class TimeOfDay { public String tostring() {. HH:MM public String tostring() { // Call TimeOfDay.toString(). String hhmm = super.tostring(); StringBuilder sb = new StringBuilder(hhmm); sb.append(':'); if (seconds < 10) sb.append('0'); sb.append(seconds); return sb.tostring(); tostring() chama implementação da super-classe HH:MM:SS 13

Anotação @Override package java.lang; public class Object { public String tostring() { public class TimeOfDay { @Override public String tostring() { @Override public String tostring() { Boa prática: A anotação opcional @Override assinala uma redefinição de método. Previne erros de programação (ex. se chamarmos ao método tostring em vez de tostring não teremos uma redefinição). 14

Restrições à redefinição de métodos public class TimeOfDay { public final int gethours() { public final void sethours(int h) { public final int getminutes() { public final void setminutes(int m) { Devemos identificar com final os métodos que não poderão ser redefinidos por subclasses. Não seria boa ideia/prática redefinir gethours() etc em TimeOfDaySecs conseguimos restringir essa redefinição usando o modificador final. 15

Restrições à definição de subclasses public class TimeOfDay { public final int gethours() { public final void sethours(int h) { public final int getminutes() { public final void setminutes(int m) { public final class TimeOfDaySecs extends TimeOfDay { Por outro lado podemos aplicar final à classe TimeOfDaySecs para impedir que esta seja estendida. Nesse caso, nenhuma classe poderá ter TimeOfDaySecs como super-classe. Exemplo na API do Java: java.lang.string 16