1 / 34

El concepto de clase

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 .

viveca
Télécharger la présentation

El concepto de clase

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String email:String Caso de Estudio: Libreta de Contactos << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> 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.

  4. Caso de Estudio: Libreta de Contactos class Libreta_Contactos{ //Atributos de Instancia private Contacto[] T; privateintcant; /*Constructor crea una coleccioncon capacidad para max elementos*/ public Libreta_Contactos(intmax) { T= new Contacto[max]; cant = 0; }

  5. Caso de Estudio: Libreta de Contactos … length T cant lib 0 6 Libreta_Contactoslib = Libreta_Contactos(6);

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

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

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

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

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

  11. Caso de Estudio: Libreta de Contactos

  12. Caso de Estudio: Libreta de Contactos

  13. Caso de Estudio: Libreta de Contactos

  14. Caso de Estudio: Libreta de Contactos

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

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

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

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

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

  20. 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 publicvoidnuevo(Contacto nc){ //Requiere que la colección no esté llena int pos = posInsercion(nc,cant); arrastrarDsp (pos,cant-pos); T[pos] = nc; cant++; }

  21. Caso de Estudio: Libreta de Contactos 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 privateintposInsercion (Contacto nc,intn){ /* 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 (con,--n); return pos; }

  22. Caso de Estudio: Libreta de Contactos privatevoidarrastrarDsp (intpos,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 de modo que si existe un contacto con ese nombre, no agregue nc

  23. Caso de Estudio: Libreta de Contactos Supongamos que se decide eliminar el contacto Castro Luis. Los contactos que siguen deben arrastrarse una posición hacia arriba.

  24. Caso de Estudio: Libreta de Contactos

  25. Caso de Estudio: Libreta de Contactos

  26. Caso de Estudio: Libreta de Contactos

  27. Caso de Estudio: Libreta de Contactos

  28. Caso de Estudio: Libreta de Contactos

  29. Caso de Estudio: Libreta de Contactos

  30. 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. 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 Decrementarla cantidad de contactos publicvoid eliminar(Contacto c){ /*Elimina, si existe, el contacto c */ int pos = posElemento (c,cant); if (pos < cant){ arrastrarAnt(pos,cant-pos-1); cant--; } }

  32. Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String email:String ciudad:String Caso de Estudio: Libreta de Contactos << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean ¿Qué cambios hay que hacer en Libreta_Contactos?

  33. Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String email:String ciudad:String Caso de Estudio: Libreta de Contactos << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean ¿Y si la libreta tienen que quedar ordenada por nroMovil?

  34. Libreta_Marcadores Marcador T [] Marcador cant:entero … Caso de Estudio: Libreta de Contactos << Constructores>> Libreta_Marcadores(max:entero) <<Comandos>> nuevo(nm: Marcador) eliminar(c: Marcador) <<Consultas>> cantMarcador():entero estaLlena():entero pertenece(c:Marcador):boolean <<Constructor>> Marcador(n:String) <<Comandos>> <<Consultas>> mayor (c: Marcador):boolean ¿Qué métodos cambian?

More Related