1 / 15

Programação Orientada a Objetos*

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 – Editora Campus – Série SBC. Construtores. Construtores:

afram
Télécharger la présentation

Programação Orientada a Objetos*

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ProgramaçãoOrientada 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 – Editora Campus – Série SBC

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

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

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

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

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

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

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

  9. 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 !!!

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

  11. 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();

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

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

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

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

More Related