Inicializacion
Sin Parámetros:
array1 = Array.new
puts "#{array1}"
# RESULTADO:
# []
Con Parámetros:
array2 = Array.new(["1","2"])
puts "#{array2}"
# RESULTADO:
# ["1","2"]
Clase Propia:
**Nombre en CamelCase
class Car
def initialize()
puts "Se ejecuto el inicializador"
end
end
Car.new
Atributos
Sin usar de Attributes Readers/Writers/Accessor:
class Car
def initialize(colour)
@colour = colour
end
def colour
@colour
end
def colour=(new_color)
@colour = new_color
end
end
Usando Attribute Reader/Writer/Accessor:
class Car
# attr_reader :colour #LECTURA
# attr_writer :colour #ESCRITURA
attr_accessor :colour #LECTURA Y ESCRITURA
def initialize(colour)
@colour = colour
end
end
Atributos Virtuales
Creamos una variable de instancia virtual.
Para el mundo exterior, parece que nombre_calculado es un atributo más de la clase. No se puede acceder directamente al atributo nombre
Internamente, no tiene ninguna variable de instancia que se llame nombre_calculado, solamente nombre.
class Persona
def nombre_calculado
@nombre
end
def nombre_calculado=(new_nombre)
@nombre = "Señor " + new_nombre
end
def to_s
"#{@nombre}"
end
end
personaEjemplo = Persona.new() personaEjemplo.nombre_calculado = "Pepe" puts "El nombre de la persona es -->", personaEjemplo.nombre_calculado #RESULTADO: #"El nombre de la persona es -->Señor Pepe
MÉTODOS
class Car
attr_accessor :colour
def initialize(colour)
@colour = colour
end
def turnOn(sound)
puts "#{sound}"
end
def description
puts "Soy un coche de color #{@colour}"
end
end
carExample = Car.new("Red")
carExample.description
carExample.turnOn("Brum Brum")
Método initialize
Al hacer nombreDeLaClase.new para crear un objeto de esta clase, llama al metodo initialize pasandole los parámetros si los tuviera.
Método to_s
to_s significa to string. Hay que definir como quiere que se comporte al pasar el objeto de la clase a string, ya que si no, devuelve la posición de memoria en la que se encuentra.
class Car
attr_accessor :colour
def initialize(colour)
@colour = colour
end
def to_s
{color:@colour}
end
end
carExample = Car.new("Red")
puts "#{carExample}" #<Car:0x000055a5a5398410>
puts "#{carExample.to_s}" #{:color=>"Red"}
Identificador del Objeto
puts "#{carExample.object_id}"
Comprobar si existe un Método:
puts "#{carExample.respond_to?("turnOn")}" #TRUE
HERENCIA
class Vehicle
def initialize(number_wheels,colour)
@number_wheels = number_wheels
@colour = colour
end
def to_s
"Vehicle: // Number Wheels:#{@number_wheels} // Colour:#{@colour}"
end
end
class Car < Vehicle
def initialize(number_wheels,colour,number_doors)
super(number_wheels, colour)
@number_doors = number_doors
end
def to_s
super + " // Number Doors:#{@number_doors}"
end
end
vehicleExample = Vehicle.new(4,"grey")
carExample = Car.new(4,"grey",5)
puts vehicleExample.to_s # Vehicle: // Number Wheels:4 // Colour:grey puts carExample.to_s # Car: // Number Wheels:4 // Colour:grey // Number Doors:5
Si en la clase Car no tuviera la funcion to_s, miraria en la clase padre (Vehicle) si existiera….
Ver Listado de Métodos de una Clase
-
Heredados y Propios
puts "#{carExample.methods}"
-
Solo Propios
puts "#{carExample.public_methods(false)}"
Control de Acceso, Nivel de Protección de Métodos
Métodos Públicos (public)
Pueden ser llamados por cualquiera.
Los métodos son públicos por defecto menos initialize que es privado
Métodos Protegidos (protected)
Solo pueden ser llamados por los objetos de la clase y subclases. «Solo conocidos de la familia»
Métodos Privados (private)
Solo les puede llamar por el objecto actual
Especificación del nivel de Acceso
class Example def metodo_publico_por_defecto end protected def metodo_protegido end private def metodo_privado end public def metodo_publico end end
class Example def metodo_protegido end def metodo_privado end def metodo_publico end public :metodo_publico protected :metodo_protegido private :metodo_privado end
