Investigacion 1 - Paradigmas de Programacion

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 21

Paradigmas de la

programacin

2017

Autor: Ulises Luis Rodrguez


Modulo: Programacin lgica y funcional
Docente: Osvaldo Lira Daz
Ciudad y puerto de Lzaro Crdenas
Michoacn, a 2 de febrero del 2017
Paradigmas de la programacin

Contenido
Introduccin..................................................................................................................... 3
Captulo 1 Marco terico.................................................................................................. 3
1.1 Lenguajes Naturales y lenguajes de programacin.................................................3
1.1.1 Lenguajes naturales.......................................................................................... 3
1.1.2 Lenguaje de programacin............................................................................... 4
1.2 Paradigmas de la Programacin..............................................................................6
Captulo 2: Tipos de paradigmas de programacin..........................................................7
2.1 Paradigma Imperativo............................................................................................. 7
2.2 Paradigma Declarativo............................................................................................ 8
2.3 Paradigma Estructurado.......................................................................................... 9
2.4 Paradigma Orientado a Objetos............................................................................10
2.5 Paradigma Funcional............................................................................................. 12
2.6 Paradigma lgico.................................................................................................. 13
Captulo 3: Conclusiones................................................................................................ 17
Bibliografa..................................................................................................................... 17
Anexos........................................................................................................................... 18
Cuadro comparativo de los paradigmas de programacin..........................................18

2
Introduccin
En este documento se desglosan los diferentes paradigmas que existen dentro de la programacin,
por lo general autores dan una clasificacin diferente de los paradigmas concordando en algunos
puntos, aqu se explicaran los ms comunes o los que mencionan ms dentro de las ciencias de la
computacin. Adems, 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 patrn en cualquier disciplina cientfica, el


cual nos sirve para poder realizar un proceso de manera eficaz y con la mayor calidad posible, esto a
su vez aplica tanto en el diseo como en la programacin de un sistema que solucione un problema
en concreto.

Veremos que cada paradigma puede ser aplicado a diferentes problemas, pero lo ms importante es
saber que paradigmas existen y saber cundo utilizar cada uno de ellos dentro de la resolucin de un
problema, as como tener la orientacin de implementarlo eficazmente.

Cada paradigma lleva consigo un lenguaje, o en otros casos varios lenguajes, que pueden desarrollar
el paradigma sin problema, ya que su estructura est orientada hacia ese paradigma.

El lector deber poseer conocimientos bsicos en las ciencias de la computacin, as como un


conocimiento bsico de programacin para poder indagar sobre este fascinante tema que concierne a
cualquier programador que desee desarrollar un proyecto de manera eficaz.
Captulo 1 Marco terico

1.1 Lenguajes Naturales y lenguajes de


programacin.
1.1.1 Lenguajes naturales
Los lenguajes naturales son aquellos con los cuales hablamos y escribimos en nuestras actividades
cotidianas. Entre sus ventajas podemos citar que es fcil de usar y de entender: no debemos
aprendernos ningn lenguaje nuevo y cualquiera puede leer la especificacin y comentarla o
criticarla. Entre los inconvenientes estn la imprecisin y la ambigedad. Aunque el anlisis de
requisitos se haya realizado correctamente, una especificacin en lenguaje natural puede dar lugar a
que la implementacin final no cumpla estos requisitos. Adems, debido a su propia facilidad de uso
e imprecisin, las especificaciones suelen ocultar lagunas que slo se pondrn de manifiesto a la hora
de programar, es decir, al traducir la especificacin a un lenguaje de programacin.

Tambin se habla de lenguajes naturales para referirse al software que permite que los sistemas de
computacin acepten, interpreten y ejecuten instrucciones en el lenguaje materno o "natural" que
habla el usuario final, por lo general el ingls. La mayor parte de los lenguajes naturales comerciales
estn diseados para ofrecer a los usuarios un medio de comunicarse con una base de datos
corporativa o con un sistema experto.

Podemos resumir que los lenguajes naturales se distinguen por las siguientes propiedades:

Desarrollados por enriquecimiento progresivo antes de cualquier intento de formacin de una


teora.
La importancia de su carcter expresivo debido grandemente a la riqueza del componente
semntico.
Dificultad o imposibilidad de una formalizacin completa.

1.1.2 Lenguaje de programacin


Un lenguaje de programacin consiste en un conjunto de rdenes o comandos que describen el
proceso deseado. Cada lenguaje tiene sus instrucciones y enunciados verbales propios, que se
combinan para formar los programas de cmputo. Los lenguajes de programacin no son
aplicaciones, sino herramientas que permiten construir y adecuar aplicaciones.

Existen muchos lenguajes de programacin con caractersticas y aptitudes muy diferenciadas.


Todo ello se encuentra en dos grandes grupos:

Los lenguajes mquina.


Los lenguajes simblicos.

Lenguaje de programacin en el que las instrucciones de los diferentes programas se codifican


