programação orientada a objetos*
Post on 02-Feb-2016
36 Views
Preview:
DESCRIPTION
TRANSCRIPT
ProgramaçãoOrientada a Objetos*
Construtores e SobrecargaProf. Isabel Cafezeiroisabel@dcc.ic.uff.brhttp://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:
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.
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
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.
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
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.
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
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
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 !!!
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
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();
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.
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.
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
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
top related