¿Porque ARC no es especialmente orientado a Objetos?


Posted in: (Lisp) by Erick , last update on: 2007-06-28 18:34:29.115028

Autor: Paul Graham

Traducción: Erick Ivaán López Carreón.

Hay una especie de obsesión por la programación orientada a objetos en este momento, pero algunos de los programadores más listos que conozco se encuentran entre los menos excitados acerca de ella.

Mi propio sentir consiste en que la programación orientada a objetos es una técnica útil en algunos casos, pero no es algo que tiene que impregnar cada programa que escribas. Tu deberías ser capaz de definir nuevos tipos, pero no deberías tener que expresar cada programa como la definición de nuevos tipos.

Pienso que hay cinco motivos por los que a las personas les gusta la programación orientada a objetos, y tres y media de ellas son malas:

  1. La programación orientada a objetos es emocionante si tienes un lenguaje con tipos estáticos sin lexical-closures o macros. En cierto grado, esto ofrece un modo de sortear estas limitaciones. (Ver la Décima Regla de Greenspun.)

  2. La programación orientada a objetos es popular en las compañías grandes, porque se ajusta al modo en que ellos escriben software. En las compañías grandes, el software tiende a ser escrito por grande (y con frecuencia cambiantes) equipos de programadores mediocres. La programación orientada a objetos impone una disciplina a estos programadores que impide a cualquiera de ellos hacer demasiado daño. El precio es que el código que resulta esta sobrecargado de protocolos y lleno de duplicaciones. Este no es un precio demasiado alto para las compañías grandes, porque su software probablemente va a estar sobrecargado de protocolos y lleno de duplicaciones de cualquier modo

  3. La programación orientada a objetos genera mucho de lo que se parece al trabajo. Hace tiempo en los días de las hojas continuas, había un tipo de programador que sólo ponía cinco o diez líneas de código en una página, precedidas por veinte líneas de comentarios detalladamente formateados. La programación orientada a objetos es como crack para esta gente: les deja incorporar todo este andamiaje directamente en su código fuente. Algo que un hacker de Lisp podría manejar empujando un símbolo en una lista se convierte en un archivo entero de clases y métodos. Aaí que es una buena herramienta si quieres convencerte,o convencer a alguien más, que haces mucho trabajo.

  4. Si un lenguaje es en si mismo un programa orientado a objetos, puede ser ampliado por los usuarios. Bueno, tal vez. O tal vez lo puedes hacer aun mejor ofreciendo los sub conceptos de la programación orientada a objetos a la carta. La sobrecarga, por ejemplo, no esta intrínsecamente atada a las clases. Veremos.

  5. Las abstracciones orientadas a objetos se mapean limpiamente dentro de los dominios de ciertas clases específicas de programas, como simulaciones y sistemas CAD.

Personalmente nunca he necesitado abstracciones orientadas a objetos. Common Lisp tiene un enorme y poderoso sistema de objetos y nunca lo he usado ni siquiera una vez. He hecho muchas cosas (p.ej haciendo hash tables llenas de closures) que habrían requerido técnicas orientadas a objetos para poder hacerlo en lenguajes mas debiles, pero nunca he tenido que usar CLOS.

Tal vez simplemente soy estúpido, o he trabajado en algún subconjunto limitado de aplicaciones. Existe un peligro en diseñar un lenguaje basado en la experiencia propia en programación. Pero parece más peligroso poner cosas que nunca has necesitado debido a que se piensa que es una buena idea.


Rees Re: OO

Original en inglés.