Desafio de diseño: objetos inteligentes

29 05 2012

Estaba preparando un ejemplo para algo3 cuando me surgió esta cuestión.

Como ya he mencionado en algo3 solemos programar juegos. En general los juegos tienen ciertos personajes que van actuando autonomamente con el paso del tiempo, a estos objetos es a lo que llamo objetos inteligentes. Por poner un ejemplo, tomemos el clásico juego de naves Gálaga, donde las naves enemigas actuan autonomamente con cierta lógica interna.

Cuando llevamos esto a código siguiendo el paradigma orientado a objetos, estas naves solo debieran tener un método público del tipo actuar, el cual seria invocado desde el GameLoop. Dentro de dicho método, cada nave decidiria si moverse en una determinada dirección, o si disparar, o si hacer ambas cosas al mismo tiempo, etc. Con el fin de que dicho método no quede demasiado largo, generalmente extraeremos varios métodos privados: uno con la lógica de movimiento, otro con la lógica de disparo, etc, etc.

Ahora la cuestión es: ¿como escribir pruebas unitarias para esta clase cuando tiene un solo método con tanta lógica? Es claro que es posible escribir pruebas unitarias para estos casos, pero si intentan hacerlo verán que no les quedará código muy feliz, pues el código de arrange de cada prueba podria resultar bastante largo y engorroso de escribir debido a todos los caminos posibles dentro del método bajo prueba. Una opción para evitar esta situación podria ser hacer públicos los métodos privados y asi escribir pruebas por separado para la lógica de movimiento, para la lógica de disparo, etc, etc, pero esto implicaría poner públicos ciertos métodos que naturalmente seria privados, con el solo fin de hacer pruebas. Definitivamente esta opción me hace ruido.

¿Entonces? Tengo una propuesta, pero será parte de otro post, mientras tanto, los invito a lo que piensen.

Continuará….





Resultados del relevamiento sobre POO

2 04 2012

Hacé un tiempo publiqué una encuesta para relevar los lenguajes utilizados para la enseñanza de la POO. Esta encuesta la distribuí entre conocidos y también en algunas listas de correo en las que participo. En total obtuve 143 respuestas provenientes de 6 paises distintos de habla hispana (Argentina, Uruguay, Peru, España, Republica Dominicana y Guatemala).

Básicamente la encuenta preguntaba sobre el lenguaje utilizado en la primer materia de objetos, aquella en la que el alumno se cruza por primera vez con los conceptos de polimorfismo y herencia. También se preguntaba sobre la materia/institución y la época, pues entiendo que a lo largo del tiempo ha habido una variación.

El análsis de los resultados me ha llevado un tiempo, pues no se trata de contar resultados individuales, sino que es necesario agruparlas por institución y época.

Los resultados han arrojado que en los casos anteriores a 1990 los leguajes utilizados han sido Object Pascal (Delphi) y Smalltalk.

Durante los años 90 los lenguajes predominantes son C++ y Smalltalk

Ya  a partir del año 2000, comienza a descatarse Java en desmedro de C++ y Smalltalk.

Más allá de estos números, se confirma mi hiṕotesis, la gran mayoria de las intituciones utilizan UN solo lenguaje para la enseñananza del Paradigma OO en la primer materia dedicada al tema.

Con estos resultados puedo seguir trabajando en mi paper sin cambiar el enfoque ya que mi teoría se confirma. Cuando tenga el primer draft lo publicaré en este mismo medio.

Gracias a todos los participaron de la encuesta.





Relevamiento de la enseñanza de POO

4 03 2012

Hace un par de dias comencé a trabajar en un artículo sobre la enseñanza de la programación orientada a objetos. En particular sobre la forma de encarar la primer materia de orientación a objetos, pues en la actualidad es común que dicho tema se trate en más de una materia, pero mi foco está en la primer materia, aquella que presenta los conceptosl s fundamentales de OO (polimorfisto, ocultamiento de information, etc, etc). Como parte de este trabajo he creado una encuesta para relevar como es este tema tratado en las distintas carreras. Lo ideal hubiera sido enviar la encuesta a profesores de distintas universidades/institutos, pero lamentablemente no tengo contacto en todas las universidades, con lo cual se me ocurrió hace una encuestas para ser llenada por los alumnos, contestando como fue que cada uno aprendio POO. Es cierto que de este modo seguramente obtenga varias respuestas sobre una misma institución, por eso es fundamental que quien complete la encuesta indique su institución para asi poder filtrar la información.

Por eso les pido a los lectores si pueden tomarse 2 minutos para completar las 6 preguntas de la encuesta y difundirla entre sus conocidos. Los links son:

Muchas gracias!





Eventos (académicos) 2012

8 01 2012

Durante el año pasado mientras estudiaba para las materias que cursé en la maestría de la UNLP, se me ocurrieron dos artículos que me gustaría desarrollar para presentar en algún congreso y casualmente recien empezado el año tengo tres posibles eventos donde presentarlos.

El primero es ArgenCon, organizado por la sección argentina de IEEE. El mismo se desarrollará del 9 al 13 de Junio  en Córdoba. La fecha límite para el envío de trabajos es el 15 de Marzo.

El segundo evento es la edición 41 de las JAIIO, este año organizadas en conjunto con la UNLP entre el 27 y 31 de Agosto. La convocatoria de trabajos trabajos esta abierta hasta el 30 de Abril.

