IPOO 2 cuatrimestre 2018 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

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 Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tabla.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
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 Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
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
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
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
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
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
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
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Sonia Rueda Herencia y Polimorfismo
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
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
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
IPOO 2 cuatrimestre Departamento de Ciencias e Ingeniería
Transcripción de la presentación:

Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2018

Caso de Estudio: Correo Una empresa de desarrollo de software emprende un proyecto que requiere representar a una colección de mensajes recibidos a una cuenta de correo electrónico. Los mensajes van a quedar almacenados en el orden en que insertan en la colección. Al eliminarse uno o más mensajes los que quedan deben mantener el orden. También es posible computar la cantidad de mensajes, decidir si la estructura está llena y si existe al menos un mensaje almacenado. Las funcionalidades se describen en el siguiente diagrama:

Caso de Estudio: Correo Las componentes ligadas ocupan las primeras cant posiciones. T [] Mensaje cant:entero insertar (m:Mensaje) Asigna el mensaje m a la primera posición libre de la estructura, es decir, cant. Aumenta el valor de cant. Requiere que la clase cliente haya verificado que la estructura no esté llena, m esté ligado y no haya un mensaje con la misma identidad en la estructura. << Constructores>> Correo(max:entero) <<Comandos>> insertar (m:Mensaje) eliminar (m:Mensaje) eliminar (c:Contacto) eliminar (m:Mensaje) 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 y decrementa cant Adoptamos la convención de llamar colección a las estructuras que mantienen una cantidad fija de componentes ligadas ocupando las primeras posiciones y las demás libres. eliminar(c:Contacto)Asigna nulo a todos los mensajes que corresponden al contacto c, actualiza cant y comprime para mantener todas las componentes ligadas las primeras cant posiciones.

Caso de Estudio: Correo mensaje(p:entero) Retorna el mensaje que corresponde a la posición p, si p no es una posición válida retorna nulo T [] Mensaje cant:entero pertenece (m:Mensaje) Busca el mensaje con la misma identidad que m y si existe retonar true. <<Consultas>> cantElem():entero estaLleno():boolean hayMensajes():boolean mensaje(p:entero):Mensaje pertenece (m:Mensaje):boolean caracteres(n:entero):entero asunto(a:String):Correo dosenSec(c:Contacto) : boolean caracteres(n:entero) Computa la cantidad de mensajes con más de n caracteres en el contenido. asunto(a:String) Genera una estructura con todos los mensajes que corresponden a un asunto dado. La clase Correo no brinda servicios para leer ni mostrar datos. dosenSec(c:Contacto )Retorna true si hay dos mensajes consecutivos del mismo contacto c.

Caso de Estudio: Correo Mensaje T [] Mensaje cant:entero contacto:Contacto fecha:Fecha hora:Hora asunto : String contenido:String << Constructores>> Correo(max:entero) <<Comandos>> insertar (c:Mensaje) eliminar (c:Mensaje) eliminar (c:Contacto) <<Consultas>> cantElem():entero estaLleno():boolean hayMen():boolean mensaje(p:entero):Mensaje pertenece (c:Mensaje):boolean caracteres(m:entero):entero asunto(a:String):Correo dosenSec(c:Contacto):Mensaje Las clases Correo y Mensaje están asociadas. La clase Mensaje no conoce la existencia de la clase Correo. La clase Correo conoce la interfaz de la clase Mensaje.

Caso de Estudio: Correo class Correo { //Atributos de Instancia private Mensaje[] T; private int cant; //Constructor /*Crea una estructura con capacidad para max mensajes*/ public Correo(int max) { T= new Mensaje [max]; cant = 0; } class ServicioMensajeria { … Correo im = new Correo(1000); }

Caso de Estudio: Correo cant im … length 1000

Caso de Estudio: Correo //Comandos public void 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, m esté ligado y no haya un mensaje almacenado con la misma identidad */ T[cant++] = m; } class ServicioMensajeria{ … sms = new Mensaje(…); if (!im.estaLleno() && !im.pertenece(sms)) im.insertar(sms); }

Caso de Estudio: Correo cant im … length :Mensaje 1000

Caso de Estudio: Correo Algoritmo eliminar DE el mensaje m Busca la posición de un mensaje con la misma identidad que m Si está decrementa la cantidad arrastra los mensajes que siguen a la posición

Caso de Estudio: Correo public void 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 < cantElem()) if (T [i] == m) esta = true; else i++; if (esta) { cant--; arrastrar(i); }

Caso de Estudio: Correo cant im … length 4 1000

Caso de Estudio: Correo cant im … length 4 1000

Caso de Estudio: Correo cant im … length 3 1000

