miércoles, 12 de febrero de 2014

Unidad 1

PROGRAMACIÓN LOGICA Y FUNCIÓNAL

La Programación Lógica y Funcional, es una asignatura que requiere tener conocimientos esenciales acerca de los lenguajes lógicos y funcionales de la inteligencia artificial, incluyendo la metodología y los aspectos relativos a la codificación, con el fin de ampliar el conocimiento de tecnologías alternativas para el desarrollo de sistemas automatizados y la implemetación de agentes inteligentes. 



1.1.- Estilos de Programación

Estilo de programación (también llamado estándares de código o convención de código) es un término que describe convenciones para escribir código fuente en ciertos lenguajes de programación.
  • El estilo de programación es frecuentemente dependiente del lenguaje de programación que se haya elegido para escribir. Por ejemplo el estilo del lenguaje de programación C variará con respecto al del lenguaje BASIC.
  • Estilo K&R es el mas utilizado en el lenguaje C y PHP, el estilo fue llamado de esta forma porque fue usado por Kernighan y Ritchies en su libro The C Programming Lenguage.
  • Estilo Allman fue definido por Eric Allman, se trata de crear una nueva lineas para las llaves, e identar el códogo debajo de ellas.
  • Estilo BSD KNF tambien conocido como estilo Kernel Normal From, es la manera más usada para el codigo de la distribucción del software del sistema operativo de Berkeley.
  • Estilo Whitesmiths tambien llamado estilo wishart, se coloca las llaves asociadas con la instrucciones de control indentada.
  • Estilo GNU este coloca una llave sobre la linea las llaves son identadas por 2 espacios y el codigo que contiene identada por 2 espacios adicionales.
1.2.- Evaluación de Expresiónes

Son el método fundamental que tiene el programador de expresar computaciones, Las expresiones están compuestas de operadores, operandos, paréntesis y llamadas a funciones. Los operadores pueden ser:
  • Unarios: Cuando tan solo tienen un operando. Son operadores prefijos.
  • Binarios: 2 Operandos. Son operadores infijos.
  • Ternarios: 3 operandos.
  • Operadores posfijos en C : a++

Expresiones condicionales en C/C++
En el lenguaje C/C++ si e1 y e2 son dos expresiones del un mismo tipo T (T es uno de los tipos enteros,
enumerados, caracteres, o flotantes), y b es una expresión entera o lógica, entonces podemos escribir la
expresión:
b ? e1 : e2
Esta expresión tiene tipo T. Si b no de tipo bool sino algún tipo entero, entonces el valor 0 se equipara a
false y cualquier otro valor se equipara a true.

1.3.- Definición de Funciónes

El concepto de función tiene su origen en el término latino functĭo. La palabra puede ser utilizada en diversos ámbitos y con distintos significados, funcion matematica o simplemente funcion, es sin duda, el mas importante y utilizado en matematicas y en las demas ramas de la ciencia.
En análisis matemático, el concepto general de funciónaplicación o mapeo se refiere en a una regla que asigna a cada elemento de un primer conjunto un único elemento de un segundo conjunto (correspondencia matemática).


1.4.- Disiplina de Tipos

DISCIPLINA: Es la coordinación de actitudes con las cuales se instruye para desarrollar habilidades , o para seguir un determinado código de conducta u "orden". Un ejemplo es la enseñanza de una materia, ciencia o técnica, especialmente la que se enseña en un centro (Docente – asignatura).
En los lenguajes de programacion con disiplina de tipos, cada tipo representa una coleccion de valores (datos) similares. una funcion cuyo tipo  sea A1 -> ... An -> espera n parámetros con tipos A1, ... An y devuelve un resultado de tipo R. El conocer los tipos de las funciones ayuda a documentar los programas y a evitar errores en tiempo de ejecucion. 
Disiplina estática de tipos: los programas bien tipados se pueden reconocer en tiempo de compilacion, un programa bien tipado se puede utilizar sin efectuar comprobaciones de tipo en tiempo de ejecucion. estando garantizado que no se produciran errores de tipo durante el computo.

1.5.- Tipos de Datos

los datos mas basicos para cualquier problema de programacion son los valores numericos y booleanos, como criterio general hay que tener en cuenta todos los tipos numericos existentes en Haskell, asi como el tipo de los booleanos, son ejemplares de la clase de tipos Eq, Ord, Read y Show, en particular, las operaciones de comparacion (==), (/=), (<), (>=) y (>) y se puden utilizar para comparar valores de cualquier tipo numerico, asi como valores booleanos. las funciones max y min tambien se pueden aplicar a valores de todos estos tipos.
Numeros enteros.

En Haskell existen dos tipos de numeros enteros: el tipo Int de los enteros de precision limitada, y el tipo Interger de los enteros de precision arbitraria.

-------------------------------------------------------------------------------------------------------------------------------

PARADIGMA DE PROGRAMACIÓN

Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.
Ejemplo: 
Probablemente el paradigma de programación que actualmente es el más usado a todos los niveles es la orientación a objeto. El nucleo central de este paradigma es la unión de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez con otras entidades "objeto". 

Tipos de paradigmas de programación

  • Programación imperativa 

La 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.
wikipediaLos 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; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).  Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos. 

  • Programación lógica 


La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional, 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 basada en restricciones, programas DSL (de dominio específico) e híbridos. La programación lógica gira en torno al concepto de predicado, o relación entre elementos.





  • Programación funcional 

Paradigma de ProgramacionEs 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 raices 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, La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse para desarrollar interfaces entre componentes de Software como módulos del núcleo también. 
Programacion
  • Programación orientada a objetos
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.



  • Programación con restricciones
Es un paradigma de la programación en informática, donde las relaciones entre las variables son expresadas en términos de restricciones (ecuaciones). Actualmente es usada como una tecnología de software para la descripción y resolución de problemas combinatorios particularmente difíciles, especialmente en las áreas de planificación y programación de tareas (calendarización). La programación con restricciones se relaciona mucho con la programación lógica y con la investigación operativa. De hecho cualquier programa lógico puede ser traducido en un programa con restricciones y viceversa. Muchas veces los programas lógicos son traducidos a programas con restricciones debido a que la solución es más eficiente que su contraparte.  La diferencia entre ambos radica principalmente en sus estilos y enfoques en el modelado del mundo. Para ciertos problemas es más natural (y por ende más simple) escribirlos como programas lógicos, mientras que en otros es más natural escribirlos como programas con restricciones. 
  • Programación orientada a componentes 
La programación orientada a componentes (que también es llamada basada en componentes) es una rama de la ingeniería del software, con énfasis en la descomposición de sistemas ya conformados en componentes funcionales o lógicos con interfaces bien definidas usadas para la comunicación entre componentes. 
Se considera que el nivel de abstracción de los componentes es más alto que el de los objetos y por lo tanto no comparten un estado y se comunican intercambiando mensajes que contienen datos.



**Tarea sobre los estilos de programación** 





2 comentarios: