lunes, 30 de junio de 2008

Paradigmas de programación

Paradigmas v1.0

Antes de hablar de programación y de las distintas formas que hay para resolver un problema, esta bueno ir un poco más allá y pensar en:

“¿Qué es una forma de resolver un problema?”

Como en todas las ramas del conocimiento, en la programación existe la noción de Paradigma.

Un paradigma, en general, plantea una forma de encarar los estudios y / o problemas, ejemplos claros son los paradigmas de psicología, que existen las distintas escuelas, que van desde la gestalt a el psicoanálisis, postulando formas de estudiar el comportamiento humano completamente distintas, pese a buscar siempre el mismo fin.

Entonces, los paradigmas, son herramientas conceptuales que se encuentran completamente en el mundo de los pensamientos que dan al programador las nociones y formas de abstracción que sirven para resolver problemas.

Algunos de los paradigmas hoy vigentes se clasifican de esta manera:

· Imperativos

o Estructurado – Procedural

o Orientado a Objetos

o Aspectos

o Orientado a procesos (concurrencia)

· Declarativos

o Orientados a lógica

o Orientados a funciones (del tipo matemáticas)

o Orientados a Consulta / Almacenamiento

Este texto contempla solo las dos grandes clasificaciones: Imperativos y Declarativos.

Paradigmas Imperativos

Estos paradigmas se caracterizan principalmente por el hecho de preocuparse por el problema a resolver (“que”) y por “como” resolverlo.

Cuando un piensa en la resolución de un problema, tiene que pensar en todos los pasos a dar para resolverlo. Luego, a la hora de programar, cada uno de esos pasos se transforma en una instrucción o mejor dicho, un mandato (de ahí la calificación de imperativo).

Paradigmas Declarativos

Estos paradigmas se caracterizan, principalmente, por preocuparse de el problema (“que”) y no del “como” resolverlo. En general, los lenguajes que soportan este tipo de paradigmas, tienen un motor que se encarga de interpretar el “que” y transformarlo en una solución.

Cuando uno piensa en la resolución de un problema en este tipo de paradigmas, tiene que modelar el problema en el marco del paradigma concreto y expresar al motor la necesidad asociada para que el lo resuelva.

Ejemplo

Problema:

Necesitamos conseguir una entrada para el recital de Iron Maiden.

Solución 1:

Sabiendo que estamos en un living en un 7mo piso, y a 3 cuadras a la izquierda y dos adelante (tomando como referencia la puerta del edificio) del lugar de venta, y que tenemos la plata en la mesita de luz:

· caminamos hasta el cuarto

· abrimos la mesita de luz

· agarramos la cantidad de plata necesaria

· vamos hasta la puerta

· llamamos el ascensor

· entramos en el ascensor

· apretamos el botón a planta baja

· salimos del ascensor

· salimos del edificio

· caminamos 3 cuadras a la izquierda

· doblamos a la derecha

· caminamos 2 cuadras

· entramos en el local

· compramos la entrada

Solución 2:

Sabiendo que existe el service chart, que tenemos tarjeta de crédito y tenemos teléfono:

· Llamamos al service chart

· Pedimos que nos envíen la entrada

· Damos el código de tarjeta

· Esperamos la entrada J

Puntos en común:

· Ambas formas requieren recursos

· Ambas formas resuelven el problema

Puntos distintos

· La primer forma es mas económica en plata

· La segunda forma es mas económica en tiempo de la persona

· La primer forma solo sirve si estoy siempre en el mismo lugar

· La segunda forma sirve siempre, el service chart es el que se encarga de saber “como”, a mi solo me importa el “que”

Después de ahondar más en los distintos paradigmas voy a volver sobre esta calificación, para poder generalizar los features, que son en definitiva los que hacen que exista la calificación “Imperativo” y “Declarativo”.

1 comentario:

Pablo Morales dijo...

Gracias Santiago muy bueno.
En PHP podemos conseguir la programacion orientada a aspecto (POA), gracias a Sebastian Bergmann, un gran contribuidor de la comunidad de PHP.