La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Presentaciones similares


Presentación del tema: "INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS"— Transcripción de la presentación:

1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Caso de estudio: Inventario Caso de estudio: Libreta de contactos Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2017

2 TEMARIO Caso de estudio: inventario.
Caso de estudio: libreta de contactos. Búsqueda binaria. Intercalar dos estructuras ordenadas. Misma estructura para problemas similares. Introducción a la Programación Orientada a Objetos IPOO

3 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. Introducción a la Programación Orientada a Objetos IPOO

4 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: Rodados, Muebles, Herramientas, Equipos. Introducción a la Programación Orientada a Objetos IPOO

5 CASO DE ESTUDIO: INVENTARIO
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. Introducción a la Programación Orientada a Objetos IPOO

6 equals(i: inventario): boolean Articulo
<<atributos de instancia>> t [] Articulo cant: 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(a: Articulo): boolean unAnio(a: entero): Inventario equals(i: inventario): boolean Articulo <<atributos de instancia>> codigo: entero rubro: entero valor: real anio: entero <<Consultas>> Articulo(c:entero, r:entero, v:entero, a:entero) <<Comandos>> depreciar(p: real) equals(a: Articulo): boolean Mayor(a: Articulo): boolean

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

8 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 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. Introducción a la Programación Orientada a Objetos IPOO

9 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. ordenar() reacomoda el inventario ordenando los artículos por código aplicando la estrategia quick sort. Introducción a la Programación Orientada a Objetos IPOO

10 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. Introducción a la Programación Orientada a Objetos IPOO

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

12 CASO DE ESTUDIO: INVENTARIO
cant length im 100

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

14 CASO DE ESTUDIO: INVENTARIO
cant length im :Articulo 119 1 1 155000 2013 100

15 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 la clase Correo. Cuando la funcionalidad es análoga se producen muchas oportunidades de reuso.

16 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; for ( 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, todas los elementos que ocupan las primeras cant posiciones están ligados.

17 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; Introducción a la Programación Orientada a Objetos IPOO

18 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; Introducción a la Programación Orientada a Objetos IPOO

19 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()) if (t[i] == c) esta = true; else i++; if (esta) { cant--; t[i] = t[cant]; t[cant] = null; } Introducción a la Programación Orientada a Objetos IPOO

20 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()) 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. Introducción a la Programación Orientada a Objetos IPOO

21 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); } Introducción a la Programación Orientada a Objetos IPOO

22 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; Introducción a la Programación Orientada a Objetos IPOO

23 TEMARIO Caso de estudio: inventario.
Caso de estudio: libreta de contactos. Búsqueda binaria. Intercalar dos estructuras ordenadas. Misma estructura para problemas similares. Introducción a la Programación Orientada a Objetos IPOO

24 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Una libreta de contactos mantiene el nombre, número de teléfono móvil, número de teléfono fijo y de un conjunto de personas u organizaciones. La clase Libreta_Contactos encapsula una colección de elementos de clase Contacto, representada con un arreglo parcialmente ocupado. La cantidad de componentes del arreglo es fija, la cantidad de componentes ligadas es variable. Todas las componentes ligadas están en las primeras cant posiciones. Los elementos se mantienen ordenados alfabéticamente por nombre. Introducción a la Programación Orientada a Objetos IPOO

25 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
La clase cliente es responsable de controlar que haya lugar en la libreta antes de agregar un nuevo contacto y que no exista un contacto con el mismo nombre que el nuevo. El método pertenece utiliza la estrategia de búsqueda binaria para decidir si la libreta contiene un contacto con el mismo nombre que el contacto que recibe como parámetro. El método intercalar, intercala ordenadamente dos libretas en una sola. Si dos contactos coinciden en el nombre, deja el contacto de la libreta que recibe el mensaje. Introducción a la Programación Orientada a Objetos IPOO

26 <<atributos de instancia>> nombre: String nroMovil: String
Libreta_Contactos <<atributos de instancia>> t [] Contacto cant: entero << Constructores>> Libreta_Contactos(max: entero) <<Comandos>> nuevo(nc: Contacto) eliminar(c: Contacto) <<Consultas>> cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Contacto <<atributos de instancia>> nombre: String nroMovil: String nroFijo: String String <<Constructor>> Contacto(n: String) <<Comandos>> <<Consultas>> igual(c: Contacto): boolean mayor(c: Contacto): boolean