utilizando los caracteres de las lenguas naturales. La ejecucin de un programa. Entre los primeros se
encuentran los denominados lenguajes en cdigo mquina. En estos lenguajes, la codificacin de
estos lenguajes se hace utilizando un lenguaje binario de ceros y unos que son los nicos smbolos
que puede entender cualquier computador. Cada sistema fsico tiene su cdigo mquina distinta por
lo que un programa escrito en un determinado cdigo mquina slo vale para un sistema fsico.

A los lenguajes mquina les sucedieron, los lenguajes simblicos los cuales utilizan caracteres
naturales para escribir las instrucciones de los programas.

Los lenguajes simblicos se dividen a su vez en:

Lenguajes simblicos de bajo nivel o ensambladores.


Lenguajes simblicos de alto nivel.

Dentro de los segundos se puede distinguir a su vez los lenguajes procedurales y los relacionales.

Un lenguaje procedural es aquel lenguaje de programacin en el que hay que sealar tanto lo que se
quiere hacer como el modo de hacerlo. Los lenguajes de tercera generacin son de tipo procedural.

Un lenguaje relacional es un tipo de lenguaje de programacin en el que slo hay 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 muy alta productividad en desarrollo, pero muy
ineficientes en ejecucin. La diferencia entre uno y otro es que el primero exige que se diga tanto lo
que se quiere hacer como la forma en que hay que hacerlo mientras que los relacionales slo exigen
que se diga lo que se quiere hacer, pero no es necesario que se exprese el camino para realizarlo.

A medida que se va subiendo de nivel los lenguajes son ms sencillos y ms productivos en


desarrollo, pero en contra partida son menos eficientes a la hora de su ejecucin. Los programas
escritos en lenguajes simblicos se denominan programas fuente y los programas no son
directamente ejecutables su ejecucin implica su previa traduccin a cdigo mquina para obtener
los denominados programas objeto o absolutos. Esta traduccin se hace a travs de los
ensambladores, compiladores o intrpretes, a los lenguajes que de forma genrica se les denomina
procesadores de lenguajes.

A los lenguajes mquina se les conoce como lenguajes de primera generacin. Los ensambladores
son los lenguajes de segunda generacin. Los simblicos de alto nivel de tipo procedural se les
denomina de tercera generacin y a los relacionales se considera que son de cuarta generacin. A la
tercera generacin pertenecen lenguajes conocidos como el FORTRAN, COBOL, RPG, BASIC,
PL1, SIMULA, ALGOL, PASCAL, ADA, C, LISP, PROGOL, etc.

Estos lenguajes de tercera generacin son de tipo universal. A diferencia de los lenguajes de tercera
generacin, los de cuarta generacin no son tan universales y van asociados a determinados sistemas
operativos y en muchos casos a determinados sistemas de almacenamiento de informacin, lo que les
resta uno de los mayores intereses de los lenguajes de tercera generacin. La mayor ventaja de los
lenguajes relacionados es que son muy productivos en desarrollo a alcanzar niveles de productividad
de hasta 6 y 8 veces superior a los que alcanzan los de tercera generacin.

Entre los lenguajes de cuarta generacin tenemos el CSP de IBM asociado al sistema de gestin de
base de datos DB2; el NATURAL de SOFTWARE AG asociado al sistema de datos ADABAS; el
SQL que es un lenguaje convertido en estndar mundial como lenguaje de cuarta generacin para la
consulta de bases relacionales; etc. Adems de los lenguajes sealados hay que hacer referencia a una
serie de lenguajes orientados a objetos y cuya utilizacin tiene preferentemente lugar en los puestos
cliente. Entre estos destaca el Visual Basic de Microsoft, el Power Builder y el Delphi. Adems, hay
que prestar una seria atencin al lenguaje de programacin Java, desarrollado por SUN y cuya
misin fundamental es dar la posibilidad de desarrollar aplicaciones altamente interactivas bajo la
modalidad de Web, en el contexto de Internet. En pocos aos y como consecuencia del desarrollo que
est teniendo la inteligencia artificial se podr programar, con ciertas limitaciones sintcticas, en los
lenguajes naturales.

1.2 Paradigmas de la Programacin


Qu es un paradigma? Aunque la denicin de paradigma que se encuentra en el diccionario de
Mara Moliner (vase el recuadro amarillo) es cierta y suciente, para esta discusin necesitaremos
de una ms amplia. Una bsqueda fugaz por Google, apunta a una relacin entre el trmino
paradigma y algn oscuro individuo llamado Thomas Kuhn, quien, en su libro publicado en 1962,
The Structure of Scientic Revolutions, ampli la concepcin del trmino paradigma.

