jueves, 13 de marzo de 2014

La filosofía del Ruby* como lenguaje de programación. Segunda parte.

¿Que son los Items?
Esta pregunta es imporante interesante y muy filosofica.

Para ellos empezaremos desde cero, en Ruby todo son objects (objetos), desde strings(comillas), integers (enteros) hasta las ".class". de hecho el ser supremo de Ruby se llama Object que a su vez contiene BasicObject. la cual es la clase suprema.

¿Quieres probar? Pon cualquier palabra, numero etc... por ejemplo dentro de irb en la consola y probad lo siguiente.

irb
> String.superclass
=>Object

>Numeric.superclass
=>Object

Por último e importante para un ejemplo de abajo. 
Class.superclass
=>Module
Module.superclass
=>Object

Aquí hay un dibujo muy artístico
http://i.stack.imgur.com/XDHjA.jpg

Class, viene definida como una librariea o bliblioteca (Library) donde tengo objetos de un mismo grupo classificados. Todos absolutamente todos los objetos pertenecen a una ".class" por ejemplo los numeros enteros (Integers) pertenecen a class Fixnum y todas las .class siempre tienen la primera letra en mayúscula.

Por ejemplo, todos los animales estan dentro de "class. Animals" y cada uno de estos animales son objetos en Ruby también y cada objeto tiene diferentes atributos. por ejemplo, los perros tienen 4 patas y una cola, las gallinas tienen 2 patas un pico y una cola. Dentro de esos objetos cada uno de ellos es un ente único, pero a ese ente no le llamamos así, a ese ente en Ruby se le llama Instance (o Instancia).

Ejemplos faciles y rapidos de Steve:
Tu, estas en la clase ser vivo, dentro de la clase ser vivo estas como subclase ser humano, los seres humanos tenemos atributos como, capacidad cognitiva, 2 brazos 2 piernas etc... y tu eres un unica Instancia vendria a ser (un ser o un ente si generalizamos aún más)

Así que si te ha quedado claro que es una instancia ¿Como la escribirias en una sola frase?

Trata de hacerlo y una vez lo hayas hecho mira se parece a esta definición.

Todos los objeto que estan dentro de una  determinada .class, tienen determinados atributos que les hace pertenecer a una determinada categoria, y cada uno de estos objetos son únicos y se les llama Instancia.

¿Cual de estos ejemplos seria una instancia y cual no?

1. x = Box
2. x = box
3. x = ''Box"
4. x = 123
5. x = a
6. x= Box.new

1. Box será un archivo .class ya que está en mayusculas, no será una instancia.
2. box es una instancia
3. "Box"  aunque esté en mayusculas es una instancia ya que está dentro de unas dobles comillas (string).
4. 123 es una isntancia dentro de class Fixnum 
5.  Tambíen a es una Instancia, ya que está en minuculas
6.  Box.new es una instancia! es una nueva .class creada  desde la .class Box. Cuando creamos una class a partir de una class creamos un objeto como una instancia dentro de la clase Module! Si creamos algo seräa una isntancia aunque sea creada a partir de una .class .
Es como si de un catalgo de la biblioteca de cajas crearamos otra biblioteca de catalgo de cajas ese catalogo es un modulo en si z por tanto un item o como ya conocemos una Instancia.

Consejos hacer los ejercicios relacinados con esto desde este link;
http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm





lunes, 10 de marzo de 2014

La filosofía del Ruby* como lenguaje de programación. Primera parte.

Haciendo un breve resumen... Olvidaros de Ruby on Rails... Eso tardara un rato... Tenemos que empezar con Ruby, de otra forma no entenderiamos del todo que hace Rails. Así que hablando con mi jefe decidí que me centraría en ruby. Y para ello el y mis colegas de trabajo me dieron una pequeña introduccción que os comparto,

Ruby es más flexible, facil de leer y no se repite, por ejemplo si comparamos con Java, Ruby se carga cada vez que añadimos algo dentro de el irb. Mientras que en Java se tiene que poner a cargar cada vez que deseemos er si funciona o no. Eso hace que Java sea más rapido a cargar de golpe todo mientras que en eso Ruby si que es más lento. Eso no es malo, todo tiene sus pros y contras.

Ruby tiene:

 - Una sola herencia ( no se repite)
- method overriding (tienes la posibilidad de estar sobrecargando una función que no se encuentra definida en el padre del que heredas)
- namespaces (Un espacio de nombres es un contenedor abstracto en el que un grupo de uno o más identificadores únicos pueden existir.)
- class(estaticos) variables y metodos,
- patterns como los singletons ( (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.)
- duck typing (enfocado a objetos)
!
Ruby NO tiene:
!
-Interfaces (ya que es flexible de tipos), pero mixins permiten secciones estándar de código para ser 
incluido y reutilizados en clases. Se permiten múltiples mixins. 
- Método de la sobrecarga (pero los métodos pueden tener argumentos opcionales).


Hay que diferenciar enre Arrays, ordered list of elements o cadenas, strings double quotes o dobles comillas objetos, container executung code pipes , traverse, block o tubos o bloques contenedores de codigos de ejecución, value items o items de valor, objetcts, values state u objetos, Integeres o numeros enteros, float o con decimales, class hash o asterisco de clase. Ire añadiendo... : 

Ejemplo:

Comida = ["huevos",  21,  :champiñones]
     nombre del  = Ashes["strings", 1nteger, symbol]
     main object            

def
 defincición o metodo

  
end
cierre del/ de_los comando/s

class
clase o tipo (endtro de la clase escribiremos los atributos) **
object.new 
objeto.constructor (new), es decir, cada vez que veamos (.new) es un constructor.
  
end

if
 acción o metodo en caso de.. 
  
end

if else
cualquier metodo diferente a los definidos
  
end


Arrays [abc, def]
Ashes [] &/or {}
Items(ex.ejemplo de 2 items) abc, def
Strings "abc"
Symbol (unmutable string):abc
Block ||
integers 1 2 3
float 0.001 3.1416 ...
object .abc

Otras notaciones.
Dentro de un objeto ... clave=>valor

"Un objeto es un contenedor de datos, que a su vez controla el acceso a dichos datos. Asociados a los objetos está una serie de variables que lo definen: sus atributos. Y también un conjunto de funciones que crean un interfaz para interactuar con el objeto: son los métodos."
Fuente: http://rubytutorial.wikidot.com/clases-objetos

Block sirve para Iterar(Iterating) repetir un comandos en diferentes items.
Los Items pueden ser:
- Objetos,  :huevos, :24
- Strings "queso", "24"
- Integers "34, 27" 
Los Items si son una lista vienen dentro de ashes,pero si es un solo item a veces no hace falta.
Para añadir items existen comandos y simplemente usando esa notación podemos especificar el item utilizando la notación. Por ejemplo, en el caso de strings puede ser muy util la lista de Strings! muchas veces se puede utilizar la misma notación para añadir intgerers to_i o strings to_s...


**: acerca de class escribiré y traduciré el documento, pero por ahora podeis ver el contenido en ingles aquí:
http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm
 La guía es una maravilla!