Gente una pregunta, tengo por ejemplo una clase punto y otra clase circulo como podría hacer para crear un circulo con un punto, pero si creo ese punto con por ejemplo (1,zz) o algo invalido manejarlo por excepciones
Código Python:
Ver originalclass Hoja
def initialize()
@figuras = []
end
def AreaTotal()
tot = 0
@figuras.each{|fig| tot = tot + fig.area}
return tot
end
def agregar(fig)
@figuras.push(fig)
end
def to_s()
return "Hoja: " + @figuras.to_s
end
def inspect()
return self.to_s
end
def exportar(nombre)
begin
archivo = File.open(nombre,'w')
@figuras.each{|fig| archivo.puts fig}
rescue
puts "No se a podido crear el archivo"
end
archivo.close
end
def importar(nombre)
h = Hoja.new
begin
archivo = File.open(nombre,'r')
while linea = archivo.gets
linea = linea.split(' ')
caso = case linea[0]
when "Circulo" then Circulo.creacion(linea)
when "Cuadrado" then Cuadrado.creacion(linea)
when "Rectangulo" then Rectangulo.creacion(linea)
end
h.agregar(caso)
end
rescue
puts "No se a podido abrir el archivo"
end
archivo.close
return h
end
end
class Punto
def initialize(x1 = 0,y1 = 0)
@x = x1
@y = y1
end
def px()
return @x
end
def py()
return @y
end
def rect(p)
rec = Rectangulo.new(p)
rec.origen(self)
return rec
end
def to_s()
return @x.to_s + "," + @y.to_s
end
def inspect()
return self.to_s
end
end
class Figura
def initialize()
@origen = Punto.new()
end
def mover(p)
@origen = Punto.new(@origen.px() + p.px(),@origen.py() + p.py())
end
def origen(p)
@origen = Punto.new(p.px(),p.py())
end
def to_s()
c = @origen.to_s
muestra = self.nombre + c + "," + self.caracteristica
return muestra
end
def inspect()
return self.to_s
end
end
class Circulo < Figura
def initialize(r = 1)
super()
@radio = r
end
def area()
return 3.14159*@radio
end
def nombre()
return "Circulo "
end
def caracteristica()
return @radio.to_s
end
def self.creacion(linea)
begin
linea = linea[1].split(',')
circulo = self.new(linea[2].to_i)
circulo.origen(Punto.new(linea[0].to_i,linea[1].to_i))
return circulo
rescue => err
puts err.message
end
end
end
class Cuadrado < Figura
def initialize(l = 1)
super()
@lado = l
end
def area()
return @lado*@lado
end
def nombre()
return "Cuadrado "
end
def caracteristica()
return @lado.to_s
end
def self.creacion(linea)
begin
linea = linea[1].split(',')
cuadrado = self.new(linea[2].to_i)
cuadrado.origen(Punto.new(linea[0].to_i,linea[1].to_i))
return cuadrado
rescue => err
puts err.message
end
end
end
class Rectangulo < Figura
def initialize(p = Punto.new)
super()
@base = p.px
@altura = p.py
end
def area()
return @base*@altura
end
def nombre()
return "Rectangulo "
end
def caracteristica()
return @base.to_s + "," + @altura.to_s
end
def self.creacion(linea)
begin
linea = linea[1].split(',')
rectangulo = self.new(Punto.new(linea[2].to_i,linea[3].to_i))
rectangulo.origen(Punto.new(linea[0].to_i,linea[1].to_i))
return rectangulo
rescue => err
puts err.message
end
end
end
Aclarando un poco mas el tema pongo un ejemplo
Circulo 10,10,5 (Esto lo tendria que tomar)
Cuadrado 5,5,zz (Esto ya no)
Rectangulo 10,10,10 (Esto si)