Difference between revisions of "Informação de Tipos em Tempo de Execução (Java)"

From Wiki**3

 
(Exemplo)
Line 10: Line 10:
 
Neste exemplo, apresenta-se a criação dinâmica de objectos de um determinado tipo, a partir de uma descrição textual desses objectos.
 
Neste exemplo, apresenta-se a criação dinâmica de objectos de um determinado tipo, a partir de uma descrição textual desses objectos.
  
Considere-se o ficheiro <tt>obras.txt</tt>:
+
=== Introdução ===
 +
Considere-se o ficheiro <tt>obras.txt</tt>, contendo descrições de DVDs (título e realizador) e de Livros (título, autor e [[wikipedia:ISBN|ISBN]]):
 +
  DVD:Era uma vez na amadora:Fernando Fonseca
 +
  DVD:Lumiar selvagem:Pedro Fonseca
 +
  Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 +
  Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 +
  DVD:48 horas para o exame:Orlando Fonseca
 +
  Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892
 +
 
 +
A ideia da aplicação que se descreve de seguida é a leitura de cada linha como se da criação de um objecto se tratasse. Assim, o primeiro campo (os campos são separados por "<tt>:</tt>") define a classe do objecto e os restantes campos são passados como argumentos ao constructor da classe. Pretende-se ainda que a implementação seja suficientemente flexível para que resista à utilização de descrições erradas ou de descrições de objectos desconhecidos.
 +
 
 +
=== Interfaces ===
 +
 
 +
Além dos aspectos acima, cada obra é classificada com uma ou mais interfaces, sendo o seu comportamento definido por elas.
 +
 
 +
INTERFACES
 +
 
 +
Estas interfaces não são realmente utilizadas para os aspectos de criação dos objectos, mas permitem ilustrar a utilização de código específico em conjunto com código genérico.
 +
 
 +
=== A classe de base ===
 +
 
 +
A classe de base de todas as entidades a criar é <tt>Obra</tt>. Esta classe, por um lado, impõe às suas subclasses a definição do método <tt>processa</tt> e, por outro, recorrendo a uma fábrica simples que, fazendo uso de informação de tipos em tempo de execução, permite criar instâncias das suas subclasses, de acordo com uma descrição passada como argumento (<tt>cria</tt>).
 +
 
 +
CLASSE Obra
 +
 
 +
Note-se o tratamento de várias excepções, em particular, o tratamento da excepção <tt>ClassNotFoundException</tt>, que tem, neste contexto especial, um significado para a aplicação algo distinto do habitual.
 +
 
 +
Note-se ainda o tratamento de <tt>InvocationTargetException</tt>, que permite lidar com as excepções específicas do constructor da obra em causa (''exception chaining'').
 +
 
 +
=== As classes das obras ===
 +
 
 +
CLASSE DVD
 +
 
 +
CLASSE Livro
 +
 
 +
=== Aplicação exemplo ===
 +
 
 +
Esta aplicação lê o ficheiro de obras (propriedade <tt>obras</tt>) e processa cada linha, criando os objectos correspondentes. Depois de lidas, as obras são processadas (uniformemente).
 +
 
 +
CLASSE Teste
 +
 
 +
A saída da aplicação de teste é a que se apresenta. Note-se a ordem de carregamento das classes.
 +
 
 +
  '''% java -Dobras=obras.txt Teste'''
 +
  <font color="green">Carregamento da classe Obra</font>
 +
  <font color="green">Carregamento da classe DVD</font>
 +
  DVD:Era uma vez na amadora:Fernando Fonseca
 +
  DVD:Lumiar selvagem:Pedro Fonseca
 +
  <font color="green">Carregamento da classe Livro</font>
 +
  Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 +
  Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 +
  DVD:48 horas para o exame:Orlando Fonseca
 +
  Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892
 +
  ****************
 +
  RODOPIAR DVD:Era uma vez na amadora:Fernando Fonseca
 +
  LER DVD:Era uma vez na amadora:Fernando Fonseca
 +
  RODOPIAR DVD:Lumiar selvagem:Pedro Fonseca
 +
  LER DVD:Lumiar selvagem:Pedro Fonseca
 +
  FOLHEAR Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 +
  LER Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 +
  FOLHEAR Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 +
  LER Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 +
  RODOPIAR DVD:48 horas para o exame:Orlando Fonseca
 +
  LER DVD:48 horas para o exame:Orlando Fonseca
 +
  FOLHEAR Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892
 +
  LER Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892

