aluno: Bruno César Alves
ano/sem: 2008/2o.
data do laboratório : 03/11/2008
Introdução
Este laboratório teve como objetivo o desenvolvimento do aprendizado incial em relação a linguagem Ruby. Para tanto, o segundo laboratório (entrega de relatórios de alunos) teve seu código transformado da linguagem Java para Ruby.
Desenvolvimento
Embora a linguagem Ruby tenha características muito parecidas com a linguagem Java, além da óbvia diferença na sintaxe, alguns aspectos concetuais são tratados de forma diferente em Ruby.
Alunos
A classe Aluno se manteve com os métodos que se referem a todos os alunos.
class Aluno def initialize (nome, queue) @nome = nome @queue = queue @comportamento = Esforcado.new(self) end def fazEEntregaRelatorio() @queue.queue(Relatorio.new(self, @comportamento)) end attr_reader :qualidade attr_reader :originalidade attr_reader :nome def inteligencia return @comportamento.inteligencia end def dedicacao return @comportamento.dedicacao end end
As subclasses AlunoITA, AlunoUSP e AlunoUnicamp também foram mantidas com pequenas alterações na forma em que as excessões são tratadas.
class AlunoITA < Aluno def initialize (nome, queue) super(nome, queue) end def comportamento=(comportamento) if comportamento.instance_of?(Burro) raise "Aluno do ITA não é burro\n" end @comportamento = comportamento end end
Queue
Por ter tipagem dinâmica, as classes RelaQueue e Queue foram substituídas por uma única classe chamada Queue. Os métodos "push" e "shift" facilitaram na manipulação da queue.
class Queue @array = Array.new def queue (elem) if @array != nil @array.push elem end end def dequeue if @array!=nil if @array.length!=0 @array.shift elsif array.length==0 "array vazia" end end end end
Relatório e Professor
As classes Relatorio e Professor tiveram alterações apenas na sintaxe.
class Relatorio def initialize (aluno,comportamento) @qualidade = (2 * comportamento.dedicacao() + 1 * comportamento.inteligencia() ) / 3 @originalidade = (1 * comportamento.dedicacao() + 2 * comportamento.inteligencia() ) / 3 @aluno = aluno end def aluno @aluno end attr_reader :qualidade attr_reader :originalidade end class Professor def initialize (queue) @queue = queue end def corrigirRelatorio (rela) return (rela.getQualidade() + rela.getOriginalidade() + fatorAleatorioDe0a1() ) *10/3 end def corrigirRelatorios @rela = @queue.dequeue() while(@rela != nil) corrigeRelatorio(@rela) @rela = @queue.dequeue() end end def fatorAleatorioDe0a1 rand() end end
Comportamentos
Os comportamentos foram os que sofreram maior, como o aplicativo em Ruby não exige especificação de um tipo no uso do comportamento, os comportamentos não necessitaram da uma classe abstrata Comportamento.
class Burro def initialize (aluno) @aluno=aluno end def inteligencia 0 end def dedicacao 0 end end
Teste
Para os testes do aplicativo, foi criado um arquivo que avalia o aplicativo de forma análoga ao teste realizado no segundo laboratório. O arquivo se encontra anexado ao relatório. Segue o resultado obtido nos testes:

Simulação
Foi criado um arquivo para a simulação do aplicativo, seguem os resultados da simulação:

Conclusão
A linguagem Ruby se mostrou muito prática. Além da facilidade da tipagem dinâmica, a linguagem tem uma sintaxe muito simples. Por outro lado, exigiu uma atenção no uso das diversas funções prontas que o Ruby oferece. Em relação a orientação a objetos, o Ruby se mostra um pouco a frente de Java, no caso deste laboratório, não foi necessário o uso da classe abstrata Comportamento.
De forma geral, o Ruby é uma linguagem com muitas qualidades, seu defeito é ser mais lento que outras linguagens, como o C por exemplo.