Вы находитесь на странице: 1из 1

FUNDAMENTOS DE LAS ESTRUCTURAS DE DATOS sin preocuparse de las restantes características (no esenciales).

características (no esenciales). Abstracción es que la encapsulación, los lenguajes soportan la Modularidad de diversas Algo es recursivo si se define en términos de sí mismo (cuando para definirse else if(m==0) return(ack(n-1,1));
1. Definición, Importancia y Perspectiva de las estructuras de datos la técnica de quitarle a una idea o a un objeto todos los acompañamientos formas. hace mención a sí mismo). Para que una definición recursiva sea válida, la return(ack(n-1, ack(n,m-1)));
1.1 Definición de las Estructuras de Datos: Según Joyanes Aguilar innecesarios hasta que los deja en una forma esencial y mínima. Una buena de dependencia, acoplamiento, cohesión, interfaz, encapsulación y abstracción referencia a sí misma debe ser relativamente más sencilla que el caso }
define la estructura de datos la define como una colección de datos que abstracción elimina todos los detalles poco importantes y le permite enfocarse
Recursividad cruzada o indirecta:
puede ser caracterizado por su organización y las operaciones que se y concentrarse en los detalles importantes.
Ejemplo Son algoritmos donde una función provoca una llamada a sí misma de forma
define en ella. indirecta, a través de otras funciones.
En programación, una estructura de datos es una forma de organizar un Por ejemplo tienes un carro y quieres "abstraerlo" para hacer un programa en
Ej: Par o Impar:
conjunto de datos elementales con el objetivo de facilitar su el que puedas realizar operaciones en base al carro.
int par( int nump )
manipulación.
{if(nump==0) return(1);
Un dato l es la mínima información que se tiene en un sistema. Puedes crear una clase con las características del carro por ejemplo.
return( impar(nump-1));}
En la estructura de datos se define la organización de los datos
(interrelación de estos) y al conjunto de operaciones que se pueden class carro { int impar( int numi )
realizar sobre ellos. {if(numi==0) return(0);
int cantidadDePuertas;
Las operaciones básicas son: int modelo; return( par(numi-1));}
Alta, adicionar un nuevo valor a la estructura. Color colorcito; Ejemplo LA PILA DE RECURSIÓN
Baja, borrar un valor de la estructura. String linea; Jerarquía o Herencia
Las operaciones complejas son: La Jerarquía es una propiedad que permite la ordenación de las
considerado. La memoria del ordenador se divide (de manera lógica, no física) en varios
public carro (int cantidadDePuertas, int modelo, Color colorcito, String linea){ abstracciones. Las dos jerarquías más importantes de un sistema complejo son:
estructura de clases (jerarquía “es-un” (is-a): generalización/especialización) y Ejemplo: definición de nº natural: segmentos (4):
this.cantidadDePuertas = cantidadDePuertas;
1.3 Perspectivas o niveles de las estructura de datos estructura de objetos (jerarquía “parte-de” (part-of): agregación- composición). Segmento de código: Parte de la memoria donde se guardan las instrucciones
this.modelo = modelo;
Las jerarquías de generalización/especialización se conocen - el N º 0 es natural del programa en código de máquina.
this.colorcito = colorcito; como herencia. Básicamente, la herencia define una relación entre clases, en
A. Nivel (Lógico o abstracto) - El Nº n es natural si n-1 lo es. Segmento de datos: Parte de la memoria destinada a almacenar las variables
this. linea = linea;}} donde una clase comparte la estructura o comportamiento definido en una o estáticas.
B. Nivel (Físico o de Implementación) más clases (herencia simple y herencia múltiple, respectivamente).
Un método recursivo es un método que se llama a si mismo, directa o Montículo: Parte de la memoria destinada a las variables dinámicas.
C. Nivel de Aplicación o de Uso: También podemos abstraer las acciones de una cuenta bancaria Ejemplo
indirectamente. Pila del programa: Parte destinada a las variables locales y parámetros de la
Clase CuentaBancaria
Es una alternativa a la iteración o repetición. En cuanto a tiempo de función que está siendo ejecutada.
2. Las necesidades de las estructuras de datos // atributos
Privado Entero Saldo; computadora y uso de memoria es
menos eficiente, es una Llamada a una función:
 solución consume. Privado String NroCuenta;
