Programacion Logica y Funcional Unidad 1

24
INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA Ingeniería en sistemas computacionales Materia: Programación Lógica y Funcional. Alumno: Carlos Fabián Gómez Pérez Fecha: 5 de febrero del 2015

Transcript of Programacion Logica y Funcional Unidad 1

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

Ingeniería en sistemas

computacionales

Materia: Programación Lógica y

Funcional.

Alumno: Carlos Fabián Gómez Pérez

Fecha: 5 de febrero del 2015

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

INDICE

1.1 ESTILOS DE PROGRAMACIÓN 3

1.2 EVALUACIÓN DE EXPRESIONES 5

1.3 DEFINICIÓN DE FUNCIONES

5

1.4 DISCIPLINA DE DATOS

7

1.5 TIPOS DE DATOS

8

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

Bibliografia 19

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

PROGRAMACIÓN

Se llama programación a la creación de un programa de

computadora, un conjunto concreto de instrucciones que una

computadora puede ejecutar. El programa se Escribe en un

lenguaje de programación, aunque también se pueda escribir

directamente en lenguaje de máquina.

1.1 ESTILOS DE PROGRAMACIÓN

PROGRAMAS Y ALGORITMOS

Un algoritmo es una secuencia no ambigua, finita y ordenada

de instrucciones que han de seguirse para resolver un

problema. Un programa normalmente implementa (traduce a un

lenguaje de programación concreto) un algoritmo.

Los programas suelen subdividirse en partes menores

(módulos), de modo que la complejidad algorítmica de cada una

de las partes sea menor que la del programa completo, lo cual

ayuda al desarrollo del programa.

COMPILACIÓN

La opción más común es compilar el programa, aunque también

puede ser ejecutado mediante un intérprete informático El

código fuente del programa se debe someter a un proceso de

transformación para convertirse en lenguaje máquina,

interpretable por el procesador.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

A este proceso se le llama compilación.

PARADIGMA DE PROGRAMACIÓN

Un paradigma es una forma de representar y manipular el

conocimiento. Representa un enfoque particular o filosofía

para la construcción del software. No es mejor uno que otro

sino que cada uno tiene ventajas y Desventajas. También hay

situaciones donde un paradigma resulta más apropiado que

otro.

Estilo de programación (también llamado estándares de código o convenciónde código) es un término que describe convenciones para escribir códigofuente en ciertos lenguajes de programación.

El estilo de programación es frecuentemente dependiente del lenguaje deprogramación que se haya elegido para escribir. Por ejemplo el estilo dellenguaje de programación C variará con respecto al del lenguaje BASIC.

Estilo K&R es el más utilizado en el lenguaje C y PHP, el estilo fuellamado de esta forma porque fue usado por Kernighan y Ritchies en sulibro The C Programming Lenguage.

Estilo Allman fue definido por Eric Allman, se trata de crear una nuevalínea para las llaves, e identificar  el código debajo de ellas.

Estilo BSD KNF también conocido como estilo Kernel Normal From, es lamanera más usada para el código de la distribución del software delsistema operativo de Berkeley.

Estilo Whitesmiths también llamado estilo wishart, se coloca las llavesasociadas con la instrucciones de control.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

1.2 EVALUACIÓN DE EXPRESIONES

Es una subrutina o subprograma (también llamada

procedimiento, función o rutina), como idea general, se

presenta como un sub-algoritmo que forma parte del algoritmo

principal, el cual permite resolver una tarea específica.

Una expresión es una combinación de operandos y operadores.

La evaluación de una expresión consiste en reducirla, esto

es, realizar todas las operaciones contenidas en ella para

obtener un valor final.

Para evaluar una expresión es necesario conocer la prioridad

de los operadores, con lo cual se puede determinar cuál

operación se va a realizar antes que las demás.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

Una expresión entre paréntesis se evalúa primero que las

demás. Si hay paréntesis se evalúa primero la expresión

contenida en los paréntesis más internos.

1.3 DEFINICIÓN DE FUNCIONES

En programación, una función es una sección de un programa

que calcula un valor de manera independiente al resto del

programa.

Una función tiene tres componentes importantes:

Los parámetros, que son los valores que recibe la función

como entrada;

El código de la función, que son las operaciones que hace la

función; y

El resultado (o valor de retorno), que es el valor final que

entrega la función.

En esencia, una función es un mini-programa. Sus tres

componentes son análogos a la entrada, el proceso y la salida

de un programa.

Las declaraciones de funciones generalmente son especificadas

por:

Un nombre único en el ámbito: Nombre de la función con el que

se identifica y se distingue de otras. No podrá haber otra

función ni procedimiento con ese nombre (salvo sobrecarga o

polimorfismo en programación orientada a objetos).

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

Un tipo de dato de retorno: tipo de dato del valor que la

función devolverá al terminar su ejecución.

Una lista de parámetros: Especificación del conjunto de

argumentos (pueden ser cero, uno o más) que la función debe

recibir para realizar su tarea.

El código u órdenes de procesamiento: conjunto de órdenes y

sentencias que debe ejecutar la función.

Las funciones se crearon para evitar tener que repetir

constantemente fragmentos de código. Una función podría

considerarse como una variable que encierra código dentro de

sí. Por lo tanto cuando accedemos a dicha variable (la

función) en realidad lo que estamos es diciendo al programa

que ejecute un determinado código predefinido anteriormente.

Todos los lenguajes de programación tienen algunos elementos

de formación primitivos para la descripción de los datos y de

los procesos o transformaciones aplicadas a estos datos (tal

como la suma de dos números o la selección de un elemento que

forma parte de una colección). Estos elementos primitivos son

definidos por reglas sintácticas y semánticas que describen

su estructura y significado respectivamente.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

1.4 DISCIPLINA DE DATOS

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 programación con disciplina de tipos,

cada tipo representa una colección de valores (datos)

similares. Una función 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

ejecución.

Disciplina estática de tipos: Los programas bien tipados se

pueden reconocer en tiempo de compilación, un programa bien

tipado se puede utilizar sin efectuar comprobaciones de tipo

en tiempo de ejecución. Estando garantizado que no se

producirán errores de tipo durante el cómputo.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

1.5 TIPOS DE DATOS

Tipos de Datos En lenguajes de programación un tipo de dato

es un atributo de una parte de los datos que indica al

ordenador (y/o al programador) algo sobre la clase de datos

sobre los que se va a procesar.

Los Tipos de Datos En un sentido amplio, un tipo de datos

define un conjunto de valores y las operaciones sobre estos

valores. Casi todos los lenguajes de programación

explícitamente incluyen la notación del tipo de datos, aunque

lenguajes diferentes pueden usar terminología diferente. La

mayor parte de los lenguajes de programación permiten al

programador definir tipos de datos adicionales, normalmente

combinando múltiples elementos de otros tipos y definiendo

las operaciones del nuevo tipo de dato. Por ejemplo, un

programador puede crear un nuevo tipo de dato llamado

"Persona" que especifica que el dato interpretado como

Persona incluirá un nombre y una fecha de nacimiento.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

DIFERENTES TIPOS DE PARADIGMAS 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.

Por 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 núcleo 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".

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

Tradicionalmente datos y procesamiento se han separado en

áreas diferente del diseño y la implementación de software.

Esto provocó que grandes desarrollos tuvieran problemas de

fiabilidad, mantenimiento, adaptación a los cambios y

escalabilidad. Con la orientación a objetos y características

como el encapsulado, polimorfismo o la herencia se permitió

un avance significativo en el desarrollo de software a

cualquier escala de producción.

La orientación a objeto parece estar ligado en sus orígenes

con lenguajes como Lisp y Simula aunque el primero que acuño

el título de programación orientada a objetos fue Smaltalk

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.

La implementación de hardware de la mayoría de

computadores es imperativa; prácticamente todo el hardware de

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

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; 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.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

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.

La 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 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. 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.

Programación funcional

En ciencias de la computación, la 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

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

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.

Los lenguajes de programación funcional,

especialmente los que son puramente funcionales, han sido

enfatizados en el ambiente académico principalmente y no

tanto en el desarrollo de software comercial. Sin embargo,