Para Kuhn, el trmino se reere a la forma en que un cientco percibe al mundo y a la estructura de
teoras y suposiciones que modican esta percepcin. Otro punto importante para nuestro inters es
el sealamiento que hace Kuhn acerca de cmo el xito de un paradigma es consecuencia de su
efectividad para resolver algn problema. En breve, un paradigma es el resultado de un proceso
social en el cual un grupo de personas desarrolla nuevas ideas y crea principios y prcticas alrededor
de estas ideas, y no solamente un conjunto de prcticas y conocimientos objetivamente validados.
Ms especcamente para la ciencia de la computacin, probablemente fue Robert Floyd quien habl
por primera vez del trmino Paradigmas de Programacin y quien los deni como un proceso de
diseo que va ms all de una gramtica, reglas semnticas y algoritmos, sino que es un conjunto de
mtodos sistemticos aplicables en todos los niveles del diseo de programas.

Existen diversos lenguajes y paradigmas de programacin que se han diseado para facilitar la tarea
de la programacin en diferentes mbitos. Por ejemplo, la programacin orientada a objetos es un
paradigma dirigido al mejoramiento en la calidad del software por medio de la observacin de
aspectos tales como la correccin, robustez, extensibilidad, compatibilidad y sobre todo la
reusabilidad del software. La programacin lgica, por su parte, es un paradigma orientado a la
expresin de los problemas en trminos lgicos para su posterior solucin por mtodos de inferencia
y otras tcnicas lgicas. En la prctica, cada paradigma de programacin es implementado a travs de
diversos lenguajes. Slo como un ejemplo, la programacin orientada a objetos encuentra su
recipiente en lenguajes tales como Java, C++, Eiffel, Objective C, el paquete CLOS de Common
Lisp, etc.

Actualmente existen una gran variedad de paradigmas de programacin, pero una clasificacin
general podra ser la siguiente:
Captulo 2: Tipos de paradigmas de
programacin
2.1 Paradigma Imperativo
El trmino imperativo en este caso, no diere esencialmente del modo gramtico imperativo del
espaol, donde una oracin como: Gutirrez, cierre el YouTube y pngase a trabajar en lo que le
ped! le est indicando a un sujeto, presumiblemente ojo, 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
accin especca. De forma similar, la programacin imperativa consiste en una serie de comandos
que una computadora ejecutar. Estos comandos detallan de forma clara y especca el cmo hacer
las cosas y llevarn al programa a travs de distintos estados. En nuestro ejemplo, con el Sr.
Gutierrez, un comando result en un cambio de estado: de procastinador a productivo.

Los elementos ms importantes de este paradigma son:

Variables: Son objetos cuyo valor depende de una localidad de memoria y que puede cambiar
a lo largo de la ejecucin del programa. La denicin de este paradigma sera imposible sin
estos elementos fundamentales, ya que los estados de un programa son representados y
diferenciados por su conjunto de variables y sus contenidos.

Tipos de datos: Son abstracciones que representan un conjunto de valores junto con las
operaciones y relaciones que son aplicables a ellos. Algunos tipos comunes en varios
lenguajes son: integer, que dene parcialmente el conjunto de los nmeros enteros, oat, que
representa nmeros reales y boolean, que generalmente especica al pequeo conjunto
conformado por true y false. Es importante recalcar que estos no son los nicos tipos de datos
y que muchos lenguajes permiten la implementacin de muchos otros.
Expresiones: Aunque son la forma fundamental de programar instrucciones, en la
programacin imperativa su papel ms importante est en las sentencias de asignacin. Una
sentencia de asignacin sirve para modicar el valor de una variable y as cambiar el estado
de un programa. Esto puede ser algo muy sencillo como copiar el valor de una variable a otra
localidad de memoria o involucrar algo ms complicado como realizar operaciones sobre las
variables antes de re-localizarlas en la memoria. Los operadores empleados pueden ser
matemticos, lgicos o una combinacin de ambos.
Estructuras de Control: Las estructuras de control son mecanismos que un lenguaje requiere
para realizar dos tareas indispensables:
1. Seleccionar una opcin entre algunos ujos de control alternativos.
2. Iterar la ejecucin de una serie de sentencias. Una sentencia de seleccin provee al
programa de medios para elegir entre dos o ms caminos de ejecucin.

Su forma ms sencilla es el condicional if que selecciona entre dos opciones y puede extenderse a
una seleccin prcticamente innita mediante constructores mltiples (como switch o case) o la
anidacin de condicionales if. Las sentencias de iteracin representan el verdadero poder del
cmputo, ejecutan un bloque de sentencias desde cero hasta un nmero tericamente innito de
veces. Es interesante que todos los lenguajes de programacin desde el primero, que data de la
dcada de los cuarenta, Plankalkl, implementaron estructuras de iteracin. Estas se dividen en dos
categoras principales dependiendo de cmo se controla la iteracin.

Pueden ser: controlados con contadores (tradicionalmente for) o controlados lgicamente (como
while). En esta categora tambin estaran incluidas sentencias como goto, sin embargo, estas han
cado en desuso y que, como sealo Dijkstra, representan ms desventajas que ventajas.

2.2 Paradigma Declarativo


