Ruby: “Orientación a Objetos” y algo más.... Ruby: “Orientación a Objetos” y algo más... 7mas Jornadas Regionales de Software Libre Agosto de 2007, Córdoba,

Slides:



Advertisements
Presentaciones similares
Estructuras de control
Advertisements

Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Framework de.Net Infraestructura sobre la que se reúne todo un conjunto de lenguajes y servicios que simplifican el desarrollo de aplicaciones Entorno.
Curso de java básico (scjp)
LENGUAJES DE DESCRIPCION DE HARDWARE (HDL)
Lenguaje + Librería de clases + Entorno de desarrollo
Lenguajes de Programación
Lenguaje PHP Capítulo 4.
Interpretando objetos
Desarrollo de Aplicaciones para Internet
UNIT TESTING pruebas unitarias pruebas unitarias.
Tema 2: Lenguaje PHP básico
Curso de Java Estructura del Lenguaje
85 motivos* para Ruby on Rails
INFORMATICA I Funciones CLASE 13.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Desarrollo de sitios web con PHP y MySQL
Ruby Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales
ESTRUCTURAS DE CONTROL SELECTIVA LUIS OCTAVIO BUSTAMANTE Docente Colegio de la UPB.
Método en Java.
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
Universidad de Tarapacá Fundamentos Lenguaje y Programación Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Tema 1: Lenguaje PHP básico Ing. Tulio Nel Benavides Peña
Pulse para añadir texto Desarrollo de sitios web con PHP y MySQL Tema 2: Lenguaje PHP básico Elaborado por: José Mariano González Romano
Introducción a las redes e Internet Unidad 7: Páginas web dinámicas Clase 1 Unidad 7: Páginas web dinámicas Clase 1.
Microsoft© Visual Basic . Net.
Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata.
Ruby on Rails. ¿Qué es Ruby? Ruby es un lenguaje de programación totalmente o rientado a objetos multiplataforma(le nguaje interpretado y de scripts),
PHP el Lenguaje Ejercicios Básicos.
Yeray Caballero López Juan Pablo Quesada Nieves
Ficheros: Ruby Estructura de Datos II.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
MODULA Lenguaje de Programación Anabel Martín González
U niversidad de G uadalajara Centro Universitario de Ciencias Exactas e Ingenierías Ponentes: Muñoz Guzmán Ramón Gallardo Olivares Mario Solís Flores José.
Desarrollo y servicios web Luisa Fernanda Rincón Pérez
¿Que es Yii ? Framework para PHP de alta performance basado en componentes web para desarrollar aplicaciones web de gran escala. Yii es un framework que.
“Disfrutando la Programación Web: Ruby on Rails” Sergio A. Alonso Escuela de Informática y Sistemas VIII Jornadas.
Ruby on Rails Gary Castillo Gorbunov. El Lenguaje Ruby El Lenguaje Ruby Este es un lenguaje pura y netamente orientado a objetos. Este es un lenguaje.
8vas. Jornadas Regionales de Software LibreJavier Smaldone Un ISP con Software Libre Experiencias en la implementación de un ISP con software libre Javier.
Lenguaje de programación: Lua Fundamentos de lenguaje de programación. Iván Cardemil Patricio Tudela Camilo Rojas Llosect Moscoso.
Javier Smaldone 5tas Jornadas Regionales de Software Libre Noviembre de 2005 Rosario, Santa Fe, Argentina Primeros pasos en.
RubyNote ARCHIVOS EN RUBY HECHO POR: FRANCISCO ALVAREZ AGUILA.
Fase de analisis Proyecto de software.
Diseño y Programación Orientada a Objetos
LOS DIFERENTES LENGUAJES DE PROGRAMACION PARA LA WEB
Colecciones Carlos Fontela, 2008.
Lenguaje C en pocas palabras
AYUDANTÍA 6 Más sobre... ¿Faiton?.
Jornadas de Software Libre 2007 JSL2007
Diseño y Programación Orientada a Objetos
Lenguaje de Programación C en pocas palabras
Sonia Rueda Herencia y Polimorfismo
Herencia en C#.
HERENCIA.
Lenguaje y representación técnica
HISTORIA El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empezó a trabajar en Ruby el 24 de febrero de 1993, y lo presentó al público en el.
Paul Leger Funciones Paul Leger
Lenguaje de Programación
LENGUAJE DE SCRIPTING EN SERVIDORES WEB INTEGRANTES :JOSTIN FRANCO DARYENIS ARAUZ PABLO CANDANEDO.
Criterios cobertura de grafos: código fuente
Tema 2: Lenguaje PHP básico
Respuesta Respuesta Respuesta Respuesta Respuesta Respuesta Respuesta
Arquitectura Aplicaciones Web
Programación Orientada a Objetos
DESARROLLO DE APLICACIONES WEB INSTRUCTOR: HEMERSON VILLACORTA MANIHUARI.
Procedimientos y Funciones
Procedimientos y Funciones
Construyendo Nuestras Propias Funciones
Introducción – Parte 4 PYTHON PARA TODOS Hablemos con Python.
Transcripción de la presentación:

Ruby: “Orientación a Objetos” y algo más...

Ruby: “Orientación a Objetos” y algo más... 7mas Jornadas Regionales de Software Libre Agosto de 2007, Córdoba, Argentina Javier Smaldone

● Presentación del lenguaje no exhaustiva no es un curso ● Características llamativas para quien no conozca Lisp ni SmallTalk ● Algunos ejemplos comparación con otros lenguajes Objetivos de esta charla Ruby: “Orientación a Objetos” y algo más... Córdoba, agosto de JRSL

