ED Unidad 1: Introducción a las estructuras de datos (TDA) con objetos
1. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 1
09/03/2022
Introducción a las
estructuras de datos (TDA)
con objetos
Unidad 1
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Estructuras de Datos
2. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 2
09/03/2022
Objetivo general de la Unidad 1
Definir “Estructura de datos”, su representación mediante
objetos para el diseño y almacenamiento de los datos en
los programas.
3. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 3
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
4. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 4
09/03/2022
Recordando…
• Un tipo es una colección de valores.
– Por ejemplo, el tipo boolean consta de los valores true y false.
Los enteros también forman un tipo.
• Un tipo de dato es un tipo con una colección de operaciones
que manipulan el tipo.
– Por ejemplo, una variable entera es un miembro del tipo de dato
entero. La suma es un ejemplo de una operación sobre tipos de
datos enteros.
• Un elemento dato es una pieza de información o un registro
cuyos valores se especifican a partir de un tipo. Un elemento
dato se considera que es un miembro de un tipo de dato.
– El entero es un elemento de datos simple ya que no contiene
subpartes.
• Un registro de una cuenta corriente de un banco puede
contener varios campos o piezas de información como
nombre, número de la cuenta, saldo y dirección. Dicho
registro es un dato agregado.
5. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 5
09/03/2022
Problemas, programas, algoritmos
y estructuras de datos
• Problema: Conjunto de hechos o circunstancias que
dificultan la consecución de algún fin.
• Algoritmo: Conjunto de reglas finito e inambiguo.
• Estructura de datos: Disposición en memoria de la
información.
• Programa: Algoritmos + Estructuras de datos.
PROBLEMA PROGRAMA
Algoritmos
+
Estructuras
de datos
6. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 6
09/03/2022
Estructuras de datos
• Concepto:
Agrupación de datos que se trata como una unidad en su
conjunto.
Se construyen a partir de los tipos de datos simples
• Clasificación:
–Por su naturaleza:
• Homogénea: Todos del mismo tipo (ej: vectores, tablas,
matrices n dimensionales).
• Heterogénea: De diferente tipo (ej: registros).
–Por su forma de almacenamiento.
• Memoria central:
– Estática. Tamaño es conocido de antemano (a priori).
– Dinámica. El tamaño varía durante la ejecución del programa
(ej: listas, árboles, grafos).
• Memoria externa (ficheros y bases de datos).
7. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 7
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
8. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 8
09/03/2022
Necesidad de las estructuras de datos
• A pesar de la gran potencia de las
computadoras actuales, la eficiencia de los
programas sigue siendo una de las
características más importantes a considerar.
• Los problemas complejos que procesan las
computadoras cada vez más obligan, sobre
todo, a pensar en su eficiencia dado el
elevado tamaño que suelen alcanzar.
• Hoy, más que nunca, los profesionales
deben formarse en técnicas de construcción
de programas eficientes.
9. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 9
09/03/2022
Elección de la estructura de datos (ED)
adecuada
• La mayoría de los lenguajes de programación
soportan diferentes EDs
• Dentro de la elección debe considerarse también
la posibilidad de poder realizar operaciones sobre
dichas estructuras definidas.
• La elección de una ED redundará en una mayor
eficiencia del programa y, sobre todo, en una
mejor resolución del problema en cuestión.
• Una elección inadecuada de EDs puede conducir
a programas lentos, largos y poco eficientes
10. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 10
09/03/2022
Elección de la estructura de datos (ED)
adecuada
• Una solución se denomina eficiente si resuelve el
problema dentro de las restricciones de recursos
requeridas.
– Restricciones de recursos pueden ser el espacio total
disponible para almacenar los datos o el tiempo
permitido para ejecutar cada subtarea
– Una solución es eficiente cuando requiere menos
recursos que las alternativas conocidas
• El costo de una solución es la cantidad de
recursos que la solución consume.
– Normalmente, el coste se mide en término de
recursos clave, especialmente el tiempo
11. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 11
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
12. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 12
09/03/2022
Etapas en la selección de una
estructura de datos
Los pasos a seguir son [SHAFFER 97]:
1. Analizar el problema para determinar las
restricciones de recursos que debe cumplir cada
posible solución.
2. Determinar las operaciones básicas que se deben
soportar y cuantificar las restricciones de recursos
para cada una. Ejemplos de operaciones básicas son
la inserción de un dato en la estructura de datos,
suprimir un dato de la estructura o encontrar un dato
determinado en dicha estructura.
3. Seleccionar la estructura de datos que cumple mejor
los requisitos o requerimientos
13. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 13
09/03/2022
Consideraciones importantes para la
elección de la estructura de datos
• ¿Todos los datos se insertan en la estructura de
datos al principio o se entremezclan con otras
operaciones?
• ¿Se pueden eliminar los datos?
• ¿Los datos se procesan en un orden bien
definido o se permite el acceso aleatorio?
14. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 14
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
15. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 15
09/03/2022
Abstracción
• Es “ignorancia selectiva”
– Decidir que es importante y que no lo es
– Enfocarse y depender de lo que ES
importante
– Ignorar y no depender de lo que NO ES
importante
El propósito de la abstracción no es ser
poco específico, es más bien crear un
nuevo nivel, en el cual se puede ser
absolutamente preciso
Edsger Dijkstra
16. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 16
09/03/2022
Abstracción para resolver
problemas
• La mejor abstracción es aquella que hace
simples las cosas complejas.
– Rescatar y resaltar los conceptos
fundamentales
– Esconder los aspectos no importantes
• Ejemplo: Detalles de la implementación
Mientras mas perfecta es una máquina, mas oculto se encuentra
su funcionamiento. Al parecer, la perfección no se logra cuando
no hay mas que añadir, si no cuando no haya mas que quitar.
Antoine de Saint-Exupéry
17. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 17
09/03/2022
Abstracción de datos
• Es una técnica poderosa de programación
• Permite “inventar”, o definir nuevos tipos de datos
– Observando e identificando entidades del mundo real:
objetos
– Ocultando datos irrelevantes para la resolución del
problema
• Gracias a esto, se pueden diseñar programas
– Mas cortos, Legibles y Flexibles
• Estos nuevos tipos de datos se conocen como:
– TIPOS DE DATOS ABSTRACTOS (TDA)
18. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 18
09/03/2022
TDAs: Tipos de datos abstractos
• Un TDA trata de representar entidades del mundo real:
objetos
– Especificando el QUE y no el COMO
• Se componen de
– Comportamiento → Operaciones
• Los TDAs existen PARA proveer operaciones
• Ejemplo: Un carro, es útil porque se lo puede manejar
• Manejar es un comportamiento u operación del TDA Carro
– Estado
• Se refiere al funcionamiento interno del TDA
• Un TDA correctamente creado mantiene su estado OCULTO
• Ejemplo: No nos interesa como Carro funciona, solo nos interesa… que
funciona
19. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 19
09/03/2022
Ejemplo
• Se necesita crear un TDA para representar los
números racionales
• La abstracción nos permitirá reconocer
– El comportamiento de un número racional y
– El estado (datos) del mismo
• TDA: Racional
– Comportamiento:
• Sumar, Restar, Multiplicar, Simplificar, etc.
– Estado:
• Numerador
• Denominador, siempre debe ser diferente de 0
20. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 20
09/03/2022
Ventajas de los TDAs
• Permiten una mejor representación del mundo real
– Una solución puede estar compuesta de un grupo de TDAs
• Cada uno con sus comportamientos y estados
– El código se comprende mejor, pues los TDAs representan
entidades del mundo real
• Permite llevar un control de cambios
– Si el estado de un TDA esta oculto, si se modifica, nadie se
verá afectado
– Ejemplo: Se pueden hacer modificaciones a un auto sin que el
usuario del mismo se entere o cambie su forma de USAR el
auto
• Permite la extensibilidad de un sistema
– Cada Nuevo Tipo de Dato es un modulo que se adapta a una
solución
21. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 21
09/03/2022
Estructuras de datos lineales y no
lineales
• Estructuras de datos lineales
– Cada componente tiene un único sucesor y un único
predecesor con excepción del último y el primero
• Estructura de datos no lineal
– Cada componente puede tener varios sucesores y
varios predecesores
22. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 22
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
23. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 23
09/03/2022
Estructuras lineales
• Están conformadas por ninguno, uno o varios elementos
que tienen una relación de adyacencia ordenada donde
existe un primer elemento, seguido de un segundo
elemento y así sucesivamente hasta llegar al último
• El tipo de dato de los elementos puede ser cualquiera,
pero debe ser el mismo tipo para todos
• El valor contenido en los elementos puede ser el mismo
o diferente.
• En estas estructuras se realizan operaciones de agregar
y/o eliminar elementos a la lista según un criterio
particular.
10 5 8 2 31
25
24. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 24
09/03/2022
Estructuras de datos lineales: listas
• Estructura lineal compuesta por una
secuencia de 0 o más elementos de algún
tipo determinado y ordenados de alguna
forma
– Es decir, sus elementos están colocados uno
detrás de otro
• Puede crecer o disminuir en el número de
elementos y podrán insertarse o eliminarse
elementos en cualquier posición sin alterar
su orden lógico
25. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 25
09/03/2022
Listas: Tipos
• De acuerdo a su implementación, las listas
se clasifican en
– Simples
– Doblemente Enlazadas
– Circulares
• De acuerdo a su comportamiento, los
conjuntos lineales se clasifican en
– Listas
– Pilas
– Colas
26. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 26
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
27. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 27
09/03/2022
Estructuras de datos no lineales
• En una estructura lineal, cada elemento sólo
puede ir enlazado al siguiente o al anterior
• A las estructuras de datos no lineales se les llama
también estructuras de datos multienlazadas
– Cada elemento puede estar enlazado a cualquier otro
componentes
• Se trata de estructuras de datos en las que cada
elemento puede tener varios sucesores y/o varios
predecesores
– Árboles
– Grafos
28. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 28
09/03/2022
Estructuras de datos no lineales
• Árboles
– Cada elemento sólo
puede estar enlazado
con su predecesor y
sus sucesores
• Puede tener varios
sucesores
• Grafos
– Cada elemento puede
estar enlazado a
cualquier otro
A
B
D E
C
F
Guayaquil Quito
Cuenca
Ambato
Riobamba
5
5
7
9
8
7
29. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 29
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
30. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 30
09/03/2022
Definicion de un TDA
• La definición de un TDA durante el diseño
debería
– Clara, concisa, sin ambigüedades
• Sin embargo, muchos de nosotros usamos
– Lenguaje natural: sujeto a ambigüedades
– Lenguaje de programación en particular
• No todos lo entienden
– Una notación formal, generalizada
• Todos lo podrán entender y la definición será clara y
concisa
• Una notación formal propuesta es BNF
31. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 31
09/03/2022
¿Qué es BNF?
• Backus-Naur Form
• Es una notación formal matemática
• Es utilizada para definir la sintaxis de los
lenguajes
– Que esta permitido en cierto lenguaje y que no
– Sin lugar a ambigüedades
• Ejemplo: En lenguaje C,
– Hay reglas para declarar variables
– Y cada sentencia de control tiene su propia regla
de sintaxis
32. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 32
09/03/2022
¿Cómo funciona BNF?
• Es como un juego matemático
• Se busca definir un símbolo, dando las reglas
para reemplazarlo
– Símbolo := alternativa1 | alternativa2
• Si una expresión escrita
– Se puede expresar usando su definición BNF
– Estará correctamente escrita
– Si no, no será permitida según la sintaxis del lenguaje
• ¡ERROR!
33. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 33
09/03/2022
Reglas y sintaxis de BNF
• Una regla en BNF indica que
– Un símbolo no terminal a la izquierda del := puede ser
reemplazado por la o las alternativas del lado derecho
• Las alternativas de reemplazo se separan
con |
• Cada alternativa puede ser
– Otro símbolo no terminal
• Que aún falta por definir, va encerrado entre <>
– Un simbolo terminal
• Que ya no necesita más definición
34. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 34
09/03/2022
Símbolos en el BNF
• :=
– Equivalencia
• |
– Separa opciones de reemplazo para un símbolo dado
• [..]
– Todo lo encerrado entre corchetes se considera
opcional
• {..}
– Todo lo encerrado entre llaves se puede repetir mas
de una vez
35. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 35
09/03/2022
El TDA racional con BNF
Comportamiento:
Sumar, Restar, Multiplicar, Simplificar
Estado:
<racional> := <numerador>/<denominador>
<numerador>:=<digito>{<digito>}
<denominador>:=<dig_no_cero>{<digito>}
36. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 36
09/03/2022
Contenido
• Concepto de estructuras de datos
• Necesidad de las estructuras de datos
– Etapas en la selección de una estructura de datos
• Tipos de datos abstractos (TDA):
– Estructuras lineales
– Estructuras no lineales
• Representación de TDA
– Caso de estudio: Memoria dinámica vs POO
37. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 37
09/03/2022
Recordando…
• La programación
estructurada separa
los datos de las
funciones
• La programación
orientada a
objetos define un
conjunto
de objetos donde se
combina de forma
modular los datos con
las funciones.
38. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 38
09/03/2022
Recordando…
• TDA : Especificación algebraica (abstracta) de
una estructura de datos junto con el conjunto de
operaciones que se pueden hacer sobre ese tipo
de datos.
– Un TDA se asocia a una o más implementaciones
distintas. Al ser una especificación formal
– No soporta el concepto de herencia
• CLASE: Concepto que describe un TDA y una de
sus implementaciones (total o parcial).
– Así, una clase es un TDA equipado con una
implementación posiblemente parcial.
– Soporta herencia.
39. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 39
09/03/2022
Evolución e historia de la
programación
Lenguajes
de bajo nivel
(Basic, Fortran,
Ensamblador, …)
Lenguajes
estructurados
(Pascal, C,
Modula, ADA, …)
40. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 40
09/03/2022
Lenguajes estructurados
UNIT calculo;
INTERFACE
const
NMAX= 10;
MAX_GUARDA= 2000;
type
TDatosEnt= array [1..NMAX] of integer;
TDatosSal= record
NPasos: Shortint;
Paso: array [1..NMAX-1] of record
O1: byte;
O2: byte;
Fn: byte;
end;
end;
procedure Operar (var Arr: TDatosEnt; O1, O2, Func, Nivel: byte; var Vale: boolean); forward;
procedure CalculaCifras (var Entrada: TDatosEnt); forward;
procedure CalculaCifrasRec (var Entrada: TDatosEnt; PA, PB, Func, Nivel: byte); forward;
Concepto de
módulo/unidad
Separación de
interface/implementación
Tipos definidos
por el usuario
Procedimientos
y funciones
41. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 41
09/03/2022
Lenguajes estructurados
IMPLEMENTATION
var
suma, num: integer;
CopiaOrden: TDatosEnt;
procedure OrdenaComb (var Entrada: TDatosEnt; Nivel: byte);
var
i, j, maxim, pmaxim, tmp: integer;
begin
CopiaOrden:= Entrada;
num:= Nivel;
for i:= 1 to Nivel-1 do begin
maxim:= CopiaOrden[i];
pmaxim:= i;
j:= i+1;
while j<=Nivel do begin
if CopiaOrden[j]>maxim then begin
maxim:= CopiaOrden[j];
....
end;
end;
end;
Procedimiento
con parámetros
Bloques de
control
estructurados
Separación
interface/
implementación
42. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 42
09/03/2022
Lenguajes estructurados
• Procedimientos y funciones son abstracciones
de control
• Los tipos definidos por el usuario son
abstracciones de datos
• Las unidades, módulos o paquetes son
abstracciones de nivel superior: abstracciones
de funcionalidades
43. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 43
09/03/2022
Lenguajes estructurados
Inconvenientes:
• Los datos y los procedimientos de manipulación
sobre los mismos van por separado.
• Es necesario garantizar la ocultación de la
implementación.
• Proliferación de variables globales. ¿Qué papel
juegan?
• Los programas son cada vez más complejos y
difíciles de mantener.
44. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 44
09/03/2022
Evolución e historia de la
programación
Lenguajes
de bajo nivel
(Basic, Fortran,
Ensamblador, …)
Lenguajes
estructurados
(Pascal, C,
Modula, ADA, …)
Lenguajes
orientados a objetos
(Smalltalk, C++,
Java, Eiffel, …)
45. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 45
09/03/2022
Lenguajes
orientados
a
objetos
// Interface
class Timer {
private:
double StartTime;
double ClockRate;
public:
Timer (void);
bool StartTimer (void);
double ReadTimer (void);
bool Exists;
};
class Elipse {
protected:
double Fcx, Fcy;
double Frx, Fry, Fang;
void FsetXY (int x1, int y1, int x2, int y2);
public:
Elipse (int x1, int y1, int x2, int y2);
Elipse * Clonar (void);
void Pinta (IplImage *image, int color= 0, int ancho= -1);
};
Encapsulación de
datos y operaciones
Los datos
son privados
Las operaciones
son públicas
Una clase es un Tipo
Abstracto de Datos
46. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 46
09/03/2022
Lenguajes orientados a objetos
• Una clase encapsula los datos de un tipo y las
operaciones sobre el mismo
• Una clase es, al mismo tiempo, un tipo
abstracto de datos y un módulo que encierra
un conjunto de funciones relacionadas
• Separación clara entre interface (parte visible
desde fuera) e implementación (oculta)
47. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 47
09/03/2022
Recordando…
• TDA representa una
vista del mundo
centrada en datos (su
estructura,
representación y
manipulación)
• POO representa una
vista del mundo
orientada al servicio
(qué pueden ofrecer
esos TDAs al resto
del programa)
48. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 48
09/03/2022
Memoria estática vs dinámica
• Memoria estática: es un
espacio de memoria
reservado para x variable
donde esta no se puede
cambiar durante el
tiempo de ejecución.
• Por ejemplo una variable
a la que se le asigna una
constante
• Memoria dinámica: es
un espacio de memoria
reservado para x
variable.
• Dinámica se refiere a que
en el transcurso de la
ejecución del programa
esta memoria puede ir
cambiando, por ejemplo
incrementando.
• Como un arreglo, tienes
tu arreglo, y en tiempo de
ejecución lo llenas.
49. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 49
09/03/2022
Operador de indirección/desreferencia
• El operador de indirección "*" es un operador unario usado en
lenguajes de programación que incluyen variables de tipo
puntero, como el lenguaje C y varios de sus descendientes.
• Opera sobre una variable de tipo puntero y devuelve una
expresión equivalente al valor contenido en la dirección
apuntada por dicho puntero.
• Esta operación recibe el nombre de "desreferenciar". Por
ejemplo:
int x = 0;
int *puntero_a_x = &x; // * se usa para declarar un
puntero
*puntero_a_x = 1; // * es el operador de indireccion
// x ahora contiene 1
50. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 50
09/03/2022
50
Referencias, punteros y memoria
• Aparte de las variables primitivas, todas las
variables de Java son referencias
51. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 51
09/03/2022
Referencias, punteros y memoria
• Java: Las referencias a objetos se pasan por valor
– Todas las referencias a objetos en Java se pasan por valor. Esto
significa que se pasará una copia del valor a un método. Pero el
truco es que pasar una copia del valor también cambia el valor
real del objeto. Para entender por qué, comience con este
ejemplo:
public class ObjectReferenceExample {
public static void main(String... doYourBest) {
Simpson simpson = new Simpson();
transformIntoHomer(simpson);
System.out.println(simpson.name);
}
static void transformIntoHomer(Simpson simpson) {
simpson.name = "Homer";
}
}
class Simpson { String name; }
¿Cuál crees que será
simpson.name después
de que se ejecute el
método
transformIntoHomer?
En este caso, ¡será Homer! La razón es que las variables de objeto de Java son
simplemente referencias que apuntan a objetos reales en la cabecera de memoria (memory
heap). Por lo tanto, aunque Java pasa parámetros a métodos por valor, si la variable apunta
a una referencia de objeto, el objeto real también cambiará.
52. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 52
09/03/2022
Referencias, punteros y memoria
• Java: ¿Se pasan los tipos primitivos por valor?
– Al igual que los tipos de objeto, los tipos primitivos también se pasan
por valor. ¿Puede deducir qué pasará con los tipos primitivos en el
siguiente ejemplo de código?
public class PrimitiveByValueExample {
public static void main(String... primitiveByValue) {
int homerAge = 30;
changeHomerAge(homerAge);
System.out.println(homerAge);
}
static void changeHomerAge(int homerAge) {
homerAge = 35;
}
}
Es 30 porque
(nuevamente) Java
pasa parámetros de
objeto por valor
El número 30 es solo una copia del valor, no el valor real. Los tipos primitivos se asignan en
la pila de memoria (stack memory), por lo que solo se cambiará el valor local. En este caso,
no hay referencia de objeto.
53. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 53
09/03/2022
Referencias, punteros y memoria
• ¿Cómo se relacionan las referencias y los punteros?
– Muchos lenguajes de programación (ej: C, C++, Pascal)
usan variables de punteros
• Los punteros son variables que almacenan direcciones de otras
ubicaciones de memoria.
• Los punteros permiten el acceso indirecto a los datos de los
objetos.
X 010010
Object A
101001
010010
Object B
Y 101001
54. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 54
09/03/2022
Referencias, punteros y memoria
• Entonces el valor almacenado en un puntero es
una dirección de memoria
• Sin embargo, si se indirecciona un puntero, se
obtiene acceso al objeto al que "apunta"
X = Y; // Changes what X points to
// X no longer has access to
// Object B
X 101001
Object A
101001
010010
Object B
Y 101001
55. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 55
09/03/2022
55
Referencias, punteros y memoria
• En C++, se desreferencian punteros usando el
operador *
*X = *Y;// Changes contents of object
// that X points to. The
// value of X is unchanged
X 010010
Object A
101001
010010
Object A
Y 101001
56. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 56
09/03/2022
56
Referencias, punteros y memoria
• Referencias en Java
– Se comportan de manera similar a los
punteros, pero con más restricciones
• Indirección es implícita – no existe el operador de
indirección
• Se pueden asignar valores de referencia
(direcciones) pero no pueden ser manipulados
– Pero el aliasing todavía se produce y se debe
tener mucho cuidado
• Tenga en cuenta cuándo desea un objeto nuevo o
una referencia a uno antiguo
Aliasing: acceso a una ubicación de datos en la memoria a través de diferentes nombres
simbólicos en el programa
57. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 57
09/03/2022
57
Referencias, punteros y memoria
• Java Memory Use
– Todos los objetos en Java se asignan
dinámicamente
• La memoria se asigna utilizando el operador new
• Una vez asignados, los objetos existen por un período
de tiempo indefinido…
– Siempre que exista una referencia activa al objeto
• Los objetos que no tienen referencias a ellos ya no son
accesibles en el programa
– Ex. Object B del ejemplo mostrado
• Estos objetos están marcados para la GARBAGE
COLLECTION
58. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 58
09/03/2022
58
Referencias, punteros y memoria
– El recolector de basura de Java (garbage
collector) es un proceso que se ejecuta en
segundo plano durante la ejecución del
programa.
• Cuando la cantidad de memoria disponible se agota, el
recolector de basura recupera los objetos que se han
marcado para la recolección
– Se utiliza un algoritmo bastante sofisticado para determinar
qué objetos se pueden recolectar como basura
• Si hay suficiente memoria disponible, es muy probable
que el recolector de basura nunca se ejecute
59. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 59
09/03/2022
Construcción Propensa al Error
(programación estructurada)
• Números de punto flotante
– Inherentemente imprecisos. La imprecisión puede dar lugar a
comparaciones válidas.
• Punteros
– Los punteros que apuntan a áreas incorrectas de memoria puede dañar
los datos. El Aliasing puede hacer que los programas sean difíciles de
entender y cambiar.
• Aliasing
– El uso de más de 1 nombre para referirse al mismo espacio de
memoria.
• Asignación dinámica de memoria
– Asignación de tiempo de ejecución puede ocasionar desbordamiento de
memoria.
• Paralelismo
– Puede dar lugar a errores de sincronización sutil imprevistos debido a la
interacción entre los procesos paralelos.
60. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 60
09/03/2022
Construcción Propensa al Error
• Interrupciones
– Las interrupciones pueden causar una operación crítica que terminar y
hacer un programa difícil de entender.
• Herencia
– El código no es localizado. Esto puede resultar en comportamiento
inesperado cuando se realizan cambios y los problemas de
comprensión.
• Recursión
– Los errores en la recursividad puede causar una sobrecargar de
memoria
• Matrices sin límites
– Los fallos de desbordamiento de búfer puede producirse si no hay
control de la envolvente en las matrices.
• Procesamiento de entrada por defecto
– Una acción de entrada que se produce independientemente de la
entrada.
61. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 61
09/03/2022
61
TDAs vs. Clases
• Las diapositivas anteriores deberían resultarle
familiares
– Ya hemos discutido la idea de abstracción de
datos de clases
– TDAs son representationes de tipos de datos
independientes del lenguaje
• Se puede usar para especificar un nuevo tipo de
datos que luego se puede implementar de varias
maneras usando diferentes lenguajes de
programación
– Las clases son estructuras específicas del
lenguaje que permiten la implementación de
TDAs
• Solo existen en lenguajes orientados a objetos o
basados en objetos
62. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 62
09/03/2022
62
TDAs vs. Clases
– Un TDA dado se puede implementar de
diferentes maneras usando diferentes clases
• Veremos algunos de estos pronto
• Ej: Stack, Queue, SortedList
– De hecho, una clase determinada puede
usarse para representar más de un TDA
• La clase ArrayList de Java se puede utilizar para
representar un Stack, Queue, Deque y otros TDAs
63. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 63
09/03/2022
63
Interfaces como TDAs
• En este curso tipicamente se usarán a las
interfaces como TDAs y a las clases como
implementaciones TDA
– Al usar la interfaz, tendremos que confiar en las
descripciones de los datos en lugar de en los datos
reales
• Los datos en sí se dejan sin especificar y se detallarán en la
(s) clase (s) que implementan las interfaces
– Esto está bien, ya que los datos suelen ser específicos de una
implementación de todos modos
• Ej: TDA Stack
– Push un objeto sobre el tope del Stack (pila)
– Pop un objeto sobre el tope del Stack
» En este nivel (TDA) no nos importa cómo se representan
realmente los datos, siempre que los métodos funcionen
como se especifica
64. Estructuras de datos Carrera de Software
Ph.D. Franklin Parrales 64
09/03/2022
Introducción a las
estructuras de datos (TDA)
con objetos
Unidad 1
Final de la unidad