El paradigma declarativo, en cambio, plantea que los problemas sean descritos al ordenador con una
serie de unidades conceptuales bsicas que se pueden combinar segn unas determinadas reglas para
generar nueva informacin. Para la resolucin de un problema, se crearn las descripciones que
representan al dominio en el cual existe el problema a resolver y se plantear el problema como una
pregunta que debe ser respondida bien con alguna de las unidades conceptuales iniciales o bien con
una combinacin vlida de ellas que es el propio ordenador quien debe buscar.
Ventajas:

Descripciones compactas y muy expresivas. Es posible describir universos de problemas con


muy pocas lneas de cdigo del lenguaje que permitan la solucin de un gran nmero de
problemas.
Desarrollo del programa no tan orientado a la solucin de un nico problema. Con una
programacin adecuada, basta haber descrito un dominio de problemas de forma correcta y
saber formular nuestro problema como una simple consulta en dicho dominio. La variedad de
preguntas que se pueden responder con una nica descripcin del dominio de problemas
concreto suele ser muy elevada.
No hay necesidad de emplear esfuerzo en disear un algoritmo que resuelva el problema.

2.3 Paradigma Estructurado


La metodologa de programacin estructurada se fundamenta en tcnicas de segmentacin, la cual
plantea que un problema se puede dividir en problemas ms pequeos (mdulos) y ms simples de
resolver, de tal forma que la suma de las soluciones de cada problema sea el resultado de la solucin
total de ste.

Esta metodologa permite desarrollar algoritmos a travs de mdulos, los cuales realizan tareas bien
definidas. De esta forma, el mdulo se define una sola vez y se llama tantas veces como sea
necesario, mediante el nombre que lo identifica. La forma grfica que lo representa sera la siguiente:
Algunas de las ventajas que presenta este paradigma son los siguientes:

Los programas son ms fciles de leer


La estructura de los programas es clara
Reduccin de esfuerzo en las pruebas
Se incrementa el rendimiento del programador

Desventajas

Se obtiene un nico bloque del programa que cuando se hace demasiado grande puede
ser problemtico para el manejo del cdigo fuente.

Una de las caractersticas del lenguaje de programacin en C, es que es un lenguaje estructurado, lo


que permite generar cdigo claro y sencillo, ya que est basado en la modularidad.

El lenguaje de programacin en C, est estructurado en tres partes:

Libreras estndar
Programa compilador
Preprocesador (INCLUDE - DEFINE)

2.4 Paradigma Orientado a Objetos


A menos que los libros sobre computacin que usted consulta hayan sido impresos cuando el trmino
telfono celular fuera desconocido para la mayora de la poblacin, sabr que la programacin
orientada a objetos (POO) es el paradigma de programacin ms popular en la actualidad. Programar
bajo este paradigma es como tratar de simular o modelar los objetos del mundo real. Una mascota
como un perro podra servir para un ejemplo introductorio: Un objeto est compuesto por estados y
mtodos. Los estados son propiedades del objeto y estn representados por variables con valores
nicos para cada objeto y que son llamadas variables de instancia. En este ejemplo, podramos pensar
en cosas como: edad, color, tener hambre, tener ganas de salir al parque, etc., propiedades todas que
son intrnsecas a cada perro, pero cuyos valores son nicos en cada uno. Los mtodos son
representaciones de los comportamientos que el objeto es capaz de hacer.

Por ejemplo, mi perro en particular tendra los mtodos: sentarse, echarse, comer, saludar, dormir y
bailar, entre otros, y que son comportamientos que probablemente presentan otros perros.

Ahora que tenemos una nocin de lo que es un objeto, quiero mencionar las propiedades ms
generales y formales de este paradigma:

Encapsulamiento: Signica que el cdigo o datos de un objeto pueden estar ocultos para
cualquier entidad externa a l.
Herencia: La herencia es la propiedad de crear nuevos objetos a partir de la denicin de
otros.
Un objeto nuevo ser idntico al modelo que seguimos para crearlo, excepto por algunos
cambios incrementales o redeniciones de sus estados o mtodos. Me gusta pensar en la
taxonoma para ejemplicar esta propiedad. Pensemos en un zorro comn (Vulpes Vulpes,
aqu a la derecha). Como se ve, esta especie pertenece al gnero Vulpes, el cual especica
caractersticas como: tamao pequeo, crneo aplanado y el color de la punta de la cola
generalmente distinto al resto del cuerpo. A su vez, este gnero este contenido dentro de la
familia Canidae, que se caracteriza por tener garras no retrctiles y caminar apoyndose
nicamente en sus dedos. Todos los cnidos son al mismo tiempo miembros del orden
Carnivora, el cual es bastante diverso y que en particular tiene dientes y garras para cazar a
otros animales, ojos que apuntan hacia el frente y, claro, un men donde la mayora de los
platillos son carne. Y as ad nauseam... Ahora, supongamos que cada una de estas categoras
es la denicin de un objeto. As, cualquier objeto del tipo Canidae presentara todas las
caractersticas de los objetos de donde fue heredado, es decir, que sera vertebrado, tendra
dientes, garras y predileccin por la carne.
No obstante, esto no sucedera a la inversa: un objeto del tipo Carnivora no necesariamente es
pequeo o presenta la punta de la cola de un color diferente.
Polimorsmo: Esencialmente, es la propiedad que le permite a un mtodo aceptar o devolver
valores de ms de un tipo. Formalmente se dene as: Siendo M un mtodo y t1 y t2 son dos
tipos de datos diferentes, M es polimrco si M puede ser ejecutado con el argumento t1:
M( t1) y el argumento t2: M( t2) De la misma manera una funcin puede ser denida como
polimrca si al llamarla mediante dos parmetros distintos, arroja un retorno de tipos
diferentes.
Invocacin Dinmica de Mtodos (Dynamic Method Binding): Se traduce en que cuando
llamamos algn mtodo de un objeto estaremos ejecutando la operacin especca de ese
objeto y no alguna implementacin de alguno de sus padres.

