Está en la página 1de 10

https://makeitrealcamp.gitbook.

io/programacion-orientada-por-objetos-en-ruby/clases-y-objetos

 Una clase es una plantilla para crear objetos.

 Un objeto es una instancia de una clase.

 La clase puede tener un método initialize llamado constructor que se va a llamar


cada vez que se cree un objeto de esa clase.

 El constructor se utiliza generalmente para inicializar los atributos de los objetos.

 En la clase puedes definir métodos (el comportamiento) y atributos (información) que va


a tener los objetos. A los atributos se les llama variables de instancia y a los métodos se
les llama métodos de instancia

 Los atributos son información asociada a cada objeto.

 Los atributos son privados y solo pueden ser leídos y modificados dentro del objeto, a
menos de que crees métodos para leerlos y modificarlos.

 Puedes utilizar los atajos attr_accessor, attr_reader y attr_writer para que Ruby
cree los métodos para leer y modificar los atributos.

Métodos y atributos de clase


Hasta ahora, los métodos y atributos de los que hemos hablado están asociados a
un objeto. En este capítulo hablaremos sobre métodos y atributos que están
asociados a la clase directamente.

En general, los métodos y atributos de instancia se utilizan mucho más que los
métodos y atributos de clase. Sin embargo, es importante que conozcas para qué
sirven y cómo se definen los métodos y atributos de clase.
Herencia
La herencia es una forma de reutilizar código en la programación orientada a
objetos. A través de herencia, una clase puede recibir los métodos de otra clase.

Veamos un ejemplo para aclarar este concepto. Supongamos que estamos


creando una aplicación de dibujo. En la mayoría de aplicaciones de dibujo puedes
agregar formas: círculos, cuadrados, etc:

class Circle

clase, sirven como plantillas, para crear objetos o instancias.

Clase—person

Person.new---objeto

Se pueden almacenar varios objetos de esta clase todos los que necesite

Métodos: son comportamientos que se definen dentro de la clase, pero se realiza sobre los
objetos.

Saludar

Para llamar un método sobre un objeto debes agregar un punto seguido del nombre del método
(p.e. p1.greet)
Reglas de Ruby