lenguajes de programación importantes tales como Scheme,

Erlang, Objective Caml y Haskel, han sido utilizados en

aplicaciones comerciales e industriales por muchas

organizaciones. La programación funcional también es

utilizada en la industria a través de lenguajes de dominio

específico como R (estadística), Mathematica (matemáticas

simbólicas), J y K (análisis financiero), F# en Microsoft.NET

y XSLT (XML). Lenguajes de uso específico usados comúnmente

como SQL y Lex/Yacc, utilizan algunos elementos de

programación funcional, especialmente al procesar valores

mutables. Las hojas de cálculo también pueden ser

consideradas lenguajes de programación funcional.

La 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

Perl, por ejemplo, que es un lenguaje de programación

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

imperativo, existe un libro que describe cómo aplicar

conceptos de programación funcional. JavaScript, uno de los

lenguajes más ampliamente utilizados en la actualidad,

también incorpora capacidades de programación funcional.

Programación declarativa

La Programación Declarativa, es un paradigma de programación

que está basado en el desarrollo de programas especificando o

"declarando" un conjunto de condiciones, proposiciones,

afirmaciones, restricciones, ecuaciones o transformaciones

que describen el problema y detallan su solución. La solución

es obtenida mediante mecanismos internos de control, sin

especificar exactamente cómo encontrarla (tan sólo se le

indica a la computadora que es lo que se desea obtener o que

es lo que se está buscando). No existen asignaciones

destructivas, y las variables son utilizadas con

Transparencia referencial

Programación estructurada

La programación estructurada es una forma de escribir

programas de ordenador (programación de computadora) de

manera clara. Para ello utiliza únicamente tres estructuras:

secuencia, selección e iteración; siendo innecesario el uso

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

de la instrucción o instrucciones de transferencia

incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples

RETURN).

Programación dirigida por eventos

La programación dirigida por eventos es un paradigma de

programación en el que tanto la estructura como la ejecución

de los programas van determinados por los sucesos que ocurran

en el sistema, definidos por el usuario o que ellos mismos

provoquen.

Para entender la programación dirigida por eventos, podemos

oponerla a lo que no es: mientras en la programación

secuencial (o estructurada) es el programador el que define

cuál va a ser el flujo del programa, en la programación

dirigida por eventos será el propio usuario —o lo que sea que

esté accionando el programa— el que dirija el flujo del

programa. Aunque en la programación secuencial puede haber

intervención de un agente externo al programa, estas

intervenciones ocurrirán cuando el programador lo haya

determinado, y no en cualquier momento como puede ser en el

caso de la programación dirigida por eventos.

El creador de un programa dirigido por eventos debe definir

los eventos que manejarán su programa y las acciones que se

realizarán al producirse cada uno de ellos, lo que se conoce

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

como el administrador de evento. Los eventos soportados

estarán determinados por el lenguaje de programación

utilizado, por el sistema operativo e incluso por eventos

creados por el mismo programador.

En la programación dirigida por eventos, al comenzar la

ejecución del programa se llevarán a cabo las

inicializaciones y demás código inicial y a continuación el

programa quedará bloqueado hasta que se produzca algún

evento. Cuando alguno de los eventos esperados por el

programa tenga lugar, el programa pasará a ejecutar el código

del correspondiente administrador de evento. Por ejemplo, si

el evento consiste en que el usuario ha hecho click en el

botón de play de un reproductor de películas, se ejecutará el

código del administrador de evento, que será el que haga que

la película se muestre por pantalla.

Un ejemplo claro lo tenemos en los sistemas de programación

Léxico y Visual Basic, en los que a cada elemento del

programa (objetos, controles, etcétera) se le asignan una

serie de eventos que generará dicho elemento, como la

pulsación de un botón del ratón sobre él o el redibujado del

control.

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.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

En los primeros tiempos de la computación, los programas eran

secuenciales, también llamados Batch. Un programa secuencial

arranca, lee parámetros de entrada, procesa estos parámetros,

y produce un resultado, todo de manera lineal y sin

intervención del usuario mientras se ejecuta.

Con la aparición y popularización de los pc, el software

