Paradigmas de programación: una necesidad para todos los programadores. Paradigma es una escuela de pensamiento o modelo que tiene características, marcos, patrones y estilos distintos que lo ayudan a resolver un problema en particular. Los paradigmas se utilizan en todos los campos, como la psicología, la sociología, la etimología, la informática, etc. En el campo de la informática, los nuevos lenguajes de programación emergen de los lenguajes existentes y agregan, eliminan y combinan características de una manera nueva.
Los lenguajes pueden seguir un paradigma particular o pueden ser una combinación de muchos paradigmas. ¿Sabías que hay 256 lenguajes de programación? Es evidente que cada uno de ellos ha evolucionado del otro con una fusión de varios paradigmas de programación.
Los lenguajes de programación son herramientas y no todas las herramientas son buenas para todos los trabajos. Algunas tareas son más fáciles de resolver funcionalmente. Algunos son claramente adecuados para la programación orientada a objetos. Otros se vuelven más simples cuando utiliza la resolución de restricciones o la coincidencia de patrones.
Paradigmas de programación
Hagamos un recorrido vertiginoso de 4 paradigmas de programación diferentes: procesal, orientado a objetos, funcional y lógico . Este artículo le dará una mejor comprensión de los diversos paradigmas de programación.
1. Programación procesal
La programación procesal también se puede denominar programación imperativa. Es un paradigma de programación basado en el concepto de llamadas a procedimientos, en el que las declaraciones se estructuran en procedimientos (también conocidos como subrutinas o funciones). Son una lista de instrucciones para indicarle a la computadora qué hacer paso a paso. Los lenguajes de programación de procedimientos se conocen como lenguajes de arriba hacia abajo. La mayoría de los primeros lenguajes de programación son todos de procedimiento.
Características del Código de Procedimiento
La programación procesal es excelente para la programación de propósito general
La simplicidad codificada junto con la facilidad de implementación de compiladores e intérpretes
Una gran variedad de libros y material de cursos en línea disponibles en algoritmos probados, lo que facilita el aprendizaje.
El código fuente es portátil.
El código se puede reutilizar en diferentes partes del programa, sin la necesidad de copiarlo.
El flujo del programa se puede rastrear fácilmente ya que tiene un enfoque de arriba hacia abajo.
2. Programación lógica
La programación lógica es un paradigma de programación de computadoras que tiene sus fundamentos en la lógica matemática en la cual las declaraciones del programa expresan hechos y reglas sobre problemas dentro de un sistema. Las reglas se escriben como cláusulas lógicas con una cabeza y un cuerpo. También siguen un enfoque declarativo más que imperativo. Sin embargo, ¿qué significa eso?
Para comprender cómo se puede resolver un problema en la programación lógica, debe conocer los componentes básicos: hechos y reglas.
Comprendamos la diferencia entre la programación imperativa y declarativa.
Imagina que entras en tu cafetería favorita y te gustaría pedir un café.
El enfoque imperativo será:
Entra en la cafetería
Haga cola en la fila y espere a que el barista le pida su pedido
Orden
Sí, para llevar, por favor
Pagar
Presente su tarjeta de fidelidad para acumular puntos
Toma tu orden y vete
El enfoque declarativo:
Un café con leche grande para llevar, por favor
Entonces, en lugar de proporcionar una instrucción paso a paso (imperativo), le dice al sistema lo que necesita y deja que intente encontrar una solución (declarativa).
Prolog sigue el paradigma lógico y es probablemente el lenguaje más famoso de la familia de programación lógica.
Prolog ha sido enormemente influyente en los dominios de prueba de teoremas, sistemas expertos, procesamiento de lenguaje natural y en el campo de la inteligencia artificial (especialmente el Watson 2 de IBM ) en general
Prolog, como SQL, tiene dos aspectos principales, uno para expresar los datos y otro para consultarlos. Las construcciones básicas de programación lógica, términos y declaraciones, se heredan de la lógica. Hay tres declaraciones básicas:
Los hechos son afirmaciones fundamentales sobre el dominio del problema (por ejemplo, “Sócrates es un hombre”)
Las reglas son inferencias sobre hechos en el dominio (por ejemplo, “Todos los hombres son mortales”).
Las consultas son preguntas sobre ese dominio (por ejemplo, “¿Es Sócrates mortal?”)
Características de la programación lógica.
La programación lógica se puede utilizar para expresar conocimiento de una manera que no dependa de la
implementación, haciendo que los programas sean más flexibles, comprimidos y comprensibles.
Permite que el conocimiento se separe del uso, es decir, la arquitectura de la máquina se puede cambiar
sin cambiar los programas o su código subyacente.
Se puede alterar y extender de manera natural para apoyar formas especiales de conocimiento,
como el meta-nivel de conocimiento de orden superior.
Se puede usar en disciplinas no computacionales que dependen del razonamiento y medios de
expresión precisos .
3. Programación funcional
La programación funcional es un paradigma de programación donde tienes un estilo de construir la estructura y los elementos de los programas de computadora. Aquí trata la computación como una evaluación de funciones matemáticas y evita el cambio de estado y los datos mutables.
La programación funcional consta solo de funciones PURAS. Entonces, ¿qué entiendes por funciones puras?
Las funciones puras son aquellas que toman una lista de argumentos como entrada y cuya salida es un valor de retorno. Ahora puede sentir que todas las funciones son puras ya que cualquier función toma valores y devuelve un valor.
Por ejemplo, si una función se basa en la variable global o en los datos del miembro de la clase, entonces no es pura. Y en tales casos, el valor de retorno de esa función no depende completamente de la lista de argumentos recibidos como entrada y también puede tener efectos secundarios. Entonces, ¿qué entiendes por el término efecto secundario? Un efecto secundario es un cambio en el estado de una aplicación que es observable fuera de la función llamada que no sea su valor de retorno. Por ejemplo: Modificar cualquier variable externa o propiedad de objeto, como una variable global o una variable en la cadena de alcance de la función principal.
Características del paradigma funcional
Funciones puras : como se vio anteriormente, si la entrada es una matriz, la salida será una nueva matriz y la matriz de entrada no se modificará. Entonces, en el caso de las funciones puras, la salida depende solo de la entrada.
Recursión: una función recursiva es una función que se llama a sí misma durante su ejecución. Esto permite que la función se repita varias veces, y el resultado se muestra al final de cada iteración.
Notará que las funciones recursivas son comunes en informática porque le permiten escribir programas eficientes utilizando una cantidad mínima de código. La desventaja es que pueden causar bucles infinitos y otros resultados inesperados si no se escriben correctamente. Por ejemplo, en el ejemplo anterior, la función finaliza si el número es 0 o menor o mayor que 9. Si no se incluyen los casos adecuados en la función para detener la ejecución, la recursión se repetirá para siempre, haciendo que el programa se bloquee, o peor aún, cuelgue todo el sistema informático.
Transparencia referencial: se dice que una expresión es referencialmente transparente si se puede reemplazar con su valor correspondiente sin cambiar el comportamiento del programa. Como resultado, evaluar una función referencialmente transparente da el mismo valor para argumentos fijos. En la programación funcional , solo se consideran funciones referencialmente transparentes. Son mucho más fáciles de leer y entender.
Las funciones son de primera clase y pueden ser de orden superior: se dice que un lenguaje de programación tiene funciones de primera clase cuando las funciones en ese lenguaje se tratan como cualquier otra variable. Por ejemplo, en dicho lenguaje, una función puede pasarse como argumento a otras funciones , puede ser devuelta por otra función y puede asignarse como un valor a una variable. De orden superior f unciones son funciones que toman al menos una función de primera clase como un parámetro.
Las variables son inmutables: en la programación funcional no se puede modificar una variable después de que se haya inicializado. Puede crear nuevas variables y esto ayuda a mantener el estado durante el tiempo de ejecución de un programa.
Lisp es el segundo lenguaje de programación de alto nivel más antiguo después de Fortran, pero aún está en uso. Lisp es un lenguaje de programación funcional; es decir, las funciones son objetos de primera clase en Lisp. Sin embargo, no es un lenguaje puramente funcional como Haskell, porque las operaciones en Lisp pueden tener efectos secundarios. Lisp continúa siendo popular en el campo de la inteligencia artificial hasta nuestros días.
Lenguajes de programación que admiten programación funcional: Haskell, JavaScript, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.
4. Programación orientada a objetos (OO):
En este marco, todas las entidades del mundo real están representadas por clases . Los objetos son instancias de clases, por lo que cada objeto encapsula un estado y un comportamiento . Estado implica que los campos, los atributos del objeto y el comportamiento es lo que se hace con el estado del objeto y son los métodos. Los objetos interactúan entre sí pasando mensajes.
Características de OO:
Encapsulación: esta es una característica fundamental de la programación orientada a objetos. Aquí oculta detalles innecesarios en las clases y ofrece una interfaz simple y clara para trabajar. Describe la idea de agrupar datos y métodos que funcionan en esos datos dentro de una unidad. Este concepto también se usa a menudo para ocultar la representación interna o el estado de un objeto desde el exterior
Herencia: la herencia es uno de los conceptos centrales de los lenguajes de programación orientada a objetos (OOP). Es un mecanismo en el que puede derivar una clase de otra clase para una jerarquía de clases que comparten un conjunto de atributos y métodos. Explica cómo las jerarquías de clases desarrollan la legibilidad del código y el soporte para la reutilización de la funcionalidad.
Abstracción de datos: la abstracción de datos es la reducción de un cuerpo particular de datos a una representación simplificada del todo. La abstracción de datos suele ser el primer paso en el diseño de bases de datos.
Polimorfismo: el polimorfismo es un concepto de programación orientado a objetos que se refiere a la capacidad de una variable, función u objeto de adoptar múltiples formas.
Los lenguajes de programación que han implementado el paradigma OO son: Ruby, Java, C ++, Python, Simula (el primer lenguaje OOP)