2012-03-01 39 views
22

El uso de design patterns en la programación está muy extendido en muchos lenguajes de programación. Algunos ejemplos son el patrón de diseño factory o singleton. Muchos de estos patrones usan la orientación de objetos para crear abstracción y encapsulación en el código, apuntan a hacer que el código sea reutilizable y estructurado. Muchos de estos patrones de diseño también se podrían usar en R, tal vez usando la biblioteca proto, o la orientación estándar del objeto R?El uso de patrones de diseño en R

Mis preguntas son:

código
  • Qué base (S3, S4)/paquetes (proto, R.oo) puedo utilizar para reproducir los patrones de diseño como, por ejemplo, se menciona en el libro de Gamma y otros?
  • ¿Hay ejemplos de patrones de diseño implementados en R, tanto en la base R como en paquetes?
+1

El paquete de R.OO proporciona funcionalidad similar a OOP en R (usando clases S3). No es compatible con la gama completa de características de OOP y, como tal, no es compatible con la gama completa de patrones de diseño basados ​​en OOP. También me gustaría ver las clases de S4 http://www.stat.auckland.ac.nz/S-Workshop/Gentleman/S4Objects.pdf – SFun28

+0

Las clases de S4 parecen prometedoras, aunque la forma de construir objetos parece un poco torpe en comparación con, por ejemplo, Pitón. –

+1

He implementado algunos patrones de diseño esbozados en "Patrones de diseño de Head First" usando clases de referencia. Se correlacionan más estrechamente con el uso OO en otros lenguajes que los métodos S4, por ejemplo, implican menos traducción. – jverzani

Respuesta

2

Algunos ejemplos de patrones de diseño:

  • La función system.time() parece comportarse tanto como un decorator pattern. Sin embargo, casi exclusivamente decoradores se mencionan en el contexto de la programación orientada a objetos. Pero aún así, tiene la sensación de ser un decorador, extiende (o decora) una pieza de código existente (en OOP siempre es un objeto) con funcionalidad adicional sin necesidad de cambiar la pieza de código. Aquí system.time() se muestra en acción:

    system.time(bla <- Sys.sleep(1000)) 
    
  • @jverzani registró un ejemplo de patrón singleton on github.

  • Un ejemplo de Patrón de diseño de estrategia es la familia de funciones apply. La funcionalidad del bucle sobre el objeto dado es genérica, la función que se aplica (la estrategia) se elige cuando el usuario proporciona la función.