Entradas populares

sábado, 14 de septiembre de 2013

PARADIGMAS DE PROGRAMACIÓN EN LOGICA

Tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación con restricciones, programas DSL (de dominio específico) e híbridos. 

CAMPOS DE APLICACIÓN
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas: Sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.
}Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente.
}Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.
}Etc.

FUNDAMENTOS
    La mayoría de los lenguajes de programación lógica se basan en la teoría lógica de primer orden, aunque también incorporan algunos comportamientos de orden superior como la lógica difusa. En este sentido, destacan los lenguajes funcionales, ya que se basan en el cálculo lambda, que es la única teoría lógica de orden superior que es demostradamente computable (hasta el momento).

COMO FUNCIONAN (EJEMPLOS)
La programación lógica permite formalizar hechos del mundo real, por ejemplo:
}  las aves vuelan
}  los pingüinos no vuelan
}  "pichurri" es un ave
}  "sandokan" es un perro
}  "alegría" es un ave
y también reglas o restricciones:
   una mascota vuela si es un ave y no es un pingüino
Ante dicho "programa" es posible establecer hipótesis que no son más que preguntas o incógnitas, por ejemplo:
   ¿ "pichurri" vuela ?
   ¿ qué mascotas vuelan ?....


LENGUAJES
}El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes. La más importante es la programación lógica con restricciones (véase artículo sobre programación con restricciones), que posibilita la resolución de ecuaciones lineales además de la demostración de hipótesis.

viernes, 2 de agosto de 2013

ANALISIS DE LOS PRINCIPALES PARADIGMAS


  • PROGRAMACIÓN IMPERATIVA: 
En contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.
La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; donde cada paso es una instrucción.

  • PROGRAMACIÓN LÓGICA:
 
Es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación con restricciones, programas DSL (de dominio específico) e híbridos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. La programación lógica gira en torno al concepto de predicado, o relación entre elementos.
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas: Sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.
  • Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente.
  • Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.
  • Etc.
La programación lógica también se utiliza en aplicaciones más "mundanas" pero de manera muy limitada, ya que la programación tradicional es más adecuada a tareas de propósito general.

  • PROGRAMACIÓN FUNCIONAL:

Es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos 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 y la noción de una "función" utilizada en la programación imperativa es que las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de cálculos realizados previamente. Por esta razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. Con 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 y predecir el comportamiento de un programa mucho más fácilmente, y esta es una de las principales motivaciones para utilizar la programación funcional.

  •   PROGRAMACIÓN ORIENTADO A OBJETOS:
(OOP según sus siglas en inglés). Es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos.
Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:
  • El estado está compuesto de datos o informaciones; serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
  • El comportamiento está definido por los métodos 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 análogo al de identificador de una variable o una constante).
Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos.

martes, 23 de julio de 2013

CLASIFICACIÓN DE LOS PARADIGMAS


ASI NACE UN PARADIGMA. . .
Un científico cerró cinco monos en una jaula grande, en cuyo centro ubicó una escalera y en la cima de esta
puso un montón de bananas.


       Cuando un mono subía la escalera para agarrar las bananas, el científico lanzaba un chorro de agua fría sobre los monos que quedaban en el suelo.
Después de algún tiempo, cuando un mono iba a subir la escalera, los restantes le propinaban una paliza.
Motivo por lo cual, pasado un tiempo, a pesar de la tentación de las bananas, ningún mono optaba por subir la escalera.
       Luego, el científico sustituyó uno de los monos y este, el primero que hizo fue subir la escalera, siendo rápidamente bajado a palos por los otros.
Después de algunas palizas, el nuevo integrante del grupo ya no subió más la escalera.
       Un segundo mono fue sustituido, y ocurrió lo mismo.
