Your SlideShare is downloading. ×
0
×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Rails para programadores Java

4,057

Published on

Presentación para la I Conferencia Rails Hispana, celebrada en Madrid en noviembre de 2006. (Talk given at the first RailsConf Hispana) www.conferenciarails.org …

Presentación para la I Conferencia Rails Hispana, celebrada en Madrid en noviembre de 2006. (Talk given at the first RailsConf Hispana) www.conferenciarails.org
El objetivo de la presentación no era ser un simple “Rails versus Java”, sino mostrar a la gente que desarrolla en Java que Rails es un entorno al que no le va a costar dar el salto y en el que va poder aplicar de manera ágil los conocimientos que el mundo Java proporciona, lease orientación a objetos, patrones de diseño, etc… Aunque dirigido principalmente a personas con conocimientos de Java, la intención es que los ejemplos sean lo suficientemente visuales como para servir tambien de presentación de Rails a quien esté familiarizado con cualquier otro lenguaje.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,057
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ruby On Rails para Programadores Java Juarrio Bazán I Conferencia Rails Hispana Madrid 2006
  • 2. ¿A quién va dirigida’? B“e"°5 Programadores Java Web
  • 3. Ya sabes Rails MVC Programación Orientada a Objetos Convenciones sobre configuraciones
  • 4. MVC Java. Configuración Rails : :Convención struts struts-config. xm1 E. .. web. xm'| gm“ Sp r"i ng ¡fi interfaces _ xm'| h1 be rnate Spring'hand1er hibernate. cfg. xm1 *. hbm. xm1 <jsp tags>
  • 5. fi i! i l i ti! Orientación a objetos Objetos, mensajes Clases Interfaces Instancias Variable/ métodos de instancia Métodos/ variables de clase (static). .. Herencia
  • 6. Mapeo OIR Active Record JDÜ, Envoltura sobre filas de BD Hibernate, Toplink. .. Encapsula el acceso a BD Métodos de clase para obtener instancias
  • 7. _. . ‘ . ir A i 34.7.3. A| ¡’la l L: I ¡‘mi i: .-¿>: ¿.= ‘ Iil ¡i ll ¡air-v z l mi ‘i ¡"ri-r s43. is- h | _:4V| j-{¡ . | 1 1| I . l 1 ¡un Rails incluye el mejor entorno para testing del ‘mercado’. Sin discusión.
  • 8. ¿Ayuda para tareas de desarrollo? ¿Usas Ant? í Usarás Rake sin problemas
  • 9. Resumen Todas las convenciones que asume Rails te parecerán naturales. Rails te proporciona mecanismos simples para las funcionalidades de las herramientas Java que estás acostumbrado a usar. Rails agrupa funcionalidades que estas acostumbrado a encontrar por separado.
  • 10. No sabes Ruby Rails no podría existir sin Ruby Rails ‘hereda’ de Ruby su elegancia y simplicidad Ruby es un lenguaje dinámico orientado a objetos ¿Si llego desde Java qué diferencias me voy a encontrar?
  • 11. Ruby: Tipado dinámico Java : int x=2; x= x‘100; System. out. println(x); => -831846303 (! ) Ruby : x=2 x. class = > Fixnum x= x**100 = > 1267650600228229401496703205376 x. class = > Bignum
  • 12. Ruby: ¡No hay tipos básicos! Java : String. valueOf(33); Integer. parseInt(“33”); Ruby : 33.to_s = > No wrappers! “33”. to_i 11.zero? 7.c1ass = > Fixnum 6+2 6.+ 2 6.+(2)
  • 13. Ruby: Todo son objetos Java: null = > Referencia erronea a un objeto Ruby: x= ni1 x. nil? => true x. class = > Nilclass ¡¡No NullPointerException! !
  • 14. Ruby: Manejo simple de Fechas Java: Date fecha = new Gregoriancalendar(2006,11,25,16,0). getTime(); Ruby: “2006-11-25 16:00”. to_time Java: new Date(new Date(). getTime() - (30*60*1000)) RoR: 30.minutes. ago
  • 15. Ruby: simplicidad de código Java : Ruby : pubiic ciass Conferencia{ ciass Conferencia private string nombre; attr_accessor znombre, ¡fecha private Date fecha; end public void setNombre(string n){ this. nombre= n; } pubiic string getNombre(){ return nombre; } public void setFecha(Date f){ this. fecha= f; } public Date getFecha(){ return fecha; } } getterlsetter se generan automáticamente
  • 16. Ruby: Cüntenedbres Java : Ruby : Arrays Array a [1] = x Collections Framework: Hash h [a] :1) ArrayList set Stack List Todas las Hashset funcionalidades es HashMap un solo contenedor. Funcionalidades repartidas (Clases, Interfaces, Metodos estáticos. ..)
  • 17. Ruby: iteradbres pre Java 5: for (Enumeration e= parent. getChi1dren(); e. hasMoreE1ements(); ) { Element child = (E1ement)e. nextE1ement(); // Hacer algo con child } post Java 5: for (Element item : items) { / /hacer algo } Ruby: parent. each_child { | chi1d| # Hacer algo con child
  • 18. Ruby: Asignación múltiple Java: Ruby: int a=2; a=2 int b=3; :3 int aux; aux = ai a, b = b, a a = b; b = aux; titulo, autor = Libro. getInfo
  • 19. Ruby: es (muy) Dinámico Puedo añadir métodos a CUALQUIER clase ( y en CUALQUIER momento) class String def spanish? include? “ñ” end end “Du hast mich”. spanish? => false
  • 20. Ruby: No hay interfaces No hay herencia de interfaz ¿Y si necesitamos tener métodos comunes? Módulos Agrupación de métodos Un módulo no se instancia Se incluyen en las clases (include) Se convierten en metodos de instancia
  • 21. OK. ¿Qué consigo a cambio? Menos código No XML innecesario No aprender lenguajes de configuración de apps Acceso fácil a buenas prácticas: Test, REST, ... Menos sufrimiento Comunidad efervescente ++ PRODUCTIVIDAD
  • 22. ¡¡ ENSÉÑAMELO l!
  • 23. Ejemplos de tareas comunes No hacer nada Mapear una tabla de BD Hacer una consulta a BD Crear un archivo XML Añadir filtros a una petición web Hacer una llamada Ajax
  • 24. Un programa que no hace nada Java : Ruby On Rails : Archivo Nada. java: Archivo Nada. rb: public class Nada{ public static void main(string[] args){ } }
  • 25. create table noticias( id int not null autoincrement, titular varchar(100), entradiila varc ar(2S5), texto text, Java: primary key(id) public class Noticia{ private Integer id; hnbernate-rruapping class name Noticia table notldas ¡d name id type integer unsaved-value null column name id sql-type in! (4) not-null true i ïílfllgmflefl generator class Identity i f‘ ' ¡d g le De a property name titular column titular type " “d” . , _ . . . . . . . . . __. ___. m_ _. . _ . _ _. .¡. ._.4eu_ . e. i -. .._-l-. -¿. -z'? mliorsion— .07’: - -». !Ll()( IWL lnbeihate-configuration . . SYSTH-l "hibernatemonfiquration—? .O. dtd"‘: v NOÜGa-rb shihvrnaïo (onfitjurntiorl _ _ . class Noticia < ActiveRecordnBase {SESSION ÍJ(ÍOI- fï- ¿property name-“(onnoction(latasouire"‘: r java (ompfen ‘jdbt msm»: ¡‘property ¿property namo-‘showgxql Jake -: ' mropony ‘: - apiopeity name-"dizilett? net. si. hiberndtc. dialettAlvSQl [Halen -: ' r pl operty t- c-I uappinqfilos —- Illdpplílg l6SOUl(8"ÑOUUGJIÍNII. llli'l cyfsossion fadonfir- -: m'l1il)crr1atc- (onfiquration í-
  • 26. Consultar Ia Base de Datos Java : Ruby On Rails : String tÍtu| ar= "Conferencia Rails en Madrid”; n°ti= N°t¡c¡a'fi“d(ïfirst' ’C°”d¡t¡°n5=> [tituIar= ”Conferencia Rails en Madrid"]) Query q= session. createQuery( “from noticias n where titu| ar= :t"); q. setParameter(titular); Noticia noti= (Noticia)q. setMaxResuIts(1). uniqueResu| t0;
  • 27. Crear un archivo XML Java : Ruby On Rails : import org. dom4j. Document; import org. dom4jDocumenmelper; x = BuilderzzxmlMarkupnew import org. dom4j. E|ement; xmumnd x. nombre 'Luis" Pubüï dá“ FOQÏ xapellido "Crespo" public Document createDocumentiií ¡ Document document = DocumentHelper. createDocumentiií Element root = documentaddElement( "root" ); Element author] = rootaddE| ement( ‘alumno’ i <¿¡umn0> addAttributN znombresfiuis") _ <nOmb¡e>Lu¡s<¡nOn¡bre> taddAttnbute( apellido , Crespo i (¿m4|¡do>C¡espo</ ape| |¡do> </ alumno> return document; i} Método . to_xmI !
  • 28. Añadir un filtro Java: clase Filter, doFilter, xml public final class Miïlitro implements Filter ( private Filtercontig filtercontig = null; public void init(Fi1terContig tilterconfig) throws servletzxception 4 this. ti1terContig = tiltercontig: 1 public void destroy() ( this. ti1terContig = null; I public void doFi1ter(serv1etRequest request, serv1etResponse response, Filterchain chain) / /filtrar algo Ruby On Rails: class Micontroladorcontroller < Applicationcontroller before_filter : autorizar def autorizar #. .. end end
  • 29. w 4 i, ÍEÜJÏÏ 4 _4.—¿. ¿ a-d J var req; function "utRewízuïrstr >{ ¡f (wundoxrr, XhiLHtIpRequest) { req = new XMLHttpRequestrjji; } else ¡f (windowActivexobject) { islE = true; } req = newActrveXOb, ect("i.1i: rosofteXi«.1LHTTP"i. e "_, _ïdande" A __ } function xeahcteiïetiseriwii‘i{ "IRe: ;:;1e: I;s re onread statechanqe = rocessReuest; pub’ : VOÍÓCGEWFÏTDSEPJÏQÏRECUÉSÍ request Hnpsertïetïlesponse response] thor/ s IÜEXCEiJÏNDO Senfletíxceptc-w { Starz: ‘¿rrpï-tld = request QCÏPHS‘. nererfid‘; i‘ ¡ujtargetid ‘= nu 1M. ¡accounts contarnsKeyflzvgetid mm HH response setContewtTupeïfext n”; response seïHeaáerféacte-Confrc ' ‘no-cache’; response getwrrterr‘) ‘ivntefm ji-true-I ‘¡É iv‘) }else' response seïContefltTupefiextk-w‘"i response seïrieaderi" acfeconfro ‘ “nocache”; response getwrrrerr‘) wntekwe-sï d>ia'se<v‘va wd>'i } eïass ¿Ejíempï citant Isoflerdppïl icatáanÉonÍr-n1 Terr‘ i
  • 30. EHWRAS: Migraciones RJS irb
  • 31. Migraciones Control de versiones de la BD No utiliza SQL, utiliza Ruby!
  • 32. RJS Plantillas Javascript No se programa en JS sino en Ruby! page. insert_html zbottom, ‘list’, content_tag("1i", "algo") page. visual_effect : highlight, ‘list’, zduration = > 3 page. replace_html ‘header’, ‘RJS Es Fácil! ’
  • 33. irb: interactive ruby Consola de ejecución irb(main): B@1:Ü> puts "Hola" Hola = > níl irb(main): B@2:@> 2.+3 = > S irb(main): @Ü3:@> Acceso a todas las clases de la aplicación Rails
  • 34. Resumen Transición fácil Aumento de la productividad Haz feliz al carbono, no al silicio!
  • 35. ¡Gracias! Licencia: Este documento se presenta bajo licencia "Creative Commons At_tribut_ion_- _ NonCommerciaI-ShareAIiKe", _version 2._5. Es decir _s_e puede copiar, distribuir o crear trabajos derivados bajo las siguientes condiciones: * Atribuir el crédito al autor original (Juanjo_Bazán @ wvvw. kfl¡nk. com ) * N_o u_ti| i2_ar este trabajo para usos comerciales. _ . _ * Distribuir cualquier trabajo derivado usando esta misma licencia. (Detalles en: http: //creativecommons. org/ Iicenses/ by-nc-sa/2.5/ ) ¿dudas? jjbazan@kf| ink. com

×