abstracción de datos la abstracción es un recurso fundamental en la programación orientada a...

22
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El reconocimiento de patrones de comportamiento no solo permite agrupar objetos en clases, sino también reusar clases en aplicaciones diferentes.

Upload: adan-monroy

Post on 06-Feb-2015

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Abstracción de Datos

La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El reconocimiento de patrones de comportamiento no solo permite agrupar objetos en clases, sino también reusar clases en aplicaciones diferentes.

Page 2: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

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.

Tipo de Dato Abstracto

Page 3: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

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 los TDA Inventario y Estacionamiento todavía más.

Tipo de Dato Abstracto

Page 4: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Una dependencia municipal mantiene un inventario permanente de los bienes de uso.La clase Articulo modela a cada bien de uso con atributos código, año de compra, valor actual y rubro (1:Rodados,2:Muebles, 3:Herramientas,4:Equipos) El conjunto de bienes de uso se mantiene en un arreglo parcialmente ocupado con componentes de clase Articulo, encapsulado en una clase InventarioEl sistema GestionInventario actualiza el objeto Inventario mediante las operaciones provistas por la clase.

Caso de Estudio: Inventario

Page 5: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: InventarioInventario

T [] Articulocant:entero

Articulo

codigo:enterorubro:enterovalor:realanio:entero

<<Constructor>>Articulo (c:entero,r:entero, v:entero,a:entero)<<Comandos>>depreciar(p:real)<<Consultas>>equals(Articulo a):boolean

<< Constructores>> Inventario(max:entero)<<Comandos>>insertar (c:Articulo)eliminar (c:Articulo)depreciarRubro (r:entero,p:real)<<Consultas>>cantArt():enteroestaLleno():enterorecuperar (c:entero):Articulopertenece (c:entero):booleanpertenece (c:Articulo):booleanunAnio(a:entero):Inventario

Page 6: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Las clases Inventario y Articulo están asociadas. La clase Inventario encapsula a un arreglo T de elementos de clase Articulo El atributo cant mantiene en cada momento la cantidad de elementos ocupados en el arreglo y también la posición en la que se va a insertar el próximo elemento. Los elementos están “comprimidos”, todos los elementos nulos están al final.

Caso de Estudio: Inventario

Page 7: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Inventario(max:entero) crea un objeto de clase Inventario se crea un arreglo de max elementos, inicialmente nulos. insertar(a:Articulo) Asigna c a la primera posición libre del arreglo, es decir, cant. Aumenta el valor de cant. Requiere que la clase cliente haya verificado que la colección no esté llena y a no sea nuloeliminar(a:Articulo) copia el último elemento en la posición que ocupaba a, de modo que no se conserva el orden en el que se insertan. Decrementa el valor de cant. Si c no pertenece al arreglo no provoca ningún cambio.

Caso de Estudio: Inventario

Page 8: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

depreciarRubro(r:entero,p:float) modifica el valor de cada artículo del rubro r decrementándolo de acuerdo al porcentaje p.

Caso de Estudio: Inventario

Page 9: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

recuperar(c:entero) Retorna, si existe, el artículo con el código cSi no existe retorna nulpertenece(c:entero) Retorna verdadero si un elemento del Inventario tiene el código pertenece(a:Articulo) Decide si algún elemento de la colección es tienen el mismo estado interno que cunAnio(a:entero)genera un objeto de clase Inventario solo con los objetos que corresponden al año a.

Caso de Estudio: Inventario

Page 10: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

class Inventario {//Atributos de Instancia private Articulo[] T; private int cant;/*Constructor Crea una Coleccion con capacidad para max elementos*/public Inventario(int max) {

T= new Articulo [max]; cant = 0;}

class GestiónInventario { … Inventario im = new Inventario(100); …}

Page 11: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

im

length

100

T

cant

0

Page 12: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

//Comandospublic void insertar (Articulo a) {/*Asigna a a la primera posición libre del arreglo, es decir, cant. Aumenta el valor de cant. Requiere que la clase cliente haya verificado que la colección no esté llena y a esté ligado. */ T[cant++] = a; }

class GestiónInventario { … art = new Articulo(119,1,155000,2013); im.insertar(art); …}

Page 13: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

im

length

100

T

cant

0

119

1

155000

2013

Page 14: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

//Consultaspublic int cantArt () { return cant;} public boolean estaLleno() { return cant == T.length;}

Page 15: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public Articulo recuperar (int c){/*Retorna, si existe, el artículo con el código cSi no existe retorna nulo*/ boolean esta = false; for (int i = 0; !esta && i < cantArt() ; i++){ esta = T[i].obtenerCodigo() == c; } if (esta) return T[i]; else return null;}

Observemos que en este caso no existe la posibilidad de que la referencia sea nula, si la clase cliente cumplió con su responsabilidad

Page 16: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public boolean pertenece (int c){/*Retorna verdadero si un elemento del Inventario tiene el código c*/ boolean esta = false; for (int i = 0; !esta && i < cantArt() ; i++){ esta = T[i].obtenerCodigo() == c; } return esta;}

Page 17: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public boolean pertenece (Articulo c){/*Decide si algún elemento de la colección tiene el mismo estado interno que c*/ boolean esta = false; for (int i = 0; !esta && i < cantArt() ; i++){ esta = T[i].equals(c); } return esta;}

Page 18: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public void eliminar ( Articulo c){/* Copia el último elemento en la posición que ocupaba c, de modo que no se conserva el orden en el que se insertan. Decrementa el valor de cant. Si c no pertenece al arreglo no provoca ningún cambio */

boolean esta = false; int i= 0; while (!esta && i < cantArt())//Busca a c if (T [i] == c) esta = true; else i++; if (esta) { cant--; T[i] = T[cant]; T [cant] = null; }}

Page 19: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public void eliminar ( Articulo c){/* Copia el último elemento en la posición que el elemento equivalente a c, de modo que no se conserva el orden en el que se insertan. Decrementa el valor de cant. Si c no pertenece al arreglo no provoca ningún cambio */

boolean esta = false; int i= 0; while (!esta && i < cantArt())//Busca a c if (T [i].equals(c)) esta = true; else i++; if (esta) { cant--; T[i] = T[cant]; T [cant] = null; }}

El diseñador debe especificar si buscamos un elemento con la misma identidad que c o con el mismo estado interno.

Page 20: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public void depreciarRubro(int r, float p){/*modifica el valor de cada artículo del rubro r decrementándolo de acuerdo al porcentaje p.*/for (int i = 0; i < cantArt() ; i++) if(T[i].obtenerRubro() == r){ T[i].depreciar(p); } }

Page 21: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Caso de Estudio: Inventario

public Inventario unAnio(int a){/*genera un objeto de clase Inventario solo con los objetos que corresponden al año a. */Inventario n = new Inventario(cantArt());for (int i = 0; i < cantArt() ; i++) if(T[i].obtenerAnio() == a){ n.insertar(T[i]); }return n; }

Page 22: Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad. El

Notemos que tal como está modelado el inventario no hay ningún servicio que permita “mostrar” todos los artículos del inventario.Toda la entrada y salida se realiza desde la clase cliente, en este caso GestionInventario. La clase cliente no conoce las posiciones de los artículos en el inventario.

Caso de Estudio: Inventario