3. Clasificación de los tipos de datos. Privado String Titular; herramienta útil para solucionar
Se reserva espacio en la pila para los parámetros de la función y sus variables
// métodos problemas de naturaleza recursiva.
locales.
ESTRUCTURA DE DATOS INTERNAS Acción CuentaBancaria(Entero montoInicial; String num, nombre)
Naturaleza de la Se guarda en la pila la dirección de la línea de código desde donde se ha
ESTRUCTURAS DE DATOS ESTÁTICAS // asigna a los atributo de la clase sus valores iniciales
recursividad llamado a la función.
Saldo = montoInicial; Se almacenan los parámetros de la función y sus valores en la pila.
1.- Simples o primitivas NroCuenta = num;
a) Lógico Un objeto es recursivo si figura Al terminar la función, se libera la memoria asignada en la pila y se vuelve a la
Titular = nombre; La composición, es un tipo de relación estática por valor, el tiempo de vida del instrucción actual.
b) Carácter en su propia definición
Facción; objeto está condicionado por el tiempo de vida de lo incluye, por ejemplo
c) Entero Ejemplo:
Público Acción depositar(Entero cantidad) almacén está compuesto por cuentas, el objeto base se construirá a partir del Llamada a una función recursiva:
d) Punto Flotante objeto incluido. Es una relación por tipo de valor, se representa por un rombo
// incrementa el saldo de la cuenta 1 para N = 0
relleno. Si se borra el objeto almacén también se borra el objeto cuenta.
Saldo = Saldo + cantidad; 1) N! = En el caso recursivo, cada llamada genera un nuevo ejemplar de la función con
2.- Compuestas Ejemplo
a) Arreglos Facción; sus correspondientes objetos locales:
b) Conjuntos Público Acción retirar(Entero cantidad) N(N-1)! para N > La función se ejecutará normalmente hasta la llamada a sí misma. En ese
public class Cuenta {private int num;
c) Cadenas // disminuye el saldo de la cuenta momento se crean en la pila nuevos parámetros y variables locales. El nuevo
0
d) Registros Saldo = Saldo - cantidad; private int saldo; …}public class Almacen { private Cuenta cuenta;..} ejemplar de función comienza a ejecutarse.
Facción; La agregación es una relación por referencia, de tipo dinámica, el tipo de vida Característica de la recursividad
ESTRUCTURA DE DATOS DINAMICAS Público Función obtenerSaldo: Entero del objeto incluido es independiente del que lo incluye. El objeto base utiliza al Medición de la eficacia de un algoritmo recursivo
Siempre existe una forma de salir de la definición.
// permite conocer el monto disponible o saldo de la cuenta incluido para su funcionamiento. Si se borra el objeto almacén sigue existiendo Viene dada por:
1.- Lineales Retornar(saldo); el objeto cliente. 1. Tiempo de ejecución
Ejemplo: En un algoritmo recursivo distinguimos como mínimo 2 partes:
a) Pila FFunción; 2. Espacio de memoria ocupado por el algoritmo
b) Cola FinClase CuentaBancaria 3. Legibilidad y facilidad de comprensión
c) Lista public class Cliente{ private String nombre;….} a). Caso trivial; base o de fin de recursión:
2.- No lineales E n ca p su l a mi en t o
a) Árboles public class Almacen { private String direccion; Una condición de salida que es la condición que no produce otra autollamada.
El Encapsulamiento o encapsulación es la propiedad que permite asegurar que METODOS RECURSISVOS
b) Grafos Es un caso donde el problema puede resolverse sin tener que hacer uso de una
el contenido de la i de un objeto está oculta al mundo exterior: el objeto A no
public String mensaje(Cliente cliente){ nueva llamada a sí mismo. Evita la continuación indefinida de las partes
conoce lo que hace el objeto B, y viceversa. La encapsulación (también se Primero debemos decir que la recursividad no es una estructura de datos, sino
ESTRUCTURA DE DATOS eXTERNAS conoce como ocultación de la información), en esencia, es el proceso de ocultar recursivas.
que es una técnica de programación que nos permite que un bloque de
1. Archivos todos los secretos de un objeto que no contribuyen a sus características return “Cliente en mora”+cliente.getNombre();}}
instrucciones se ejecute n veces. Remplaza en ocasiones a estructuras
2. Base de datos esenciales. b). Parte puramente recursiva:
Po limo rf ismo repetitivas.
Semana 2 La encapsulación permite la división de un programa en módulos.
Encapsulación es la capacidad de contener y controlar el acceso a un grupo de La quinta propiedad significativa de los lenguajes de programación orientados Este concepto será de gran utilidad para el capítulo de la estructura de datos
Una llamada a sí mismo (recursiva); normalmente con el valor de los
elementos asociados. a objetos es el polimorfismo. Es la propiedad que indica, literalmente, la tipo árbol.
posibilidad de que una entidad tome muchas formas. En términos prácticos, el parámetros que cambian en cada llamada. Relaciona el resultado del algoritmo
La recursividad es un concepto difícil de entender en principio, pero luego de
polimorfismo permite referirse a objetos de clases diferentes mediante el mismo con resultados de casos más simples. Se hacen nuevas llamadas a la función,
Formas de encapsular analizar diferentes problemas aparecen puntos comunes.
elemento de programa y realizar la misma operación de diferentes formas, según pero están más próximas al caso base.
• Abierto(public): hace que el miembro de la clase pueda ser accedido desde En Java los métodos pueden llamarse a sí mismos. Si dentro de un método
sea el objeto que se referencia en ese momento.
el exterior de existe la llamada a sí mismo decimos que el método es recursivo.
Ejemplo EJEMPLO
la Clase cualquier parte del programa. Cuando un método se llama a sí mismo, se asigna espacio en la pila para las
package com.practica.polimorfismo; ITERATIVO:
• Protegido(protected): solo es accesible desde la Clase y las clases que
import java.util.ArrayList; nuevas variables locales y parámetros.
heredan (a cualquier int factorial( int n ) int res=1;
import java.util.List; Al volver de una llamada recursiva, se recuperan de la pila las variables locales
nivel). for(int i=1; i<=n; i++ ) res = res*i;return(res);}
public class CalcularOperacionesFigura { y los parámetros antiguos y la ejecución se reanuda en el punto de la llamada al
• Cerrado (private): Solo es accesible desde la Clases RECURSIVO:
public static void main(String[] args) {
OperacionesFigura of = new Triangulo(“Triangulo”, “Azul”, 15.0, 3.0); int factorial( int n ) if(n==0) return(1);
OperacionesFigura of2 = new Circulo(“Circulo”, “Verde”, 12.3); return(n*Factorial(n-1));
Ejemplo
List<OperacionesFigura> lista = new ArrayList<OperacionesFigura>();
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso
lista.add(of); TIPOS DE RECURSIÓN
que se quiere para las variables de instancia y los métodos definidos en la clase: lista.add(of2);
public public void CualquieraPuedeAcceder(){} Recursividad directa
calcularArea(lista);
Cualquier clase desde cualquier lugar puede acceder a las variables y }
métodos de instancia públicos. public static void calcularArea(List<OperacionesFigura> O recursividad simple es aquella en cuya definición sólo aparece una
protected listaOperacionesFiguras) { llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos.
protected void SoloSubClases(){} for (OperacionesFigura of : listaOperacionesFiguras) { Recursividad múltiple: Se da cuando hay más de una llamada a sí misma
Sólo las subclases de la clase y nadie más puede acceder a las System.out.println(“Area es: ” + of.calcularArea()); dentro del cuerpo de la función, resultando más difícil de hacer de forma
variables y métodos de instancia protegidos. System.out.println(“Nombre es: ” + of.figura().getNombre()); iterativa.
private System.out.println(“Color es: ” + of.figura().getColor());
FUNDAMENTOS DE LAS ESTRUCTURAS DE DATOS
private String NumeroDelCarnetDeIdentidad; }}}
Principios de la programación orientada a objetos 6. Algoritmos recursivos int fib( int n ) /* ej: Fibonacci */
Las variables y métodos de instancia privados sólo pueden ser
Los principios de la programación orientada a objetos según Booch, son los El concepto de recursividad va ligado al de repetición. Son recursivos {
accedidos desde dentro de la clase. No son accesibles desde las
siguientes: subclases. friendly (sin declaración específica) aquellos algoritmos que, estando encapsulados dentro de una función, son if(n <= 1) return 1;

 Abstracción.
void MetodoDeMiPaquete(){} llamados desde ella misma una y otra vez, en contraposición a los algoritmos return(fib(n-1) + fib(n-2));


Por defecto, si no se especifica el control de acceso, las variables y iterativos, que hacen uso de bucles while, do-while, for, etc. }
Encapsulamiento. métodos de instancia se declaran friendly (amigas), lo que significa
 Modularidad.
que son accesibles por todos los objetos dentro del mismo paquete, Recursividad anidada:


pero no por los externos al paquete. Es lo mismo que protected.
Herencia. Modularidad: En algunos de los argumentos de la llamada recursiva hay una nueva llamada

Abstracción
Polimorfismo.
La Modularidad es la propiedad que permite subdividir una aplicación en
partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
a sí misma.
independiente como sea posible de la aplicación en sí y de las restantes partes.
La abstracción es uno de los medios más importantes, mediante el cual nos int ack( int n, int m ) /* ej: Ackerman */
La modularización consiste en dividir un programa en módulos que se puedan
enfrentamos con la complejidad inherente al software. La abstracción es la {
compilar por separado, pero que tienen conexiones con otros módulos. Al igual
propiedad que permite representar las características esenciales de un objeto,
if(n==0 ) return(m+1);

Вам также может понравиться