Este paradigma hace posible el desarrollo modular de un software, porque, hasta cierto grado, cada
componente es independiente de los dems, lo que permite que estos componentes puedan ser
reutilizados y reciclados, incluso, a lo largo de distintos proyectos. Es posible que esta
modularidad haya colocado a la programacin orientada a objetos en la posicin dominante en la
que se encuentra ahora, dado que le ha permitido a la industria encontrar nuevas formas de trabajo y
patrones de diseo ms productivos. Gran parte de los lenguajes ms utilizados hoy en da estn
orientados a objetos, entre ellos se encuentran: Java, C++, PHP, Python, C#, Delphi, Ruby, D y
Actionscript, entre otros.

2.5 Paradigma Funcional


En ciencias de la computacin, la programacin funcional es un paradigma de programacin
declarativa basado en el uso de funciones matemticas, en contraste con la programacin imperativa,
que enfatiza los cambios de estado mediante la mutacin de variables. 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.

En la prctica, la diferencia entre una funcin matemtica y la nocin de una "funcin" utilizada en la
programacin imperativa, es que las funciones imperativas pueden tener efectos secundarios, como
cambiar el valor de clculos realizados previamente. Por esta razn carecen de transparencia
referencial, es decir, la misma expresin sintctica puede resultar en valores diferentes en varios
momentos de la ejecucin del programa.

Con cdigo funcional, en contraste, el valor generado por una funcin depende exclusivamente de
los argumentos alimentados a la funcin. Al eliminar los efectos secundarios se puede entender y
predecir el comportamiento de un programa mucho ms fcilmente. sta es una de las principales
motivaciones para utilizar la programacin funcional.

Los lenguajes de programacin funcional, especialmente los puramente funcionales, han sido
enfatizados en el ambiente acadmico y no tanto en el desarrollo comercial o industrial. Sin embargo,
lenguajes de programacin funcional como Scheme, Erlang, Rust, Objective Caml , Scala, F# 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), Mathematica (matemticas simblicas), J y K (anlisis financiero).

Los 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. Java en su versin 8, est incorporando la programacin funcional, as
como el uso de las expresiones lambda.

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
subexpresiones), 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. La
diferencia entre ambos estriba en que los lenguajes funcionales hbridos son menos dogmticos que
los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de
instrucciones o la asignacin de variables. En contraste, los lenguajes funcionales puros tienen una
mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple
siempre con un lenguaje funcional hbrido.

2.6 Paradigma lgico


El paradigma lgico Tiene como caracterstica principal la aplicacin de las reglas de la lgica para
inferir conclusiones a partir de datos. Conociendo la informacin y las condiciones del problema, la
ejecucin de un programa consiste en la bsqueda de un objetivo dentro de las declaraciones
realizadas.

Esta forma de tratamiento de la informacin permite pensar la existencia de programas inteligentes


que puedan responder, no por tener en la base de datos todos los conocimientos, sino por poder
inferirlos a travs de la deduccin. La importancia del concepto de declaratividad en este paradigma,
permite encuadrarlo dentro de los paradigmas declarativos. Al separar el control y la lgica, el
programa se transforma en un conjunto de declaraciones formales de especificaciones que deben ser
correctas por definicin. Un programa lgico 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
solucin (o ms precisamente, la declaran).

De esta manera, la clave para hacer un programa lgico es poder explicitar una declaracin que
describa correctamente la solucin del problema. Principales caractersticas El paradigma tiene sus
fundamentos en las teoras de la lgica proposicional. De ellas, se toman en particular las Clusulas
de Horn, que son una forma de lgica de predicados con una sola conclusin en cada clusula y un
conjunto de premisas de cuyo valor de verdad se deduce el valor de verdad de la conclusin: una
conclusin es cierta si lo son simultneamente todas sus premisas.

Por su esencia declarativa, un programa lgico 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. No existe el concepto de asignacin de variables, sino el de unificacin. No hay
un estado de las variables que se vaya modificando por sucesivas asignaciones, generalmente
asociadas a posiciones de memoria, sino que las variables asumen valores al unificarse o ligarse
con valores particulares temporalmente y se van sustituyendo durante la ejecucin del programa.

