Paradigmas de la rogramación
$&'(
Autor: Ulises Luis Rodríguez Modulo: Programación lógica y funcional Docente: Osvaldo Lira Díaz Ciudad y uerto de L!zaro C!rdenas Mic"oac!n# a $ de fe%rero del $&'(
Paradigmas de la programación
Contenido Introducción......... Introducción.................... ..................... ..................... ..................... ..................... ...................... ..................... ............................................ .................................. 3 Capítulo 1 Marco teórico............... teórico......................... ..................... ..................... ..................... ..................... ......................................... ............................... 3 1.1 Lenguajes Naturales y lenguajes de programación.......... programación..................... ..................... ..................... ..................3 .......3 1.1.1 Lenguajes naturales............. naturales....................... ..................... ..................... ..................... ..................... ..................... .........................3 ..............3 1.1.2 Lenguaje de programación........ programación................... ..................... ..................... ..................... ....................................... ............................. 4 1.2 Paradigmas Paradigmas de la Programación.... Programación............... ..................... ..................... ..................... ..................... ..................... ..................... ........... Capítulo 2! "ipos de paradigmas de programación......... programación.................... ..................... ......................................# ............................# 2.1 Paradigma Paradigma Imperati$o............ Imperati$o....................... ..................... ..................... ..................... ..................... ..................... ............................ .................. # 2.2 Paradigma Paradigma %eclarati$o............ %eclarati$o...................... ..................... ..................... ..................... ..................... ..................... ............................ ................. & 2.3 Paradigma Paradigma 'structurado............ 'structurado...................... ..................... ..................... ..................... ...................... ..................... ..................... ............... .... ( 2.4 Paradigma Paradigma )rientado a )*jetos................. )*jetos............................ ...................... ..................... ..................................... ........................... 1+ 2., Paradigma Paradigma -uncional.......... -uncional.................... ..................... ..................... ..................... ..................... ..................... ............................... .................... 12 2. Paradigma Paradigma lógico.................. lógico............................ ..................... ...................... ..................... ................................................ ...................................... 13 Capítulo 3! Conclusiones............. Conclusiones........................ ..................... ..................... ..................... ..................... ..................... .............................. .................... 1# i*liogra/ía........... i*liogra/ía..................... ..................... ..................... ..................... ..................... ..................... ..................... ..................... ................................. ...................... 1# 0neos....... 0neos................. ..................... ..................... ..................... ..................... ..................... ..................... ..................... ........................................... ................................ 1& Cuadro comparati$o de los paradigmas de programación......... programación................... ..................... .......................1& ............1&
2
Introducción En este documento se desglosan los diferentes paradigmas que existen dentro de la programación, por lo general autores dan una clasificación diferente de los paradigmas concordando en algunos puntos, aquí se explicaran los más comunes o los que mencionan más dentro de las ciencias de la computación. Además, se marcan temas los cuales sirven como base para el entendimiento del lector de los paradigmas. A grandes rasgos, un paradigma es Modelo, ejemplo o patrón en cualquier disciplina científica, el cual nos sirve para poder realizar un proceso de manera eficaz con la maor calidad posible, esto a su vez aplica tanto en el dise!o como en la programación de un sistema que solucione un problema en concreto. "eremos que cada paradigma puede ser aplicado a diferentes problemas, pero lo más importante es saber que paradigmas existen saber cuándo utilizar cada uno de ellos dentro de la resolución de un problema, así como tener la orientación de implementarlo eficazmente. #ada paradigma lleva consigo un lenguaje, o en otros casos varios lenguajes, que pueden desarrollar el paradigma sin problema, a que su estructura está orientada $acia ese paradigma. El lector deberá poseer conocimientos básicos en las ciencias de la computación, así como un conocimiento básico de programación para poder indagar sobre este fascinante tema que concierne a cualquier programador que desee desarrollar un proecto de manera eficaz.
Capítulo 1 Marco teórico 1.1 Lenguajes Naturales y lenguajes de programación. 1.1.1 Lenguajes naturales %os lenguajes naturales son aquellos con los cuales $ablamos escribimos en nuestras actividades cotidianas. Entre sus ventajas podemos citar que es fácil de usar de entender& no debemos aprendernos ning'n lenguaje nuevo cualquiera puede leer la especificación comentarla o criticarla. Entre los inconvenientes están la imprecisión la ambig(edad. Aunque el análisis de requisitos se $aa realizado correctamente, una especificación en lenguaje natural puede dar lugar a que la implementación final no cumpla estos requisitos. Además, debido a su propia facilidad de uso e imprecisión, las especificaciones suelen ocultar lagunas que sólo se pondrán de manifiesto a la $ora de programar, es decir, al traducir la especificación a un lenguaje de programación. )ambi*n se $abla de lenguajes naturales para referirse al soft+are que permite que los sistemas de computación acepten, interpreten ejecuten instrucciones en el lenguaje materno o natural que $abla el usuario final, por lo general el ingl*s. %a maor parte de los lenguajes naturales comerciales están dise!ados para ofrecer a los usuarios un medio de comunicarse con una base de datos corporativa o con un sistema experto. -odemos resumir que los lenguajes naturales se distinguen por las siguientes propiedades& •
esarrollados por enriquecimiento progresivo antes de cualquier intento de formación de una
•
teoría. %a importancia de su carácter expresivo debido grandemente a la riqueza del componente
•
semántico. ificultad o imposibilidad de una formalización completa.
1.1.2 Lenguaje de programación /n lenguaje de programación consiste en un conjunto de órdenes o comandos que describen el proceso deseado. #ada lenguaje tiene sus instrucciones enunciados verbales propios, que se combinan para formar los programas de cómputo. %os lenguajes de programación no son aplicaciones, sino $erramientas que permiten construir adecuar aplicaciones.
Existen muc$os lenguajes de programación con características aptitudes mu diferenciadas.
)odo ello se encuentra en dos grandes grupos& • •
%os lenguajes máquina. %os lenguajes simbólicos.
%enguaje de programación en el que las instrucciones de los diferentes programas se codifican utilizando los caracteres de las lenguas naturales. %a ejecución de un programa. Entre los primeros se encuentran los denominados lenguajes en código máquina. En estos lenguajes, la codificación de estos lenguajes se $ace utilizando un lenguaje binario de ceros unos que son los 'nicos símbolos que puede entender cualquier computador. #ada sistema físico tiene su código máquina distinta por lo que un programa escrito en un determinado código máquina sólo vale para un sistema físico. A los lenguajes máquina les sucedieron, los lenguajes simbólicos los cuales utilizan caracteres naturales para escribir las instrucciones de los programas. %os lenguajes simbólicos se dividen a su vez en& • •
%enguajes simbólicos de bajo nivel o ensambladores. %enguajes simbólicos de alto nivel.
entro de los segundos se puede distinguir a su vez los lenguajes procedurales los relacionales. /n lenguaje procedural es aquel lenguaje de programación en el que $a que se!alar tanto lo que se quiere $acer como el modo de $acerlo. %os lenguajes de tercera generación son de tipo procedural. /n lenguaje relacional es un tipo de lenguaje de programación en el que sólo $a que especificar lo que se quiere obtener, sin necesidad de especificar a su vez el camino a seguir para obtener los resultados deseados. Este tipo de lenguaje son de mu alta productividad en desarrollo, pero mu ineficientes en ejecución. %a diferencia entre uno otro es que el primero exige que se diga tanto lo que se quiere $acer como la forma en que $a que $acerlo mientras que los relacionales sólo exigen que se diga lo que se quiere $acer, pero no es necesario que se exprese el camino para realizarlo.
A medida que se va subiendo de nivel los lenguajes son más sencillos más productivos en desarrollo, pero en contra partida son menos eficientes a la $ora de su ejecución. %os programas escritos en lenguajes simbólicos se denominan programas fuente los programas no son directamente ejecutables su ejecución implica su previa traducción a código máquina para obtener
los denominados programas objeto o absolutos. Esta traducción se $ace a trav*s de los ensambladores, compiladores o int*rpretes, a los lenguajes que de forma gen*rica se les denomina procesadores de lenguajes. A los lenguajes máquina se les conoce como lenguajes de primera generación. %os ensambladores son los lenguajes de segunda generación. %os simbólicos de alto nivel de tipo procedural se les denomina de tercera generación a los relacionales se considera que son de cuarta generación. A la tercera generación pertenecen lenguajes conocidos como el 012)2A3, #141%, 2-5, 4A67#, -%8, 67M/%A, A%51%, -A6#A%, AA, #, %76-, -2151%, etc. Estos lenguajes de tercera generación son de tipo universal. A diferencia de los lenguajes de tercera generación, los de cuarta generación no son tan universales van asociados a determinados sistemas operativos en muc$os casos a determinados sistemas de almacenamiento de información, lo que les resta uno de los maores intereses de los lenguajes de tercera generación. %a maor ventaja de los lenguajes relacionados es que son mu productivos en desarrollo a alcanzar niveles de productividad de $asta 9 : veces superior a los que alcanzan los de tercera generación. Entre los lenguajes de cuarta generación tenemos el #6- de 74M asociado al sistema de gestión de base de datos 4;< el 3A)/2A% de 610)=A2E A5 asociado al sistema de datos AA4A6< el 6>% que es un lenguaje convertido en estándar mundial como lenguaje de cuarta generación para la consulta de bases relacionales< etc. Además de los lenguajes se!alados $a que $acer referencia a una serie de lenguajes orientados a objetos cua utilización tiene preferentemente lugar en los puestos cliente. Entre estos destaca el "isual 4asic de Microsoft, el -o+er 4uilder el elp$i. Además, $a que prestar una seria atención al lenguaje de programación ?ava, desarrollado por 6/3 cua misión fundamental es dar la posibilidad de desarrollar aplicaciones altamente interactivas bajo la modalidad de =eb, en el contexto de 7nternet. En pocos a!os como consecuencia del desarrollo que está teniendo la inteligencia artificial se podrá programar, con ciertas limitaciones sintácticas, en los lenguajes naturales.
1.2 Paradigmas de la Programación @>u* es un paradigma Aunque la deBnición de paradigma que se encuentra en el diccionario de María Moliner Cv*ase el recuadro amarilloD es cierta suBciente, para esta discusión necesitaremos de una más amplia. /na b'squeda fugaz por 5oogle, apunta a una relación entre el t*rmino
paradigma alg'n oscuro individuo llamado )$omas u$n, quien, en su libro publicado en 8F9;, )$e 6tructure of 6cientiBc 2evolutions, amplió la concepción del t*rmino paradigma.
-ara u$n, el t*rmino se reBere a la forma en que un cientíBco percibe al mundo a la estructura de teorías suposiciones que modiBcan esta percepción. 1tro punto importante para nuestro inter*s es el se!alamiento que $ace u$n acerca de cómo el *xito de un paradigma es consecuencia de su efectividad para resolver alg'n problema. En breve, un paradigma es el resultado de un proceso social en el cual un grupo de personas desarrolla nuevas ideas crea principios prácticas alrededor de estas ideas, no solamente un conjunto de prácticas conocimientos objetivamente validados. Más especíBcamente para la ciencia de la computación, probablemente fue 2obert 0lod quien $abló por primera vez del t*rmino -aradigmas de -rogramación quien los deBnió como un proceso de dise!o que va más allá de una gramática, reglas semánticas algoritmos, sino que es un conjunto de m*todos sistemáticos aplicables en todos los niveles del dise!o de programas. Existen diversos lenguajes paradigmas de programación que se $an dise!ado para facilitar la tarea de la programación en diferentes ámbitos. -or ejemplo, la programación orientada a objetos es un paradigma dirigido al mejoramiento en la calidad del soft+are por medio de la observación de aspectos tales como la corrección, robustez, extensibilidad, compatibilidad sobre todo la reusabilidad del soft+are. %a programación lógica, por su parte, es un paradigma orientado a la expresión de los problemas en t*rminos lógicos para su posterior solución por m*todos de inferencia otras t*cnicas lógicas. En la práctica, cada paradigma de programación es implementado a trav*s de diversos lenguajes. 6ólo como un ejemplo, la programación orientada a objetos encuentra su recipiente en lenguajes tales como ?ava, #GG, Eiffel, 1bjective #, el paquete #%16 de #ommon %isp, etc.
Actualmente existen una gran variedad de paradigmas de programación, pero una clasificación general podría ser la siguiente&
Capítulo 2: Tipos de paradigmas de programación 2.1 Paradigma Imperatio El t*rmino imperativo en este caso, no diBere esencialmente del modo gramático imperativo del espa!ol, donde una oración como& HI5uti*rrez, cierre el Jou)ube póngase a trabajar en lo que le pedíKL le está indicando a un sujeto, presumiblemente ojo, que deje de perder el tiempo , 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íBca. e forma similar, la programación imperativa consiste en una serie de comandos que una computadora ejecutará. Estos comandos detallan de forma clara especíBca el cómo $acer las cosas llevarán al programa a trav*s de distintos estados. En nuestro ejemplo, con el 6r. 5utierrez, un comando resultó en un cambio de estado& de HprocastinadorL a HproductivoL. %os elementos más importantes de este paradigma son& "ariables& 6on objetos cuo valor depende de una localidad de memoria que puede cambiar
a lo largo de la ejecución del programa. %a deBnición de este paradigma sería imposible sin estos elementos fundamentales, a que los estados de un programa son representados diferenciados por su conjunto de variables sus contenidos.
)ipos de datos& 6on abstracciones que representan un conjunto de valores junto con las
operaciones relaciones que son aplicables a ellos. Algunos tipos comunes en varios lenguajes son& integer, que deBne parcialmente el conjunto de los n'meros enteros, oat, que
representa n'meros reales boolean, que generalmente especiBca al peque!o conjunto conformado por true false. Es importante recalcar que estos no son los 'nicos tipos de datos que muc$os lenguajes permiten la implementación de muc$os otros. Expresiones& Aunque son la forma fundamental de programar instrucciones, en la programación imperativa su papel más importante está en las sentencias de asignación. /na sentencia de asignación sirve para modiBcar el valor de una variable así cambiar el estado de un programa. Esto puede ser algo mu sencillo como copiar el valor de una variable a otra localidad de memoria o involucrar algo más complicado como realizar operaciones sobre las variables antes de reNlocalizarlas en la memoria. %os operadores empleados pueden ser matemáticos, lógicos o una combinación de ambos. Estructuras de #ontrol& %as estructuras de control son mecanismos que un lenguaje requiere para realizar dos tareas indispensables& 8. 6eleccionar una opción entre algunos ujos de control alternativos. ;. 7terar la ejecución de una serie de sentencias. /na sentencia de selección provee al programa de medios para elegir entre dos o más HcaminosL de ejecución. 6u forma más sencilla es el condicional if que selecciona entre dos opciones puede extenderse a una selección prácticamente inBnita mediante constructores m'ltiples Ccomo s+itc$ o caseD o la anidación de condicionales if. %as sentencias de iteración representan el verdadero poder del cómputo, ejecutan un bloque de sentencias desde cero $asta un n'mero teóricamente inBnito de veces. Es interesante que todos los lenguajes de programación desde el primero, que data de la d*cada de los cuarenta, -lanOalO(l, implementaron estructuras de iteración. Estas se dividen en dos categorías principales dependiendo de cómo se controla la iteración. -ueden ser& controlados con contadores Ctradicionalmente forD o controlados lógicamente Ccomo +$ileD. En esta categoría tambi*n estarían incluidas sentencias como goto, sin embargo, estas $an caído en desuso que, como se!alo ijOstra, representan más desventajas que ventajas.
2.2 Paradigma !eclaratio El paradigma declarativo, en cambio, plantea que los problemas sean descritos al ordenador con una serie de unidades conceptuales básicas que se pueden combinar seg'n unas determinadas reglas para generar nueva información. -ara la resolución de un problema, se crearán las descripciones que representan al dominio en el cual existe el problema a resolver se planteará el problema como una pregunta que debe ser respondida bien con alguna de las unidades conceptuales iniciales o bien con una combinación válida de ellas que es el propio ordenador quien debe buscar.
"entajas& escripciones compactas mu expresivas. Es posible describir universos de problemas con
mu pocas líneas de código del lenguaje que permitan la solución de un gran n'mero de problemas. esarrollo del programa no tan orientado a la solución de un 'nico problema. #on una programación adecuada, basta $aber descrito un dominio de problemas de forma correcta saber formular nuestro problema como una simple consulta en dic$o dominio. %a variedad de preguntas que se pueden responder con una 'nica descripción del dominio de problemas concreto suele ser mu elevada. 3o $a necesidad de emplear esfuerzo en dise!ar un algoritmo que resuelva el problema.
2." Paradigma #structurado %a metodología de programación estructurada se fundamenta en t*cnicas de segmentación, la cual plantea que un problema se puede dividir en problemas más peque!os CmódulosD más simples de resolver, de tal forma que la suma de las soluciones de cada problema sea el resultado de la solución total de *ste.
Esta metodología permite desarrollar algoritmos a trav*s de módulos, los cuales realizan tareas bien definidas. e esta forma, el módulo se define una sola vez se llama tantas veces como sea necesario, mediante el nombre que lo identifica. %a forma gráfica que lo representa sería la siguiente&
Algunas de las ventajas que presenta este paradigma son los siguientes&
%os programas son más fáciles de leer %a estructura de los programas es clara 2educción de esfuerzo en las pruebas 6e incrementa el rendimiento del programador
esventajas 6e obtiene un 'nico bloque del programa que cuando se $ace demasiado grande puede
ser problemático para el manejo del código fuente. /na de las características del lenguaje de programación en #, es que es un lenguaje estructurado, lo que permite generar código claro sencillo, a que está basado en la modularidad. El lenguaje de programación en #, está estructurado en tres partes& %ibrerías estándar -rograma compilador -reprocesador C73#%/E N E073ED
2.$ Paradigma %rientado a %&jetos A menos que los libros sobre computación que usted consulta $aan sido impresos cuando el t*rmino Htel*fono celularL fuera desconocido para la maoría de la población, sabrá que la programación orientada a objetos C-11D es el paradigma de programación más popular en la actualidad. -rogramar bajo este paradigma es como tratar de simular o modelar los objetos del mundo real. /na mascota como un perro podría servir para un ejemplo introductorio& /n objeto está compuesto por estados m*todos. %os estados son propiedades del objeto están representados por variables con valores
'nicos para cada objeto que son llamadas variables de instancia. En este ejemplo, podríamos pensar en cosas como& edad, color, tener $ambre, tener ganas de salir al parque, etc., propiedades todas que son intrínsecas a cada perro, pero cuos valores son 'nicos en cada uno. %os m*todos son representaciones de los comportamientos que el objeto es capaz de $acer. -or ejemplo, mi perro en particular tendría los m*todos& sentarse, ec$arse, comer, saludar, dormir bailar, entre otros, que son comportamientos que probablemente presentan otros perros. A$ora que tenemos una noción de lo que es un objeto, quiero mencionar las propiedades más generales formales de este paradigma& Encapsulamiento& 6igniBca que el código o datos de un objeto pueden estar ocultos para
cualquier entidad externa a *l. Perencia& %a $erencia es la propiedad de crear nuevos objetos a partir de la deBnición de otros. /n objeto HnuevoL será id*ntico al modelo que seguimos para crearlo, excepto por algunos cambios incrementales o redeBniciones de sus estados o m*todos. Me gusta pensar en la taxonomía para ejempliBcar esta propiedad. -ensemos en un zorro com'n C"ulpes "ulpes, aquí a la derec$aD. #omo se ve, esta especie pertenece al g*nero "ulpes, el cual especiBca características como& tama!o peque!o, cráneo aplanado el color de la punta de la cola generalmente distinto al resto del cuerpo. A su vez, este g*nero este contenido dentro de la familia #anidae, que se caracteriza por tener garras no retráctiles caminar apoándose 'nicamente en sus dedos. )odos los cánidos son al mismo tiempo miembros del orden #arnivora, el cual es bastante diverso que en particular tiene dientes garras para cazar a otros animales, ojos que apuntan $acia el frente , claro, un men' donde la maoría de los platillos son carne. J así ad nauseam... A$ora, supongamos que cada una de estas categorías es la deBnición de un objeto. Así, cualquier objeto del tipo #anidae presentaría todas las características de los objetos de donde fue $eredado, es decir, que sería vertebrado, tendría dientes, garras predilección por la carne. 3o obstante, esto no sucedería a la inversa& un objeto del tipo #arnivora no necesariamente es peque!o o presenta la punta de la cola de un color diferente. -olimorBsmo& Esencialmente, es la propiedad que le permite a un m*todo aceptar o devolver valores de más de un tipo. 0ormalmente se deBne así& 6iendo M un m*todo t8 t; son dos tipos de datos diferentes, M es polimórBco si M puede ser ejecutado con el argumento t8& MC t8D el argumento t;& MC t;D e la misma manera una función puede ser deBnida como polimórBca si al llamarla mediante dos parámetros distintos, arroja un retorno de tipos diferentes.
7nvocación inámica de M*todos Cnamic Met$od 4indingD& 6e traduce en que cuando
llamamos alg'n m*todo de un objeto estaremos ejecutando la operación especíBca de ese objeto no alguna implementación de alguno de sus padres. Este paradigma $ace posible el desarrollo modular de un soft+are, porque, $asta cierto grado, cada componente es independiente de los demás, lo que permite que estos componentes puedan ser reutilizados reciclados, incluso, a lo largo de distintos proectos. Es posible que esta HmodularidadL $aa colocado a la programación orientada a objetos en la posición dominante en la que se encuentra a$ora, dado que le $a permitido a la industria encontrar nuevas formas de trabajo patrones de dise!o más productivos. 5ran parte de los lenguajes más utilizados $o en día están orientados a objetos, entre ellos se encuentran& ?ava, #GG, -P-, -t$on, #Q, elp$i, 2ub, Actionscript, entre otros.
2.' Paradigma (uncional En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas, en contraste con la programación imperativa, que enfatiza los cambios de estado mediante la mutación de variables. %a programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los a!os 8FRS para investigar la definición de función, la aplicación de las funciones la recursión. Muc$os lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda. En la práctica, la diferencia entre una función matemática la noción de una función utilizada en la programación imperativa, es que las funciones imperativas pueden tener efectos secundarios, como cambiar el valor de cálculos realizados previamente. -or esta razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede resultar en valores diferentes en varios momentos de la ejecución del programa. #on código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede entender predecir el comportamiento de un programa muc$o más fácilmente. Tsta es una de las principales motivaciones para utilizar la programación funcional. %os lenguajes de programación funcional, especialmente los puramente funcionales, $an sido enfatizados en el ambiente acad*mico no tanto en el desarrollo comercial o industrial. 6in embargo, lenguajes de programación funcional como 6c$eme, Erlang, 2ust, 1bjective #aml , 6cala, 0Q PasOell, $an sido utilizados en aplicaciones comerciales e industriales por muc$as organizaciones.
%a programación funcional tambi*n es utilizada en la industria a trav*s de lenguajes de dominio específico como 2 CestadísticaD, Mat$ematica Cmatemáticas simbólicasD, ? Canálisis financieroD. %os lenguajes de uso específico usados com'nmente como 6>% %exUJacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. %as $ojas de cálculo tambi*n pueden ser consideradas lenguajes de programación funcional. %a programación funcional tambi*n puede ser desarrollada en lenguajes que no están dise!ados específicamente para la programación funcional. En el caso de -erl, por ejemplo, que es un lenguaje de programación imperativo, existe un libro que describe cómo aplicar conceptos de programación funcional. ?ava6cript, uno de los lenguajes más ampliamente utilizados en la actualidad, tambi*n incorpora capacidades de programación funcional. -t$on tambi*n incorpora particularidades de los lenguajes funcionales como listas de comprensión funciones de tratamiento de listas como matemática de conjuntos. ?ava en su versión :, está incorporando la programación funcional, así como el uso de las expresiones lambda. %os programas escritos en un lenguaje funcional están constituidos 'nicamente por definiciones de funciones, entendiendo *stas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial Cel significado de una expresión depende 'nicamente del significado de sus subexpresionesD, por tanto, la carencia total de efectos colaterales. 1tras características propias de estos lenguajes son la no existencia de asignaciones de variables la falta de construcciones estructuradas como la secuencia o la iteración Clo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivasD. Existen dos grandes categorías de lenguajes funcionales& los funcionales puros los $íbridos. %a diferencia entre ambos estriba en que los lenguajes funcionales $íbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una maor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional $íbrido.
2.) Paradigma lógico El paradigma lógico )iene como característica principal la aplicación de las reglas de la lógica para inferir conclusiones a partir de datos. #onociendo la información las condiciones del problema, la ejecución de un programa consiste en la b'squeda de un objetivo dentro de las declaraciones
realizadas. Esta forma de tratamiento de la información permite pensar la existencia de Hprogramas inteligentesL que puedan responder, no por tener en la base de datos todos los conocimientos, sino por poder inferirlos a trav*s de la deducción. %a importancia del concepto de declaratividad en este paradigma, permite encuadrarlo dentro de los paradigmas declarativos. Al separar el control la lógica, el programa se transforma en un conjunto de declaraciones formales de especificaciones que deben ser correctas por definición. /n programa lógico no tiene un algoritmo que indique los pasos que detallen la manera de llegar a un resultado, sino que está formado por expresiones que describen la solución Co más precisamente, la HdeclaranLD. e esta manera, la clave para $acer un programa lógico es poder explicitar una declaración que describa correctamente la solución del problema. -rincipales características El paradigma tiene sus fundamentos en las teorías de la lógica proposicional. e ellas, se toman en particular las #láusulas de Porn, que son una forma de lógica de predicados con una sola conclusión en cada cláusula un conjunto de premisas de cuo valor de verdad se deduce el valor de verdad de la conclusión& una conclusión es cierta si lo son simultáneamente todas sus premisas. -or su esencia declarativa, un programa lógico no tiene un algoritmo que indique los pasos que detallen la manera de llegar a un resultado, sino que es el sistema internamente el que proporciona la secuencia de control. 3o existe el concepto de asignación de variables, sino el de unificación. 3o $a un HestadoL de las variables que se vaa modificando por sucesivas asignaciones, generalmente asociadas a posiciones de memoria, sino que las variables asumen valores al unificarse o HligarseL con valores particulares temporalmente se van sustituendo durante la ejecución del programa. /n programa lógico contiene una base de conocimiento sobre la que se $acen consultas. %a base de conocimiento está formada por $ec$os, que representan la información del sistema expresada como relaciones entre datos, por reglas lógicas que permiten deducir consecuencias a partir de combinaciones entre los $ec$os , en general, otras reglas. 6e construe especificando la información del problema real en una base de conocimiento en un lenguaje formal el problema se resuelve mediante un mecanismo de inferencia que act'a sobre ella. Así pues, una clave de la programación lógica es poder expresar apropiadamente todos los $ec$os reglas necesarios que definen el dominio de un problema. En otros paradigmas, las salidas son funcionalmente dependientes de las entradas, por lo que el programa puede verse abstractamente como la implementación de una transformación de entradas en
salidas. En cambio, la programación lógica está basada en la noción de que el programa implementa una relación, en vez de una transformación. %os predicados son relaciones, que al no tener predefinido una HdirecciónL entre sus componentes, permiten que sus argumentos act'en indistintamente como argumentos de entrada salida. Esta característica se denomina inversibilidad. A su vez, a diferencia de las funciones donde está la restricción del a unicidad de la imagen para un elemento determinado del dominio, una relación permite vincular a cada elemento con muc$os otros elementos, permitiendo soluciones alternativas. ado que las relaciones son más generales que las transformaciones, la programación lógica es potencialmente de más alto nivel que la de otros paradigmas. 7nternamente, existe un mecanismo, un HmotorL, que act'a como control de secuencia. urante la ejecución de un programa va evaluando combinando las reglas lógicas de la base de conocimiento para lograr los resultados esperados. %a implementación del mecanismo de evaluación puede ser diferente en cada lenguaje del paradigma, pero en todos los casos debe garantizar que se agoten todas las combinaciones lógicas posibles para ofrecer el conjunto completo de respuestas alternativas posibles a cada consulta efectuada. El más difundido se denomina bacOtracOing, que utiliza una estrategia de b'squeda primero en profundidad. %a recursividad como estrategia lógica para encontrar soluciones, junto con la utilización de listas para representar conjuntos de valores, son dos características típicas de los programas lógicos. %os lenguajes del paradigma lógico, en general incluen $erramientas para realizar soluciones polimórficas manejar el concepto de orden superior, entendido como la capacidad de un lenguaje para manejar su propio código como una estructura de datos más. 6on un conjunto de funcionalidades que dotan de una enorme expresividad potencia a los programas. Existen tambi*n otras $erramientas más complejas, como las que buscan incrementar la eficiencia o las que abren a la posibilidad de meta programación, que requieren de una cuidadosa utilización a que se introducen en el interior del sistema mismo permiten alterar la naturaleza declarativa del paradigma. #ampo de aplicación El paradigma es ampliamente utilizado en las aplicaciones que tienen que ver con la 7nteligencia Artificial, particularmente en el campo de sistemas expertos procesamiento del lenguaje $umano. /n sistema experto es un programa que imita el comportamiento de un experto $umano. -or lo tanto contiene información Ces decir una base de conocimientosD una $erramienta para comprender las preguntas encontrar la respuesta correcta examinando la base de datos Cun motor de inferenciaD. En el caso del procesamiento del lenguaje $umano se trata de dividir el lenguaje en partes relaciones tratar de comprender su significado. -ara plantear los problemas en t*rminos del paradigma se
definen reglas lógicas entre las diferentes partes. )ambi*n es 'til en problemas combinatorios o que requieren gran cantidad o amplitud de soluciones alternativas, dada la naturaleza combinatoria del mecanismo de bacOtracOing como lenguaje de prototipación programación exploratoria. 1tros casos de utilidad práctica del paradigma son&
-aralelización automática de programas. -rogramación distribuida multiagente. "alidación automática de programas. -rototipado rápido de aplicaciones. 4ases de datos deductivas. Acceso a bases de datos desde páginas =eb.
%a base conceptual de la lógica proposicional es desarrollada por Alfred Porn, en los a!os VS, en forma independiente al desarrollo computacional, al publicar H6obre sentencias las cuales son verdaderas de la unión directa de las álgebrasL, en la cual presenta un modelo lógico para el tratamiento de oraciones del lenguaje natural, donde se explican las luego denominadas Hcláusulas de PornL. En la primera mitad de la d*cada del WS, en base a las cláusulas de Porn, surgen las primeras versiones de lenguajes lógicos como una $erramienta para resolver ciertos problemas en el área de la inteligencia artificial, originalmente vinculados al tratamiento computacional del lenguaje natural. Más concretamente, en 8FW;, en la /niversidad de Marsella, Alain #olmerauer, -$ilippe 2oussel un grupo de investigadores presentan el lenguaje de programación lógica -rolog. %uego se va perfeccionando el lenguaje se escribe el compilador. -ocos a!os despu*s se definen los principios que constituen al -aradigma %ógico como un paradigma de programación, con la participación determinante de 2obert o+alsOi. 7nicialmente se trataba de un lenguaje totalmente interpretado $asta que, a mediados de los WS, avid P.. =arren desarrolló un compilador capaz de traducir -rolog en un conjunto de instrucciones de una máquina abstracta denominada =arren Abstract Mac$ine, o abreviadamente, =AM. esde entonces -rolog es un lenguaje semiNinterpretado. En 8FWF, en la /niversidad de Edimburgo se escribe un nuevo compilador para el -rolog, adaptándolo al paradigma lógico planteando la ecuación %ógica G control G estructuras de datos X programas se sigue perfeccionando el lenguaje. Aunque con ciertas dificultades iniciales, debido principalmente a la novedad del paradigma a la escasa eficiencia de las implementaciones disponibles, el lenguaje se fue expandiendo rápidamente, sobre todo en Europa en ?apón. -rolog recibió un gran empuje en 8F:8, cuando el 7nstituto ?apon*s para la 3ueva 5eneración de )ecnología 7nformática eligió a la programación lógica como su tecnología de soft+are diferencial, comenzó un proecto para proveer la tecnología de $ard+are
complementaria en la forma de máquinas de inferencia lógica rápidas Cproecto de ordenadores de quinta generaciónD. En 8FFV, el lenguaje se normaliza con el correspondiente estándar 761. En la actualidad -rolog se $a convertido en una $erramienta de desarrollo de soft+are práctica de gran aceptación para la que se dispone de m'ltiples compiladores, tanto comerciales como de libre distribución. -21%15 El -rolog es el lenguaje emblemático del paradigma lógico. 6u evolución no puede separarse de la $istoria misma del paradigma. El lenguaje -rolog no fue realmente dise!ado como tal, sino que más bien fue evolucionando maoritariamente en las /niversidades de Marsella Edimburgo, como una $erramienta experimental de inteligencia artificial. ebido a la falta de una definición com'n, varios dialectos de -rolog evolucionaron. e ellos, el dialecto de Edimburgo es aceptado ampliamente como estándar. esde entonces, el lenguaje -rolog $a sido implementado con diferentes versiones desarrollado por distintos fabricantes, manteniendo la misma base del lenguaje, pero con peque!as variantes $erramientas adicionales para facilitar la programación.
Capítulo ": Conclusiones entro de este documento se pudo observar los paradigmas de programación que existen en la actualizad Co por lo menos los más importantesD, uno como programador no sabe de estos paradigmas completamente $asta que se embarca en este tema que explica por qu* un lenguaje de programación tiene esa estructura, audando a comprender más la lógica del mismo. Además de que se observó los diferentes lenguajes que existen dentro de cada paradigma, darnos cuentas que un lenguaje puede ser utilizado por más de un paradigma, dándole flexibilidad de uso. Esto se anida con el conocimiento que se $a adquirido alrededor de la carrera de sistemas computacionales, despertando la curiosidad de utilizar nuevos lenguajes experimentar nuevos paradigmas para adquirir más conocimiento, tal es el caso de -21%15 el paradigma lógico, el cual a$orra tiempo al programador de resolver un problema, este llama la atención a que tiene la peculiaridad de enfocarse en el problema, no en la solución, esto $ace que el programa aude al programador a resolver dic$a problemática sin la necesidad de resolverlo el mismo, estudiando el resultado obtenido se puede incluso mejorar el mismo sistema.
Además de saber que el paradigma orientado a objeto es el más utilizado a nivel mundial por su simpleza por la multitud de lenguajes que se enfocan a *l, además de que este paradigma es el más sencillo de explicar, pero este mismo necesita que el programador resuelva el problema antes de programar, a que, sin eso, el sistema simplemente no funcionara. )ambi*n existe el t*rmino de multiparadigma, o inclusive el termino llamado subparadigmas, estos t*rminos son manejados por diferentes autores, a que como se puede observar el documento, cada paradigma lo trata como diferente, mas, sin embargo, otro autor puede opinar que existan solo ; paradigmas que de ellos se desglosen los demás, llamándolos así subparadigmas. Anidado a esto tambi*n se encuentra el termino multiparadigma, el cual aplica a los lenguajes de programación que $acen uso de más de un paradigma para su realización, simplificando el problema para poder representarlo en un sistema.
*i&liogra+ía onelli '. 2++#5. Paradigmas de lengua)es de rogramaci*on+ Ca6ada 7. C. 2+1+5. Programación Declarativa+ 8uel$a. -C09:N0M L. e. 2++&5. Paradigma funcional+ ;u
ea 8. ?. 2++&5. Paradigmas de Programación+ Meico. >i$adera ;. >. 2++&5. La Programación 4uncional: Un Poderoso Paradigma + @imon %iA. 2+1+5. Programación estructurada+ @:0. 2+++5. L,0.UA1,/ D, PRO.RAMAC-20+
,ne-os Cuadro comparatio de los paradigmas de programación. Paradigma
Imperatio
!eclaratio
Caracterís ticas
@e *asa en estos conceptos importantes! Celda de memoria $aria*le )peraciones de asignación )peraciones de repetición celdas de memoria donde se almacenan $alores Bue son re/erenciados y modicados durante la ejecución del programa a las Bue se suele asignar un nom*re o identicador. )peraciones de asignación! son las Bue permiten asociar los datos o $alores a la posición de la memoria o $aria*le Bue los contiene. >epetición! normalmente un programa iterati$o reali
•
•
•
•
•
•
•
•
•
#structurado
%rientado a o&jetos
La Programación %eclarati$a en La estructura de contraposición a la los programas es Programación Imperati$a es un clara puesto Bue paradigma de programación las instrucciones Bue est= *asado en el est=n m=s desarrollo de programas ligadas o especicando o DdeclarandoD relacionadas un conjunto de condiciones entre sí. Los programas son proposiciones armaciones m=s /=ciles de restricciones ecuaciones o entender trans/ormaciones Bue pueden ser descri*en el pro*lema y leídos de /orma detallan su solución. La solución es o*tenida secuencial. programa mediante mecanismos internos :n escrito de de control sin especicar acuerdo a los eactamente cómo encontrarla principios de tan sólo se le indica a la programación computadora Bue es lo Bue se estructurada no desea o*tener o Bue es lo Bue solamente se est= *uscando5. No eisten tendr= una mejor asignaciones destructi$as y estructura sino las $aria*les son utili
•
•
•
•
•
•
0*stracción! den las característi esenciales de o*jeto donde capturan comportamientos 'ncapsulamiento! signica reu todos los elemen Bue pue considerarse pertenecientes una misma entid al mismo ni$el a*stracción Modularidad! propiedad permite su*di$i una aplicación partes peBue6as Polimorsmo! comportamientos di/erentes asociados a o*je distintos pue compartir el mis nom*reG llamarlos por nom*re se utili< el comportamie correspondiente o*jeto Bue se e usando.
entajas
•
@u relati$a simplicidad y /acilidad de implementación de los compiladores e intFrpretes
•
•
'legancia claridad sencille< potencia y concisión. @em=nticas claras simples y matem=ticamente *ien /undadas. Cercanos al ni$el de a*stracción de las especicaciones /ormalesin/ormales de los pro*lemas a resol$er. >e/erencialmente transparentes! Comportamiento matem=tico adecuado Bue permite ra
•
•
•
•
•
•
•
•
!esentaj as
•
•
•
•
La capacidad de reutili
•
•
•
•
•
•
•
'l
>educción de los costos de mantenimiento >educción del es/uer
•
•
•
•
Proporciona conceptos Eerramientas las cuales modela representa mundo real elmente como posi*le. -omenta reutili
principal o*st=culo del 'l principal Complejidad p paradigma declarati$o es el incon$eniente de adaptarse descu*rimiento del algoritmo este mFtodo de Mayor cantidad código *=sico para resol$er programación es pro*lemas. Por esta ra<ón los Bue se o*tiene lenguajes declarati$os tienden un Knico *loBue a ser de propósito especíco de programa dise6ados para usarse en Bue cuando se aplicaciones particulares. Eace demasiado )tra des$entaja de la grande puede programación declarati$a est= resultar relacionada con la eciencia. pro*lem=tico el manejo de su código /uente •
•
•
•
Permite cr sistemas complejos 0gili