2. Introducción
Los lenguajes de programación es la manera de que el
programador le diga al computador, las ordenes para que
la misma ejecute. Existen un sinfín de lenguajes de
programación con distintos paradigmas y en esta
presentación nos enfocaremos en Ruby, un lenguaje que
tiene una gran demanda actualmente.
4. ¿Qué es Ruby?
Ruby es un lenguaje de programación interpretado, reflexivo y orientado a
objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto.
Combina una sintaxis inspirada en Python y Perl con características de
programación orientada a objetos similares a Smalltalk.
Comparte también funcionalidad con otros lenguajes de programación como Lisp,
Lua, Dylan y CLU.
El nombre Ruby (Rubí en español) es una parodia aludiendo al lenguaje de
programación Perl, de la cual Ruby fue desarrollado.
6. Sintaxis en el lenguaje Ruby
• La sintaxis de Ruby es similar a la de Perl y Python.
• La definición de clases y métodos está definida por palabras claves.
• Ruby mantiene todas sus variables de instancia privadas dentro de las
clases y solo la expone atreves de métodos de acceso (attr_writer,
attr_reader,etc) los métodos de acceso en Ruby pueden ser escritos
con una sola línea de código.
• Ruby impone algunas convenciones de sintaxis:
• Si un identificador comienza con una letra mayúscula, es una
constante.
• Si comienza con un símbolo de moneda ($), es una variable global.
• Si comienza con @ es una variable de instancia.
• Si comienza con @@ es una variable de clase.
7. Ejemplo de sintaxis
Constantes: PDF_KEY, R2D2, PERSONA_VIAJE
Las constantes solo se pueden definir una vez. Estas deben ser
escritas en letras mayúsculas.
Variables de objeto: @nombre, @maximo, @hora_comer
Las variables de objeto (o variables de instancia) solo pueden ser
leida/ escritas por el propio objeto.
Variables de clase: objeto, llave_maestra
Las variables de clase no pertenecen a los objetos, si no a la
clase. Existen únicamente en la clase, y son compartidas por
todos los objetos.
8. Ruby es orientado a objetos: todos los tipos de datos son un objeto, incluidas las clases
y tipos que otros lenguajes definen como primitivas, (como enteros, booleanos, nil,
etc.).
Este lenguaje soporta herencia con enlace dinámico, mixins y métodos singleton
(pertenecientes y definidos por una sola instancia más que definidos por la clase).
Ruby ha sido descrito como un lenguaje de programación multiparadigma:
permite programación procedural, con orientada a objetos o funcionalmente. Además
de soporte para hilos de ejecución gestionados por el intérprete.
Este lenguaje tiene tipado dinámico y soporta polimorfismo de tipos (permite tratar a
subclases utilizando la interfaz de la clase padre). No requiere polimorfismo de
funciones al no ser fuertemente tipado.
Sistema de tipos y semánticas de RUBY:
9. Ejemplo de semántica:
Irb(main):002:0>puts“hola
mundo”
Hola mundo
=>nil
Puts es el comando básico para
escribir algo en Ruby.
=>Nil? Es el resultado de la
expresión.
Puts siempre retorna nil, que
es el valor que significa
“absolutamente nada” en
Ruby.
Sistema de tipos:
• Orientada a objetos
• Cuatro niveles de ámbito de variable:
global, clase, instancia y local
• Manejo de excepciones
• Altamente por table
• Amplia librería estándar
• Soporta alteración de objetos en
tiempo de ejecución
10. El uso de memoria de Ruby tampoco está del todo optimizado ya
que su garbage collector no es para nada perfecto. Por lo que
tenemos un costo adicional en memoria.
La versatilidad del lenguaje el cual permite ser implementado
usando la máquina virtual de otros lenguajes como la máquina
virtual de java en jruby
Gestión de memoria en Ruby
11. Una excepción es un tipo especial de objeto de la clase
excepción. Lanzar una excepción significa parar la ejecución
de un programa para salir del mismo o para tratar con el
problema que se ha producido. Para tratar el problema hace
falta raise; de no ser así el programa termina y avisa del error.
Lo que hará raise (lanzar), será lanzar una “excepción” para
manejar el error.
Manipulación de excepciones en Ruby
14. Ruby ha sido descrito como un lenguaje de programación multiparadigma: permite programación
procedural (definiendo funciones y variables fuera de las clases haciéndolas parte del objeto raíz
Object), con orientación a objetos (todo es un objeto), o funcionalmente (tiene funciones
anónimas, clausuras o closures, y continuations; todas las sentencias tiene valores, y las
funciones devuelven la última evaluación).
Soporta introspección, reflexión y meta programación, además de soporte para hilos de
ejecución gestionados por el intérprete. Ruby tiene tipado dinámico, y soporta polimorfismo de
tipos (permite tratar a subclases utilizando la interfaz de la clase padre). Ruby no requiere de
polimorfismo de funciones al no ser fuertemente tipado (los parámetros pasados a un método
pueden ser de distinta clase en cada llamada a dicho método).
Paradigmas del Lenguaje Ruby
15. • Reflexivo
• Es una característica de algunos lenguajes para determinar y modificar su comportamiento.
Ruby no posee la capacidad de controlar estos objetos pero si puede controlar estructuras y
bloques.
Es lenguaje de programación de alto nivel o procedimental.
Es capaz de expresar el algoritmo de una manera correcta a la capacidad cognitiva humana.
Puede tratar con variables, objetivos, expresiones booleanas
Paradigmas del Lenguaje Ruby
17. • Programación Imperativa
Son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.
Esto quiere decir que se describen sentencias que modifican el estado de un programa.
• Programación Orientada a Objetos
Es la utilización de funciones aritméticas que no maneja datos mutables o de estado.
• Paradigma de Programación Funcional
Los lenguajes de programación funcional han sido enfatizados en el ambiente académico
principalmente y no tanto en el desarrollo de software comercial. También es utilizada en la
industria a través de lenguajes de dominio específico como R (estadística), Mathematica
(matemáticas simbólicas), J y K (análisis financiero).
Paradigmas del Lenguaje Ruby
19. Dominio del lenguaje Ruby
Programación Web
• Aplicaciones como Twitter, GitHub, sistemas de i-cloud lo incluyen en su catálogo como
Amazon EC2 o Rackspace.
• Ruby se utiliza también para administración de Sistemas. La herramienta Puppet o Chef sirve
para automatizar tareas administrativas en una red de ordenadores.
• La plataforma de Ruby se trabaja para realizar desarrollos web. Podemos definirlo como un
framework de software libre.
(Por framework entendemos un entorno o conjunto de programas o herramientas agrupadas.
Por software libre entendemos software que cualquier usuario puede ejecutar, copiar,
modificar, distribuir, cambiar o mejorar. )
• Ruby on Rails fue la inspiración para desarrolladores en otros lenguajes como Java, Groovy,
PHP, etc. para crear marcos de desarrollo parecidos o modelados bajo las ideas de Ruby on
Rails.
20. Dominio de lenguaje Ruby
Soporte de Servidores
Para desarrollo y pruebas, se utiliza Mongrel o
WEBrick, incluido con Ruby. Para utilizar Rails en
servidores en producción se está extendiendo el uso
de Passenger, una suerte de mod_rails para Apache
desarrollado en 2008 por la empresa holandesa
Phusion. Otras opciones para producción son Nginx,
Mongrel, Apache, Lighttpd con FastCGI o alguna
combinación de ambos(por ejemplo utilizando
Apache como proxy para los procesos Mongrel).
Sobre Apache, mod ruby puede mejorar
considerablemente el rendimiento, aunque su uso no
se recomienda porque no es seguro utilizar múltiples
aplicaciones RoR sobre Apache.
21. Dominio de lenguaje Ruby
Soporte de Base de Datos
Dada que la arquitectura Rails favorece el uso de bases de datos se recomienda usar un SGBDR
para almacenamiento de datos. Rails soporta la biblioteca SQLite por defecto. El acceso a la
base de datos es totalmente abstracto desde el punto de vista del programador, es decir que
es agnóstico a la base de datos, y Rails gestiona los accesos a la base de datos
automáticamente (aunque, si se necesita, se pueden hacer consultas directas en SQL) Rails
intenta mantener la neutralidad con respecto a la base de datos, la portatibilidad de la
aplicación a diferentes sistemas de base de datos y la reutilización de bases de datos
preexistentes. Sin embargo, debido a la diferente naturaleza y prestaciones de los SGBDRs el
framework no puede garantizar la compatibilidad completa. Se soportan diferentes SGBDRs,
incluyendo MySQL, PostgreSQL, SQLite, IBM DB2 y Oracle.
23. Restricciones de Arquitectura de Ruby
Ruby y su framework Ruby on Rails (RoR) están desarrollados para tener portabilidad en
distintos sistemas operativos.
A diferencia de otros lenguajes de programación, como Java, Visual Basic e incluso C, Ruby
no requiere tantos requisitos para poder ser ejecutado.
Ruby al ser un lenguaje interpretado, no necesita compiladores para programar en este
lenguaje, no obstante para codificar se necesita un editor de texto y su intérprete para
crear programas. Sin embargo, existen algunos compiladores que se han desarrollado para
facilitar la programación en este lenguaje de programación
24. ¿Qué necesito para programar en Ruby?
Es compatible en su mayoría en sistemas GNU/Linux y también corre en sistemas
Unix como Mac OS X, Windows (32 y 64 bits), BeOS, OS/2.
Tener instalado Interactive Ruby, que es el intérprete del lenguaje.
En Windows, descargar el instalador de Interactive Ruby desde la pagina oficial de
Ruby https://www.ruby-lang.org/es/documentation/installation/
Si usas Mac OS X, Ruby 2.0.0 ya viene instalado en OS X Yosemite y Mavericks. OS X
Mountain Lion, Lion, y Snow Leopard vienen con Ruby 1.8.7 instalado.
Para las distribuciones Linux, se descarga Ruby desde el gestor de paquetes (apt,
yum, etc.)
Tener instalado cualquier editor de texto para crear archivos extensión .rb (notepad
++, sublime text).
27. Restricciones contextuales
Igual que Python, Perl, PHP, etc. Ruby es un lenguaje interpretado. Este tipo de lenguajes
de programación, no requieren un código a ser compilado, ya que consisten en scripts que
son interpretados en tiempo real por un intérprete, lo cual permite maximizar la eficiencia
de los programas, en la mayoría de los casos.
Por lo general, los lenguajes interpretados son de alto nivel y están orientados a objetos y
eventos, lo que facilita la programación web y la programación cliente/servidor, por lo cual,
actualmente son lenguajes con mucho auge en el ámbito informático.
28. Proceso de ejecución de un programa en
Ruby
Cuando un programa es interpretado, el proceso que se
sigue es el siguiente:
El intérprete (Interactive Ruby) obtiene una
instrucción del fichero fuente y la realiza
inmediatamente. Para ello, ejecuta en secuencia
varias de esas porciones de código máquina que
comentábamos antes, y que residen en el interior
del intérprete.
Cuando la CPU termina la ejecución de esa
secuencia, el resultado es que la CPU habrá hecho
lo que la línea de código fuente expresaba.
Repitiendo esta secuencia para todas las líneas, el
intérprete realiza lo que los ficheros fuente
expresan... es decir, ejecuta el programa.
29. Diagrama de ejecución en Ruby
Código Fuente
Interactive Ruby
(Intérprete)
Traducción y
ejecución
Mensajes de error
Editar y corregir
31. ¿Es Ruby un lenguaje flexible?
Por supuesto que sí. Ruby es considerado un
lenguaje flexible, ya que permite a sus usuarios
alterarlo libremente. Las partes esenciales de
Ruby pueden ser quitadas o redefinidas a placer.
Se puede agregar funcionalidad a partes ya
existentes. Ruby intenta no restringir al
desarrollador.
Por ejemplo, la suma se realiza con el operador
suma (+). Pero si prefieres usar la palabra sumar,
puedes agregar un método llamado sumar a la
clase Numeric que viene incorporada.
32. ¿Ruby es portable?
El hecho de que estos lenguajes se ejecuten directamente en un intérprete o
mediante una máquina virtual hace que sean completamente portables. Si existe un
intérprete o una máquina virtual para una arquitectura y un sistema operativo (SO)
específico, entonces el programa puede correr en dicha combinación de arquitectura
y SO.
La portabilidad de Ruby lo hace muy atractivo a los desarrolladores, que pueden
programar aplicaciones sin preocuparse del SO en el que se va a ejecutar.
Esto difiere con la poca portabilidad de otros lenguajes como C, donde la
compilación del programa para una arquitectura diferente de aquella para la que se
diseñó puede obligar a cambiar librerías y parte del código fuente original.
34. Normalización del lenguaje Ruby
Cuando un lenguaje de programación recibe suficiente atención y uso entre
los programadores, suele comenzar el proceso de normalización.
Las organizaciones más importantes que supervisan y mantienen las
normalizaciones de los lenguajes de programación son el Instituto de
Normalización Nacional Americano (ANSI) y la Organización Internacional de
Normalización (ISO).
Se ha revisado el estado en el que se encuentra la normalización del lenguaje
Ruby que ya es una norma nacional en Japón y que previsiblemente se
convertirá pronto en una norma internacional.
En Japón, IPA (Information-Technology Promotion Agency) mantiene la
normalización del estándar sobre el lenguaje Ruby
36. Sistemas heredados
Ruby es un lenguaje de programación muy reciente, data del año 1995 y para su
desarrollo, este lenguaje tuvo origen a partir de otros lenguajes ejemplo: Perl, SmallTalk,
Python, Lisp, Eiffel, Scheme, Ada, Dylan, CLU.
La sintaxis de Ruby, proviene totalmente de Python y Perl; su paradigma orientado a
objetos la hereda de Smalltalk, y comparte su funcionalidad con otros lenguajes como
Lisp, Lua, Dylan, CLU.
Ruby ha influido en el desarrollo de nuevos lenguajes de programación entre ellos
podemos mencionar: D, Groovy, Falcon y Swift.
37. Lenguajes derivados de Ruby
D: Lenguaje de programación de uso general desarrollado por Walter Bright cuya primera
versión apareció en 1999. Se origina como un rediseño de C++, con un enfoque más
pragmático, pero no es un lenguaje puramente derivado del anterior. D ha mantenido
algunas características de C++ y también está influido por otros conceptos de otros
lenguajes como Java, C# y Eiffel. Una versión estable fue lanzada el 2 de enero de 2007.
Groovy: Lenguaje de programación orientado a objetos implementado sobre la
plataforma Java. Tiene características similares a Python, Ruby, Perl y Smalltalk. Groovy
usa una sintaxis muy parecida a Java, comparte el mismo modelo de objetos, de hilos y
de seguridad. Desde Groovy se puede acceder directamente a todas las API existentes en
Java.
38. Lenguajes derivados de Ruby
Falcon: Lenguaje de programación interpretado de código abierto multiparadigma
diseñado por Giancarlo Niccolai. Se basa en una máquina virtual de propiedad y está
disponible para las plataformas Microsoft Windows, GNU/Linux, Mac, Solaris y en el
futuro BSD. Se propone como una herramienta para crear aplicaciones completas y
aplicaciones web en relación con apache2.
Swift: Lenguaje de programación multiparadigma creado por Apple enfocado en el
desarrollo de aplicaciones para iOS y Mac OS X. Fue presentado en WWDC 2014 y está
diseñado para integrarse con los Frameworks Cocoa y Cocoa Touch, puede usar cualquier
biblioteca programada en Objective-C y llamar a funciones de C. También es posible
desarrollar código en Swift compatible con Objective-C bajo ciertas condiciones
42. ¿Es fácil
para un
programador
, escribir en
este
lenguaje?
Si un programador anteriormente ha codificado
en Python, Perl u otro lenguaje interpretado, Ruby
le resultará fácil debido a que mezcla la sintaxis y
características de los lenguajes antes
mencionados. Además Ruby ofrece una sintaxis sin
tantos caracteres, haciendo que la lectura,
codificación y depuración sea más ameno para el
desarrollador. Esto cumpliría el eslogan de
Ruby…”El mejor amigo de un desarrollador”
43. ¿Es fácil para un programador, escribir
en este lenguaje?
Factorial en Perl Factorial en Ruby
Si vemos ambos programas, podemos notar que Ruby conservar métodos y palabras
reservadas de los lenguajes en el cual está basado.
44. ¿Hasta que punto es inteligible este lenguaje
para un lector medio?
Matz, el creador de Ruby dijo que este lenguaje sigue el principio de la menor sorpresa.
Esto significa que el lenguaje debe comportarse de tal manera que minimice la
confusión de los usuarios experimentados.
Ruby tiene la particularidad de no utilizar un lenguaje oscuro en sus funciones, y los
nombres de las funciones de este lenguaje, proviene del inglés, facilitando
grandemente al programador. Además en Ruby, los puntos y comas (;), corchetes ({})
prácticamente no existen.
Como Ruby proviene de Python, Ada, Perl, Smalltalk, etc. Muchos de sus métodos
heredados tienen la misma funcionalidad, provocando una mayor familiarización y que
el lenguaje sea legible para cualquier lector.
45. ¿Hasta que punto es inteligible este lenguaje
para un lector medio?
Calculadora en Java Calculadora en Ruby
En estos programas, se aprecia una ausencia de puntos comas en el código de Ruby y
muchos de los métodos utilizados fueron heredados de Perl, y Python, a diferencia del
código en Java, que si utiliza llaves, corchetes y puntos comas.
46. ¿Es fácil aprender y enseñar el lenguaje?
Al igual que cualquier otro lenguaje, Ruby resultará fácil de aprender o enseñar, siempre
y cuando se entienda la lógica de lo que se desea programar. Si entiendes Perl o Python;
Ruby le resultará muy fácil, no sólo por las palabras de heredadas de estos lenguajes,
sino por la sencillez que Ruby muestra en su sintaxis. Matz citó “Ruby es simple en
apariencia, pero complejo por dentro, como el cuerpo humano”. Esta frase hace
referencia a la apariencia sintáctica de Ruby, ya que esto puede ser de gran ayuda para
personas que están aprendiendo a programar y también es excelente para enseñar a
programar. Ruby no tendrá tantos caracteres como Java, C++ o C#, pero es un lenguaje
muy potente que puede hacer todo tipo de tareas.
47. ¿Es fácil aprender y enseñar el lenguaje?
Aquí tenemos el famosísimo Hola Mundo en Ruby y en C#. Viendo la sintaxis de ambos
lenguajes se demuestra que Ruby es un excelente lenguaje para aprender y para enseñar a
programar.
48. "Si te gusta Perl, te gustará Ruby y su sintaxis. Si te gusta Smalltalk, te
gustará Ruby y su semántica. Si te gusta Python, la enorme diferencia
de diseño entre Python y Ruby/Perl puede que te convenza o puede
que no."
Yukihiro “Matz” Matsumoto, creador de Ruby
50. Concatenaciones y uniones
Concatenar significa unir 2 cadenas, en el caso de programación pueden unirse
enteros o reales a un cadena, incluso objetos complejos que pueden representarse en
una cadena pueden concatenarse. El manejo de las cadenas en Ruby es más
inteligente e intuitivo que en C. Por ejemplo, se pueden concatenar cadenas con
+(como en la imagen anterior) y se puede repetir una cadena varias veces con *,
ejemplo
51. Concatenaciones y uniones
En Ruby también podemos unir cadenas con el operador #{}. Al igual que +, este
operador incluye una variable dentro de la cadena a encerrándola en el
operador.
52. Ortogonalidad
La sintaxis de Ruby es muy ortogonal, lo que
ayuda a que la programación sea elegante y
divertida.
Su framework Ruby on Rails se esfuerza por
mantener la ortogonalidad entre cada capa
de la aplicación, de esta forma reduce el
acople entre elementos y a su vez disminuye
el tiempo y esfuerzo de mantenimiento.
La filosofía de Matz con su creación, Ruby,
prefiere armonía en el rendimiento de su
lenguaje, en lugar de ortogonalidad.
53. Fiabilidad de programas
En Ruby, el lenguaje de
programación se comporta de
manera igual cada vez que se
ejecuta un programa su ejecución
en las plataformas se mantiene
fiable.
Es decir, si ejecutamos un
programa de Ruby en Windows, se
ejecutará igual en Linux, en Mac
OS X. Esto se debe a la portabilidad
del lenguaje, debido a que no
necesita librerías específicas para
ejecutar, igual que Python, Perl,
etc.
55. ¿El lenguaje proporciona un soporte
adecuado para las aplicaciones del dominio
en el que lo estamos utilizando
Ruby y su framework Ruby on Rails
(RoR), están centrados en la
programación web. Este lenguaje
proporciona el soporte de los
servidores web de páginas web
entre ellos Twitter, GitHub,
SoundCloud,Twitch etc.
También da soporte a base de
datos (BD). Muchas bancos y
empresas en Panamá, utilizan RoR
por su flexibilidad entre
plataformas y potencia.
56. Abstracción
Una abstracción en Ruby es la agrupación de conjunto de elementos (datos y
procedimientos) que se le da un nombre.
Existen abstracciones propias de la computación, que se utilizan en múltiples
dominios. Por ejemplo abstracciones de datos como listas, árboles, grafos, tablas
hash.
Ejemplo de hashes:
h={‘perro’=>’canino’,’gato’=>’felino’,’burro’=>’asno’,12=>’docena’}
puts h.length #4
puts h[‘perro’]#’canino’
puts h
Puts h[12]
57. Implementación
¿Nos permite las construcciones y las características de
un lenguaje su implementación práctica y eficiente en
las plataformas coetáneas?
La arquitectura de Ruby fue desarrollada pensando en la productividad y la
diversión del desarrollador, siguiendo los principios de una buena interfaz de
usuario. Sostiene que el diseño de sistemas necesita enfatizar las necesidades
humanas más que las de la máquina. No importa que equipo informático uses
o que sistema operativo tengas instalado, la implementación de Ruby no
cambiará en nada, al contrario de otros lenguajes como C# o Java que para
poder se ejecutado, necesita librerías orientadas a ese SO. Ruby por decir,
ese un sistema universalmente portable.