La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería

Presentaciones similares


Presentación del tema: "IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería"— Transcripción de la presentación:

1 Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2017

2 El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño una clase es un patrón de comportamiento para un conjunto de objetos. En la implementación una clase es un módulo de software. Una clase que incluye atributos y servicios define un tipo de dato. Cada servicio representa una operación provista por el tipo. Una clase que incluye atributos y servicios y encapsula sus atributos, define un tipo de dato abstracto. Cualquiera sea la definición el concepto de clase está fuertemente ligado a encapsulamiento y abstracción.

3 Caso de Estudio: Inventario
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 Inventario El sistema GestionInventario actualiza el objeto Inventario mediante las operaciones provistas por la clase.

4 Caso de Estudio: Inventario
Articulo T [] Articulo cant:entero codigo:entero rubro:entero valor:real anio:entero << Constructores>> Inventario(max:entero) <<Comandos>> insertar (c:Articulo) eliminar (c:Articulo) depreciarRubro (r:entero,p:real) ordenar() <<Consultas>> cantArt():entero estaLleno():boolean recuperar (c:entero):Articulo pertenece (c:entero):boolean pertenece (c:Articulo):boolean unAnio(a:entero):Inventario ordenada(): Inventario <<Constructor>> Articulo (c:entero,r:entero, v:entero,a:entero) <<Comandos>> depreciar(p:real) <<Consultas>> equals(a:Articulo ):boolean mayor(a:Articulo ):boolean

5 Caso de Estudio: Inventario
Las clases Inventario y Articulo están asociadas. Los elementos de la clase Inventario están “comprimidos”. Esto es, los elementos ligados a objetos de clase Artículo ocupan las primeras cant posiciones del arreglo y todos los elementos nulos ocupan las posiciones que siguen. Decimos que Inventario modela una colección 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.

6 Caso de Estudio: Inventario
Inventario(max:entero) crea un objeto de clase Inventario se crea un arreglo de max elementos, inicialmente nulos. insertar(a:Articulo) Asigna a a la primera posición libre del arreglo, es decir, cant. Aumenta el valor de cant. Requiere que a esté ligado y la clase cliente haya verificado que la colección no esté llena y no haya otro artículo con el mismo código eliminar(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 a no pertenece al arreglo no provoca ningún cambio.

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

8 Caso de Estudio: Inventario
recuperar(c:entero) Retorna, si existe, el artículo con el código c. Si no existe retorna null pertenece(c:entero) Retorna verdadero si un elemento del Inventario tiene el código c pertenece(a:Articulo) Decide si algún elemento de la colección tiene el mismo estado interno que a unAnio(a:entero)genera un objeto de clase Inventario solo con los objetos que corresponden al año a. ordenar() genera un objeto de clase Inventario con los mismos artículos ordenados por código aplicando la estrategia quick sort

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

10 Caso de Estudio: Inventario
cant im length 100

11 Caso de Estudio: Inventario
//Comandos public 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, a esté ligado y no existe un artículo con el mismo código.*/ T[cant++] = a; } class GestiónInventario { cod = 119; art = new Articulo(cod,1,155000,2013); if (!im.estaLleno()&& !im.pertenece(cod)) im.insertar(art); }

12 Caso de Estudio: Inventario
:Articulo im T cant length 119 1 1 155000 2013 100

13 Caso de Estudio: Inventario
//Consultas public int cantArt () { return cant; } public boolean estaLleno() { return cant == T.length; Observemos que el código de algunas operaciones es exactamente el mismo que el implementado en casos de estudio que hemos presentado antes. Cuando la funcionalidad es análoga se producen muchas oportunidades de reuso.

14 Caso de Estudio: Inventario
public Articulo recuperar (int c){ /*Retorna, si existe, el artículo con el código c Si no existe retorna nulo*/ boolean esta = false; int i = 0; Articulo a = null; while (!esta && i < cantArt()){ esta = T[i].obtenerCodigo() == c; if !esta i++; } if (esta) a= T[i]; return a; No existe la posibilidad de que la referencia sea nula, si la clase cliente cumplió con su responsabilidad, todas los elementos que ocupan las primeras cant posiciones están ligados.

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

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

17 Caso de Estudio: Inventario
public void eliminar ( Articulo a){ /* 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 a no pertenece al arreglo no provoca ningún cambio */ boolean esta = false; int i= 0; while (!esta && i < cantArt()) if (T [i] == a) esta = true; else i++; if (esta) { cant--; T[i] = T[cant]; T [cant] = null; }

18 Caso de Estudio: Inventario
public void eliminar ( Articulo a){ /* Copia el último elemento en la posición que el elemento equivalente a a, de modo que no se conserva el orden en el que se insertan. Decrementa el valor de cant. Si a 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(a)) 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.

19 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); } T[i] es de clase Articulo de modo que puede recibir el mensaje depreciar

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

21 Caso de Estudio: Inventario
public void ordenar(){ }

22 Caso de Estudio: Inventario
Repaso: Algoritmo Quick Sort Algoritmo avanzar DE izq, der DS posPiv si izq >= der posPiv  izq sino si T izq >= T izq+1 intercambiar izq izq+1 posPiv  avanzar izq+1,der posPiv  retroceder izq,der

23 Caso de Estudio: Inventario
Repaso: Algoritmo Quick Sort Algoritmo retroceder DE izq, der DS posPiv si izq >= der posPiv  izq sino si T izq <= T der posPiv  retroceder izq,der-1 intercambiar izq+1,der posPiv  avanzar izq,der-1

24 Caso de Estudio: Inventario
Repaso: Algoritmo Quick Sort Algoritmo QuickSort DE ini,Fin si ini < fin si ini+1= fin Comparar y Acomodar sino pospivot  AcomodarPivot ini,fin QuickSort ini,pospivot-1 QuickSort pospivot+1,fin

25 Caso de Estudio: Inventario
Ejercicio Propuesto: public Inventario ordenada(){ }


Descargar ppt "IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería"

Presentaciones similares


Anuncios Google