Lab4 Adriano Brasileiro

aluno: Adriano Brasileiro Silva
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 03/11/2008 (5)

Introdução

Nesta prática fizemos a conversão do corretor de relatórios de Java para Ruby, realizando as modificações necessárias e tratando as exceções

Desenvolvimento

Boa parta das conversões foi bem simples. Eis uma lista das principais mudanças:

Nas Classes:

- As chaves foram removidas dando lugar às indentações e "end"s
- Trechos de código opcionais foram removidos (como os "returns" ou parêntesis no nome dos métodos)
- Incremento de variável foi trocado de "++" para "+= 1", pois Ruby não oferece suporte àquele
- Os getters e setters foram trocados por "attr_reader"s e "attr_writer"s, exceto onde não eram convenientes (às vezes, além de setar uma variável era necessário realizar uma ação, ou a variável pertence a um objeto da classe)
- Foi suprimida a classe Conhecimento, já que em Ruby não existem tipos, de modo que a variável @conhecimento de aluno pode ser um objeto de comportamento quelquer diretamento
- Os métodos de inteligencia e dedicação que retornam valores aleatórios tém seus próprios getters para que gerem um número aleatório cada vez que o método for chamado, em vez de a variável receber tal valor no construtor
- A queue de genéricos foi removida por não haver necessidade dela em Ruby. A classe RelaQueue já é capaz de armazenar qualquer tipo de objeto, pelo fato de em Ruby não existirem tipos

No Simulador:

- Para ler uma string do usuário, foi necessário o auxílio do método chomp! que retira o '\n' que o método gets() deixa passar
- Foram utilizados mais métodos de arrays, como o push para inserir um objeto, e pop, para removê-lo
- O procedimento para o tratamento das exceções foi modificado (em Java se utilizava break para sair do switch case e não incrementar quantidade. Agora, em Ruby, dá se um pop para remover o aluno anteriormente inserido)

No Teste

- assertEquals foi mudado para assert_equal e assertTrue para assert
- As exceções foram trocadas cada por seu valor correspondente em Ruby (throw -> raise, try -> begin, catch -> rescue)
- O teste de verificar se RelaQueue era subclasse da queue de genéricos foi removida, pelo fato de em Ruby não existirem tipos, e a classe RelaQueue por si só já ser capaz de armazenar filas de qualquer tipo de objeto

Testes

O programa, exceto por problemas com caracteres acentuados, comporta-se exatamente como o mesmo programa em Java:

Testando com uma entrada que gera exceção e uma que não gera:
Lab4-1.PNG

Executando a classe de teste:
Lab4-2.PNG

Os códigos-fonte estão todos em anexo

Conclusão

Apesar de serem bem diferentes em sua concepção, Java e Ruby possuem muitas similaridades, que eu pude comprovar ao realizar essa conversão. No entanto, Java perde pela complexidade que algumas de suas ações têm para serem realizadas, principalmente em questão de I/O. Além disso, em geral, um código em Ruby requer menos código que um código para fazer a mesma coisa em Java. Por esta prática, não pude ver nenhuma dificuldade que a linguagem Ruby possa oferecer.

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License