Programa o orientada a objetos
Download
1 / 15

Programação Orientada a Objetos* - PowerPoint PPT Presentation


  • 80 Views
  • Uploaded on

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:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Programação Orientada a Objetos*' - afram


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Programa o orientada a objetos

ProgramaçãoOrientada 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

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.


Construtores1
Construtores

  • Exemplo:

    Data d = new Data();

    Data d = new;

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

criação da instância

associação da referência à instância

invocação do construtor Data()

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

C:\>javac demodata1.java

demodata1.java:5: <identifier> expected

Data hoje = new;

^

1 error


Construtores2
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.


Construtores3
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 nativovalor padrão

    booleanfalse

    char espaço

    tipos numéricos zero do tipo


Construtores4
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.


Construtores5
Construtores

Na 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 todos
Sobrecarga de métodos

A 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 todos1
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 todos2
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 todos3
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 todos4
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.


Construtores6
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.


Construtores7
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
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

thisdiferencia variáveis locais e campos


ad