El primer sustituto participó con entusiasmo de la paliza al novato.
Un tercero fue cambiado, y se repitió el hecho.
El cuarto y, finalmente, el último de los veteranos fue sustituido.
       El científico quedó, entonces, con un grupo de cinco monos que, aun cuando nunca recibieron un baño del chorro de agua fría, continuaban golpeando a aquel que intentase llegar a las bananas.
       Si fuese posible preguntar a algunos de ellos ¿Por qué le pegaban a quien intentase subir la escalera?, con certeza la respuesta sería:

"No sé, aquí las cosas siempre se han hecho así..."

..Te suena conocido...?
Pero así; nació un paradigma...!!
Te preguntaste por qué; hacemos las cosas de una manera,
si quizás podemos hacerlas de otra?
Pues bien. . .
cada, una de nuestras actividades diarias,..
Está guiada por un paradigma...!

ü CLASIFICACIÓN DE PARADIGMAS SEGUN FLOYD
A tal diversidad de criterios, se suma el hecho que, para resolver un problema, inexorablemente el paradigma a usar, debe ser codificado en un lenguaje de programación compatible con él y capaz soportar los mismos conceptos del propio paradigma.
Esta compatibilidad hace confundir los conceptos de paradigma y lenguaje de programación, mezclando al propio paradigma con su herramienta de proceso. Al respecto, para que no caer en este error conviene destacar que un mismo paradigma puede ser soportado por más de un lenguaje.
En dicha confusión cayó, Floyd cuando clasificó los paradigmas, de acuerdo a la capacidad de expresión, en tres categorías:

·      PARADIGMAS QUE SOPORTAN PROGRAMACION DE BAJO NIVEL:
La actividad de estos paradigmas es poco racional, alejada de la forma de pensar del programador, porque operan de manera similar a la forma al hardware del ordenador, del modo como lo hacen físicamente los componentes internos del computador.
Basados en tal cualidad, podemos afirmar que en este nivel operan, los lenguajes de segunda generación, tales como versiones primarias del BASIC, FORTRAN o COBOL, los cuales trataban de emular al LENGUAJE ENSAMBLADOR, perteneciente a la primera generación, capaz de comandar directamente en las mismísimas entrañas de la máquina, accediendo a los componentes del hardware disponible.
En sus orígenes dichos lenguajes no soportaban algoritmos con procedimientos y funciones, variables locales, ni punteros, tampoco listas, pilas, colas o árboles con asignación dinámica de memoria, minimizando así el diseño directo de algoritmos básicos. Que había que trabajar arduamente.
·      PARADIGMAS QUE SOPORTAN DISEÑO DE ALGORITMOS:
A este grupo pertenecen los lenguajes de 3ra generación, que ya poseen capacidad para manejar procedimientos, funciones, variables locales y punteros para la asignación dinámica de memoria.
Aunque el lenguaje C pertenece, por derecho de origen, a esta categoría, actualmente todos los lenguajes de programación, soportan con solvencia el manejo del diseño algorítmico.
Por otra parte, C por su flexibilidad también puede acceder a las entrañas de la CPU, por lo que sería, según Floyd, un lenguaje de bajo nivel.
El propio entorno de trabajo del lenguaje, permite generar automáticamente todo el código del programa, puedes generar, usando Delphi o C++ Builder o Visual C++, o Visual Basic, programas completos para administrar toda una base de datos. Sin escribir por consola, ni una sola línea de código.
·      PARADIGMAS QUE SOPORTAN PROGRAMACION DE ALTO NIVEL:
Estos paradigmas recurren para su codificación a los lenguajes orientados a objetos, que tiene como pionero a PROLOG, el cuál a la fecha ya es historia superada frente a la potencia del entornos actuales de programación, tales como Delphi o C++ Builder o Visual C++, o Visual o Basic, o J++Builder o Visual J++.
Para Floyd las soluciones de programación de alto nivel, pasan por usar la lógica como método de programación, por usar de reglas de producción y la programación funcional.
Estas variantes de la programación tradicional estarían soportadas por lenguajes, como PROLOG, ML, LISP, o entornos de Ingeniería del Conocimiento como ART, KC o KEE. Especialmente usados en el ámbito académico y escasamente en la industria.

