IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería

Slides:



Advertisements
Presentaciones similares
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
Advertisements

El proceso de desarrollo de software
Encapsulamiento y Abstracción
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 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.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
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 Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
El celular en los parciales SI o NO
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Sonia Rueda Herencia y Polimorfismo
Estructuras de datos y algoritmos
Listas Dinámicas.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Ordenamiento: Quick Sort
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

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

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.

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.

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

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.

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.

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.

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

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

Caso de Estudio: Inventario cant im … length 100

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

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

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.

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.

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;

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;

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

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.

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

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;

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

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

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

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

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