Presentación de PowerPoint

Anuncio
5/5/2016
Tipos de Datos Abstractos
Tipos de Datos Abstractos
Introducción a la Programación
Orientada a Objetos
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.
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.
Tipos de Datos Abstractos
Introducción a la Programación
Orientada a Objetos
Al definir un tipo de dato abstracto, se extienden
las facilidades provistas por el lenguaje con una
nueva abstracción.
Una clase que modela los atributos y el
comportamiento de una colección de objetos,
define un tipo de dato.
Tipos de Datos Abstractos
Ejemplo:
Vector
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.
La clase que encapsula al arreglo brinda operaciones para
establecer y obtener un elemento y para comparar, copiar y
clonar vectores.
<<constructores>>
Vector (max : entero)
<<comandos>>
establecerElem (pos : entero,
elem : real)
copy (v: Vector)
Asume que la
Posición es válida
Introducción a la Programación
Orientada a Objetos
Introducción a la Programación
Orientada a Objetos
El vector se representa mediante un arreglo de números
reales.
real [] vec
El comentario asociado al método establecerElem
establece una precondición, un compromiso para la
clase cliente.
Tipos de Datos Abstractos
Tipos de Datos Abstractos
public class Vector {
Vector
Asume que las
longitudes
son consistentes
// Constructor
public Vector(int m)
vec = new float[m];
}
{
// Comandos
public void establecerElem(int p,float val) {
//Asume que la posición es válida
vec[p] = val;
Introducción a la Programación
Orientada a Objetos
<<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 : entero) : Vector
equals (v : Vector) : boolean
clone () : Vector
private float[] vec;
Asume que la posición
es válida
Introducción a la Programación
Orientada a Objetos
real [] vec
}
vec es una variable que referencia a un arreglo,
Vector es una clase a partir de la cual se crearán objetos
1
5/5/2016
Tipos de Datos Abstractos
Tipos de Datos Abstractos
// Consultas
// Consultas
public boolean existePos (int p) {
return (p >= 0 && p < vec.length);
}
return vec[p];
}
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ón
Orientada a Objetos
//Asume que la posición es válida
//Asume que las longitudes son consistentes
Introducción a la Programación
Orientada a Objetos
public float obtenerElem (int p){
public float prodEscalar(Vector v) {
}
public int cantElems () {
return vec.length;
}
Tipos de Datos Abstractos
Tipos de Datos Abstractos
// Consultas
// Consultas
public Vector escalarXVector(float esc)
{
Vector aux = new Vector(vec.length);
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);
Introducción a la Programación
Orientada a Objetos
//Asume que las longitudes son consistentes
}
return aux;
for (int i=0;i<vec.length;i++)
aux.establecerElem(i,vec[i]*esc);
return aux;
Introducción a la Programación
Orientada a Objetos
public Vector suma (Vector v){
}
}
• 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
Tipos de Datos Abstractos
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ón
Orientada a Objetos
Tipos de Datos Abstractos
Introducción a la Programación Orientada a Objetos
2
5/5/2016
Tipos de Datos Abstractos
v2 = v2.escalarXVector (5);
System.out.println("Vector v2 X escalar
");
mostrarVector(v2);
// Constructor
public Vector(int m) {
vec=new float[m];
}
Introducción a la Programación
Orientada a Objetos
…
if (v1.cantElems() == v2.cantElems()) {
System.out.println("Vector suma ");
v3 = v1.suma(v2);
mostrarVector(v3);}
else ...
Administración de Memoria
public class Vector {
private float[] vec;
v1
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.
vec
length
5
Aclaración
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ón
Orientada a Objetos
Java brinda en el paquete java.util una clase
llamada Vector con características muy
diferentes a la que hemos definido.
3
Descargar