ü CLASES DE PARADIGMAS: SEGUN TIPO DE PROGRAMACIÓN
Dado que los paradigmas, además son colecciones de modelos conceptuales que definen procesos de diseño, destinados a determinar la estructura, la sintaxis y la semántica de programas. Estos, considerando tal aspecto, pueden asimilarse a los siguientes tipos:
§  PROGRAMACION BASADO EN REGLAS:
De aplicación en la ingeniería del conocimiento para desarrollar sistemas expertos, con núcleo de reglas de producción del tipo if then.
§  PROGRAMACIÓN LÓGICA:
Entorno de programación conversacional, deductivo, simbólico y no determinista apoyada en asertos y reglas lógicas.
§  PROGRAMACIÓN FUNCIONAL:
Entorno de programación interpretativo, funcional y aplicativo, de formato funcional.
§  PROGRAMACIÓN HEURÍSTICA:
Moldean los problemas para aplicar heurísticas según sistemas de visualización, búsqueda y métodos de solución. Pueden ser:
v Programación Paralela
v Programación Orientado a Objetos
v Programación Basado en Restricciones
v Programación Basado en Flujo de Datos


ü CLASIFICACIÓN DE PARADIGMAS SEGÙN AMBLER
Para clasificar cada paradigma, toma como parámetro su manera lograr la solución al problema, por lo tanto, de acuerdo al tipo de solución aplicada pueden existir las siguientes categorías:

      Solución        =>    Paradigma 

     PROCEDIMENTAL    =>   PROCEDIMENTAL

     DEMOSTRATIVA     =>   DEMOSTRATIVO

     DECLARATIVA      =>   DECLARATIVO

·      SOLUCIÓN PROCEDIMENTAL U OPERACIONAL
Describe las etapas necesarias para construir soluciones, señalando la forma de cómo obtenerlas. Se determina etapa a etapa el modo de construir la solución, describiendo cómo obtener un resultado a partir de un estado inicial.
En esta categoría se incluyen los lenguajes clásicos de la primera a tercera generación, incluyendo los orientados a objetos y los funcionales, que requieren desarrollar técnicas de depuración y verificación del funcionamiento del programa.
Los paradigmas procedimentales u operacionales, promueven secuencias computacionales, donde las variables que se relacionan con direcciones de memoria, pueden ser:
       MODIFICADAS: CON EFECTO DE LADO
Que actualiza iterando datos y direcciones de memoria de variables, registrando múltiples asignaciones hasta lograr el resultado. Sus tipos son:
       NO MODIFICADAS: SIN EFECTO DE LADO
Son aquellos que van creando continuamente nuevos datos.

2.  SOLUCIÓN DEMOSTRATIVA:
Plantea la solución describiendo ejemplos y promueve que el sistema generalice la solución de tales ejemplos para otros casos.
Bajo este entorno denominado también PARADIGMA por EJEMPLO, la solución a un problema se logra aplicando la PROGRAMACION por EJEMPLO o DEMOSTRATIVA, donde el programador no requiere especificar procedimentalmente cómo lograr la solución, sino que resuelve programas similares, generalizando soluciones, ya sea por medio de simulación o por inferencias.   

.
ü CLASES DE PARADIGMAS: POR EFECTO DE LADO
       PARADIGMA IMPERATIVO:
Procedimental con efecto de lado, representado por la arquitectura de Von Neumman.
Algoritmo + Estructura de datos = Programa
       PARADIGMA FUNCIONAL:
Procedimental sin efecto de lado, basado en el modelo matemático de composición de funciones.
Funciones + Estructura de datos = Programa
       PARADIGMA LOGICO:
Seudo declarativo, basado en conjuntos de hechos y reglas lógicas pre establecidas.
Lógica + Control de datos = Programa
       PARADIGMA ORIENTADO A OBJETO:
Procedimental con efecto de lado
       PARADIGMA HEURISTICO:
Basado en reglas de buena lógica.