Caso de Estudio: Correo private void arrastrar( int i){ /* arrastra todos los elementos una posición hacia arriba*/ while (i < cantElem()){ T[i] = T[i+1]; i++; } T[i]=null; Para que la estructura quede comprimida en las primeras posiciones del arreglo y los elementos mantengan el orden de inserción, “arrastramos”, cada elemento una posición hacia “atrás”.

Caso de Estudio: Correo private void arrastrar( int i){ /* arrastra todos los elementos una posición hacia arriba*/ while (i < cantElem()){ T[i] = T[i+1]; i++; if (i==cantElem()) T[i]=null; }

Buscamos soluciones correctas, eficientes y legibles Caso de Estudio: Correo public void eliminar ( Contacto c){ /* Elimina todos los mensajes que corresponden al contacto c*/ for (int i=0; i< cantElem();i++) if (T [i].obtenerContacto() == c) eliminar(T[i]); } La solución no es correcta si contiene dos elementos consecutivos ligados al contacto c. Buscamos soluciones correctas, eficientes y legibles

Caso de Estudio: Correo Algoritmo eliminar DE un contacto c Para cada mensaje si el contacto tiene la misma identidad que c asigna nulo Si elimino alguno comprimir

Caso de Estudio: Correo public void eliminar ( Contacto c){ /* Elimina todos los mensajes que corresponden al contacto c*/ int cantEliminados= 0; for (int i=0; i< cantElem();i++) if (T [i].obtenerContacto() == c){ T[i] = null; cantEliminados++; } if (cantEliminados > 0) comprimir(); cant = cant-cantEliminados; private void comprimir(){ /* Las primeras cant componentes quedan ocupadas manteniendo el orden en el que fueron insertados los mensajes*/ }

Caso de Estudio: Correo //Consultas public int cantElem () { return cant; } public boolean estaLleno() { return cant == T.length; public boolean hayMen() { return cant > 0; public Mensaje mensaje(int p){ /*Retorna el mensaje que corresponde a la posición p, si p no es una posición válida retorna nulo*/ Mensaje m = null; if (p>=0 && p < cantElem()) m = T[p]; return m;

Caso de Estudio: Correo public boolean 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 < cantElem() ; i++) esta = T[i] == m; return esta; }

Caso de Estudio: Correo public int caracteres(int m){ /*Cuenta la cantidad de mensajes con más de m caracteres en el contenido*/ int car =0; String content; for (int i = 0; i < cantElem(); i++) { content = T[i].obtenerContenido(); if (content.length() > m) car++; } return car; La clase Correo conoce la interfaz de la clase Mensaje. Si la clase cliente no cumple el contrato y envía el mensaje insertar con parámetro nulo, la consulta caracteres terminará anormalmente.

Caso de Estudio: Correo public Correo asunto(String a){ /*Genera un objeto de clase Correo solo con los objetos que corresponden al asunto a*/ Correo n = new Correo(cantElem()); for (int i = 0; i < cantElem() ; i++) if(T[i].obtenerAsunto().equals(a)){ n.insertar(T[i]); } return n; La clase Correo no conoce de qué clase es asunto pero sabe que brinda el método equals.

Caso de Estudio: Correo public boolean dosenSec(Contacto c){ boolean b=false; return b; } Dada una secuencia de mensajes S=s0,s1,…,scant-1 la consulta dosenSec retorna true si existe 0<k<cant tal que sk y sk-1 corresponden al mismo contacto c

Caso de Estudio: Correo “Luis” :Correo T cant im … length “Lucho” “Lucho” 4 “UNS” 1000

Caso de Estudio: Correo Algoritmo dosenSec Para cada mensaje desde el último hasta el segundo si el mensaje y el anterior corresponden al contacto c se verifica

Caso de Estudio: Correo Mensaje T [] Mensaje cant:entero contacto:Contacto fecha:Fecha hora:Hora asunto : String contenido:String … <<Consultas>> mayor (Mensaje m):boolean << Constructores>> Correo(max:entero) <<Comandos>> insertar (c:Mensaje) eliminar (c:Mensaje) eliminar (c:Contacto) <<Consultas>> cantElem():entero estaLleno():boolean hayMen():boolean mensaje(p:entero):Mensaje pertenece (c:Mensaje):boolean caracteres(m:entero):entero asunto(a:String):Correo ordenado():Correo ordenado():Correo Genera una estructura con los mensajes ordenados de acuerdo al criterio establecido por el método mayor de la clase Mensaje

Caso de Estudio: Correo public Correo ordenado() /*Genera una estructura con los mensajes ordenados de acuerdo al criterio establecido por el método mayor*/ Correo n = new Correo(cantElem()); … return n; }