Revision as of 21:44, 21 November 2005

Material correspondente à aula 30.

  • Informação de tipos em tempo de execução: classes de gestão de meta-informação do sistema de tipos em Java.
  • Literais de classes e objectos de classe.
  • Acesso a métodos.
  • Excepções associadas.

Exemplo

Neste exemplo, apresenta-se a criação dinâmica de objectos de um determinado tipo, a partir de uma descrição textual desses objectos.

Introdução

Considere-se o ficheiro obras.txt, contendo descrições de DVDs (título e realizador) e de Livros (título, autor e ISBN):

 DVD:Era uma vez na amadora:Fernando Fonseca
 DVD:Lumiar selvagem:Pedro Fonseca
 Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 DVD:48 horas para o exame:Orlando Fonseca
 Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892

A ideia da aplicação que se descreve de seguida é a leitura de cada linha como se da criação de um objecto se tratasse. Assim, o primeiro campo (os campos são separados por ":") define a classe do objecto e os restantes campos são passados como argumentos ao constructor da classe. Pretende-se ainda que a implementação seja suficientemente flexível para que resista à utilização de descrições erradas ou de descrições de objectos desconhecidos.

Interfaces

Além dos aspectos acima, cada obra é classificada com uma ou mais interfaces, sendo o seu comportamento definido por elas.

INTERFACES

Estas interfaces não são realmente utilizadas para os aspectos de criação dos objectos, mas permitem ilustrar a utilização de código específico em conjunto com código genérico.

A classe de base

A classe de base de todas as entidades a criar é Obra. Esta classe, por um lado, impõe às suas subclasses a definição do método processa e, por outro, recorrendo a uma fábrica simples que, fazendo uso de informação de tipos em tempo de execução, permite criar instâncias das suas subclasses, de acordo com uma descrição passada como argumento (cria).

CLASSE Obra

Note-se o tratamento de várias excepções, em particular, o tratamento da excepção ClassNotFoundException, que tem, neste contexto especial, um significado para a aplicação algo distinto do habitual.

Note-se ainda o tratamento de InvocationTargetException, que permite lidar com as excepções específicas do constructor da obra em causa (exception chaining).

As classes das obras

CLASSE DVD
CLASSE Livro

Aplicação exemplo

Esta aplicação lê o ficheiro de obras (propriedade obras) e processa cada linha, criando os objectos correspondentes. Depois de lidas, as obras são processadas (uniformemente).

CLASSE Teste

A saída da aplicação de teste é a que se apresenta. Note-se a ordem de carregamento das classes.

 % java -Dobras=obras.txt Teste
 Carregamento da classe Obra
 Carregamento da classe DVD
 DVD:Era uma vez na amadora:Fernando Fonseca
 DVD:Lumiar selvagem:Pedro Fonseca
 Carregamento da classe Livro
 Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 DVD:48 horas para o exame:Orlando Fonseca
 Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892
 ****************
 RODOPIAR DVD:Era uma vez na amadora:Fernando Fonseca
 LER DVD:Era uma vez na amadora:Fernando Fonseca
 RODOPIAR DVD:Lumiar selvagem:Pedro Fonseca
 LER DVD:Lumiar selvagem:Pedro Fonseca
 FOLHEAR Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 LER Livro:A arte de sobreviver no 36:Joao Fonseca:1234567890
 FOLHEAR Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 LER Livro:Bairro alto e o budismo zen:Zun Tse Fonseca:1234567891
 RODOPIAR DVD:48 horas para o exame:Orlando Fonseca
 LER DVD:48 horas para o exame:Orlando Fonseca
 FOLHEAR Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892
 LER Livro:Lux e o insucesso escolar - Uma visao matematica:Carlos Alberto Fonseca:1234567892