Un programa lgico contiene una base de conocimiento sobre la que se hacen consultas. La base de
conocimiento est formada por hechos, que representan la informacin del sistema expresada como
relaciones entre datos, y por reglas lgicas que permiten deducir consecuencias a partir de
combinaciones entre los hechos y, en general, otras reglas. Se construye especificando la informacin
del problema real en una base de conocimiento en un lenguaje formal y el problema se resuelve
mediante un mecanismo de inferencia que acta sobre ella. As pues, una clave de la programacin
lgica es poder expresar apropiadamente todos los hechos y 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 implementacin de una transformacin de entradas en
salidas. En cambio, la programacin lgica est basada en la nocin de que el programa implementa
una relacin, en vez de una transformacin. Los predicados son relaciones, que al no tener
predefinido una direccin entre sus componentes, permiten que sus argumentos acten
indistintamente como argumentos de entrada y salida. Esta caracterstica se denomina inversibilidad.
A su vez, a diferencia de las funciones donde est la restriccin del a unicidad de la imagen para un
elemento determinado del dominio, una relacin permite vincular a cada elemento con muchos otros
elementos, permitiendo soluciones alternativas.

Dado que las relaciones son ms generales que las transformaciones, la programacin lgica es
potencialmente de ms alto nivel que la de otros paradigmas. Internamente, existe un mecanismo, un
motor, que acta como control de secuencia. Durante la ejecucin de un programa va evaluando y
combinando las reglas lgicas de la base de conocimiento para lograr los resultados esperados. La
implementacin del mecanismo de evaluacin puede ser diferente en cada lenguaje del paradigma,
pero en todos los casos debe garantizar que se agoten todas las combinaciones lgicas posibles para
ofrecer el conjunto completo de respuestas alternativas posibles a cada consulta efectuada. El ms
difundido se denomina backtracking, que utiliza una estrategia de bsqueda primero en profundidad.
La recursividad como estrategia lgica para encontrar soluciones, junto con la utilizacin de listas
para representar conjuntos de valores, son dos caractersticas tpicas de los programas lgicos.

Los lenguajes del paradigma lgico, en general incluyen herramientas para realizar soluciones
polimrficas y manejar el concepto de orden superior, entendido como la capacidad de un lenguaje
para manejar su propio cdigo como una estructura de datos ms. Son un conjunto de
funcionalidades que dotan de una enorme expresividad y potencia a los programas.

Existen tambin otras herramientas ms complejas, como las que buscan incrementar la eficiencia o
las que abren a la posibilidad de meta programacin, que requieren de una cuidadosa utilizacin ya
que se introducen en el interior del sistema mismo y permiten alterar la naturaleza declarativa del
paradigma. Campo de aplicacin El paradigma es ampliamente utilizado en las aplicaciones que
tienen que ver con la Inteligencia Artificial, particularmente en el campo de sistemas expertos y
procesamiento del lenguaje humano.

Un sistema experto es un programa que imita el comportamiento de un experto humano. Por lo tanto
contiene informacin (es decir una base de conocimientos) y una herramienta para comprender las
preguntas y encontrar la respuesta correcta examinando la base de datos (un motor de inferencia). En
el caso del procesamiento del lenguaje humano se trata de dividir el lenguaje en partes y relaciones y
tratar de comprender su significado. Para plantear los problemas en trminos del paradigma se
definen reglas lgicas entre las diferentes partes. Tambin es til en problemas combinatorios o que
requieren gran cantidad o amplitud de soluciones alternativas, dada la naturaleza combinatoria del
mecanismo de backtracking y como lenguaje de prototipacin y programacin exploratoria.

Otros casos de utilidad prctica del paradigma son:

Paralelizacin automtica de programas.


Programacin distribuida y multiagente.
Validacin automtica de programas.
Prototipado rpido de aplicaciones.
Bases de datos deductivas.
Acceso a bases de datos desde pginas Web.

La base conceptual de la lgica proposicional es desarrollada por Alfred Horn, en los aos 50, en
forma independiente al desarrollo computacional, al publicar Sobre sentencias las cuales son
verdaderas de la unin directa de las lgebras, en la cual presenta un modelo lgico para el
tratamiento de oraciones del lenguaje natural, donde se explican las luego denominadas clusulas de
Horn. En la primera mitad de la dcada del 70, en base a las clusulas de Horn, surgen las primeras
versiones de lenguajes lgicos como una herramienta para resolver ciertos problemas en el rea de la
inteligencia artificial, originalmente vinculados al tratamiento computacional del lenguaje natural.
Ms concretamente, en 1972, en la Universidad de Marsella, Alain Colmerauer, Philippe Roussel y
un grupo de investigadores presentan el lenguaje de programacin lgica Prolog. Luego se va
perfeccionando el lenguaje y se escribe el compilador.

