Programación OO. Un ejemplo con a scensores (ejem, calculadoras).

Joaquin Jose del Cerro Murciano jjdelcerromurciano en yahoo.es
Mie Dic 1 07:02:40 CET 2004


El Martes, 30 de Noviembre de 2004 21:25, Victor Peinado escribió:
> ¡Hola!
>
> > Hala, hecho. Fíjate que la gracia está en arrancar varias calculadoras,
>
> Ya, muy chulo el ejemplo. Y veo que tiene sentido inicializar
> determinados valores en el constructor cuando creas más de una
> instancia de un objeto, cosa que yo hasta ahora no he necesitado
> hacer, de hay que mis constructores sean tan parcos.
>
> Gracias y saludos.

Hola, 
Ojeando este hilo de discusion no he podido dejar de obserbar un par de cosas.
Una siguiendo con el tema de POO y otra de interes personal (ligada a lo que 
comentaba Antonio Castro al final de su mensaje) que igual podria tener 
entidad para otra discusion.

Primero comentar la que atañe a este hilo de discusion.
En un momento Antonio hizo un explicacion bastante buena para lo breve que ha 
sido sobre POO. El truco esta en el analisis como bien comenta.
Dirijo un equipo de desarrolladores y el problema que se le plantea a Victor 
es un problema recurrente en programadores noveles que creeen que saben 
programar OO. La gente esta acostunbrada a ver el lenguaje de programacion 
como tal y a no ver la parte de POO. Tienes un lenguaje como Python, que es 
el caso, que SOPORTA programacion OO y tienedes a pensar que OO es codificar 
en python y aprender los trucos de la codificacion en python. Cuando dices

> Ya, muy chulo el ejemplo. Y veo que tiene sentido inicializar
> determinados valores en el constructor cuando creas más de una

Estan centrandote en el problema de la codificacion. OO no es codificacion. Yo 
he hecho programacion OO con C puro y duro cuando no existia el C++.
El lenguaje es una herramienta que te condiciona pero no es OO.

Cuando piensas en OO no piensas en Python, o C++ , o Java, o VB. POO es una 
forma de estructurar las ideas que luego se codifica en un lenguaje. Por 
supuesto si no controlas el lenguaje y sus peculiaridades en cuanto a 
facilidades de OO lo tienes dificil, pero controlar eso no es POO.

Cuando tengo que iniciar a un nuevo programador en POO, normalmete nos vamos a 
una pizarra y nos olvidamos del teclado, y del Python.  Eso biene despues.

Te recomiendo que pruebes un ejercicio, y si quieres lo comentas por aqui (si 
no le molesta a los demas).
- Elige un problema. 
- Coje un lapiz (o algo asi) y haz una descripcion en texto ordinario del
  problema (no muy larga, dos o tres parrafos a lo sumo).
- Coje un rotulador fosfi y subraya los sustantivos mas relevantes que haya
  en tu escrito. Posiblemente seran las entidades asociadas a tu problema.
- Ahora con otro color los verbos. Posiblemente sean las acciones asociadas a
  las entidades que hayas descubierto. Deberias tratar de descubrir que datos
  utiliza cada accion y anotarlo en algun sitio.

Con esa informacion coges una hoja en blanco y pintas una cajita por cada
entidad. Te anotaslas acciones que creas que te han salido asociandolas a cada 
entidad e intentas ver que relaciones hay entre las distintas entidades y 
pintas rayas.

Piensa tambien si existe alguna propiedad de esa entidad que sea relevante en 
el contexto de tu problema, y lo añades a la caja como una propiedad de esta.

Si asta aqui fuesemos bien (si quieres puedes consultar mas en la lista o en 
privado), ahora podriamos entrar a lo que es python.

Una entidad = una clase python.
En el constructor inicializas un atributo de la clase python por cada 
propiedad de una entidad. Si fuese imprescindible esa propidad se la pasas en 
el constructor.
Añades a cada clase un metodo por cada accion que te haya salido en la entidad 
y si trabaja con datos que no forman parte de los de la clase deberas 
pasarselos como parametro.

Si has llegado asta aqui, y quieres ya comentas. 
No es un curso de POO, ni es muy academico, pero como una aproximacion puede 
serte valido.
Tampoco creas que por que has entendido lo que aqui se comenta puedes pasar de 
hacerlo y codificar directamente. Si no tienes el habito mental de pensar 
asi, antes de abordar un tema directamente pasa por describir el problema en 
cristiano, pintar cajiitas y rayas entre ellas antes de ir a codificar. 
Cuando adquieras el habito de OO, y si el problema es pequeño podras pasar a 
codificar directamente sin pintar nada (aunque no es muy recomendable, algo 
de analisis garabateado en un folio o una pizarra al principio biene bien 
siempre). 


(Sorry si he aburrido a muchos).

------------------------------------------------------------------------------

El otro tema. Antonio comenta:

> En mi opiníon, sería chulo terminar con un interfaz gráfico que permita
> hacer simulaciones y comprobar el funcionamiento de la parte algorítimica,
> pero eso ya es para nota. En realidad ni siquiera se trata de completar

Suena muy bien lo que dices. Creeis que seria posible desarrollar un poco mas 
ese tema aqui en la lista.Vendria muy bien disponer en python de herramientas 
para hacer cosas de esas.
- Cuando comentas lo de "terminar con un interface grafico" estas hablando 
   de un modelodar de clases ? 
   A lo mejor podemos contribuir si tienes algo. Y si no tienes y ayudas con
   la definicion igual nos podria interesar meternos en ello.
- Cuando hablas de "hacer simulaciones y comprobar el funcionamiento de 
   la parte algorítimica" por donde van tus ideas ?

Si te interesa pordemos ver si se puede colaborar para hacer algo.

Un saludo 
Joaquin




Más información sobre la lista de distribución Python-es