Construção, Iniciação e Destruição de Objectos
From Wiki**3
Esta secção está dedicada ao processo de criação, iniciação (definição de valores iniciais) e destruição de objectos.
Construção e iniciação de objectos
Construção e iniciação correspondem ao processo de reservar uma zona de memória e nela colocar valores que correspondam à definição de um objecto numa dada linguagem. A forma como as várias linguagens abordam esta questão é, naturalmente, muito dependente da estrutura da própria linguagem: C++, por exemplo, dá ao programador controlo fino sobre aspectos como a origem da zona de memória do objecto; Java, por outro lado, tende a esconder aqueles pormenores do programador.
Onde há concordância é na sequência de iniciação: um objecto não pode ser utilizado sem primeiro ser iniciado. As várias linguagens dispõem de várias formas, aparentemente diferentes, mas que conduzem ao mesmo resultado prático: o objecto que acabou de ser criado é iniciado de forma a poder ser utilizado pelos métodos da classe a que pertence. Há aspectos desta iniciação (e.g., ponteiros para tabelas de métodos virtuais em C++ ou outros da mesma natureza noutras linguagens, mais ligados a implementações particulares do que à semântica do objecto) que não interessa aqui discutir em pormenor, pelo que a discussão incide apenas nos dados disponÃveis para o programador.
- Construção e iniciação de objectos em Java;
- Ordem de iniciação de atributos de classes (
static
) e de objectos.
this
A palavra reservada this pode ser utilizada de duas formas fundamentalmente diferentes:
- Uso como auto-referência
- Sintaxe especial para chamada, num construtor, a outros construtores da mesma classe
Auto-referência
Referência para o objecto "actual", i.e., para o objecto no contexto do qual se executa o código onde aparece a referência. O exemplo seguinte, embora não siga as regras de nomenclatura, ilustra o uso de this
como forma de desambiguar as variáveis no construtor.
class A { int x; A(int x) { this.x = x; } }
O seguinte exemplo mostra outro uso como auto-referência: o objecto passa-se a si próprio como argumento de uma operação:
class A { void f(A a) { /* operação sobre um "a" do tipo "A" */ } void g() { f(this); // operação sobre objecto do tipo "A" (o próprio) } }
Sintaxe Especial de Construção
Num construtor, esta palavra reservada pode ser utilizada para chamar explicitamente outro construtor da mesma classe. Quando é utilizado desta forma, this
pode ocorrer apenas uma vez e deve aparecer como a primeira instrução do construtor.
class A { A(int i) { /* qualquer coisa */ } A(float f, int i) { this(i); // chamada ao primeiro construtor /* resto do segundo construtor */ } }
Overloading de Construtores
- Overloading de métodos.
Exemplos
Exemplos de aplicação. Discussão de aspectos problemáticos e comparação com outras linguagens (C/C++ e PHP).
Destruição de objectos
Discussão de aspectos relacionados com a destruição de objectos: o caso do Java (comparação com outras linguagens). Este tópico foi discutido na Aula 06.