Está en la página 1de 8

Programación Lógica y Funcional

UNIDAD 1: CONCEPTOS FUNDAMENTALES


TEMARIO

1.1. Estilos de programación.


1.2. Evaluación de expresiones.
1.3. Definición de funciones.
1.4. Disciplina de tipos.
1.5. Tipos de datos

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 más 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 línea para las llaves,
e identificar el código debajo de ellas.

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

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

1.2 EVALUACIÓN DE EXPRESIONES


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.

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

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.

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

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

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 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 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 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
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.
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 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, 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
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.
 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 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.

TAREA: MAPA CONCEPTUAL


http://karlaprogramacionfuncional.blogspot.mx/2014/02/unidad-1-conceptos-
fundamentales.html

También podría gustarte