Pocos aos despus se definen los principios que constituyen al Paradigma Lgico como un
paradigma de programacin, con la participacin determinante de Robert Kowalski. Inicialmente se
trataba de un lenguaje totalmente interpretado hasta que, a mediados de los 70, David H.D. Warren
desarroll un compilador capaz de traducir Prolog en un conjunto de instrucciones de una mquina
abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es
un lenguaje semi-interpretado. En 1979, en la Universidad de Edimburgo se escribe un nuevo
compilador para el Prolog, adaptndolo al paradigma lgico planteando la ecuacin

Lgica + control + estructuras de datos = programas y se sigue perfeccionando el lenguaje.

Aunque con ciertas dificultades iniciales, debido principalmente a la novedad del paradigma y a la
escasa eficiencia de las implementaciones disponibles, el lenguaje se fue expandiendo rpidamente,
sobre todo en Europa y en Japn. Prolog recibi un gran empuje en 1981, cuando el Instituto Japons
para la Nueva Generacin de Tecnologa Informtica eligi a la programacin lgica como su
tecnologa de software diferencial, y comenz un proyecto para proveer la tecnologa de hardware
complementaria en la forma de mquinas de inferencia lgica rpidas (proyecto de ordenadores de
quinta generacin). En 1995, el lenguaje se normaliza con el correspondiente estndar ISO. En la
actualidad Prolog se ha convertido en una herramienta de desarrollo de software prctica y de gran
aceptacin para la que se dispone de mltiples compiladores, tanto comerciales como de libre
distribucin. PROLOG El Prolog es el lenguaje emblemtico del paradigma lgico. Su evolucin no
puede separarse de la historia misma del paradigma.

El lenguaje Prolog no fue realmente diseado como tal, sino que ms bien fue evolucionando
mayoritariamente en las Universidades de Marsella y Edimburgo, como una herramienta
experimental de inteligencia artificial. Debido a la falta de una definicin comn, varios dialectos de
Prolog evolucionaron. De ellos, el dialecto de Edimburgo es aceptado ampliamente como estndar.
Desde entonces, el lenguaje Prolog ha sido implementado con diferentes versiones y desarrollado por
distintos fabricantes, manteniendo la misma base del lenguaje, pero con pequeas variantes y
herramientas adicionales para facilitar la programacin.

Captulo 3: Conclusiones
Dentro de este documento se pudo observar los paradigmas de programacin que existen en la
actualizad (o por lo menos los ms importantes), uno como programador no sabe de estos
paradigmas completamente hasta que se embarca en este tema que explica por qu un lenguaje de
programacin tiene esa estructura, ayudando a comprender ms la lgica del mismo.

Adems de que se observ los diferentes lenguajes que existen dentro de cada paradigma, y darnos
cuentas que un lenguaje puede ser utilizado por ms de un paradigma, dndole flexibilidad de uso.

Esto se anida con el conocimiento que se ha adquirido alrededor de la carrera de sistemas


computacionales, despertando la curiosidad de utilizar nuevos lenguajes y experimentar nuevos
paradigmas para adquirir ms conocimiento, tal es el caso de PROLOG y el paradigma lgico, el
cual ahorra tiempo al programador de resolver un problema, este llama la atencin ya que tiene la
peculiaridad de enfocarse en el problema, y no en la solucin, esto hace que el programa ayude al
programador a resolver dicha problemtica sin la necesidad de resolverlo el mismo, estudiando el
resultado obtenido se puede incluso mejorar el mismo sistema.
Adems de saber que el paradigma orientado a objeto es el ms utilizado a nivel mundial por su
simpleza y por la multitud de lenguajes que se enfocan a l, adems de que este paradigma es el ms
sencillo de explicar, pero este mismo necesita que el programador resuelva el problema antes de
programar, ya que, sin eso, el sistema simplemente no funcionara.

Tambin existe el trmino de multiparadigma, o inclusive el termino llamado subparadigmas, estos


trminos son manejados por diferentes autores, ya que como se puede observar el documento, cada
paradigma lo trata como diferente, mas, sin embargo, otro autor puede opinar que existan solo 2
paradigmas que de ellos se desglosen los dems, llamndolos as subparadigmas.

Anidado a esto tambin se encuentra el termino multiparadigma, el cual aplica a los lenguajes de
programacin que hacen uso de ms de un paradigma para su realizacin, simplificando el problema
para poder representarlo en un sistema.

Bibliografa
Bonelli, E. (2007). Paradigmas de lenguajes de programacion.

Caada, J. C. (2010). Programacin Declarativa. Huelva.

FCA-UNAM, L. e. (2008). Paradigma funcional.

Guzmn, I. F. (2010). Programacin Estructurada.

Lpez, P. E. (2008). PARADIGMAS DE LENGUAJES DE PROGRAMACIN.

Nacional, U. T. (2005). EL PARADIGMA LOGICO . Crdoba.

Navarro, M. (2008). Simon Dik.

