Aunque la terminología está lejos de ser estandarizada, una forma común de categorizar los principales paradigmas de programación en
- Procesal
- Funcional
- Lógico
- Orientado a objetos
- Genérico
Parece que ya sabes cómo es la programación de procedimientos.
En lenguajes funcionales , las funciones se tratan como objetos de primera clase. En otras palabras, puede pasar una función como argumento a otra función, o una función puede devolver otra función. El paradigma funcional se basa en el cálculo lambda, y ejemplos de lenguajes funcionales son LISP, Scheme y Haskel. Curiosamente, JavaScript también es compatible con la programación funcional.
En la programación lógica , usted define predicados que describen relaciones entre entidades, como president(Obama, USA)
o president(Medvedev, Russia)
. Estos predicados pueden volverse muy complicados e involucrar variables, no solo valores literales. Una vez que haya especificado todos sus predicados, puede hacer preguntas a su sistema y obtener respuestas lógicamente consistentes.
La gran idea en la programación lógica es que en lugar de decirle a la computadora cómo calcular las cosas, le dices cuáles son las cosas. Ejemplo: PROLOG.
El paradigma orientado a objetos es de alguna manera una extensión de la programación de procedimientos. En la programación de procedimientos, tiene sus datos, que pueden ser tipos primitivos, como enteros y flotantes, tipos compuestos, como matrices o listas, y tipos definidos por el usuario, como estructuras. También tiene sus procedimientos, que operan en los datos. Por el contrario, en OO tiene objetos, que incluyen tanto datos como procedimientos. Esto le permite tener cosas buenas como encapsulación, herencia y polimorfismo. Ejemplos: Smalltalk, C ++, Java, C #.
La programación genérica se introdujo por primera vez en Ada en 1983, y se generalizó después de la introducción de plantillas en C ++. Esta es la idea de que puede escribir código sin especificar los tipos de datos reales en los que opera, y que el compilador lo descubra. Por ejemplo en lugar de escribir
void swap(int, int);
void swap(float, float);
....
tu escribirias
void swap(T, T);
una vez, y que el compilador genere un código específico para lo T
que sea, cuando swap()
realmente se usa en el código
La programación genérica es compatible en diversos grados con C ++, Java y C #.
Es importante tener en cuenta que muchos lenguajes, como C ++, admiten múltiples paradigmas. También es cierto que incluso cuando se dice que un lenguaje admite un paradigma particular, puede no admitir todas las características del paradigma. Sin mencionar que hay un gran desacuerdo sobre qué características se requieren para un paradigma particular.