Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el...

28
Introducción a la Programación Orientada a Objetos 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. Tipos de Datos Abstractos

Transcript of Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el...

Page 1: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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.

Tipos de Datos Abstractos

Page 2: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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.

Tipos de Datos Abstractos

Page 3: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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.

Page 4: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Vector

real [] vec

<<constructores>>Vector (max : entero) <<comandos>>establecerElem (pos : entero, elem : real)copy (v: Vector)

Tipos de Datos AbstractosVector

Asume que la posiciónes 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.

Page 5: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Vector

real [] vec

<<consultas>>existePos (p : entero): booleanexisteElem (r : real) : booleanobtenerElem (p : entero) : realcantElems () : enteroprodEscalar(v : Vector) : realsuma (v : Vector ) : VectorescalarXVector(e : real) : Vectorequals (v : Vector) : booleanclone () : Vector

Tipos de Datos AbstractosVector

Asume que las longitudesson consistentes

Asume que la posiciónes válida

Page 6: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

public class Vector {

private float[] vec;

\\ 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; }

vec es una variable que referencia a un objeto,

Vector es una clase a partir de la cual se crearán objetos

Page 7: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic boolean existePos (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 int cantElems () { return vec.length; }

Page 8: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic 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; }

Page 9: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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;}

Page 10: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultas public Vector escalarXVector(float esc) { Vector aux = new Vector(vec.length); for (int i=0;i<vec.length;i++) aux.establecerElem(i,vec[i]*esc); return aux;}

Page 11: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic 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.

Page 12: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic Vector clone() { Vector v= new Vector(vec.length); for (int i=0; i<vec.length;i++) v.establecerElemento(i, vec[i]); return v; }

Page 13: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

• 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 AbstractosVector

Page 14: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Vector

real [] vec

<<constructores>>Vector (max : entero) <<comandos>>establecerElem (pos : entero, elem : real)copy (v: Vector)

Tipos de Datos AbstractosVector

Asume que la posiciónes válida

Los elementos del cadavector se referencian desde los clientes con

posiciones 1 a la cantidad de elementos

El comentario asociado al método establecerElem no describe su significado sino que establece una precondición, un compromiso para la clase cliente.

Page 15: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

0 1 2 3 4 5

Vector v1;

v1.obtenerElem (3);

subíndice

posición 1 2 3 4 5 6

Page 16: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Vector

real [] vec

<<consultas>>existePos (p : entero): booleanexisteElem (r : real) : booleanobtenerElem (p : entero) : realcantElems () : enteroprodEscalar(v : Vector) : realsuma (v : Vector ) : VectorescalarXVector(e : real) : Vectorequals (v : Vector) : booleanclone () : Vector

Tipos de Datos AbstractosVector

Asume que las longitudesson consistentes

Asume que la posiciónes válida

Page 17: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

public class Vector {

private float[] vec;

\\ 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-1] = val; }vec es una variable que referencia a un objeto,

Vector es una clase a partir de la cual se crearán objetos

Page 18: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic boolean existePos (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 int cantElems () { return vec.length; }

Page 19: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic 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; }

Page 20: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultas public Vector escalarXVector(float esc) { Vector aux = new Vector(vec.length); for (int i=0;i<vec.length;i++)

aux.establecerElem(i+1,vec[i]*esc); return aux;}

Page 21: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

Tipos de Datos AbstractosVector

\\ Consultaspublic 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; }

Page 22: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

• 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

Tipos de Datos AbstractosVector

Page 23: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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.

Tipos de Datos AbstractosVector

Page 24: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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.

Tipos de Datos AbstractosVector

Page 25: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

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 ...;

Tipos de Datos AbstractosVector

Page 26: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

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 ...

v2 = v2.escalarXVector (5); System.out.println("Vector v2 X escalar ");mostrarVector(v2);

Tipos de Datos AbstractosVector

Page 27: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

Introducción a la Programación Orientada a Objetos

public class Vector { private float[] vec; \\ Constructor public Vector(int m) { vec=new float[m]; }

vecVector v1;v1=new Vector(5);

v1

Administración de Memoria

Se declara una variable v1 y se crea un objeto de la clase Vector cuya referencia se almacena en v1.

5length

Page 28: Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.

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.

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.

Aclaración