Rea, H. Z. (2008). Paradigmas de Programacin. Mexico.

Rivadera, G. R. (2008). La Programacin Funcional: Un Poderoso Paradigma .

Simon Dik. (2010). Programacin estructurada.

SUA. (2000). LENGUAJES DE PROGRAMACIN.


Anexos
Cuadro comparativo de los paradigmas de programacin.
Paradigma Imperativo Declarativo Estructurado Orientado a
objetos
Caracters Se basa en estos La Programacin Declarativa, en La estructura de Abstraccin: deno
ticas conceptos contraposicin a la los programas es las caracterstic
importantes: Programacin Imperativa es un clara, puesto que esenciales de
Celda de memoria paradigma de programacin las instrucciones objeto, donde
variable que est basado en el estn ms capturan s
Operaciones de desarrollo de programas ligadas o comportamientos
asignacin especificando o "declarando" relacionadas Encapsulamiento:
Operaciones de un conjunto de condiciones, entre s. significa reu
repeticin celdas de proposiciones, afirmaciones, Los programas son todos los element
memoria donde se restricciones, ecuaciones o ms fciles de que pued
almacenan valores transformaciones que entender, considerarse
que son describen el problema y pueden ser pertenecientes
referenciados y detallan su solucin. ledos de forma una misma entida
modificados La solucin es obtenida secuencial. al mismo nivel
durante la mediante mecanismos internos Un programa abstraccin
ejecucin del de control, sin especificar escrito de Modularidad:
programa, a las que exactamente cmo encontrarla acuerdo a los propiedad q
se suele asignar un (tan slo se le indica a la principios de permite subdivi
nombre o computadora que es lo que se programacin una aplicacin
identificador. desea obtener o que es lo que estructurada no partes m
Operaciones de se est buscando). No existen solamente pequeas
asignacin: son las asignaciones destructivas, y tendr una mejor Polimorfismo:
que permiten las variables son utilizadas con estructura sino comportamientos
asociar los datos o transparencia referencial tambin una diferentes,
valores a la posicin Aunque en la Programacin excelente asociados a objet
de la memoria o Declarativa cabe ms de un presentacin. distintos, pued
variable que los paradigma de programacin, compartir el mism
contiene. se ha optado por centrarla en nombre;
Repeticin: el estudio de la denominada llamarlos por e
normalmente un Programacin Lgica, el cual nombre se utiliza
programa iterativo est basado en el clculo de el comportamien
realiza su tarea proposiciones y sus relaciones correspondiente
ejecutando una y lgicas. objeto que se es
otra vez una La programacin declarativa es usando.
secuencia de pasos un estilo de programacin en
elementales el que el programador
especifica qu debe
computarse ms bien que
cmo deben realizarse los
cmputos.
Ventajas Su relativa Elegancia, claridad, sencillez, Reduccin de los Permite cre
simplicidad y potencia y concisin. costos de sistemas m
facilidad de Semnticas claras, simples y mantenimiento complejos
implementacin de matemticamente bien Reduccin del Agiliza el desarro
los compiladores e fundadas. esfuerzo en las de software
intrpretes Cercanos al nivel de abstraccin pruebas y
de las especificaciones depuracin Proporciona
formales/informales de los Los bloques de conceptos
La capacidad de problemas a resolver. cdigo son casi herramientas c
reutilizar el mismo Referencialmente transparentes: auto- las cuales
cdigo en Comportamiento matemtico explicativos, lo modela
diferentes lugares adecuado que permite que reduce y representa
en el programa sin razonar sobre los programas. facilita la mundo real t
copiarlo. Soportan tcnicas muy documentacin. fielmente como s
Una forma fcil avanzadas de desarrollo, Se incrementa el posible.
seguir la pista de mantenimiento y validacin rendimiento de Fomenta
flujo del programa. de programas. los reutilizacin
La capacidad de ser Altas dosis de paralelismo programadores extensin d
muy modular o implcito. cdigo.
estructurado. Aplicaciones variadas y de gran
Necesita menos inters.
memoria Son fiables, elegantes y
solamente. expresivos.
Desventaj Los datos son El principal obstculo del El principal Complejidad pa
as expuestos a la paradigma declarativo es el inconveniente de adaptarse
totalidad del descubrimiento del algoritmo este mtodo de Mayor cantidad
programa, as que bsico para resolver programacin es cdigo
no hay seguridad problemas. Por esta razn, los que se obtiene
para los datos. lenguajes declarativos tienden un nico bloque
Dificultad para a ser de propsito especfico, de programa,
relacionarse con los diseados para usarse en que cuando se
objetos del mundo aplicaciones particulares. hace demasiado
real. Otra desventaja de la grande puede
Difcil crear nuevos programacin declarativa est resultar
tipos de datos relacionada con la eficiencia. problemtico el
reduce la manejo de su
extensibilidad. cdigo fuente
Se da importancia a
la operacin de
datos en lugar de
los datos mismos

También podría gustarte