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