● Desarrollado por Yukihiro “Matz” Matsumoto liberado en 1993 “conocido” en 2000 ● Perl demasiado “sucio”, Python no del todo OO Smalltalk + sintaxis familiar + regexp + iteradores +... ● Ruby on Rails lo llevó a la fama (2004) excepto en Japón Historia 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

● 100% orientado a objetos objetos + métodos ● Tipado dinámico late binding, duck typing ● Sintaxis simple Principle Of Least Surprise ● Smalltalk + Perl Perl, pero bien hecho Características 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

class Person = 0 def = name += 1 end def self.find(name) do_something end p = Person.new('Juan Perez') q = Person.find('Pedro Lopez') puts puts p == q ? 'Imposible' : 'Está bien' Clases y meta-clases meta Class Class new Meta Object Meta Person find Object class == Person a 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

class Duck def quack 'Quack!' end class Goose def quack 'Quaaack!' end class Dog def bark 'Arf!' end Duck typing Si camina como un pato y grazna como un pato, debe ser un pato. def make_it_quack(duck) puts duck.quack end a = Duck.new b = Goose.new c = Dog.new make_it_quack a make_it_quack b # Error! make_it_quack c 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

module Quack def make_it_quack puts quack end class Bird include Quack def quack 'I say' end Herencia y mixins class Duck < Bird def quack super + ' quack!' end class Goose < Bird def quack super + ' quaaack!' end a = Duck.new b = Goose.new a.make_it_quack b.make_it_quack 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

class Person def end def = name end Getters y Setters p = Person.new p.name = 'Pepe' puts p.name class Person attr_accessor :name # attr_writer... # attr_reader... end 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

'Hello world'.class String.superclass String.is_a? Object Duck.respond_to? :quack Duck.new.respond_to? :quack String.methods 'Hello'.methods 'Hello'.private_methods String.instance_methods Class.class Class.superclass Module.superclass Introspección String Object true false true ['superclass', 'id',..., 'is_a?'] ['to_a', '<<',..., 'slice!'] ['put_c', 'throw',..., 'warn'] ['to_a', '<<',..., 'slice!'] Class Module Object 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

● También llamadas “funciones lambda” o “agentes”. ● Funciones y bloques como parámetros. ● Se pasa el bloque como parámetro, incluyendo las ligaduras al ámbito en donde fue definido. ● Permiten ocultar el entorno y definir funciones de orden superior. ● Existen en otros lenguajes, pero en Ruby son “naturales”. Clausuras (closures) 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

PHP function double($x) { $y = array(); foreach ($x as $e) array_push($y, $e*2); return $y; } Ejemplos de clausuras Problema: Multiplicar por 2 los elementos de una lista Haskell double = map (*2) Ruby def double(a) a.map {|e| e*2} end 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

PHP function names($a) { $b = array(); foreach ($a as $e) array_push($b, $e[1].', '.$e[0]); return $b; } Ejemplos de clausuras Problema: Dado un arreglo de la forma [["nombre", "apellido"]], obtener un arreglo de la forma ["apellido, nombre"] Haskell join [x,y] = x ++ ", " ++ y names = map (join. reverse) Ruby def names(a) a.map{|e| e.reverse.join(', ')} end 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

PHP $sum = 0; $count = 0; foreach ($people as $p){ if ($p->age > 18){ $sum += $p->age; $count++; } if ($count) print $sum/$count; Ejemplos de clausuras Problema: Calcular la edad promedio de las personas mayores de edad. Ruby adults = people.select{|p| p.age > 18} sum = 0 adults.each {|p| sum += p.age } puts sum.to_f/adults.size if adults.size > 0 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

Ejemplos de clausuras Problema: Calcular la edad promedio de las personas mayores de edad. Ruby adults = people.select{|p| p.age > 18} sum = 0 adults.each {|p| sum += p.age } puts sum.to_f/adults.size if adults.size > 0 adults = people.select{|p| p.age > 18} sum = adults.map{|p| p.age}.inject{|ac,e| ac+e} puts sum.to_f/adults.size if sum 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

function maxpal($a) { $max = ''; foreach ($a as $e) if (strlen($e) > strlen($max)) $max = $e; return $max; } Ejemplos de clausuras Problema: Encontrar la palabra más larga de una lista. maxp xs ys = if (length xs) > (length ys) then xs else ys maxpal = foldl maxp "" def maxpal(a) a.inject {|m, e| e.length > m.length ? e : m } end PHP Haskell Ruby 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

Ejemplo: QuickSort qs :: Ord a => [a] -> [a] qs [] = [] qs (x:xs) = (qs (filter ( x) xs)) class Array def head self[0] end def tail slice(1..-1) end def qs empty? ? [] : tail.select{|e| e<=head}.qs + [head] + tail.select{|e| e>head}.qs end 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

● Sitio oficial de Ruby ● Ruby Central ● Documentación (API completa) ● Ruby on Rails (framework para aplicaciones web) ● Ruby en tu navegador (tutorial interactivo) 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más... Referencias

● Tutorial sobre Ruby y metaclases ● Comparativa de performance shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs- cardinal ● Los lenguajes tienden a Lisp los-nerds.html ● Por qué Ruby es un Lisp aceptable lisp Referencias 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

¿Preguntas? 7JRSL Córdoba, agosto de 2007 Ruby: “Orientación a Objetos” y algo más...

Ruby: “Orientación a Objetos” y algo más... ¡Muchas gracias! Javier Smaldone

© Copyright 2007 – Javier Smaldone Esta obra licenciada bajo una Licencia Creative Commons Atribución-Compartir Obras Derivadas Igual 2.5 Argentina.