I nstituto Tecnolgico Superior de Huatusco, Mxico. mmessi19_10@hotmail.com
Abstract- Este es un artculo sobre los Paradigmas de Programacin, donde se detallan los tipos, sus funciones, aplicaciones y dems, para mejorar la comprensin del estudiante. Analizar las estructuras de cada uno y cul es el mejor para ms fcil utilizacin y comprensin.
I. INTRODUCCIN
Para empezar tenemos que tener claro que es el concepto de paradigma. Un paradigma de programacin es una coleccin de patrones conceptuales que juntos modelan el proceso de diseo y determinan la estructura del programa. En nuestro caso, un programa escrito en un lenguaje con paradigma declarativo, se construye con hechos, reglas, construcciones, relaciones o un conjunto de propiedades que nos pueda dar una solucin. Dentro del paradigma declarativo podemos encontrar los siguientes tipos:
Un paradigma de programacin es una propuesta tecnolgica que es adoptada por una comunidad de programadores cuyo ncleo central es incuestionable en cuanto a que nicamente trata de resolver uno o varios problemas claramente delimitados. Es un estilo de programacin empleado. La resolucin de estos problemas debe suponer consecuentemente un avance significativo en al menos un parmetro que afecte a la ingeniera de software.
Un paradigma de programacin est delimitado en el tiempo en cuanto a aceptacin y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.
El paradigma de programacin que actualmente es el ms usado es la orientacin a objetos. El ncleo central de este paradigma es la unin de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez con otras entidades "objeto".
Con la orientacin a objetos y caractersticas como el encapsulado, polimorfismo o la herencia se permiti un avance significativo en el desarrollo de software a cualquier escala de produccin.
La orientacin a objeto parece estar ligada en sus orgenes con lenguajes como Lisp y Simula aunque el primero que acu el ttulo de programacin orientada a objetos fue Smalltalk.
III. TIPOS
Imperativo o por procedimientos: es considerado el ms comn y est representado, por ejemplo, por C, BASIC o Pascal. Funcional: est representado por Scheme o Haskell. Este es un caso del paradigma declarativo. Lgico: est representado por Prolog. Este es otro caso del paradigma declarativo. Declarativo: por ejemplo la programacin funcional, la programacin lgica, o la combinacin lgico-funcional. Orientado a objetos: est representado por Smalltalk, un lenguaje completamente orientado a objetos. Programacin dinmica: est definida como el proceso de romper problemas en partes pequeas para analizarlos.
Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la prctica es habitual que se mezclen, dando lugar a la programacin multiparadigma. Actualmente el paradigma de programacin ms usado es el de la programacin orientada a objetos.
Fig. 1 Tipos de Paradigmas de Programacin
IV. PROGRAMACION DECLARATIVA
La Programacin Declarativa, en contraposicin a la programacin imperativa es un paradigma de programacin que est basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solucin. La solucin es obtenida mediante mecanismos internos de control, sin especificar exactamente cmo encontrarla (tan slo se le indica a la computadora qu es lo que se desea obtener o qu es lo que se est buscando). No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencial.
En la programacin declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto ltimo se realizar mediante mecanismos internos de inferencia de informacin a partir de la descripcin realizada.
A. Tipos
Existen varios tipos de lenguajes declarativos:
Los lenguajes lgicos, como Prolog. Los lenguajes algebraicos, como Maude y SQL Los lenguajes funcionales, como Haskell
B. Ventajas
Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemticamente, lo que permite el uso de mecanismos matemticos para optimizar el rendimiento de los programas. 1
Son fiables, elegantes y expresivos.
V. PROGRAMACION FUNCIONAL
La programacin funcional es un paradigma de programacin declarativa basado en la utilizacin de funciones aritmticas que no maneja datos mutables o de estado. Enfatiza la aplicacin de funciones, en contraste con el estilo de programacin imperativa, que enfatiza los cambios de estado. La programacin funcional tiene sus races en el clculo lambda, un sistema formal desarrollado en los aos 1930 para investigar la definicin de funcin, la aplicacin de las funciones y la recursin. Muchos lenguajes de programacin funcionales pueden ser vistos como elaboraciones del clculo lambda.
Los lenguajes de programacin funcional, especialmente los que son puramente funcionales, han sido enfatizados en el ambiente acadmico principalmente y no tanto en el desarrollo de software comercial. Sin embargo, lenguajes de programacin importantes tales como Scheme, Erlang, Rust, Objective Caml y Haskell, han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones. La programacin funcional tambin es utilizada en la industria a travs de lenguajes de dominio especfico como R (estadstica), Matemtica (matemticas simblicas), J y K (anlisis financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso especfico usados comnmente como SQL y Lex/Yacc, utilizan algunos elementos de programacin funcional, especialmente al procesar valores mutables. Las hojas de clculo tambin pueden ser consideradas lenguajes de programacin funcional.
La programacin funcional tambin puede ser desarrollada en lenguajes que no estn diseados especficamente para la programacin funcional. En el caso de Perl, por ejemplo, que es un lenguaje de programacin imperativo, existe un libro que describe cmo aplicar conceptos de programacin funcional. JavaScript, uno de los lenguajes ms ampliamente utilizados en la actualidad, tambin incorpora capacidades de programacin funcional. Python tambin incorpora particularidades de los lenguajes funcionales como listas de comprensin y funciones de tratamiento de listas como matemtica de conjuntos.
A. Caractersticas
Los programas escritos en un lenguaje funcional estn constituidos nicamente por definiciones de funciones, entendiendo stas no como subprogramas clsicos de un lenguaje imperativo, sino como funciones puramente matemticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresin depende nicamente del significado de sus sub expresiones), y por tanto, la carencia total de efectos colaterales.
Otras caractersticas propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteracin (lo que obliga en la prctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas). Existen dos grandes categoras de lenguajes funcionales: los funcionales puros y los hbridos.
B. Lenguajes Funcionales
Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los lenguajes funcionales hbridos ms conocidos son Scala, Lisp, Clojure, Scheme, Ocaml, SAP y Standard ML (estos dos ltimos, descendientes del lenguajeML). Erlang es otro lenguaje funcional de programacin concurrente. Matemtica permite la programacin en mltiples estilos, pero promueve la programacin funcional. R tambin es un lenguaje funcional dedicado a la estadstica. 3 Recientemente Microsoft Research est trabajando en el lenguaje F# (Functional#). .
Entre otros lenguajes que se podran utilizar para programacin funcional se podran incluir a Perl, pues, aunque es un lenguaje de propsito muy general, se pueden realizar programas usando exclusivamente funciones definidas por el usuario; as como Python, como lenguaje que incorpora el paradigma funcional; o Ruby.
C. Ventajas y Desventajas
Ventajas
Fuertemente tipados Incorporan funciones de orden superior Evaluacin paralela Reutilizacin de cdigo Mayor abstraccin Datos potencialmente infinitos Facilidad a la hora de implementar estructuras de datos complejas
Desventajas
Falta de estandarizacin Bajo rendimiento de los programas
VI. PROGRAMACION LOGICA
La programacin lgica es un tipo de paradigmas de programacin dentro del paradigma de programacin declarativa. El resto de los sub paradigmas de programacin dentro de la programacin declarativa son: programacin funcional, programacin con restricciones, programas DSL (de dominio especfico) e hbridos.
La programacin lgica gira en torno al concepto de predicado, o relacin entre elementos. La programacin lgica encuentra su hbitat natural en aplicaciones de inteligencia artificial o relacionada: Sistemas expertos, donde un sistema de informacin imita las recomendaciones de un experto sobre algn dominio de conocimiento.
Demostracin automtica de teoremas, donde un programa genera nuevos teoremas sobre una teora existente.
Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la informacin contenida en una expresin lingstica humana. Etc.
La programacin lgica tambin se utiliza en aplicaciones ms "mundanas" pero de manera muy limitada, ya que la programacin tradicional es ms adecuada a tareas de propsito general.
A. Lenguajes
El lenguaje de programacin lgica por excelencia es Prolog, que cuenta con diversas variantes. La ms importante es la programacin lgica con restricciones (vase artculo sobre programacin con restricciones), que posibilita la resolucin de ecuaciones lineales adems de la demostracin de hiptesis.
B. Ventajas y Desventajas
Ventajas
Simplicidad Cercana a las especificaciones del problema realizada con lenguajes formales Sencillez, potencia y elegancia Metodologa rigurosa de especificacin Sencillez en la implementacin de estructuras complejas
Desventajas
Poco eficientes Poco utilizado en aplicaciones reales
VII. PROGRAMACION IMPERATIVA
La programacin imperativa, en contraposicin a la programacin declarativa es un paradigma de programacin que describe la programacin en trminos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cmo realizar una tarea.
Los lenguajes imperativos de alto nivel usan variables y sentencias ms complejas, pero an siguen el mismo paradigma. Las recetas y las listas de revisin de procesos, a pesar de no ser programas de computadora, son tambin conceptos familiares similares en estilo a la programacin imperativa; donde cada paso es una instruccin.
Los primeros lenguajes imperativos fueron los lenguajes de mquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementacin de hardware fcil, pero obstruyendo la creacin de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programacin en superar los obstculos presentados por el cdigo de mquina en la creacin de programas complejos.
A. Lenguajes Imperativos
BASIC C Fortran Pascal Perl PHP Lua Java Python Go
VIII. PROGRAMACION ORIENTADA A OBJETOS
La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un paradigma de programacin que usa los objetos en sus interacciones, para disear aplicaciones y programas informticos.
Est basado en varias tcnicas, incluyendo herencia, cohesin, abstraccin, polimorfismo, acoplamie nto y encapsulamiento. Su uso se populariz a principios de la dcada de los aos 1990. En la actualidad, existe una gran variedad de lenguajes de programacin que soportan la orientacin a objetos.
Los objetos son entidades que tienen un determinado estado, comportamiento (mtodo) e identidad:
El estado est compuesto de datos o informaciones; sern uno o varios atributos a los que se habrn asignado unos valores concretos (datos). El comportamiento est definido por los mtodos o mensajes a los que sabe responder dicho objeto, es decir, qu operaciones se pueden realizar con l. La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto anlogo al de identificador de una variable o una constante).
A. Caractersticas
Existe un acuerdo acerca de qu caractersticas contempla la "orientacin a objetos". Las caractersticas siguientes son las ms importantes:
Abstraccin Encapsulamiento Modularidad Principio de ocultacin Polimorfismo Herencia Recoleccin de basura
IX. PROGRAMACION DINAMICA
La programacin dinmica es un mtodo para reducir el tiempo de ejecucin de un algoritmo mediante la utilizacin de sub problemas superpuestos y subestructuras ptimas, como se describe a continuacin.
El matemtico Richard Bellman invent la programacin dinmica en 1953 que se utiliza para optimizar problemas complejos que pueden ser discreteados y secuencializados.
La programacin toma normalmente uno de los dos siguientes enfoques:
Top-down: El problema se divide en sub problemas, y estos se resuelven recordando las soluciones por si fueran necesarias nuevamente. Es una combinacin de memorizacin y recursin.
Bottom-up: Todos los problemas que puedan ser necesarios se resuelven de antemano y despus se usan para resolver las soluciones a problemas mayores. Este enfoque es ligeramente mejor en consumo de espacio y llamadas a funciones, pero a veces resulta poco intuitivo encontrar todos los sub problemas necesarios para resolver un problema dado.
La programacin dinmica es un enfoque general para la solucin de problemas en los que es necesario tomar decisiones en etapas sucesivas. Las decisiones tomadas en una etapa condicionan la evolucin futura del sistema, afectando a las situaciones en las que el sistema se encontrara en el futuro (denominadas estados), y a las decisiones que se plantearan en el futuro.
A. Modelos
Existen 3 modelos diferentes manejados por WINQSB:
Problema de la Diligencia Problema de la Mochila Programacin de Produccin e Inventarios
B. Caractersticas
Puede utilizarse en problemas: lineales o no lineales, determinsticos o estocsticos, univariados o multivariados. Es til para resolver un problema donde se debe tomar una serie de decisiones interrelacionadas. Formato general: a diferencia de la P.L, la Programacin Dinmica no tiene formulacin matemtica estndar. Se trata de un enfoque de tipo general para la solucin de problema y las ecuaciones se derivan de sus condiciones individuales.
X. CONCLUSIONES
En los Paradigmas de Programacin, los tipos de programacin tienen sus ventajas e inconvenientes. La programacin lgica no es muy usada en aplicaciones reales debido a su alta ineficiencia. La programacin funcional cada da est ms de moda gracias al uso de poder crear estructuras de datos muy complejas con un cdigo muy simple. Si a ello le sumamos que se le puede integrar con el lenguaje C, nos da un lenguaje bastante potente y usable.
As mismo es mejor implementar la que ms se apegue a nuestras habilidades, para tener un mejor resultado.
REFERENCIAS
[1] Wikipedia y la Programacin Declarativa [2] Wikipedia y la Programacin Lgica [3] Wikipedia y la Programacin Funcional [4] www.virtual.unal.edu.co [5] Algoritmia/Programacin dinmica - Wikilibros es.wikibooks.org [6] Programacin Lgica y Funcional - Epistemowikia cala.unex.es