programação orientada a objetos*

15
Programação Orientada a Objetos* Construtores e Sobrecarga Prof. Isabel Cafezeiro isabel @ dcc . ic . uff . br http://www.dcc.ic.uff.br/ ~isabel *Baseado no livro Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos –

Upload: afram

Post on 02-Feb-2016

36 views

Category:

Documents


0 download

DESCRIPTION

Programação Orientada a Objetos*. Construtores e Sobrecarga Prof. Isabel Cafezeiro [email protected] http://www.dcc.ic.uff.br/~isabel *Baseado no livro Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos – Editora Campus – Série SBC. Construtores. Construtores: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação Orientada a Objetos*

ProgramaçãoOrientada a Objetos*

Construtores e SobrecargaProf. Isabel [email protected]://www.dcc.ic.uff.br/~isabel*Baseado no livro Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos – Editora Campus – Série SBC

Page 2: Programação Orientada a Objetos*

Construtores

Construtores:

são métodos especiais invocados no memento da criação de instâncias;

existe um construtor padrão: não precisa ser programado;

é o primeiro método que um objeto executa: garante a inicialização correta da instância.

Page 3: Programação Orientada a Objetos*

Construtores

Exemplo:

Data d = new Data();

Data d = new;

declaração de referência para a classe Data

associação da referência à instância invocação do construtor

Data()

criação da instância

C:\>javac demodata1.javademodata1.java:5: <identifier> expected Data hoje = new; ^1 error

Erro de compilação!!! Criação da instância sem a chamada do construtor

Page 4: Programação Orientada a Objetos*

Construtores

Os construtores garantem a inicialização correta da instância

Exemplo:

Na classe Data, o uso do método inicializaData deveria ser obrigatório: esta tarefa deveria ser efetuada por um construtor.

Page 5: Programação Orientada a Objetos*

Construtores

Construtor padrão:

inicializa dados da instância com o valor padrão do tipo nativo padrão, ou null (para instâncias de classes)

tipo nativo valor padrãoboolean falsechar espaçotipos numéricos zero do tipo

Page 6: Programação Orientada a Objetos*

Construtores

Construtores x outros métodos:

Os construtores têm o nome da classe, respeitando maiúsculas e minúsculas.

Os construtores não retornam valor (nem mesmo void). Devem ser declarados sem retorno.

Não podem ser chamados sem o new.

Page 7: Programação Orientada a Objetos*

ConstrutoresNa classe Data:

eliminar o método inicializaData,criar inicializações adequadas usando

construtores.

DataCons.java

DataCons(byte d,byte m,short a)

{ if (dataÉVálida(d,m,a)) { dia = d; mês = m; ano = a; } else { dia = 0; mês = 0; ano = 0; } } // fim do método DataCons

Page 8: Programação Orientada a Objetos*

Sobrecarga de métodosA melhor forma de inicializar uma data é ...

¿¿ informando cada componente membro a membro ?? (transparência 7)¿¿ utilizando uma outra instância de data já criada ??

DataCons.java

DataCons(DataCons outraData) { byte d = outraData.dia; byte m = outraData.mês; short a = outraData.ano;

if (dataÉVálida(d,m,a)) { dia = d; mês = m; ano = a; } else { { dia = 0; mês = 0; ano = 0; } } // fim do método DataCons

Page 9: Programação Orientada a Objetos*

Sobrecarga de métodos

Possibilidade de usar o mesmo nome para métodos (com o mesmo propósito) e argumentos diferentes.

Mecanismo já existente em diversas LP’s convencionais; Mecanismo largamente explorado em POO.

Exemplo: DataCons(d,m,a);DataCons(hoje);

• mesmo nome,

• argumentos diferindo em tipo e/ou quantidade.

O método a ser executado é determinado, sem ambiguidade pela seqüência de argumentos !!!

Page 10: Programação Orientada a Objetos*

Sobrecarga de métodos

DataCons.java

public void alteraDia(byte d)

{

dia = d;

System.out.println("Efetuou alteraDia(byte d)");

} // fim do método alteraDia

public void alteraDia(int d)

{

if (d>31) System.out.println("Valor inválido para dia");

else dia = (byte)d;

System.out.println("Efetuou alteraDia(int d)");

} // fim do método alteraDia

Page 11: Programação Orientada a Objetos*

Sobrecarga de métodos

DemoDataCons.java

byte b = 4;

int i = 4;

hoje.alteraDia(b); Efetua alteraDia(byte d)

hoje.mostraData();

hoje.alteraDia(i); Efetua alteraDia(int d)

hoje.mostraData();

hoje.alteraDia(4); Efetua alteraDia(int d)

hoje.mostraData();

Page 12: Programação Orientada a Objetos*

Sobrecarga de métodos

Em Java:

O tipo do retorno não pode ser usado para identificar o método;

Sobrecarga se aplica a métodos em geral, e não somente à construtores.

Page 13: Programação Orientada a Objetos*

Construtores

A invocação de Construtores

Somente construtores podem chamar construtores (outros métodos não podem);

Se um construtor for chamado a partir de outro, esta deve ser a primeira linha de código do chamador;

Construtores são chamados pela palavra reservada this; Construtores não podem ser recursivos. A presença de um construtor definido pelo programador

impede o uso do construtor padrão da classe, mesmo que o construtor programado tenha assinatura diferente do padrão.

Page 14: Programação Orientada a Objetos*

Construtores

A invocação de Construtores

DataCons(DataCons outraData)

{

this(outraData.dia,outraData.mês,outraData.ano);

} // fim do método DataCons

DataCons.java

• comparar com o construtor da transparência 8

• verificar que esta chamada invoca o construtor da transparência 7

Page 15: Programação Orientada a Objetos*

This (Auto-referência) Invocar o construtor da classe Diferenciar os campos do objeto das variáveis locais

DataCons(byte dia,byte mês,short ano) { if (dataÉVálida(dia,mês,ano)) { this.dia = dia; this.mês = mês; this.ano = ano; } else { this.dia = 0; this.mês = 0; this.ano = 0; } } // fim do método DataCons

variáveis locais com o mesmo nome do que os campos

this diferencia variáveis locais e campos