Lab4 Bruno Cesar

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:

30t5oc3.jpg

Simulação

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

aeuvrk.jpg

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.

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