Вы находитесь на странице: 1из 11

1. Introduccin Ao de creacin, autores, afiliacin cuando lo crearon. Nombre del lenguaje.

Tipo de software para el que est especialmente recomendado.


I didn't choose the name to be the successor of Perl. In fact, I'd like to choose the name from jewel, influenced by Perl, but I named Ruby after my colleague's birthstone. Later, I realized ruby comes right after pearl in several situation, like birthstones(pearl => June, ruby => July), font size(pearl => 5pt, ruby => 5.5pt.). I thought Ruby was the good name for the scripting language newer (and hopefully better) than Perl. So, Ruby is not the successor of Perl; it's replacement <wink>.1

Fuente: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/394

Ejemplos de sistemas software muy implementados con este lenguaje.


relevantes

2. Caractersticas del lenguaje


Conceptos bsicos Clases Caractersticas relacionadas Forma de manejarlas Modalidades Clases-patrn Clases-objeto S/N Comentario

Nivel de abastraccin Herencia Multiplicidad de padres

Paramtricas

Mltiple

Amplitud de uso

Traduccin

Simple Compilacin

Interpretacin

Mquina virtual

Fuente: http://www.tutorialspoint.com/ruby/ruby_modules.htm

Sistemas operativos

Todos

Gestin memoria

Liberacin

Automtica

Ocultacin de informacin

Emplazamiento de Pila objetos Montculo Variables Fuerte

Mtodos

Fuerte

Especificidad OO

Ligadura

Dinmica

Tipado

Esttica Variables sin tipo

Variables con tipo Tipos de datos Tipos primitivos


4

3. Traduccin a Ruby de la prctica Alumno.


3.1 Clase Persona
require 'date' # @author Alejandro Garca Montoro y Alejandro Torres Aguilera class Persona # attr_accessors proporciona los equivalentes a los mtodos get y set attr_accessor :nombre attr_accessor :fechaNacimiento # Crear objeto def initialize(nombre, fechaNacimiento) @nombre = nombre @fechaNacimiento = fechaNacimiento end #Proporciona, como cadena de caracteres, la fecha de nacimiento def Cumple return "El cumpleagnos es el " + fechaNacimiento.mday.to_s + " del " + fechaNacimiento.month.to_s end # Indica cundo un alumno es menor que otro; date, como es una librera ya hecha, tiene los operadores sobrecargados def esMenorQue(alumno) return @fechaNacimiento > alumno.fechaNacimiento end def edad actual = Date.today nacimiento = Date.new nacimiento = @fechaNacimiento mesActual = actual.month mesNacimiento = nacimiento.month agnoActual = actual.year agnoNacimiento = nacimiento.year diaActual = actual.mday diaNacimiento = actual.mday if (mesActual < mesNacimiento) edad = agnoActual-agnoNacimiento elsif ( mesActual == mesNacimiento) if(diaActual < diaNacimiento) edad= agnoActual-agnoNacimiento else edad = agnoActual-agnoNacimiento end end if(mesActual > mesNacimiento) edad = agnoActual-agnoNacimiento end return edad end

def to_s return self.edad.to_s end

"\n "+ @nombre.to_s + ", nacido/a el " + @fechaNacimiento.to_s + " de "+

# El operador <=> en Ruby es equivalente al mtodo compareTo() en Java def <=>(persona) if(self.edad < persona.edad) return -1 elsif(self.edad > persona.edad) return 1 else return 0 end end end

3.2 Clase Asignatura


class Asignatura attr_accessor :codigo attr_accessor :nombre attr_accessor :creditosECTS # Crear objeto def initialize(unCodigo, unNombre, creditos) @codigo = unCodigo @nombre = unNombre @creditosECTS = creditos end # Devuelve la informacin de la asignatura como String def to_s return " codigo : " + @codigo.to_s + " nombre : " + @nombre.to_s + " creditos: " + @creditosECTS.to_s+ " \n"; end end

3.3 Clase Alumno


