1 / 18

Encapsulamiento y Abstracción

Encapsulamiento y Abstracción. Los lenguajes de programación han evolucionado para brindar mecanismos que le permitan al programador abstraerse del funcionamiento de los dispositivos físicos que conforman una computadora. En esta evolución un concepto fundamental es el de encapsulamiento.

Download Presentation

Encapsulamiento y Abstracción

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. Encapsulamiento y Abstracción Los lenguajes de programación han evolucionado para brindar mecanismos que le permitan al programador abstraerse del funcionamiento de los dispositivos físicos que conforman una computadora. En esta evolución un concepto fundamental es el de encapsulamiento. El encapsulamiento es un mecanismo que permite la definición de módulos de software que pueden ser utilizados como “cajas negras”, esto es, sabiendo qué hacen sin saber cómo lo hacen.

  2. Encapsulamiento y Abstracción El encapsulamiento permite esconder los detalles de la implementación de un módulo, de modo que sus clientes sólo conozcan su funcionalidad. Si cambian la implementación de un módulo, en tanto no cambie su funcionalidad, los módulos que lo usan no se verán afectados. Se reducen así las dependencias entre diferentes unidades de software, de modo que estos son más fáciles de leer, verificar y modificar

  3. Encapsulamiento y Abstracción Un lenguaje que soporta encapsulamiento debe brindar algún mecanismo para que el programador pueda definir módulos de software independientes. En Java una clase define un módulo y los modificadores de acceso permiten establecer el nivel de encapsulamiento. Los miembros de una clase que se declaran privados quedan escondidos y no son visibles desde el exterior. Cuando un lenguaje permite definir clases y soporta encapsulamiento el programador puede definir tipos de datos abstractos.

  4. Caso de Estudio: Correo Se desea mantener la secuencia de mensajes recibidos en un celular, en el orden en el cual fueron recibidos. La secuencia se modela como una colección en la que pueden insertarse y eliminarse mensajes. Al eliminarse un mensaje hay que mantener el orden de los mensajes de acuerdo a como se insertaron. También es posible eliminar todos los mensajes de un contacto, contar cuantos mensajes tienen más m caracteres en el contenido y generar un objeto de clase Correo con todos los elementos que corresponden a un mismo asunto.

  5. Correo Mensaje T [] Mensaje cant:entero contacto:Contacto fecha:Fecha hora:Hora asunto : String contenido:String Caso de Estudio: Correo << Constructores>> Correo(max:entero) <<Comandos>> insertar (c:Mensaje) eliminar (c:Mensaje) eliminar (c:Contacto) <<Consultas>> cantMen():entero estaLleno():entero hayMen():boolean pertenece (c:Mensaje):boolean caracteres(m:entero):entero asunto(a:String):Correo 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. Caso de Estudio: Correo class Correo{ //Atributos de Instancia private Mensaje[] T; privateintcant; /*Constructor Crea una Coleccion con capacidad para max elementos*/ public Correo(intmax) { T= new Mensaje[max]; cant = 0; } class ServicioMensajeria { … Correoim = new Correo(1000); … }

  7. Caso de Estudio: Correo … length T cant im 0 1000

  8. Caso de Estudio: Correo //Comandos publicvoid insertar (Mensaje m) { /*Asigna el mensaje m 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 m esté ligado. */ T[cant++] = m; } class ServicioMensajeria{ … sms= new Mensaje(…); im.insertar(sms); … }

  9. Caso de Estudio: Correo … length T cant im Mensaje 0 1000

  10. Caso de Estudio: Correo publicvoid eliminar ( Mensaje m){ /*Busca un mensaje con la misma identidad que m en la secuencia de mensajes, si lo encuentra arrastra los mensajes que siguen una posición*/ boolean esta = false; int i= 0; while (!esta && i < cantMen())//Busca a m if (T [i] == m) esta = true; else i++; if (esta) { cant--; arrastrar(i); } }

  11. Caso de Estudio: Correo privatevoid arrastrar( int i){ /*arrastra todos los elementos una posición hacia arriba*/ while (i < cantMen()){ T[i] = T[i+1]; i++; } }

  12. Caso de Estudio: Correo publicvoid eliminar ( Contacto c){ /*Elimina todos los mensajes que corresponden al contacto c*/ for (int i=0; i< cantMen();i++) if(T [i].obtenerContacto() ==c) eliminar(T[i]); } Buscamossolucionescorrectas, eficientes y legibles

  13. Caso de Estudio: Correo publicvoid eliminar ( Contacto c){ /*Elimina todos los mensajes que corresponden al contacto c*/ intcantEliminados= 0; for (int i=0; i< cantMen();i++) if(T [i].obtenerContacto() ==c){ T[i] = null; cantEliminados++; } if (cantEliminados > 0) comprimir(); }

  14. Caso de Estudio: Correo //Consultas publicintcantMen() { returncant; } publicbooleanestaLleno() { returncant == T.length; } publicbooleanhayMen() { returncant> 0; }

  15. Caso de Estudio: Correo publicboolean pertenece (Mensaje m){ /*Decide si algún elemento de la colección tiene la misma identidad que m*/ boolean esta = false; for (int i = 0; !esta && i < cantMen() ; i++){ esta = T[i] == (c); } return esta; }

  16. Caso de Estudio: Correo publicint caracteres(int m){ /*Cuenta la cantidad de mensajes con más de m caracteres*/ int car =0; Stringcontent; for(int i = 0; i < cantMen(); i++) { content = T[i].obtenerContenido(); if (content.length() > m) car++; } return car; }

  17. Caso de Estudio: Correo publicCorreo asunto(Asunto a){ /*genera un objeto de clase Correo solo con los objetos que corresponden al asunto a*/ Correo n = new Correo(cantMen()); for(int i = 0; i < cantMen() ; i++) if(T[i].obtenerAsunto().equals(a)){ n.insertar(T[i]); } return n; }

  18. Caso de Estudio: Correo Notemos que tal como está modelado el Correo no hay ningún servicio que permita “mostrar” todos los mensajes del Correo. Toda la entrada y salida se realiza desde la clase cliente, en este caso ServicioMensajeria. La clase cliente no conoce las posiciones de los mensajes en el Correo.

More Related