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.
Ilustración Creación Clase 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 * π * radio 2 area(): devuelve (4.0 * π * radio 3 ) / 3.0 circunferencia(): devuelve 2.0 * radio * π
Ilustración Creación Clase (modificado del texto) 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
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.
Creación Otra Clase 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 (modificado del texto) 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