Cuando alguien menciona la palabra paradigma lo primero que se me viene a la mente es el libro "Los 7 hábitos de los adolescentes altamente efectivos", en el texto el autor menciona que un paradigma es "la forma en que vemos las cosas, nuestra opinión o creencia. Estos son como unos lentes. Cuando tienes paradigmas incompletos estos afectaran la forma en que vez a los demás".
Existe una infinidad de definiciones de lo que es un paradigma. Adam Smith lo define, en su libro “Los poderes de la mente”, como “un conjunto compartido de suposiciones. Es la manera como percibimos el mundo (…). El paradigma nos explica el mundo y nos ayuda a predecir su comportamiento".
Existe una infinidad de definiciones de lo que es un paradigma. Adam Smith lo define, en su libro “Los poderes de la mente”, como “un conjunto compartido de suposiciones. Es la manera como percibimos el mundo (…). El paradigma nos explica el mundo y nos ayuda a predecir su comportamiento".
En el ámbito de la programación, un paradigma provee (y determina) la
visión y métodos de un programador en la construcción de un programa o
subprograma. Diferentes paradigmas resultan en diferentes estilos de programación
y en diferentes formas de pensar la solución de problemas (con la solución de
múltiples “problemas” se construye una aplicación).
Los lenguajes de programación son basados en uno o más paradigmas, ya que ninguno de ellos es capaz de resolver todos los problemas. Al mezclarlos se complementan y podemos llegar a una solución de una forma sencilla y eficaz. Por ejemplo: Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos. El lenguaje de programación Scheme, en cambio, soporta sólo programación funcional. En cambio Python, soporta múltiples paradigmas.
Tipos de paradigmas de programación
- Paradigma funcional
Este paradigma concibe a la computación como la evaluación de
funciones matemáticas y evita declarar y cambiar datos. En otras palabras, hace
hincapié en la aplicación de las funciones y composición entre ellas, más que
en los cambios de estados y la ejecución secuencial de comandos (como lo hace
el paradigma procedimental). Permite resolver ciertos problemas de forma elegante
y los lenguajes puramente funcionales evitan los efectos secundarios comunes en
otro tipo de programaciones.
Lenguajes: LISP, Scheme, Haskell, Scala, Clojure.
- Paradigma lógico
Se basa en la definición de reglas lógicas para luego, a través
de un motor de inferencias lógicas, responder preguntas planteadas al sistema y
así resolver los problemas.
Lenguajes: Prolog, Mercury, Oz.
- Paradigma imperativo
Describe la programación como una secuencia instrucciones o
comandos que cambian el estado de un programa. El código máquina en general está
basado en el paradigma imperativo. Su contrario es el paradigma declarativo. En
este paradigma se incluye el paradigma procedimental (procedural) entre otros.
- Paradigma orientado a objetos
Está basado en la idea de encapsular estado y operaciones en
objetos. En general, la programación se resuelve comunicando dichos objetos a
través de mensajes (programación orientada a mensajes). Se puede incluir
-aunque no formalmente- dentro de este paradigma, el paradigma basado en
objetos, que además posee herencia y subtipos entre objetos. Ej.: Simula,
Smalltalk, C++, Java, Visual Basic .NET, etc.
Su principal ventaja es la reutilización de códigos y su
facilidad para pensar soluciones a determinados problemas.
- Paradigma declarativo
No se basa en el cómo se hace algo (cómo se logra un objetivo
paso a paso), sino que describe (declara) cómo es algo. En otras palabras, se
enfoca en describir las propiedades de la solución buscada, dejando indeterminado
el algoritmo (conjunto de instrucciones) usado para encontrar esa solución. Es
más complicado de implementar que el paradigma imperativo, tiene desventajas en
la eficiencia, pero ventajas en la solución de determinados problemas.
- Paradigma estructurado
La programación se divide en bloques
(procedimientos y funciones) que pueden o no comunicarse entre sí. Además la
programación se controla con secuencia, selección e iteración. Permite
reutilizar código programado y otorga una mejor compresión de la programación.
Es contrario al paradigma inestructurado, de poco uso, que no tiene ninguna
estructura, es simplemente un “bloque”, como por ejemplo, los archivos batch
(.bat).
Otros paradigmas y subparadigmas:
- Programación orientada a aspectos
La Programación Orientada a Aspectos (POA) es un paradigma
de programación relativamente reciente cuya intención es permitir una adecuada
modularización de las aplicaciones y posibilitar una mejor separación de
conceptos. Gracias a la POA se pueden encapsular los diferentes conceptos que
componen una aplicación en entidades bien definidas, eliminando las
dependencias entre cada uno de los módulos. De esta forma se consigue razonar
mejor sobre los conceptos, se elimina la dispersión del código y las
implementaciones resultan más comprensibles, adaptables y reusables.
Programación con restricciones
Es un paradigma de la programación en informática, donde las
relaciones entre las variables son expresadas en términos de restricciones
(ecuaciones). Actualmente es usada como una tecnología de software para la
descripción y resolución de problemas combinatorios particularmente difíciles,
especialmente en las áreas de planificación y programación de tareas
(calendarización).
El enfoque de la programación con restricciones se basa
principalmente en buscar un estado en el cual una gran cantidad de
restricciones sean satisfechas simultáneamente. Un problema se define
típicamente como un estado de la realidad en el cual existe un número de
variables con valor desconocido. Un programa basado en restricciones busca
dichos valores para todas las variables.
- Programación dirigida por eventos
La programación dirigida por eventos es un paradigma de
programación en el que tanto la estructura como la ejecución de los programas
van determinados por los sucesos que ocurran en el sistema, definidos por el
usuario o que ellos mismos provoquen.
Para entender la programación dirigida por eventos, podemos
oponerla a lo que no es: mientras en la programación secuencial (o
estructurada) es el programador el que define cuál va a ser el flujo del
programa, en la programación dirigida por eventos será el propio usuario —o lo
que sea que esté accionando el programa— el que dirija el flujo del programa.
Aunque en la programación secuencial puede haber intervención de un agente
externo al programa, estas intervenciones ocurrirán cuando el programador lo
haya determinado, y no en cualquier momento como puede ser en el caso de la
programación dirigida por eventos.
El creador de un programa dirigido por eventos debe definir
los eventos que manejarán su programa y las acciones que se realizarán al
producirse cada uno de ellos, lo que se conoce como el administrador de evento.
Los eventos soportados estarán determinados por el lenguaje de programación
utilizado, por el sistema operativo e incluso por eventos creados por el mismo
programador.
En la programación dirigida por eventos, al comenzar la
ejecución del programa se llevarán a cabo las inicializaciones y demás código
inicial y a continuación el programa quedará bloqueado hasta que se produzca
algún evento. Cuando alguno de los eventos esperados por el programa tenga
lugar, el programa pasará a ejecutar el código del correspondiente
administrador de evento. Por ejemplo, si el evento consiste en que el usuario
ha hecho clic en el botón de play de un reproductor de películas, se ejecutará
el código del administrador de evento, que será el que haga que la película se
muestre por pantalla.
Un ejemplo claro lo tenemos en los sistemas de programación
Lexico y Visual Basic, en los que a cada elemento del programa (objetos,
controles, etcétera) se le asignan una serie de eventos que generará dicho
elemento, como la pulsación de un botón del ratón sobre él o el redibujado del
control.
La programación dirigida por eventos es la base de lo que
llamamos interfaz de usuario, aunque puede emplearse para desarrollar
interfaces entre componentes de Software como módulos del núcleo también.
- Programación modular
La programación modular es un paradigma de programación que
consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo
más legible y manejable. Se presenta históricamente como una evolución de la
programación estructurada para solucionar problemas de programación más grandes
y complejos de lo que ésta puede resolver.
Al aplicar la programación modular, un problema complejo
debe ser dividido en varios subproblemas más simples, y estos a su vez en otros
subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo
suficientemente simples como para poder ser resueltos fácilmente con algún
lenguaje de programación. Ésta técnica se llama refinamiento sucesivo, divide y
vencerás ó análisis descendente (Top-Down).
Un módulo es cada una de las partes de un programa que
resuelve uno de los subproblemas en que se divide el problema complejo
original. Cada uno de estos módulos tiene una tarea bien definida y algunos
necesitan de otros para poder operar. En caso de que un módulo necesite de
otro, puede comunicarse con éste mediante una interfaz de comunicación que
también debe estar bien definida.
Si bien un módulo puede entenderse como una parte de un
programa en cualquiera de sus formas y variados contextos, en la práctica es
común representarlos con procedimientos y funciones. Adicionalmente, también
pueden considerarse módulos las librerías que pueden incluirse en un programa
o, en programación orientada a objetos, la implementación de un tipo de dato
abstracto.
0 comentarios:
Publicar un comentario