1 / 28

Tipos de Datos Abstractos

Tipos de Datos Abstractos. Una clase que modela los atributos y el comportamiento de una colección de objetos , define un tipo de dato . Si en el modelo se encapsula la representación de los atributos y la implementación de las operaciones, el tipo de dato es abstracto .

dash
Download Presentation

Tipos de Datos Abstractos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tipos de Datos Abstractos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de dato. Si en el modelo se encapsula la representación de los atributos y la implementación de las operaciones, el tipo de dato es abstracto. La interface describe qué pueden hacer los objetos de una clase, la implementación establece cómo lo hacen. Introducción a la ProgramaciónOrientada a Objetos

  2. Tipos de Datos Abstractos Cuando un programador define un tipo de dato abstracto, extiende las facilidades provistas por el lenguaje con una nueva abstracción. Algunos tipos son generales y más fáciles de reusar. Otros son más específicos de una aplicación en particular. El TDA String provisto por Java es muy general y seguramente podrá usarse en aplicaciones muy diversas, nuestro TDA Racional es más específico y el TDA Ciudad todavía más. Introducción a la ProgramaciónOrientada a Objetos

  3. Tipos de Datos AbstractosVector Implementar un TDA Vector que brinde operaciones para calcular el producto escalar de un vector, el producto vectorial entre dos vectores, la suma de dos vectores, etc. El vector se representa mediante un arreglo de números reales. La clase que encapsula al arreglo brinda operaciones para establecer y obtener un elemento y para comparar, copiar y clonar vectores. Introducción a la ProgramaciónOrientada a Objetos

  4. Tipos de Datos AbstractosVector Vector real [] vec <<constructores>> Vector (max : entero) <<comandos>> establecerElem (pos : entero, elem : real) copy (v: Vector) Asume que la posición es válida El comentario asociado al método establecerElem no describe su significado sino que establece una precondición, un compromiso para la clase cliente. Introducción a la ProgramaciónOrientada a Objetos

  5. Tipos de Datos AbstractosVector Vector Asume que la posición es válida real [] vec <<consultas>> existePos (p : entero): boolean existeElem (r : real) : boolean obtenerElem (p : entero) : real cantElems () : entero prodEscalar(v : Vector) : real suma (v : Vector ) : Vector escalarXVector(e : real) : Vector equals (v : Vector) : boolean clone () : Vector Asume que las longitudes son consistentes Introducción a la ProgramaciónOrientada a Objetos

  6. Tipos de Datos AbstractosVector public class Vector { private float[] vec; \\ Constructor public Vector(int m) { vec=new float[m]; } \\ Comandos publicvoidestablecerElem(intp,float val) { \\Asume que la posición es válida vec[p] = val; } veces una variable que referencia a un objeto, Vectores una clase a partir de la cual se crearán objetos Introducción a la ProgramaciónOrientada a Objetos

  7. Tipos de Datos AbstractosVector \\ Consultas public booleanexistePos (int p) { return (p >= 0 && p <vec.length); } public float obtenerElem (int p){ \\Asume que la posición es válida return vec[p]; } public intcantElems () { return vec.length; } Introducción a la ProgramaciónOrientada a Objetos

  8. Tipos de Datos AbstractosVector \\ Consultas public float prodEscalar(Vector v) { \\Asume que las longitudes son consistentes float pe=0; for (int i=0;i<vec.length;i++) pe= pe+v.obtenerElem(i)*vec[i]; return pe; } Introducción a la ProgramaciónOrientada a Objetos

  9. Tipos de Datos AbstractosVector \\ Consultas public Vector suma (Vector v){ \\Asume que las longitudes son consistentes Vector aux=new Vector(vec.length); float r ; for (int i=0;i<vec.length;i++) { r=vec[i]+ v.obtenerElem(i)) ; aux.establecerElem(i,r); } return aux; } Introducción a la ProgramaciónOrientada a Objetos

  10. Tipos de Datos AbstractosVector \\ Consultas public Vector escalarXVector(float esc) { Vector aux = new Vector(vec.length); for (inti=0;i<vec.length;i++) aux.establecerElem(i,vec[i]*esc); return aux; } Introducción a la ProgramaciónOrientada a Objetos

  11. Tipos de Datos AbstractosVector \\ Consultas public boolean equals(Vector v) { int i=0; boolean iguales=cantElems()==v.cantElems(); while (i<vec.length)&&(iguales)) { iguales= (vec[i]==v.obtenerElemento(i)); i++;} return iguales; } MUY IMPORTANTE Observe que vec es un arreglo y v es un objeto de clase Vector. La subindicación es una operación válida para vec pero no para v. Los servicios cantElems() y obtenerElemento(j) son válidos para v pero no para vec. Introducción a la ProgramaciónOrientada a Objetos

  12. Tipos de Datos AbstractosVector \\ Consultas public Vector clone() { Vector v= new Vector(vec.length); for (int i=0; i<vec.length;i++) v.establecerElemento(i, vec[i]); return v; } Introducción a la ProgramaciónOrientada a Objetos

  13. Tipos de Datos AbstractosVector • La entrada y salida se realiza desde la clase cliente. • La estructura está completa y la cantidad de elementos se define en el momento de la creación • Todos los elementos ya están ingresados cuando empieza el procesamiento Introducción a la ProgramaciónOrientada a Objetos

  14. Tipos de Datos AbstractosVector Los elementos del cada vector se referencian desde los clientes con posiciones 1 a la cantidad de elementos Vector real [] vec <<constructores>> Vector (max : entero) <<comandos>> establecerElem (pos : entero, elem : real) copy (v: Vector) Asume que la posición es válida El comentario asociado al método establecerElem no describe su significado sino que establece una precondición, un compromiso para la clase cliente. Introducción a la ProgramaciónOrientada a Objetos

  15. Tipos de Datos AbstractosVector 0 1 2 3 4 5 subíndice 1 2 3 4 5 6 posición Vector v1; v1.obtenerElem (3); Introducción a la ProgramaciónOrientada a Objetos

  16. Tipos de Datos AbstractosVector Vector Asume que la posición es válida real [] vec <<consultas>> existePos (p : entero): boolean existeElem (r : real) : boolean obtenerElem (p : entero) : real cantElems () : entero prodEscalar(v : Vector) : real suma (v : Vector ) : Vector escalarXVector(e : real) : Vector equals (v : Vector) : boolean clone () : Vector Asume que las longitudes son consistentes Introducción a la ProgramaciónOrientada a Objetos

  17. Tipos de Datos AbstractosVector public class Vector { private float[] vec; \\ Constructor public Vector(int m) { vec=new float[m]; } \\ Comandos publicvoidestablecerElem(intp,float val) { \\Asume que la posición es válidavec[p-1] = val; } vec es una variable que referencia a un objeto, Vector es una clase a partir de la cual se crearán objetos Introducción a la ProgramaciónOrientada a Objetos

  18. Tipos de Datos AbstractosVector \\ Consultas public booleanexistePos (int p) { return (p > 0 && p <= vec.length); } public float obtenerElem (int p){ \\Asume que la posición es válida return vec[p-1]; } public intcantElems () { return vec.length; } Introducción a la ProgramaciónOrientada a Objetos

  19. Tipos de Datos AbstractosVector \\ Consultas public float prodEscalar(Vector v) { \\Asume que las longitudes son consistentes float pe=0; for (int i=0;i<vec.length;i++) pe= pe+v.obtenerElem(i+1)*vec[i]; return pe; } Introducción a la ProgramaciónOrientada a Objetos

  20. Tipos de Datos AbstractosVector \\ Consultas public Vector escalarXVector(float esc) { Vector aux = new Vector(vec.length); for (inti=0;i<vec.length;i++) aux.establecerElem(i+1,vec[i]*esc); return aux; } Introducción a la ProgramaciónOrientada a Objetos

  21. Tipos de Datos AbstractosVector \\ Consultas public boolean equals(Vector v) { int i=0; boolean iguales=cantElems()==v.cantElems(); while (i<vec.length)&&(iguales)) { iguales= (vec[i]==v.obtenerElemento(i+1)); i++;} return iguales; } public Vector clone() { Vector v= new Vector(vec.length); for (int i=0; i<vec.length;i++) v.establecerElemento(i+1, vec[i]); return v; } Introducción a la ProgramaciónOrientada a Objetos

  22. Tipos de Datos AbstractosVector • La entrada y salida se realiza desde la clase cliente. • La estructura está completa y la cantidad de elementos se define en el momento de la creación • Todos los elementos ya están ingresados cuando empieza el procesamiento • Las posiciones para las clases cliente comienzan en 1 Introducción a la ProgramaciónOrientada a Objetos

  23. Tipos de Datos AbstractosVector Una clase que incluye un conjunto de métodos pero no tiene atributos de instancia no define un tipo de dato. Brinda servicios pero no van a crearse instancias de la clase. Una clase que define atributos de instancia va a ser usada para crear objetos en ejecución. Si los atributos están encapsulados la clase define un TDA. Un tipo de dato abstracto es una unidad de código que si está bien diseñada y testeada puede ser reusada en diferentes sistemas. Introducción a la ProgramaciónOrientada a Objetos

  24. Tipos de Datos AbstractosVector La clase TestVectores definida a continuación no define un tipo de dato. Su función es verificar los servicios provistos por Vector. De acuerdo a lo establecido en el diagrama, es responsabilidad del cliente de la clase Vector establecer los chequeos sobre las posiciones y sobre las longitudes. No podemos garantizar que la clase Vector es correcta, pero sí que los servicios verifican la especificación para los casos de prueba elegidos. Introducción a la ProgramaciónOrientada a Objetos

  25. Tipos de Datos AbstractosVector public class TestVector { public static void main (String arg[]) { Vector v1,v2,v3; v1 = generaVector(m); mostrarVector(v1); v2 = generaVector(m); mostrarVector(v2); if (v1.cantElems() == v2.cantElems()) { System.out.println("Producto escalar "+ v1.prodEscalar(v2)); } else ...; Introducción a la ProgramaciónOrientada a Objetos

  26. Tipos de Datos AbstractosVector … if (v1.cantElems() == v2.cantElems()) { System.out.println("Vector suma "); v3 = v1.suma(v2); mostrarVector(v3);} else ... v2 = v2.escalarXVector (5); System.out.println("Vector v2 X escalar "); mostrarVector(v2); Introducción a la ProgramaciónOrientada a Objetos

  27. Administración de Memoria public class Vector { private float[] vec; \\ Constructor public Vector(int m) { vec=new float[m]; } v1 vec Vector v1; v1=new Vector(5); Se declara una variable v1 y se crea un objeto de la clase Vector cuya referencia se almacena en v1. length 5 Introducción a la Programación Orientada a Objetos

  28. Aclaración Java brinda en el paquete java.util una clase llamada Vector con características muy diferentes a la que hemos definido. Si quisiéramos implementar la clase especificada por el diagrama y también usar la clase Vector provista por el paquete java.util, deberíamos utilizar un nombre diferente. Introducción a la ProgramaciónOrientada a Objetos

More Related