Wednesday, December 6, 2006

Programación orientada a aspectos

He decidido presentar un tópico de programación orientada a aspectos para el semestre 200711. Espero que la cantidad de estudiantes interesados alcance para que el tópico pueda ofrecerse pues creo que vale la pena conocer sobre el tema.
La palabra "programación" en el título del curso tiene sus pros y sus cons.Depende mucho de lo que el lector infiera del término programación. De la concepción que se tiene de ese término dependen muchas cosas; la organización del curso, las expectativas que el estudiante se forma del curso, hasta el "sabor de boca" que queda una vez concluido el curso.
Conviene entonces expresar mis ideas acerca de lo que significa programación en estos días, pero por lo pronto voy a hablar un pco más de los objetivos del curso, pensando de que quien lee esto comparte mi idea del término programación.
De hecho, voy a repetir aquí lo que escribí en la porpuesta del curso que ya algunos estudiantes han leido y me han comentado sobre el mismo. No está de más que lo lean dos veces. Ahí les va.

En los últimos 10 años se ha venido prestando mucha atención a problemas muy frecuentes de diseño y programación que no son resueltos adecuadamente ni con las técnicas de programación procedural ni con las de la orientación a objetos. Algunas decisiones de diseño que los programas tienen que resolver quedan “dispersas” en muchas partes del código de la aplicación resultante, resultando en programas que mezclan aspectos diferentes entre sí, trayendo como consecuencia muchas dificultades para diseñar y mantener estos programas.
La separación de aspectos (del inglés separation of concerns) es esencialmente el proceso de dividir o “fragmentar” un programa en partes que se traslapen lo menos posible. Un aspecto en esencia no es otra cosa que cualquier pieza o parte de interés de un programa y el proceso de separar esos aspectos es un principio básico de diseño, no solamente en la computación, sino también en general en casi cualquier actividad de diseño de sistemas complejos.
El término, en Ciencias de la Computación, fue introducido por Edsger Dijkstra:
Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is that one is willing to study in depth an aspect of one's subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects. We know that a program must be correct and we can study it from that viewpoint only; we also know that it should be efficient and we can study its efficiency on another day, so to speak. In another mood we may ask ourselves whether, and if so: why, the program is desirable. But nothing is gained --on the contrary!-- by tackling these various aspects simultaneously. It is what I sometimes have called "the separation of concerns", which, even if not perfectly possible, is yet the only available technique for effective ordering of one's thoughts, that I know of. This is what I mean by "focusing one's attention upon some aspect": it does not mean ignoring the other aspects; it is just doing justice to the fact that from this aspect's point of view, the other is irrelevant. It is being one- and multiple-track minded simultaneously.
“On the role of scientific thought”


La separación de aspectos constituye entonces uno de los principios fundamentales que contribuyen a la simplicidad. Muchos de los aspectos que una aplicación tiene que implementar para cumplir con los requisitos de diseño, cruzan o atraviesan la funcionalidad básica del sistema y, al usar las técnicas tradicionales de diseño y programación, esos aspectos quedan entremezclados con el código que implementa la funcionalidad básica.
La programación orientada a aspectos (AOP) o el desarrollo de software orientado a aspectos (AOSD), objetivo de estudio de este curso, describe las técnicas de diseño y programación necesarias para expresar claramente y con un alto grado de simplicidad los aspectos de un programa, incluyendo el encapsulamiento, composición y reutilización del diseño y código de esos aspectos.
AOP complementa el método y la técnica de programación orientada a objetos pensando en formas alternas para diseñar la estructura de los programas. Además de las clases, la programación orientada a aspectos incluye “los aspectos” como construcciones de software similares a las clases. Con los aspectos podemos encapsular en módulos los intereses (concerns) de un programa que son usados por los módulos que implementan la funcionalidad principal, y de esta manera evitar que atraviesen múltiples módulos evitando que ellos queden dispersos en todo el programa.
La relevancia del contenido de este curso se pone de manifiesto inmediatamente que se revisan las técnicas actuales de diseño y construcción de programas, principalmente aquellas que enfatizan el desarrollo de software basado en componentes y marcos de trabajo. Basta con una búsqueda en Google para encontrar que existen múltiples implementaciones de esta técnica de diseño y que es usada ampliamente por los marcos de trabajo y los modelos de componentes más exitosos para diseñar y construir aplicaciones complejas en la actualidad. Dicho claramente, es una técnica de conocimiento obligado para los especialistas en computación en la actualidad.

¿Cuáles son entonces los objetivos específicos de este curso? To be continued ....

Thursday, November 30, 2006

Espero que sea siempre

Comienzo con este blogger a ver que tal me va