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:
- 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.)
- 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
-
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.
- 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.
- 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.