27 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
class Libreta_Contactos{ //Atributos de Instancia private Contacto[] t; private int cant; /*Constructor. Crea una coleccion con capacidad para max elementos*/ public Libreta_Contactos(int max) { t = new Contacto[max]; cant = 0; }

28 CASO DE ESTUDIO: INVENTARIO
:Libreta_Contactos t cant length lib 6 Libreta_Contactos lib = Libreta_Contactos(6);

29 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Si la libreta de contactos se mantiene ordenada por nombre, el servicio nuevo no puede implementarse asignando el nuevo contacto a la primera posición libre. Para comprender cómo implementar el servicio nuevo comencemos visualizando la libreta de contactos a través de una grilla con capacidad para 6 contactos. Introducción a la Programación Orientada a Objetos IPOO

30 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Observemos que la grilla es un modelo con un alto nivel de abstracción, no modelamos objetos y referencias, nos concentramos en el ordenamiento. Nombre Número de Móvil Número Fijo Introducción a la Programación Orientada a Objetos IPOO

31 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Consideremos que se agrega un nuevo contacto para Davini Laura, como la grilla está vacía el primer contacto ocupa la primera posición en la grilla. Notemos que no interesan los otros atributos porque la libreta se ordena por nombre. Nombre Número de Móvil Número Fijo  Davini Laura  … Introducción a la Programación Orientada a Objetos IPOO

32 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Polo Leo. Como el nuevo contacto es mayor alfabéticamente a Davini Laura, se agrega al final. Nombre Número de Móvil Número Fijo  Davini Laura  …  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

33 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Avila Mario. Como el nuevo contacto es menor alfabéticamente que Davini Laura, se agrega al principio, arrastrando los que siguen una posición hacia abajo. Nombre Número de Móvil Número Fijo  Davini Laura  …  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

34 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Davini Laura  …  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

35 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Davini Laura  …  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

36 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Davini Laura  …  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

37 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Parodi Mario. Como el nuevo contacto es menor alfabéticamente que Polo Leo, se agrega en la posición de este contacto, arrastrando a Polo Leo Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

38 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

39 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Ramos Marisa. Como el nuevo contacto es mayor alfabéticamente que el último contacto, se agrega al final. Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo Introducción a la Programación Orientada a Objetos IPOO

40 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Castro Luis. Como el nuevo contacto es menor alfabéticamente que Davini Laura se arrastran todos los contactos a partir de Davini Laura. Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

41 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Se agrega ahora un nuevo contacto para Castro Luis. Como el nuevo contacto es menor alfabéticamente que Davini Laura se arrastran todos los contactos a partir de Davini Laura. Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

42 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Castro Luis  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

43 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
El servicio nuevo tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto es: Menor a todos Mayor a todos Mayor al primero pero Menor que el último Asumimos que la clase cliente controla que la libreta no está llena. Introducción a la Programación Orientada a Objetos IPOO

44 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
La grilla nos permite visualizar la libreta de contactos de manera abstracta para mostrar cómo se agrega cada nuevo contacto en cada caso. El diagrama de objetos, que también es una abstracción, es útil para graficar cómo se administra la memoria, pero no es una buena herramienta para diseñar el algoritmo nuevo. Introducción a la Programación Orientada a Objetos IPOO

45 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Algoritmo nuevo DE nc Buscar la posición del primer elemento mayor a nc Arrastrar todos los elementos a partir de esa posición Asignar nc a la posición Incrementar la cantidad de contactos public void nuevo(Contacto nc){ //Requiere que la colección no esté llena int pos = posInsercion(nc,cant); arrastrarDsp (pos, cant - pos); t[pos] = nc; cant++; }

46 Caso trivial: Si la cantidad de elementos es 0, la posición de inserción es 0
Caso trivial: Si nc es mayor que el último nombre, la posición es la última Caso Recursivo: buscar la posición de inserción entre las n-1 componentes private int posInsercion (Contacto nc,int n){ /* Retornar la posición del primer elemento mayor a nc, o 0 si no existe*/ int pos = 0; if (n > 0) if (nc.mayor(t[n-1]) pos = n; else pos = posInsercion (nc,--n); return pos; }

47 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
private void arrastrarDsp (int pos,int n){ if (n > 0){ t[pos+n] = t[pos+n-1]; arrastrarDsp(pos,--n); } ¿Qué pasa si ya existe un contacto con ese nombre? Modifique la implementación de nuevo considerando que es su responsabilidad controlar si ya existe un contacto con ese nombre y si es así no agrega nc. Introducción a la Programación Orientada a Objetos IPOO

48 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Castro Luis  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Supongamos que se decide eliminar el contacto Castro Luis. Los contactos que siguen deben arrastrarse una posición hacia arriba. Introducción a la Programación Orientada a Objetos IPOO

49 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

50 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

51 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

52 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

53 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Nombre Número de Móvil Número Fijo  Avila Mario  …  Davini Laura  Parodi Mario  Polo Leo  Ramos Marisa Introducción a la Programación Orientada a Objetos IPOO

54 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
El servicio eliminar tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto: No pertenece a la libreta Es el primero Es el último Es Mayor al primero pero Menor que el último Observemos que con la modificación en el comando nuevo no puede haber dos contactos con el mismo nombre

55 CASO DE ESTUDIO: LIBRETA DE CONTACTOS
Algoritmo eliminar DE c Buscar la posición del c Si existe Arrastrar los elementos desde posición hasta el último Decrementar la cantidad de contactos public void eliminar(Contacto c){ /*Elimina, si existe, el contacto c */ int pos = posElemento(c,cant); if (pos < cant){ arrastrarAnt(pos,cant-pos-1); cant--; }

56 <<atributos de instancia>> nombre: String nroMovil: String
Libreta_Contactos <<atributos de instancia>> t [] Contacto cant: entero << Constructores>> Libreta_Contactos(max: entero) <<Comandos>> nuevo(nc: Contacto) eliminar(c: Contacto) <<Consultas>> cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Contacto <<atributos de instancia>> nombre: String nroMovil: String nroFijo: String String <<Constructor>> Contacto(n: String) <<Comandos>> <<Consultas>> igual(c: Contacto): boolean mayor(c: Contacto): boolean Busca un contacto con el mismo nombre que c aplicando Búsqueda Binaria

57 TEMARIO Caso de estudio: inventario.
Caso de estudio: libreta de contactos. Búsqueda binaria. Intercalar dos estructuras ordenadas. Misma estructura para problemas similares. Introducción a la Programación Orientada a Objetos IPOO

58 BÚSQUEDA BINARIA La búsqueda binaria requiere que la estructura esté ordenada y consiste en partirla en mitades, considerando que el elemento buscado puede ser: igual al que está en el medio menor que el que está en el medio mayor que el que está en el medio

59 BÚSQUEDA BINARIA 3 12 Si busco el número 17 ÉXITO 17 17 Mitad 22 23 45

60 BÚSQUEDA BINARIA 3 3 12 12 Si busco el número 23
Descarto la primera mitad y busco en la segunda 17 17 Mitad 22 23 45

61 BÚSQUEDA BINARIA 3 12 Si busco el número 23 ÉXITO 17 17 22 Mitad 23 45

62 BÚSQUEDA BINARIA 3 3 12 12 Si busco el número 21
Descarto la primera mitad y busco en la segunda Mitad 17 17 22 23 45

63 BÚSQUEDA BINARIA 3 12 Si busco el número 21
Descarto la segunda mitad y busco en la primera 17 17 22 23 23 Mitad 45 45

64 BÚSQUEDA BINARIA 3 12 Si busco el número 21 NO ESTÁ 17 17 Mitad 22 22
23 45 45

65 Algoritmo Búsqueda Binaria
si el elemento que está en la mitad es el buscado EXISTE sino si hay un solo elemento y no es el buscado NO EXISTE si el elemento que está en la mitad es menor al buscado Descartar la primera mitad Buscar en la segunda mitad Descartar la segunda mitad Buscar en la primera mitad Refinamos la solución

66 BÚSQUEDA BINARIA Algoritmo BúsquedaBinaria DE ini,fin,Elem Mitad(ini+fin)/2 si Lmitad = Elem EXISTE si ini >= fin NO EXISTE sino si Lmitad < Elem ini = mitad+1 BuscarBinaria ini,fin,Elem fin = mitad-1 BusquedaBinaria ini,fin,Elem El algoritmo es independiente del lenguaje de implementación

67 BÚSQUEDA BINARIA Casos de prueba Cantidad de elementos: 1, 2, 10, 15 Buscar: el primero, el último, menor al primero, mayor al último

68 TEMARIO Caso de estudio: inventario.
Caso de estudio: libreta de contactos. Búsqueda binaria. Intercalar dos estructuras ordenadas. Misma estructura para problemas similares. Introducción a la Programación Orientada a Objetos IPOO

69 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 Introducción a la Programación Orientada a Objetos IPOO

70 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 Introducción a la Programación Orientada a Objetos IPOO

71 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 Introducción a la Programación Orientada a Objetos IPOO

72 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 Introducción a la Programación Orientada a Objetos IPOO

73 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 Introducción a la Programación Orientada a Objetos IPOO

74 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 Introducción a la Programación Orientada a Objetos IPOO

75 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 Introducción a la Programación Orientada a Objetos IPOO

76 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 Introducción a la Programación Orientada a Objetos IPOO

77 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 Introducción a la Programación Orientada a Objetos IPOO

78 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 Introducción a la Programación Orientada a Objetos IPOO

79 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 Introducción a la Programación Orientada a Objetos IPOO

80 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 Introducción a la Programación Orientada a Objetos IPOO

81 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 Introducción a la Programación Orientada a Objetos IPOO

82 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 Introducción a la Programación Orientada a Objetos IPOO

83 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 Introducción a la Programación Orientada a Objetos IPOO

84 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 Introducción a la Programación Orientada a Objetos IPOO

85 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 55 Introducción a la Programación Orientada a Objetos IPOO

86 INTERCALAR DOS ESTRUCTURAS ORDENADAS
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 55 60 72 Introducción a la Programación Orientada a Objetos IPOO

87 INTERCALAR DOS ESTRUCTURAS ORDENADAS
Algoritmo Intercalar Mientras no lleguemos al final de ninguna colección Comparar elemento a elemento e insertar el menor en una nueva colección Si llegamos al final de la primera colección Insertar los elementos que quedan de la segunda colección en la nueva Sino Insertar los elementos que quedan de la primer colección en la nueva Introducción a la Programación Orientada a Objetos IPOO

88 INTERCALAR DOS ESTRUCTURAS ORDENADAS
Algoritmo Intercalar Crear nueva i1  0 i2  0 k  0 mientras i1 < n1 y i2 < n2 si L1i1 es menor que L2i2 insertar Li1 en Nuevak i1++ k++ sino insertar Li2 en Nuevak i2++ k++ Insertar el resto ¿Qué ocurre si un elemento pertenece a las dos estructuras? Modifique el algoritmo para que solo se inserte uno de los elementos.

89 TEMARIO Caso de estudio: inventario.
Caso de estudio: libreta de contactos. Búsqueda binaria. Intercalar dos estructuras ordenadas. Misma estructura para problemas similares. Introducción a la Programación Orientada a Objetos IPOO

90 Caso de estudio: Libreta de contactos
Libreta_Contactos <<atributos de instancia>> t [] Contacto cant: entero << Constructores>> Libreta_Contactos(max: entero) <<Comandos>> nuevo(nc: Contacto) eliminar(c: Contacto) <<Consultas>> cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Contacto <<atributos de instancia>> nombre: String nroMovil: String nroFijo: String String ciudad: String <<Constructor>> Contacto(n: String) <<Comandos>> <<Consultas>> igual(c: Contacto): boolean mayor(c: Contacto): boolean ¿Qué cambios hay que hacer en Libreta_Contactos?

91 Caso de estudio: Libreta de contactos
Libreta_Contactos <<atributos de instancia>> t [] Contacto cant: entero << Constructores>> Libreta_Contactos(max: entero) <<Comandos>> nuevo(nc: Contacto) eliminar(c: Contacto) <<Consultas>> cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Contacto <<atributos de instancia>> nombre: String nroMovil: String nroFijo: String String ciudad: String <<Constructor>> Contacto(n: String) <<Comandos>> <<Consultas>> igual(c: Contacto): boolean mayor(c: Contacto): boolean ¿Y si la libreta tiene que quedar ordenada por nroMovil?

92 Caso de estudio: Nómina de Pacientes
Nomina_Pacientes <<atributos de instancia>> t [] Paciente cant: entero << Constructores>> Nomina_Pacientes(max: entero) <<Comandos>> nuevo(p: Paciente) eliminar(p: Paciente) <<Consultas>> cantPacientes(): entero cantPacientesOS(os:String):entero estaLlena(): entero pertenece(c: Paciente): boolean intercalar(l: Nomina_Pacientes): Paciente <<atributos de instancia>> tipoDoc:char nroDoc:entero fechaNac:Fecha nombre: String os:String <<Constructor>> Paciente () <<Comandos>> <<Consultas>> igual (c: Paciente):boolean mayor (c: Paciente):boolean ¿Qué métodos cambian?

93 Caso de estudio: Libreta de marcadores
Libreta_Marcadores <<atributos de instancia>> t [] Marcador cant: entero << Constructores>> Libreta_Marcadores(max: entero) <<Comandos>> nuevo(p: Marcador) eliminar(p: Marcador) <<Consultas>> cantMarcadores(): entero estaLlena(): entero pertenece(c: Marcador): boolean intercalar(l: Libreta_Marcadores): Marcador <<Constructor>> Marcador(n: String) <<Comandos>> <<Consultas>> mayor (c: Marcador):boolean ¿Qué métodos cambian si puede haber repetidos?


Descargar ppt "INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS"

Presentaciones similares


Anuncios Google