Programa regularmente en R en un contexto profesional, y también escribo paquetes para clientes o compañeros de trabajo. Algunos de los programadores aquí tienen una base de Java e insisten en hacer todo de la manera orientada a objetos, utilizando métodos S4. Por otro lado, mi experiencia es que las implementaciones de S4 a menudo funcionan peor y causan más dolores de cabeza cuando se intenta hacer que el código haga lo que usted quiere que haga.Cuando vale la pena usar los métodos S4 en la programación R
Definitivamente estoy de acuerdo en que en algunos casos, debe ser capaz de construir objetos complejos o anexar objetos existentes de forma controlada. Pero la mayoría de las veces, las implementaciones de S4 también se pueden hacer fácilmente usando listas clásicas, sin todas las molestias como definir StandardGeneric, métodos, constructores, inicializadores y "me gusta".
¿Cuándo considera la posibilidad de escribir implementaciones S4 para R?
EDITAR: Para mayor claridad, aprecio las respuestas y la discusión sobre OO en general en R. OOP se puede hacer de muchas maneras en R, pero mi pregunta realmente apunta al valor agregado de usar métodos S4 específicamente.
¡Pero S3 es una orientación de objeto legítima! Es incluso más moderno y flexible que S4. – mbq
@mbq: No estoy de acuerdo. S3 es mucho menos formal y puede verse como un mero conjunto de convenciones de nombres. La "Clase" no es más que un atributo de hecho. S3 aún permite una gran flexibilidad que es casi imposible con los métodos S4. Por otro lado, S3 carece de herencia múltiple y validación formal. Puede usar S3 de una manera orientada a objetos, pero no es lo mismo que OOP sensu strictu en mis ojos. –
@Joris ¿Herencia múltiple? Se puede hacer fusionando objetos y sus clases con 'c'. Validación formal? Nadie dijo que OOP debe hacerse con tipeo estricto; Smalltalk es un ejemplo espectacular.En general, creo que OOP es solo una manera, por lo que no existe una OOP "canónica" (sin embargo, las personas generalmente eligen su idioma favorito y dicen que lo define). – mbq