Que es una clase: es una plantilla, en la cual se definen métodos y funciones, propiedades, la clase
debe llamarse = al nombre del archivo creado con extensión.rb (cada incio de palabra en
mayúscula. Separador que debe utizarse _

Buenas prácticas: todo lo que va dentro de def = va en minúscula, debe de ir una función por línea,

Funciones: se define por línea

Métodos: definir variables.

Reglas lenguaje Ruby

Extencion arhivos= .rb

Parametros de función

Asignacion

Def: define un metodo

Ejemplo

class DocumentoOficio

def inicialize(oficio, numero_oficio, fecha, profesion, nombre,

apellidos, departamento, presente, saludo, cuerpo_documento, despedida)

@oficio = oficio

@numero_oficio = numero_oficio

@fecha = fecha

@Profesion = profesion

@nombre = nombre

@apellidos = apellidos

@departamento = departamento

@presente = presente

@saludo = saludo

@cuerpo_documento =cuerpo_documento
@despedida = despedida

end

def mostra

"unidades #{oficio} con departamento #{departamento}. fecha: #{fecha}"

end

def creador_doc

" usuario #{nombre} con numero_oficio #{numero_oficio}. profesion:#{profesion}"

end

end
Algunos caracteres tienen un significado especial en las expresiones regulares. Para
evitar que se procesen, y poder buscarlos, se usa la secuencia de escape \.

La \ significa "no trates el siguiente carácter como especial". Los caracteres especiales
incluyen: ^, $, ? , ., /, \, [, ], {, }, (, ), + y *.

El comodín . (punto)
Algunas veces, se busca cualquier caracter en una posición determinada. Esto se logra
gracias al . (punto). Un punto, busca cualquier carácter, excepto el retorno de carro.

/.azado/

Clases de caracteres
Una clase de carácter es una lista explícita de caracteres. Para ello se usan los
corchetes:

/[mc]azado/

De esta forma, especificamos la búsqueda de 'azado' precedido por 'c' o 'm': solamente
buscamos 'mazado' o 'cazado'.

Dentro de los corchetes, se puede especificar un rango de búsqueda.

/[a-z]/ # encuentra cualquier minúscula


/[A-Fa-f0-9]/ # encuentra cualquier número hexadecimal

Algunas veces se necesita encontrar cualquier carácter menos aquellos de una lista
específica. Este tipo de búsqueda se realiza negando, usando ^ al principio de la clase.

/[^A-Fa-f0-9]/ # encuentra cualquier carácter, menos los hexadecimales

Abreviaciones para clases de caracteres


Para encontrar cualquier cifra decimal, estas dos expresiones son equivalentes:

/[0-9]/
/\d/

Otras dos abreviaciones son:

 \w encuentra cualquier dígito, letra, o guión bajo (_).


 \s encuentra cualquier carácter espacio-en-blanco (character whitespace),
como son un espacio, un tabulado y un retorno de carro.

Todas las abreviaciones precedentes, también tienen una forma negada. Para ello, se
pone la misma letra en mayúsculas

/\D/ # busca cualquier carácter que no sea un número


/\W/ # busca cualquier carácter que no sea una letra o guión bajo
/\S/ # busca un carácter que no sea un espacio en blanco.

expresión significado

. cualquier caracter

[] especificación por rango. P.ej: [a-z], una letra de la a, a la z

\w letra o número; es lo mismo que [0-9A-Za-z]

\W cualquier carácter que no sea letra o número

\s carácter de espacio; es lo mismo que [ \t\n\r\f]

\S cualquier carácter que no sea de espacio

\d número; lo mismo que [0-9]

\D cualquier carácter que no sea un número

\b retroceso (0x08), si está dentro de un rango

\b límite de palabra, si NO está dentro de un rango

\B no límite de palabra

* cero o más repeticiones de lo que le precede

+ una o más repeticiones de lo que le precede

$ fin de la línea

{m,n} como menos m, y como mucho n repeticiones de lo que le precede


? al menos una repetición de lo que le precede; lo mismo que {0,1}

() agrupar expresiones

|| operador lógico O, busca lo de antes o lo después

Si no se entiende alguna de las expresiones anteriores, lo que hay que hacer es


probar. Por ejemplo, veamos el último caso: la |. Supongamos que buscamos la
palabra 'gato' o la palabra 'perro':

/gato|perro/

El | es un "O lógico": se busca la palabra de la izquierda o la palabra de la derecha.

Condiciones
if,else
En Ruby, nil y false significan falso, todo lo demás (incluyendo true, 0) significan
verdadero. En Ruby, nil es un objeto: por tanto, tiene sus métodos, y lo que es más,
puedes añadir los métodos que se quieran.

Veamos un ejemplo de if,else:

xyz = 5
if xyz > 4
puts 'La variable xyz es mayor que 4'
puts 'Puedo poner más instrucciones dentro del if'
if xyz == 5
puts 'Se puede anidar un bloque if,else,end dentro de otro'
else
puts "Parte del bloque anidado"
end
else
puts 'La variable xyz no es mayor que 4'
puts 'También puedo poner múltiples sentencias'
end

elsif
else se ejecutaba si la condición en if no se cumplía. Para poder tomar más
decisiones, en función del valor de la variable, se usa elsif:
#usando if,else anidados

puts 'Hola, cuál es tu nombre?'


STDOUT.flush
nombre = gets.chomp
puts 'Hola, ' + nombre + '.'

if nombre == 'Mojamuto'
puts 'Pedazo de nombre!!!'
else
if nombre == 'Enjuto'
puts '...este nombre no es moco de pavo...'
end
end
#usando elsif

puts 'Hola, cuál es tu nombre?'


STDOUT.flush
nombre = gets.chomp
puts 'Hola, ' + nombre + '.'

if nombre == 'Mojamuto'
puts 'Pedazo de nombre!!!'
elsif nombre == 'Enjuto'
puts '...este nombre no es moco de pavo...'
end
#otra modificación, usando el || ("o" lógico)

puts 'Hola, cuál es tu nombre?'


STDOUT.flush
nombre = gets.chomp
puts 'Hola, ' + nombre + '.'

if nombre = 'Mojamuto' || nombre = 'Enjuto'


puts 'Pedazo de nombre!!!'
end

case
Esta instrucción es muy parecida al if: se crean una serie de condiciones, y se ejecuta
la primera condición que se cumpla. Por ejemplo:
unless
Ruby tiene una forma contraria al if: la instrucción unless. Y digo contraria, por que
en if se ejecutaba el bloque (do … end) si se cumplía la condición; con unless se
ejecutará el bloque mientras NO se cumpla.

nombre = 'Pepe'
unless nombre == 'Enjuto'
puts 'Ese nombre no tiene arte ninguno'
end

=begin
Si el nombre no es Enjuto,
siempre se ejecutará el bloque.
=end

También podría gustarte