Está en la página 1de 19

Unidad 1 Conceptos fundamentales programación

lógica y funcional
INTRODUCCIÓN
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 implementació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 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.
A continuación se muestra un mapa conceptual donde se presenta una sisntesis sobre los estilos de
programacion.

Características del estilo


El buen estilo, al tratarse de algo subjetivo, es difícil de categorizar concretamente; con todo, existen
un número de características generales. Con el advenimiento de software que da formato al código
fuente de forma automática, el foco en cómo éste debe de ser escrito debe evolucionar de forma
más amplia a la elección de nombres, lógica y otras técnicas. Desde un punto de vista práctico, el
uso de un computador para dar formato al código fuente ahorra tiempo, y es posible forzar el uso
de estándares a nivel de una compañía completa sin debates religiosos.

Nombres de variable apropiadas

Una piedra clave para un buen estilo es la elección apropiada de nombres de variable. Variables
pobremente nombradas dificultan la lectura del código fuente y su comprensión.

Como ejemplo, considérese el siguiente extracto de pseudocódigo:

get a b c

if a < 24 and b < 60 and c < 60

return true

else

return false

Debido a la elección de nombres de variable, es difícil darse cuenta de la función del código.
Compárese ahora con la siguiente versión:

get horas minutos segundos

if horas < 24 and minutos < 60 and segundos < 60

return true

else

return false

La intención el código es ahora más sencilla de discernir, "dado una hora en 24 horas, se
devolverá true si es válida y false si no".

Estilo de identación

Estilo de indentación, en lenguajes de programación que usan llaves para identar o delimitar
bloques lógicos de código, como por ejemplo C, es también un punto clave el buen estilo. Usando
un estilo lógico y consistente hace el código de uno más legible. Compárese:

if(horas < 24 && minutos < 60 && segundos < 60){

return true;

}else{

return false;

o bien:
if(horas < 24 && minutos < 60 && segundos < 60)

return true;

else

return false;

con algo como:

if(horas<24&&minutos<60&&segundos<60){return true;} else{return false;}

Los primeros dos ejemplos son mucho más fáciles de leer porque están bien indentados, y los bloques
lógicos de código se agrupan y se representan juntos de forma más clara.

Valores booleanos en estructuras de decisión

Algunos programadores piensan que las estructuras de decisión como las anteriores, donde el
resultado de la decisión es meramente una computación de un valor booleano, son demasiado
prolijos e incluso propensos al error. Prefieren hacer la decisión en la computación por sí mismo,
como esto:

return horas < 12 && minutos < 60 && segundos < 60;

La diferencia es, con frecuencia, puramente estilística y sintáctica, ya que los compiladores
modernos producirán código objeto idéntico en las dos formas.

Bucles y estructuras de control

El uso de estructuras de control lógicas para bucles también es parte de un buen estilo de
programación. Ayuda a alguien que esté leyendo el código a entender la secuencia de ejecución
(en programación imperativa). Por ejemplo, el siguiente pseudocódigo:

cuenta = 0

while cuenta < 5 print cuenta * 2


cuenta = cuenta + 1

endwhile

El extracto anterior cumple con las dos recomendaciones de estilo anteriores, pero el siguiente uso
de la construcción for hace el código mucho más fácil de leer:

for cuenta = 0, cuenta < 5,

cuenta=cuenta+1 print cuenta * 2

En muchos lenguajes, el patrón frecuentemente usado "por cada elemento en un rango" puede
ser acortado a:

for cuenta = 0 to 5

print cuenta * 2

Espaciado
Los lenguajes de formato libre ignoran frecuentemente los espacios en blanco. El buen uso del
espaciado en la disposición del código de uno es, por tanto, considerado un buen estilo de
programación.

Compárese el siguiente extracto de código C:

int cuenta;

for(cuenta=0;cuenta<10;cuenta++){printf("%d",cuenta*cuenta+cuenta);}

con:

int cuenta;

for (cuenta = 0; cuenta < 10; cuenta++)

printf("%d", cuenta * cuenta + cuenta);

En los lenguajes de programación de la familia C se recomienda también evitar el uso de


caracteres tabulador en medio de una línea, ya que diferentes editores de textos muestran su
anchura de forma diferente.

1.2.- Evaluación de Expresiones

¿Qué son las expresiones?

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++
ORDEN DE LA EVALUACIÓN DE LOS OPERADORES.

El orden en que se evalúan los operandos viene dado por unas reglas:
Reglas de procedencia
Reglas de asociatividad
Uso de paréntesis
EVALUACIÓN DE EXPRESIONES

Toda expresión regresa un valor. Si hay más de un operador, se evalúan primero operadores mayor
precedencia, en caso de empate, se aplica regla asociatividad. Para evaluar una expresión no
hay que hacer nada del otro mundo, pues es bien sencillo. Sólo hay que saber sumar, restar, si un
número es mayor que otro.

Hay tres reglas de prioridad a seguir para evaluar una expresión:

 Primero, los paréntesis (si tiene)


 Después, seguir el orden de prioridad de operadores
 Por último, si aparecen dos o más operadores iguales, se evalúan de izquierda a
derecha.
Las expresiones son secuencias de constantes y/o variables separadas por operadores
válidos.

Se puede construir una expresión válida por medio de :

1. Una sola constante o variable, la cual puede estar precedida por un signo + ó – .
2. Una secuencia de términos (constantes, variables, funciones) separados por operadores.

Además debe considerarse que: Toda variable utilizada en una expresión debe tener un valor

almacenado para que la expresión, al ser evaluada, dé como resultado un valor.

Cualquier constante o variable puede ser reemplazada por una llamada a una función.

Como en las expresiones matemáticas, una expresión en Pascal se evalúa de acuerdo a la


precedencia de operadores

JERARQUÍA DE OPERADORES: El orden general de evaluación de los operadores de una expresión


va de izquierda a derecha, con la excepción de las asignaciones que lo hacen de derecha a
izquierda.

Podemos seguir las siguientes tres reglas de evaluación de expresiones:

(Regla 1) En todas las expresiones se evalúan primero las expresiones de los paréntesis más anidados
(interiores unos a otros); y éstos modifican la prioridad según la cantidad de éstos, los cuales tienen
que estar balanceados (el mismo número de paréntesis que abren debe ser igual al número de los
paréntesis que cierran).

(Regla 2) Todas las expresiones se evalúan tomando en cuenta la jerarquía de los operadores.

(Regla 3) Todas las expresiones se evalúan de izquierda a derecha. Tabla de evaluación de C++
Tabla de evaluación de Java

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

Un problema complejo se puede dividir en pequeños subproblemas más sencillos. Estos


subproblemas se conocen como “Módulos” y su complementación en un lenguaje se llama
subprograma (procedimientos y funciones).

Un subprograma realiza las mismas acciones que un programa, sin embargo, un


subprograma lo utiliza solamente un programa para un propósito específico.

Un subprograma recibe datos de un programa y le devuelve resultados (el programa “llama” o


“invoca” al subprograma, este ejecuta una tarea específica y devuelve el “control” al programa
que lo llamo).

Función: Una función en matemáticas, es una operación que toma un o más valores (argumentos)
y devuelve un resultado (valor de la función para los argumentos dados). Por ejemplo:
F(X) = X / (1+X2)

Donde:

X …………. Es el argumento (también conocido como parámetro formal)

Definición de funciones: Una definición de función se presenta de la siguiente manera:

Función nombre_funcion(p1, p2, …, pn)

Inicio

Bloque de instrucciones

Fin

Donde:

Función…………… Es la palabra clave que nos indica una definición de función.

Nombre función…… Es el identificador con el cual se reconoce a la función en el cuerpo del


algoritmo principal.

p1,p2,…,pn ……… Es el grupo de parámetros que define a la función.

Llamado a una función

Cuando definimos una función solo le indicamos al algoritmo que esta función existe, pero una
definición de función no implica la realización de las instrucciones que la constituyen. Para hacer
uso de una función, el algoritmo principal la debe llamar. Por ejemplo:

Función F(X)

Inicio

F = X /(1 + X^2)

Fin

Inicio

Imprimir “Este es el algoritmo principal”

Leer N

R = F(N) llamado de la función

Imprimir “El resultado de la función es:”,R

Fin
1.4.- Disciplina de Tipos

“Los tipos se infieren, es decir se comprueban, de forma estática, en tiempo de


compilación.”

En los lenguajes de programación con disciplina de tipos, cada tipo representa una colección de
valores o datos similares. El conocer los tipos de las funciones ayuda a documentar los programas y
evitar errores en tiempo de ejecución.

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 lenguaje tiene disciplina de tipos si los errores de tipos se detectan siempre ⇒ es necesario
determinar los tipos de todos los operandos, ya sea en tiempo de compilación o de ejecución.
 Pascal
Cercano a tener disciplina de tipos pero no realiza comprobación de tipos en los registros variantes
(incluso puede omitirse la etiqueta discriminatoria en dichos registros)

 Ada
Resuelve el problema de los registros variantes realizando comprobación dinámica de tipos (sólo en
este caso) Tiene una función de biblioteca que permite extraer un valor de una variable de cualquier
tipo (como una cadena de bits) y usarlo como un tipo diferente (no es una conversión de tipos) ⇒ se
trata de una suspensión temporal de la comprobación de tipos
 C
No tiene disciplina de tipos por:

− No se realiza comprobación de tipos sobre las uniones

− Permite funciones con parámetros sobre los que no se realiza comprobación de tipos

 Java
Tiene disciplina de tipos (no hay uniones)

 ML y Haskell
• Poseen disciplina de tipos

Los tipos de los parámetros de las funciones (y de estas mismas) se conocen en tiempo de compilación
(ya sea por declaración del usuario o por inferencia de tipos)Haskell y otros lenguajes funcionales
utilizan el sistema de tipos de Milner, que tiene dos características fundamentales:

 Disciplina estática de tipos: Los programas bien tipados se pueden conocer 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.
 Polimorfismo: Permite que una misma función se pueda aplicar a parámetros de diferentes
tipos, dependiendo del contexto en el que la función se utilice.

DIFERENTES TIPOS DE PARADIGMAS DE PROGRAMACIÓN


Un paradigma de programación es una propuesta tecnológica que es adoptada por un grupo 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.
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 30s 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.
1.5. Tipos de datos
Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un
simple carácter, tal como `b’, un valor entero tal como 35. El tipo de dato
determina la naturaleza del conjunto de valores que puede tomar una
variable.
Numéricos
Simples Lógicos
Alfanuméricos (string)
Tipos de datos Arreglos (Vectores, Matrices)
Estructurados Registros (Def. por el Archivos usuario) Apuntadores

Tipos de Datos Simples


Datos Numéricos: Permiten representar valores escalares de forma
numérica, esto incluye a los números enteros y los reales. Este tipo
de datos permiten realizar operaciones aritméticas comunes.
Datos Lógicos: Son aquellos que solo pueden tener dos valores
(cierto o falso) ya que representan el resultado de una
comparación entre otros datos (numéricos o alfanuméricos).
Datos Alfanuméricos (String): Es una secuencia de caracteres
alfanuméricos que permiten representar valores identificables de
forma descriptiva, esto incluye nombres de personas, direcciones,
etc. Es posible representar números como alfanuméricos, pero estos
pierden su propiedad matemática, es decir no es posible hacer
operaciones con ellos. Este tipo de datos se representan
encerrados entre comillas

 En Haskell nos encontramos con diferentes tipos simples como:


Int
Integer
Char
Bool

Lógicamente podemos construir listas, tuplas y funciones con esos tipos de


datos. Otro tipo que tenemos presente en Haskell es el tipo polimórfico. Así
podemos construir estructuras y funciones polimórficas.
Dentro de las características de los tipos de Haskell podemos deducir que
cada expresión tiene un único tipo principal y que ese tipo principal se
puede deducir automáticamente. Además, Haskell incorpora las
funciones sobrecargadas que se pueden aplicar sobre varios tipos pero
no sobre todos los tipos. Para ello se dispone de una jerarquía de clases
de tipos con operadores y funciones sobrecargadas como:
Num: Tipos numéricos.
Eq: Tipos que se pueden comparar.
Ord: Tipos que se pueden ordenar.
En la siguiente figura podemos encontrar un diagrama sobre la jerarquía
de clases:
RESUMEN

El manejo de estándares y recomendaciones de programación facilitaran al programador la


documentación y seguimiento de sus proyectos aún con el paso del tiempo.

Mejorará el mantenimiento del software y permitirá que el código pueda ser leído por cualquier
persona de la empresa que conozca los estándares de codificación. Es necesario indicar que las
recomendaciones son exactamente mejores.

Apreciaciones de la experiencia de trabajo que pueden tomarse y adaptarse a las necesidades de


los nuevos paradigmas de la programación.

También podría gustarte