La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.

Presentaciones similares


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

1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso de estudio: Libreta de contactos Búsqueda binaria Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Una clase que incluye atributos y servicios y encapsula sus atributos, define un tipo de dato abstracto. Introducción a la Programación Orientada a Objetos IPOO - 2015 2

3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 email 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. Los elementos se mantienen ordenados alfabéticamente por nombre y están comprimidos de modo que todas las posiciones libres están al final. La clase cliente es responsable de controlar que haya lugar en la libreta antes de agregar un nuevo contacto. Introducción a la Programación Orientada a Objetos IPOO - 2015 3

4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS 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 - 2015 4

5 Libreta_Contactos > t [] Contacto cant: entero > Libreta_Contactos(max: entero) > nuevo(nc: Contacto) eliminar(c: Contacto) > cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Libreta_Contactos Contacto > nombre: String nroMovil: String nroFijo: String email: String > Contacto(n: String) > igual(c: Contacto): boolean mayor(c: Contacto): boolean 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.

6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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; } CASO DE ESTUDIO: LIBRETA DE CONTACTOS

7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: INVENTARIO 7 lib … length 6 t cant 0 :Libreta_Contactos Libreta_Contactos lib = Libreta_Contactos(6);

8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 8

9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 9 NombreNúmero de Móvil Número Fijoemail

10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 10 NombreNúmero de Móvil Número Fijoemail Davini Laura … … …

11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 11 NombreNúmero de Móvil Número Fijoemail Davini Laura … … … Polo Leo … … …

12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 12 NombreNúmero de Móvil Número Fijoemail Davini Laura … … … Polo Leo … … …

13 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 13 NombreNúmero de Móvil Número Fijoemail Davini Laura … … … Polo Leo … … … … … …

14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 14 NombreNúmero de Móvil Número Fijoemail Davini Laura … … … Polo Leo … … … … … …

15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 15 NombreNúmero de Móvil Número Fijoemail Davini Laura … … … … … … Polo Leo … … …

16 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 Introducción a la Programación Orientada a Objetos IPOO - 2015 16 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Polo Leo … … …

17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 17 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … …

18 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 18 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … …

19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 19 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Castro Luis … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … …

20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 20

21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 21

22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA 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++; } 22 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

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

24 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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); } Introducción a la Programación Orientada a Objetos IPOO - 2015 24 ¿Qué pasa si ya existe un contacto con ese nombre? Modifique la implementación de nuevo de modo que si existe un contacto con ese nombre, no agregue nc.

25 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 25 NombreNúmero de Móvil Número Fijoemail 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.

26 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 26 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … …

27 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 27 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … … … … Polo Leo … … … Ramos Marisa … … …

28 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 28 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … … … … Ramos Marisa … … …

29 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 29 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … … … …

30 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA DE CONTACTOS Introducción a la Programación Orientada a Objetos IPOO - 2015 30 NombreNúmero de Móvil Número Fijoemail Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … … … …

31 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 31

32 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: LIBRETA 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--; } } 32 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

33 Libreta_Contactos > t [] Contacto cant: entero > Libreta_Contactos(max: entero) > nuevo(nc: Contacto) eliminar(c: Contacto) > cantContactos(): entero estaLlena(): entero pertenece(c: Contacto): boolean intercalar(l: Libreta_Contactos): Libreta_Contactos Contacto > nombre: String nroMovil: String nroFijo: String email: String > Contacto(n: String) > igual(c: Contacto): boolean mayor(c: Contacto): boolean Busca un contacto con el mismo nombre que c aplicando Búsqueda Binaria

34 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 34

35 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 BÚSQUEDA BINARIA 35 Si busco el número 17 ÉXITO 3 12 17 22 23 45 17 Mitad

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

37 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 BÚSQUEDA BINARIA 37 Si busco el número 23 ÉXITO 3 12 17 22 23 45 17 Mitad

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

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

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

41 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 BÚSQUEDA BINARIA 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 sino si el elemento que está en la mitad es menor al buscado Descartar la primera mitad Buscar en la segunda mitad sino Descartar la segunda mitad Buscar en la primera mitad 41 Refinamos la solución

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

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

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

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

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

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


Descargar ppt "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso."

Presentaciones similares


Anuncios Google