Post on 21-Sep-2018
Estructuras de Datos y Algoritmos
Primeros ejemplos de
TDA
Repaso POO
Programación Orientada a Objetos
• Principios–encapsulamiento
–abstracción
–herencia
–polimorfismo
POO y Java: encapsulamiento
• Todo está dentro de clases
• variables, métodos y constructores
• dentro de una clase deben ir solo cosas relacionadas
• variables y los métodos que utilizan esas variables
• ejemplo
POO y Java: abstracción
• Private: permite restringir el acceso a los campos de la clase para que se deban usar los métodos que realmente definen lo que es el TDA que se está implantando
• Las variables y clases estáticas permiten cambiar el estado de todos los objetos en la clase
• ejemplo
POO y Java: Polimorfismo
• Un método puede decidir dinámicamente (al momento de la ejecucuón) qué va a hacer.
• ejemplo
POO y Java: herencia
• Hay clases y hay subclases (extensiones de clase)
• lo que está en la clase también está en la subclase
• la subclase puede redefinir métodos y variables
• ejemplo
TDA
• Un tipo de dato abstracto es una colección de datos sobre los cuales se define un conjunto de operaciones
• Una clase de Java es ideal para implantar TDAs:
• clase encapsula datos y operaciones
– variables definen la estructura de datos
– métodos públicos son las operaciones que definen el TDA
Metáfora del TDA
• Conjunto de operaciones forman una pared
• forman una interfase entre los programas y la estructura de datos
Diseño de una Clase
Ilustración Creación Clase
Abstracción: ¿Qué es una esfera?
• Una esfera está completamente determinada por su radio
• todo lo demás es irrelevante o se puede calcular a base del radio
• operaciones: radio, circunferencia, volumen, area, diámetro.
TDA Esfera:
• Una esfera es un número real positivo llamado radio con las siguientes operaciones:– construir(r): construye una esfera de radio r
– radio(): devuelve el radio
– diametro(): devuelve el diámetro
– volumen(): devuelve el volumen
– area(): devuelve el área de la superficie
– circunferencia(): devuelve la circunferencia
Ilustración Creación Clase
Diseño de Estructura de Datos:
• basta con una variable double para almacenar el radio
Ilustración Creación Clase
Diseño de Algoritmos:• construir(r): si (r>=0) radio = r; si no radio=0.0;
• radio(): devuelve radio
• diametro(): devuelve 2.0 * radio
• volumen(): devuelve 4.0 * π * radio2
• area(): devuelve (4.0 * π * radio3) / 3.0
• circunferencia(): devuelve 2.0 * radio * π
Ilustración Creación Clase
public class Sphere {
private double theRadius;
public Sphere(double initialRadius) {
if (initialRadius >= 0) theRadius = initialRadius;
else theRadius = 0.0;
} // end constructor
public double radius() {
return theRadius;
} // end radius
public double diameter() {
return 2.0 * theRadius;
} // end diameter
public double circumference() {
return Math.PI * diameter();
} // end circumference
public double area() {
return 4.0 * Math.PI * theRadius * theRadius;
} // end area
public double volume() {
return (4.0*Math.PI * Math.pow(theRadius, 3.0)) / 3.0;
} // end volume
} // end Sphere
Ilustración Creación Clase(modificado del texto)
Otra Clase
• Clase esfera con color
• ¡No reinvente la rueda!
Creación Otra Clase
Abstracción: ¿Qué es una esfera con color?
• Ya creamos una esfera
• Es una esfera con un atributo de color
• operaciones: crear, color y todas las operaciones de la esfera.
TDA Esfera con color:
• Una esfera con color añade a la esfera un atributo color y las siguientes operaciones:– construir(c,r): construye una esfera de radio r y
color c
– color(): devuelve el color
Creación Otra Clase
Diseño de Estructura de Datos:
• basta con una variable Color llamada color para almacenar el color
Creación Otra Clase
Diseño de Algoritmos:• construir(c,r): construir(r); color = c;
• color(): devuelve color
(note que construir(r) se refiere a la operación construir del TDA esfera)
Creación Otra Clase
import java.awt.Color;
public class ColoredSphere extends Sphere {
private Color color;
public ColoredSphere(Color c, double initialRadius) {
super(initialRadius);
color = c;
} // end constructor
public Color getColor() {
// Returns the color of the sphere.
// Precondition: c is the desired color.
// Postcondition: None.
return color;
} // end getColor
} // end ColoredSphere
Creación Otra Clase (modificado del texto)