ebook img

Ruby: Orientación a Objetos y algo más PDF

22 Pages·2007·0.12 MB·Spanish
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Ruby: Orientación a Objetos y algo más

Ruby: Ruby: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... 7mas Jornadas Regionales de Software Libre Agosto de 2007, Córdoba, Argentina JJaavviieerr SSmmaallddoonnee jjaavviieerr@@ssmmaallddoonnee..ccoomm..aarr hhttttpp::////bblloogg..ssmmaallddoonnee..ccoomm..aarr RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Objetivos de esta charla 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 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Historia 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 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Características 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 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Clases y meta-clases class Person meta Class Class @@count = 0 new def initialize(name) Object @name = name Meta Object class @@count += 1 == end def self.find(name) Person do_something Meta Person a Person initialize end find @name @count end p = Person.new('Juan Perez') q = Person.find('Pedro Lopez') puts puts p == q ? 'Imposible' : 'Está bien' 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Duck typing Si camina como un pato class Duck y grazna como un pato, def quack debe ser un pato. 'Quack!' end end def make_it_quack(duck) puts duck.quack class Goose end def quack 'Quaaack!' a = Duck.new end b = Goose.new end c = Dog.new class Dog make_it_quack a def bark make_it_quack b 'Arf!' # Error! end make_it_quack c end 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Herencia y mixins module Quack class Duck < Bird def make_it_quack def quack puts quack super + ' quack!' end end end end class Bird class Goose < Bird include Quack def quack def quack super + ' quaaack!' 'I say' end end end end a = Duck.new b = Goose.new a.make_it_quack b.make_it_quack 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Getters y Setters class Person class Person def name attr_accessor :name @name # attr_writer ... end # attr_reader ... end def name=(name) @name = name end end p = Person.new p.name = 'Pepe' puts p.name 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077 RRuubbyy:: ““OOrriieennttaacciióónn aa OObbjjeettooss”” yy aallggoo mmááss...... Introspección 'Hello world'.class String String.superclass Object String.is_a? Object true Duck.respond_to? :quack false Duck.new.respond_to? :quack true String.methods ['superclass', 'id', ..., 'is_a?'] 'Hello'.methods ['to_a', '<<', ..., 'slice!'] 'Hello'.private_methods ['put_c', 'throw', ..., 'warn'] String.instance_methods ['to_a', '<<', ..., 'slice!'] Class.class Class Class.superclass Module Module.superclass Object 77JJRRSSLL CCóórrddoobbaa,, aaggoossttoo ddee 22000077

Description:
late binding, duck typing. ○ Sintaxis simple. Principle Of def make_it_quack(duck) puts duck.quack end double = map (*2). Ruby def double(a).
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.