Está en la página 1de 17

Conceptos Fundamentales.

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

1.2. Analizando diferentes de estilos de programación

1.2.1 Evaluación de expresiones.

Una expresión es una combinación de operadores y operandos de cuya evaluación se


obtiene un valor. Los operandos pueden ser nombres que denoten objetos variables o
constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u
otras expresiones más simples. La evaluación de una expresión da lugar a un valor de algún
tipo, una expresión se dice que es del tipo de su resultado. Ejemplos de expresiones:

a + 5*b
(a >= 0) and ((b+5) > 10)
a
-a * 2 + b
-b + sqrt(b**2 – 4*a*c)
length(s) > 0
Las expresiones se evalúan de acuerdo con la precedencia de los operadores. Ante una
secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de
escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando
paréntesis.

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

Algunos ejemplos de tipos de datos que existen en los lenguajes de programación son:

1.2.3 Disciplina tipos.

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

1.2.4 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.
Modelo de Programación Funcional.
2.1 Introducción al modelo de programación
funcional.

En programación funcional un programa es un conjunto de funciones matemáticas que convierten unas


entradas en unas salidas, sin ningún estado interno y ningún efecto lateral.

Las características principales del paradigma funcional son:

 Definiciones de funciones matemáticas puras, sin estado interno ni efectos


laterales
 Valores inmutables
 Uso profuso de la recursión en la definición de las funciones
 Uso de listas como estructuras de datos fundamentales
 Funciones como tipos de datos primitivos: expresiones lambda y funciones
de orden superior

2.1. El tipo de datos.


Los tipos básicos de datos, también llamados primitivos, muy a groso
modo, se pueden agrupar en 3: Los tipos de datos numéricos, los lógicos y
los de texto (o alfanuméricos).

Dentro del grupo de los tipos de datos numéricos, a su vez, destacan dos
tipos: los enteros y los reales.

Entre los tipos de datos de texto hay que mencionar dos: el tipo carácter y
el tipo cadena (cadena de caracteres, o string).
Puedes ver de forma más esquemática esta agrupación de tipos de datos.
Este esquema en realidad es mucho más extenso, ya que cada lenguaje
tiene multitud de tipos de datos, pero como se mencionó anteriormente,
ahora debes captar las nociones elementales de los tipos de datos, por
tanto, en principio, es preferible que te centres en unos pocos, los más
generales y comunes:
         Tipo de dato entero: Son los números naturales positivos y negativos,
más el cero. Se trata de un conjunto infinito de términos que en
matemáticas usualmente se denomina "Z", compuesto por los números
sin decimales. Cada término crece o decrece según para donde nos
desplacemos en una unidad, por ejemplo 12, 13, 14, 15 o -3, -4, -5, -6.
Son ejemplos 2, -4 y 0. En pseudocódigo se suele utilizar la palabra
reservada "entero" para este tipo de datos.
         Tipo de dato real: Son los que pueden tomar como valores a los
números racionales o irracionales. Este tipo de datos admite decimales.
En matemáticas se denomina conjunto "R" y es también un conjunto
infinito de términos. En este conjunto entre dos términos siempre
existen un número infinito de términos. Para éstos, en pseudocódigo, se
usa la palabra reservada "real".
         Tipo de dato lógico: Un dato lógico es aquel que sólo puede tomar
valor verdadero o valor falso, es decir que algo se cumpla o no. Un
ejemplo puede ser una puerta de paso, que puede estar abierta
(asociamos por ejemplo verdadero) o cerrada (falso en este caso por
oposición al convenio anterior). Para referenciar este tipo de datos en
pseudocódigo se usa la palabra reservada "lógico".
         Tipo de dato carácter: El conjunto de valores que representa este tipo
de datos es el formado por cualquier carácter que pueda representar el
ordenador. Normalmente se representan entre comillas, ya sean dobles
o simples (dependiendo del lenguaje). En pseudocódigo, para este tipo
de datos, se utiliza la palabra reservada "carácter".
         Tipo de datos cadena: Una cadena es una secuencia de caracteres y
se representa también normalmente entre comillas. Los espacios en
blanco dentro del entrecomillado también son caracteres que forman
parte de la cadena, por ejemplo "El gato" es una cadena de 7
caracteres. En pseudocódigo se usa la palabra reservada "cadena" para
este tipo de datos.