Finalmente el tercer evento que tengo en el radar es Foro Mundial de Educación en Ingenieria (WEEF: World Engineering Education Forum). Sinceramente nunca había nunca había escuchado hablar de este evento (tal vez porque no siempre se realiza en Argentina). El mismo será organizado por UTN y se desarrollará en Buenos Aires del 15 al 18 de Octubre. La fecha límite para el envio de trabajo es el 2 de Marzo.

Volviendo a los trabajos que tengo en mente, el primero es sobre el enfoque que estoy utilizando en UNQ para dictar ingeniería de software. El otro es sobre algunas ideas que he venido madurando para la enseñanza de la programación en los cursos introductorios de programación.





Orientación a Obejtos Pura

30 12 2011

Es común cuando se presenta Smalltalk mencionar que es un lenguaje orientado a objetos puro. También es común que la audiencia no logré captar el significado de esta afirmación inmediatamente. Yo mismo he analizado esta afirmación montones de veces, pensando que tal vez sea un poco extrema, pero esta semana, vi la luz y me dí cuenta de que es absolutamente acertada.

Resulta que por estos dias, me encuentro entrenando a un grupo de programadores en C#. Fue en este contexto que me encontré hablando de las diferencias y relaciones entre interfaces, clases, estructuras (structs) y enumerados, ¡recorcholis! 4 artefactos del lenguaje que NO son objetos. ¡Y aún no expliqué eventos, delegados, tipos primitivos y atributos (anotaciones)!. ¡Cuantas cosas que explicar!

¡Cuanto más fácil seria explicar Smalltalk!





“Mis” libros (¡aramos dijo el mosquito!)

14 05 2011

Hace unos dias me cruzé en la facultad con Juan Gabardini a quien le comenté que en Algoritmos 1 estabamos enseñando programación usando Python y con un libro que la propia cátedra escribio: Algoritmos y Programación 1 con Python. Quedé en pasarle el link, ya que el libro está publicado en la web en formato .pdf bajo licencia Creative Commons. El libro fue escrito por varios integrantes de la cátedra e impulsado principalmente por Marga. En lo que a mi respecta, mi aporte pasó por redactar el capítulo de excepciones, un tema que siempre me interesó, pues muchos programadores utilizan mal las excepciones.

Otro libro en el que hice mi aporte fue en Programación Orientada a Objetos: Diseño y programación, de Carlos Fontela. Resulta que Carlos fue uno de los revisores de mi tesis sobre programación orientada a aspectos y al escribir su libro le parecío interesante incluir un capítulo sobre aspectos. Asi que luego de hablarlo conmigo, Carlos basó su capitulo de aspectos en mi tesis y tuvo la gentileza de mencionar mi trabajo. Al mismo tiempo yo me encargué de revisar el capítulo y validar algunos ejemplos de código.

Por último, actualmente me encuentro participando en la traducción a castellano del libro Pharo By Example. La traducción está en curso y esperamos tener un primer borrado de la obra completa hacia mitad de año. En este momento tenemos 3 capítulos completamente traducidos, en estos dias voy a intentar publicarlos.

That’s all folks.





Comienzo de clases en Algo3

20 03 2011

Ya van dos semanas de clases y el cuatrimestre pinta muy prometedor. Para este cuatrimestre el equipo docente del curso 1 está conformado por: Pablo, GabiF, GabiD, Victoria y quien escribe.

La clase 1 la comenzamos haciendo la dinámica de la telaraña, haciendo que cada uno se presente diciendo: nombre, materias que cursa en el cuatrimestre y lenguajes de programación que sabe (obviamente los docentes también nos presentamos). Luego de eso, Pablo hizo la tradicional presentación de la material, comentado la dinámica de las clases, el régimen de cursada y las herramientas de trabajo (página web, lista de correo, etc). Finalmente cerramos la clase con la introducción a Smalltalk (Pharo, para ser más precisos) y la presentación del TP0.

La clase 2 comenzó con una breve explicación de algunas particularidades de Pharo y luego estuvo enfocada en el juego de rol de la máquina de café. Este juego tiene como objetivo entender que los objetos cumplen su objetivo a partir del envio de mensajes a otros objetos. Gabriel se encargó de  facilitar la dinámica del juego que duró unos 25 minutos. Para incentivar la participación de los alumnos (ya que el juego requiere de 7 alumnos) decidimos presentar la “lista de alumnos participativos”, la idea es que en esta lista anotamos a los alumnos que participan en las clases y a la hora de definir las notas, aquellos alumnos participativos obtiene una consideración especial (puntualmente si la nota es decimal, la redondeamos directamente hacia arriba: si la nota es 6.1, automáticamente es redondeada a 7). A grandes rasgos el juego consiste en que cada alumno participante representa un objeto y como tal, recibe mensajes y tiene que colaborar con otros objetos (enviando mensajes, claro está) para responder a los mensajes recibidos.Luego del juego decidimos codificar en Smalltalk cada una de clases involucradas, para lo cual pedimos otros tantos alumnos volutarios. Esto nos una hora y media, ya que durante la codificación surgieron algunas dudas de diseño  que promovieron el debate. En paralelo a todo esto, el resto del equipo docente corregia los TP0. Al final de la clase entregamos TODOS los trabajos corregidos, excelente!.

Realmente estoy muy contento con el nivel de participación de los alumnos, si sigue así, creo que vamos a tener clases muy entretenidas.








Seguir

Get every new post delivered to your Inbox.