#!/usr/bin/env ruby require 'date' load 'Persona.rb' load 'Asignatura.rb' class Alumno < Persona # Atributos que definen el estado del alumno @asignaturas = Array.new @@creditosMaximos = 32 attr_accessor :titulacion attr_accessor :asignaturas attr_accessor :creditosMaximos # Mtodos # Constructor que inicializa los atributos de la clase, para el caso de alumnos ya matriculados def initialize(unNombre, unaFecha, unaTitulacion = nil) super(unNombre, unaFecha) @titulacion = unaTitulacion end # Mtodo que nos devuelve en un String la informacin asociada al alumno def to_s if(!@titulacion.nil?) return super.to_s+ ", estudia " + @titulacion.to_s + "\n y esta matriculado/a de las siguientes asignaturas:"+ "\n "+ @asignaturas.to_s + "\n total de " + self.numCreditosMatriculados.to_s + " creditos. \n" else return super.to_s+ ", no se encuentra estudiando en este momento.\n" end end # Matricula al alumno en unos estudios si no est previamente matriculado def matricular(unaTitulacion) if(@titulacion.nil?) @titulacion = unaTitulacion end end def estaMatriculado if(!@titulacion.nil?) return false else return true end end

def matricularAsignatura(asig) error = catch(:matriculateError) do throw(:matriculateError, "El Alumno no esta matriculado en ninguna titulacion. ") if (@titulacion.nil?) throw(:matriculateError, "La asignatura supera el numero de creditos maximo que es: " + @@creditosMaximos.to_s) if ((numCreditosMatriculados + asig.creditosECTS) > @@creditosMaximos) if(!self.estaMatriculado(asig.codigo)) if(!asig.nil?) if(asignaturas.nil?) @asignaturas = Array.new end @asignaturas << asig end else puts " El Alumno ya esta matriculado en esa asignatura: " end end if(error.kind_of?(String)) puts error end end def desmatricularAsignatura(codAsig) error = catch(:unMatriculateError) do throw(:unMatriculateError, "El Alumno no esta matriculado en ninguna titulacion. ") if (@titulacion.nil?) throw(:unMatriculateError, "El Alumno no esta matriculado en esa asignatura. ") if (!self.estaMatriculado(codAsig)) @asignaturas.delete(self.buscarAsignatura(codAsig)) end if(error.kind_of?(String)) puts error end end def mostrarMatricula error = catch(:showError) do throw(:showError, "El Alumno no esta matriculado en ninguna titulacion. ") if (@titulacion.nil?) puts "El Alumno esta en la titulacion: " + @titulacion @asignaturas.each do |asignatura| puts "" + asignatura.to_s end puts "El numero maximo de creditos es: " + @@creditosMaximos.to_s end if(error) puts error end end

def buscarAsignatura (codAsig) asig = nil if(!asignaturas.nil?) @asignaturas.each do |asignatura| if(asignatura.codigo == codAsig) asig = asignatura end end end return asig end def estaMatriculado (codAsig) asig = buscarAsignatura(codAsig) if(asig.nil?) return false else return true end end def abandonar_los_estudios error = catch(:notMatriculated) do throw(:notMatriculated, "El alumno no esta matriculado en ninguna asignatura") if (@titulacion.nil?) @asignaturas.clear @titulacion = nil end if(error.kind_of?(String)) puts error end end def <=>(alumno) valor = super if(valor == 0) return @titulacion.to_s <=> alumno.titulacion.to_s else return valor end end private def numCreditosMatriculados numCreditos = 0 if(!@asignaturas.nil?) @asignaturas.each do |asignatura| numCreditos += asignatura.creditosECTS end end return numCreditos; end end

if __FILE__ == $0 personas = Array.new p1 p2 p3 a1 a2 a3 a4 = = = = = = = Persona.new("Ana", Date.new(1971,1,25)) Persona.new("Juan", Date.new(1990,4,14)) Persona.new("Pepa", Date.new(2000,10,5)) Alumno.new("Maria", Date.new(1960,7,13),"informatica") Alumno.new("Antonio", Date.new(2000,10,5),"informatica") Alumno.new("Ana", Date.new(1995,6,10), "fisica") Alumno.new("ALEJANDRO", Date.new(1995,6,10), "biologia" ) = = = = = Asignatura.new(1,"PDOO",6) Asignatura.new(2,"FIS",6) Asignatura.new(4,"SO",6) Asignatura.new(5,"SO II",6) Asignatura.new(3,"AC",6)

asig1 asig2 asig3 asig5 asig4

a1.matricularAsignatura(asig2) a1.matricularAsignatura(asig1) a1.matricularAsignatura(asig3) a1.matricularAsignatura(asig4) a1.matricularAsignatura(asig5) a2.matricularAsignatura(asig1) a3.matricularAsignatura(asig2) a4.matricularAsignatura(asig2) personas personas personas personas personas personas personas << << << << << << << p1 p2 p3 a1 a2 a3 a4

personas = personas.sort puts personas.to_s puts a1.mostrarMatricula a1.abandonar_los_estudios puts a1.mostrarMatricula end

10

Вам также может понравиться