2.2. Funciones.
Un problema complejo se puede dividir en pequeños subproblemas mas
sencillos. Estos subproblemas se conocen como “Módulos” y su
complementacion 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 especifico.
Un subprograma recibe datos de un programa y le devuelve resultados
(el programa “llama” o “invoca” al subprograma, este ejecuta una tarea
especifica 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
mas valores (argumentos) y devuelve un resultado (valor de la función
para los argumentos dados). Por ejemplo:
F(X) = X / (1+X2)
Donde:
F ………….. Nombre de la función
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_funcion ….. 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

2.3. Intervalos.
Los intervalos son subconjuntos de R (ICR). Se dice que I es un intervalo si
y solo si es el conjunto de todos los números reales  que se comprenden
entre otros dos llamados extremos que se puede dar real o ideal.

2.- Tipos de intervalo:

-       Intervalo cerrado:      

  
-       Intervalo abierto:

-       Intervalo semiabierto por la derecha:


-       Intervalo semiabierto por la izquierda: 

2.4. Operadores.

 En programación declarativa sólo existen valores, no hay referencias.

 La distinción entre valores y referencias es fundamental, sin embargo, en


la programación imperativa.

2.5. Aplicaciones de las listas.


En Scheme todos los datos compuestos se construyen a partir de las
parejas. En concreto las listas se definen de una forma recursiva muy
elegante como secuencias de parejas. Esta característica se remonta al
origen del LISP en el que John McCarthy definió el concepto de S-
expression e introdujo la notación del "." para definir una pareja.
2.6. Árboles.

Datos importantes de los Árboles


Para comprender mejor que es un árbol comenzaremos explicando como está estructurado.
Nodos: Se le llama Nodo a cada elemento que contiene un Árbol.
Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del Árbol puede ser la Raíz.
Nodo Padre: Se utiliza este termino para llamar a todos aquellos nodos que tiene al menos un
hijo.
Nodo Hijo: Los hijos son todos aquellos nodos que tiene un padre.
Nodo Hermano: Los nodos hermanos son aquellos nodos que comparte a un mismo padre en
común dentro de la estructura.
Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los cuales siempre se encuentran
en los extremos de la estructura.
Nodo Rama: Estos son todos aquellos nodos que no son la raíz  y que ademas tiene al
menos un hijo.
 
Fig.
2: La imagen muestra de forma gráfica cuales son los nodos Raíz, Rama, Hoja.

Fig
.3: La siguiente imagen muestra de forma gráfica los nodos Padre, Hijo y Hermanos
Los arboles a demas de los nodos tiene otras propiedades importantes que son utilizadas en
diferente ámbitos los cuales son:
Nivel: Nos referimos como nivel a cada generación dentro del árbol. Por ejemplo, cuando a un
nodo hoja le agregamos un hijo, el nodo hoja pasa a ser un nodo rama pero a demas el árbol
crece una generación por lo que el Árbol tiene un nivel mas.Cada generación tiene un número
de Nivel distinto que las demas generaciones.

 Un árbol vacío tiene 0 niveles


 El nivel de la Raíz es 1
 El nivel de cada nodo se calculado contando cuantos nodos existen sobre el, hasta
llegar a la raíz + 1, y de forma inversa también se podría, contar cuantos nodos existes
desde la raíz hasta el nodo buscado + 1.

Altura: Le llamamos Altura al número máximo de niveles de un Árbol.


Fig
. 4: En la imagen se muestran los Niveles y la Altura de un Árbol.
La altura es calculado mediante recursividad tomando el nivel mas grande de los dos sub-
árboles de forma recursiva de la siguiente manera:
altura = max(altura(hijo1), altura(hijo2),altura(hijoN)) + 1
 
Peso: Conocemos como peso a el número de nodos que tiene un Árbol. Este factor es
importante por que nos da una idea del tamaño del árbol y el tamaño en memoria que nos
puede ocupar en tiempo de ejecución(Complejidad Espacial en análisis de algoritmos.)
Fig. 5: La
imagen nos muestra como se calcula el peso de un Árbol, el cual es la suma de todos sus
nodos, sin importar el orden en que sean contados.
El peso se puede calcular mediante cualquier tipo de recorrido el cual valla contando los nodo
a medida que avanza sobre la estructura. El peso es un árbol es igual a la suma del peso de
los sub-árboles hijos + 1
peso = peso(hijo1) + peso(hijo2) + peso(hijoN)+ 1
Nota: Los tipos de recorridos los veremos mas adelante.
 
Orden: El Orden de un árbol es el número máximo de hijos que puede tener un Nodo.

Fig. 6:
Imagen que nuestra dos Árboles con Orden = 2(Izquierda) y un segundo con Orden =
3(Derecha).
Notemos que un Árbol con Orden = 1 no tendría sentido ya que seria una estructura lineal. ya
que cada nodo solo podría tener un Hijo y tendríamos un Árbol como la Imagen de la Fig.1.
Este valor no lo calculamos, si no que ya lo debemos conocer cuando diseñamos nuestra
estructura, ya que si queremos calcular esto lo que obtendremos es el grado(hablamos de el
continuación).
Grado: El grado se refiere al número mayor de hijos que tiene alguno de los nodos del Árbol y
esta limitado por el Orden, ya que este indica el número máximo de hijos que puede tener un
nodo.

Fig. 7:
En la imagen podemos apreciar un Árbol con grado 2(Izquierda) y un otro con grado
3(Derecha).
El grado se calcula contando de forma recursiva el número de hijos de cada sub-árbol hijo y el
numero de hijos del nodo actual para tomar el mayor, esta operación se hace de forma
recursiva para recorrer todo el árbol.
grado = max(contarHijos(hijo1),contarHijos(hijo2), contarHijos(hijoN), contarHijos(this))
 
Sub-Árbol: Conocemos como Sub-Árbol a todo Árbol generado a partir de una sección
determinada del Árbol, Por lo que podemos decir que un Árbol es un nodo Raíz con N Sub-
Árboles.
F
ig. 8: En la imagen de puede apreciar que un Árbol esta compuesto por una seria de Sub-
Arboles los cual conforman toda la estructura.
Existen escenarios donde podemos sacar un Sub-Árboles del Árbol para procesarlo de forma
separada, de esta forma el Sub-Árboles pasa a ser un Árbol independiente, También podemos
eliminar Sub-Árboles completos, Agregarlos,entre otras operaciones.

 
Árbol n-ario
los arboles n-arios son aquellos arboles donde el número máximo de hijos por nodo es
de N, en la figura 7 podemos apreciar dos árboles con grado 2 y grado 3, estos dos arboles
también los podemos definir como Árbol n-ario con n = 2 y n=3 respectivamente.
 

Árboles binarios
Esta estructura se caracteriza por que cada nodo solo puede tener máximo 2 hijo, dicho de
otra manera es un Árbol n-ario de Grado 2.
Fig. 9: En la imagen podemos apreciar un Árbol Binario.
Árbol binario lleno: Es aquel que el que todos los nodos tiene cero o 2 hijos con excepción
de la Raíz.

Fig. 10: Podemos


apreciar que el árbol de la derecha no esta lleno ya que uno de sus nodos no cumple con la
condición cero o 2 hijos. ya que el nodo C solo tiene un hijo.
Árbol binario perfecto: Es un Árbol lleno en donde todos las Hojas están en el mismo Nivel.

Fig. 11: En la imagen podemos apreciar que el árbol de la izquierda tiene todas sus hojas al
mismo nivel y que ademas esta lleno, lo que lo convierte en un árbol binario perfecto. Sin
embargo, del lado derecho podemos ver que aunque el árbol esta lleno no tiene todas las
hojas al mismo nivel lo que hace que no sea un árbol binario perfecto pero si lleno.
 

2.7. Evaluación perezosa.


Es una estrategia de evaluación que retrasa el cálculo de una expresión
hasta que su valor sea necesario, y que también evita repetir la evaluación
en caso de ser necesaria en posteriores ocasiones. Esta compartición del
cálculo puede reducir el tiempo de ejecución de ciertas funciones de forma
exponencial, comparado con otros tipos de evaluación.

Los beneficios de la evaluación perezosa son:

El incremento en el rendimiento al evitar cálculos innecesarios, y en tratar


condiciones de error al evaluar expresiones compuestas.

La capacidad de construir estructuras de datos potencialmente infinitas.

La capacidad de definir estructuras de control como abstracciones, en lugar


de operaciones primitivas.

Este método de evaluación es comúnmente implementado encapsulando


cada expresión en una función que, cuando sea computada, devolverá el
valor deseado de la expresión. De esta manera, cuando el resultado sea
necesitado, la función creada será ejecutada para conseguirlo.

La evaluación perezosa puede también reducir el consumo de memoria de


una aplicación, ya que los valores se crean solo cuando se necesitan. Sin
embargo, es difícil de combinar con las operaciones típicas de programación
imperativa, como el manejo de excepciones o las operaciones de
entrada/salida, porque el orden de las operaciones puede quedar
indeterminado. Además, la evaluación perezosa puede conducir a
fragmentar la memoria.

La evaluación perezosa es frecuentemente combinada con memoización, tal


y como lo describe Jon Bentley en Writing Efficient Programs1(Escribiendo
Programas Eficientes). Después de que el valor de una función sea
computado para un parámetro o una serie de estos, el resultado es
almacenado en una tabla de consulta que está organizada por los valores
de estos parámetros; la próxima vez que se le llama a la función, la tabla
es consultada para determinar si el resultado para esa combinación de
parámetros está disponible. Si es el caso, la función devuelve dicho
resultado. Si no, la función es evaluada y otro elemento es añadido a la
tabla para reutilización posterior.
https://plyf8sisitsh.wordpress.com/
https://programacion231.wordpress.com/2017/02/16/unidad-1-conceptos-fundamentales-
programacion-logica-y-funcial/
https://prologittap.wordpress.com/2017/02/20/primera-entrada-del-blog/
http://prologvelascorus.blogspot.com/2018/05/2-modelo-de-programacion-funcional.html

También podría gustarte