Programación OO.
Rafael Villar Burke
pachi en mmn-arquitectos.com
Mar Nov 30 21:23:58 CET 2004
Victor Peinado wrote:
>Gracias por tu respuesta, muy ilustrativa.
>
>Tengo clara las ventajas de la POO y ya te digo que entiendo cómo
>funciona. Lo que me cuesta es pensar en términos de OO cuando tengo
>que enfrentarme a un problema. Imagino que es cuestión de
>entrenamiento, así que me prongo como deberes personales para estas
>Navidades meterme caña con este tema.
>
>Saludos.
>
>
Como lingüista a lo mejor te viene bien la analogía siguiente:
- Programación procedural -> pensamiento en término de predicados
- Programación orientada a objetos -> pensamiento en término de sujetos
y sus relaciones
El cambio de paradigma es complicado, puesto que hasta que comiences a
"ver" los problemas de esa manera resulta difícil. Es complicado
explicar un paradigma, puesto que se trata de un cambio de ontología,
una forma distinta de analizar una realidad. Me parece que esto se va
aprendiendo a medida que tomas esa actitud viéndola en ejemplos, aunque
comprender los conceptos centrales bien no está de más :). Al igual que
seguro que ya estás acostumbrado a reconocer "funciones" o "subrutinas",
que en realidad no existen más que en tu análisis, pero que has
aprendido a abstraer como entidades independientes con significado y
que, relacionándolas, llevan a cabo la tarea que buscas, también tendrás
que ir aprendiendo a reconocer "objetos".
Algunos problemas parecen más claros a la vista del paradigma de la POO,
por eso te recomendaron otras personas de la lista lo de la programación
en entornos gráficos. En casi todos ellos aparecen: señales (que se
conectan a métodos de objetos como retrollamadas y que son las
relaciones entre los objetos), controles (objetos), controles hijos,
herencia, etc...
Como referencias para ir empapándose de esa forma de pensar me parecen
muy interesantes los libros de Bruce Eckel "Thinking in C++" y "Thinking
in Patterns" que tratan muy bien todo el tema de las cualidades de los
objetos y sus relaciones (herencia, encapsulación y polimorfismo frente
a la relación de órden). El primero es muy muy bueno y explica
extremadamente bien la cuestión del polimorfismo, que se suele dejar un
poco de lado, y el segundo está sin acabar aunque creo que usa python...
(este último solamente lo he ojeado).
También sobre el paradigma de la POO el libro de Stroustroup "El
lenguaje de programación C++" (segunda edición) tiene algunos capítulos
interesantísimos que son de puro análisis y se mete en temas de si una
clase "es" o "contiene" otra clase, clases profundas frente a clases
planas, etc, que, como lingüista, seguro que disfrutas.
La teoría de los patrones de diseño entra de lleno en el mundo de la
POO, puesto que se trata de una teoría explicativa en la que los
problemas se reducen a "objetos" tipo y las relaciones entre ellos y
entre los mismos y un sistema general. En realidad, en mi opinión, los
patrones de diseño "son" la manera de pensar "en objetos".
Suerte y ánimo,
Pachi
Más información sobre la lista de distribución Python-es