empezó a ser demandado para usos alejados de los clásicos

académicos y empresariales para los cuales era necesitado

hasta entonces, y quedó patente que el paradigma clásico de

programación no podía responder a las nuevas necesidades de

interacción con el usuario que surgieron a raíz de este

hecho...

Programación modular

La programación modular es un paradigma de programación que

consiste en dividir un programa en módulos o subprogramas con

el fin de hacerlo más legible y manejable.

Se presenta históricamente como una evolución de la

programación estructurada para solucionar problemas de

programación más grandes y complejos de lo que ésta puede

resolver.

Al aplicar la programación modular, un problema complejo debe

ser dividido en varios subproblemas más simples, y estos a su

vez en otros subproblemas más simples. Esto debe hacerse

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

hasta obtener subproblemas lo suficientemente simples como

para poder ser resueltos fácilmente con algún lenguaje de

programación. Ésta técnica se llama refinamiento sucesivo,

divide y vencerás ó análisis descendente (Top-Down).

Un módulo es cada una de las partes de un programa

que resuelve uno de los subproblemas en que se divide el

problema complejo original. Cada uno de estos módulos tiene

una tarea bien definida y algunos necesitan de otros para

poder operar. En caso de que un módulo necesite de otro,

puede comunicarse con éste mediante una interfaz de

comunicación que también debe estar bien definida.

Si bien un módulo puede entenderse como una parte

de un programa en cualquiera de sus formas y variados

contextos, en la práctica es común representarlos con

procedimientos y funciones. Adicionalmente, también pueden

considerarse módulos las librerías que pueden incluirse en un

programa o, en programación orientada a objetos, la

implementación de un tipo de dato abstracto.

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,

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

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

La 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).

Este paradigma representa uno de los desarrollos más

fascinantes en los lenguajes de programación desde 1990 y no

es sorprendente que recientemente haya sido identificada por

la ACM (Asociación de Maquinaria Computacional) como una

dirección estratégica en la investigación en computación.

Se trata de un paradigma de programación basado en la

especificación de un conjunto de restricciones, las cuales

deben ser satisfechas por cualquier solución del problema

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

planteado, en lugar de especificar los pasos para obtener

dicha solució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.

El enfoque de la programación con restricciones se basa

principalmente en buscar un estado en el cual una gran

cantidad de restricciones sean satisfechas simultáneamente.

Un problema se define típicamente como un estado de la

realidad en el cual existe un número de variables con valor

desconocido. Un programa basado en restricciones busca dichos

valores para todas las variables.

Algunos dominios de aplicación de este paradigma son:

Dominios booleanos, donde solo existen

restricciones del tipo verdadero/falso.

Dominios en variables enteras y racionales.

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

Dominios lineales, donde sólo se describen y

analizan funciones lineales.

Dominios finitos, donde las restricciones son

definidas en conjuntos finitos.

Dominios mixtos, los cuales involucran dos o más de

los anteriores.

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.

Programación Orientada a Aspectos

La Programación Orientada a Aspectos (POA) es un paradigma de

programación relativamente reciente cuya intención es

permitir una adecuada modularización de las aplicaciones y

INSTITUTO TECNOLÓGICO SUPERIOR DE CIUDAD ACUÑA

4

posibilitar una mejor separación de incumbencias. Gracias a

la POA se pueden encapsular los diferentes conceptos que

componen una aplicación en entidades bien definidas,

eliminando las dependencias entre cada uno de los módulos. De

esta forma se consigue razonar mejor sobre los conceptos, se

elimina la dispersión del código y las implementaciones

resultan más comprensibles, adaptables y reusables. Varias

tecnologías con nombres diferentes se encaminan a la

consecución de los mismos objetivos y así, el término POA es

usado para referirse a varias tecnologías relacionadas como

los métodos adaptativos, los filtros de composición, la

programación orientada a sujetos o la separación

multidimensional de competencias.

Bibliografia

https://prezi.com/9rk1gkcvmtxv/unidad-uno-conceptos-

fundamentales/

http://karlaprogramacionfuncional.blogspot.mx/2014/02/unidad-

1-conceptos-fundamentales.html