Los paradigmas de la programación se dividen en:
- Programación declarativa. Esta se divide en:
- Programación interactiva. En esta se encuentra:
Programación Lógica.
El paradigma lógico difiere de forma importante de otros paradigmas. No sólo en su sintaxis o semántica, sino que en él la lógica representa conocimiento, el cual es manipulado mediante inferencias. A diferencia de los demás paradigmas, trabajar en este significa especificar qué hacer y no cómo hacerlo, por ello son llamados lenguajes declarativos. El proceso general de la programación lógica es que a partir de un conjunto de reglas (axiomas) e inferencias podamos comprobar nuevas proposiciones que nos sean relevantes. Este proceso está basado en reglas de lógica de primer orden. Al ser un paradigma bastante abstracto vale la pena esclarecerlo a través de algunos ejemplos. Aunque Prolog es el lenguaje más representativo en este paradigma, haré los ejemplos en Structured Query Language (SQL), un lenguaje para operar bases de datos y el cual representa otra de las aplicaciones de la programación lógica.
El paradigma funcional.
Considera al programa como una función matemática, donde el dominio representaría el conjunto de todas las entradas posibles (inputs) y el rango sería el conjunto de todas las salidas posibles (outputs). La forma en que una función puede ser entendida como una caja negra:
Primero, que en los lenguajes funcionales no existe el concepto de variables y consecuentemente tampoco existen operaciones de asignación. Aunque podría parecer que los parámetros de una función se comportan como una variable (puesto que pueden llevar un nombre y su uso es de hecho parecido al de las variables), esto es incorrecto: El valor de los parámetros es dado como fijo al inicio de la función.
Segundo, la existencia de una propiedad llamada transparencia referencial (Referential transparency), la cual indica que una función sólo depende de sus parámetros y que tendrá efecto únicamente en su resultado, por lo que podríamos llamar a una función arbitrariamente sin tener efectos colaterales en el resto de las computaciones.
Por último, que una función puede ser utilizada como parámetros y resultados de cualquier otra función.
Programación Imperativa.
El término imperativo en este caso, no difiere esencialmente del modo gramático imperativo del español, donde una oración como: "¡Gutiérrez, cierre el Youtube y póngase a trabajar en lo que le pedí!" le está indicando a un sujeto, presumiblemente flojo, que deje de perder el tiempo y, en lugar de eso, realice el trabajo para el cual se le está pagando. Es decir, es una orden para realizar una acción específica. De forma similar, la programación imperativa consiste en una serie de comandos que una computadora ejecutará. Estos comandos detallan de forma clara y específica el cómo hacer las cosas y llevarán al programa a través de distintos estados. En nuestro ejemplo, con el Sr. Gutiérrez, un comando resultó en un cambio de estado: de "procastinador" a "productivo".
Los elementos más importantes de la programación imperativa son: variables, tipos de datos, expresiones y estructuras de control.
Programación estructurada:
C, Pascal y FORTRAN, y lenguajes similares, se conocen como lenguajes procedimentales (por procedimientos). Es decir, cada sentencia o instrucción señala al compilador para que realice alguna tarea: obtener una entrada, producir una salida, sumar tres números, dividir por cinco, etc. En resumen, un programa en un lenguaje procedimental es un conjunto de instrucciones o sentencias. En el caso de pequeños programas, estos principios de organización (denominados paradigma) se demuestran eficientes.
El programador sólo tiene que crear esta lista de instrucciones en un lenguaje de programación, compilar en la computadora y ésta, a su vez, ejecuta estas instrucciones.
Cuando los programas se vuelven más grandes, cosa que lógicamente sucede cuando aumenta la complejidad del problema a resolver, la lista de instrucciones aumenta considerablemente, de modo tal que el programador tiene muchas dificultades para controlar ese gran número de instrucciones. Los programadores pueden controlar, de modo normal, unos centenares de líneas de instrucciones. Para resolver este problema los programas se descompusieron en unidades más pequeñas que adoptaron el nombre de funciones (procedimientos, subprogramas o subrutinas en otros lenguajes de programación). De este modo en un programa orientado a procedimientos se divide en funciones, de modo que cada función tiene un propósito bien definido y resuelve una tarea concreta, y se diseña una interfaz claramente definida (el prototipo o cabecera de la función) para su comunicación con otras funciones.
Programación Orientada a Objetos:
La programación orientada a Objetos (POO) no es algo nuevo, pues existe desde los años 60 con lenguajes como Smaltalk, Simula, Ada. Se ha hecho más populares en los últimos 10 años con la aparición de Java y C#. La POO es una extensión de los lenguajes de Alto Nivel Estructurados que tratan de representar de una forma más sencilla el modelo del mundo real.
El concepto de programación Orientada a Objetos: agrupa un conjunto de técnicas que nos permiten desarrollar y mantener muchos más fácilmente programas de gran complejidad.
La POO intenta resolver principalmente problemas de la Ingeniería de Software como: portabilidad, reusabilidad, mantenibilidad, entre otros. Para ello se basa en las características claves como el encapsulamiento, la herencia, polimorfismo, y el desarrollo orientado primero hacia el que, y luego hacia el cómo (interfaces).
Entre los lenguajes orientados a objetos se destacan los siguientes:
- ABAP
- ABL Lenguaje de programación de OpenEdge de Progress Software
- ActionScript
- ActionScript 3
- Ada
- C
- C#
- Clarion
- Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))
- D
- Object Pascal (Embarcadero Delphi)
- Gambas
- Harbour
- Eiffel
- Java
- JavaScript (la herencia se realiza por medio de la programación basada en prototipos)
- Lexico (en castellano)
- Objective-C
- Ocaml
- Oz
- R
- Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)
- PHP (a partir de su versión 5)
- PowerBuilder
- Python
- Ruby
- Smalltalk (Entorno de objetos puro)
- Magik (SmallWorld)
- Vala
- VB.NET
- Visual FoxPro (en su versión 6)
- Visual Basic 6.0
- Visual Objects
- XBase
- Lenguaje DRP
- Lenguaje de programación Scala (lenguaje usado por Twitter)