Skip to content

Instantly share code, notes, and snippets.

@ThawanFidelis
Created November 28, 2011 14:38
Show Gist options
  • Save ThawanFidelis/1400618 to your computer and use it in GitHub Desktop.
Save ThawanFidelis/1400618 to your computer and use it in GitHub Desktop.
Soluções para os exercícios de Programação Orientada a Objetos (Ruby)
class Retangulo
def initialize(base, altura)
raise(ArgumentError, "lado nao pode ser negativo, 0 ou nulo") unless e_valido?(base) and e_valido?(altura)
@base, @altura = base, altura
end
attr_reader :base, :altura
def alterar_base(nova_base)
if e_valido?(nova_base)
@base = nova_base
else
raise(ArgumentError, "lado nao pode ser negativo, 0 ou nulo")
end
end
def alterar_altura(nova_altura)
if e_valido?(nova_altura)
@altura = nova_altura
else
raise(ArgumentError, "lado nao pode ser negativo, 0 ou nulo")
end
end
def area
@base * @altura
end
def perimetro
@base * 2 + @altura * 2
end
private
def e_valido?(lado)
(lado <= 0 or lado == nil) ? false : true
end
end
require './retangulo.rb'
describe Retangulo do
it "Nao deve aceitar lado negativo, 0 ou nulo" do
expect{Retangulo.new(-2, -1)}.to raise_error(ArgumentError)
expect{Retangulo.new(0, 0)}.to raise_error(ArgumentError)
end
it "Deve ser capaz de trocar o valor dos lados" do
retangulo = Retangulo.new(2,3)
retangulo.base.should == 2
retangulo.altura.should == 3
retangulo.alterar_base(4)
retangulo.alterar_altura(5)
retangulo.base.should == 4
retangulo.altura.should == 5
expect{retangulo.alterar_altura(-2)}.to raise_error(ArgumentError)
end
it "Deve ser capaz de calcular a area" do
retangulo = Retangulo.new(2,3)
retangulo.area.should == 6
retangulo = Retangulo.new(3.5,2)
retangulo.area.should == 7
end
it "Deve ser capaz de calcular o perimetro" do
retangulo = Retangulo.new(2,3)
retangulo.perimetro.should == 10
retangulo = Retangulo.new(3.5,2)
retangulo.perimetro.should == 11
end
end
class Bola
def initialize(cor)
raise(ArgumentError, "Bola deve ter uma cor") if cor == nil or cor == ""
@cor = cor
end
attr_reader :cor
def trocar_cor(nova_cor)
raise(ArgumentError, "Bola deve ter uma cor") if nova_cor == nil or nova_cor == ""
@cor = nova_cor
end
end
require './bola'
describe Bola do
it "Bola nao deve existir sem uma cor" do
expect{Bola.new()}.to raise_error(ArgumentError)
expect{Bola.new("")}.to raise_error(ArgumentError)
end
it "Deve retornar a cor da bola" do
bola = Bola.new("branco")
bola.cor.should == "branco"
end
it "Deve poder mudar a cor da bola" do
bola = Bola.new("preto")
bola.trocar_cor("azul")
bola.cor.should == "azul"
end
it "Cor da bola nao pode ser trocada para nil" do
bola = Bola.new ("verde")
expect{bola.trocar_cor(nil)}.to raise_error(ArgumentError)
end
end
class Quadrado
def initialize(lado)
raise(ArgumentError, "Quadrado nao pode ter lado 0 ou negativo") if lado <= 0
@lado = lado
end
attr_reader :lado
def alterar_lado(novo_lado)
raise(ArgumentError, "Quadrado nao pode ter lado 0 ou negativo") if novo_lado <= 0
@lado = novo_lado
end
def area
@lado * @lado
end
end
require './quadrado.rb'
describe Quadrado do
it "Quadrado nao deve aceitar lado 0 ou negativo" do
expect{Quadrado.new(0)}.to raise_error(ArgumentError)
expect{Quadrado.new(-1)}.to raise_error(ArgumentError)
end
it "Deve ser capaz de mudar o valor do lado" do
quadrado = Quadrado.new(2)
quadrado.alterar_lado(3)
quadrado.lado.should == 3
end
it "Deve ser capaz de calcular a area" do
quadrado = Quadrado.new(3)
quadrado.area.should == 9
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment