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

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
El proceso de desarrollo de software
El Proceso de desarrollo de software
El proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Tipo de Dato Abstracto Tipos de datos:
Aplicación del paradigma orientado a objetos
Diseño y programación de
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.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
POO Java Módulo 3 Elementos de programas Identificadores
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Semana 5 Subprogramas..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
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 Clases.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
Facultad de Ingeniería
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
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 Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
FUNDAMENTOS DE PROGRAMACION
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Clases “ Es una Abstracción de un elemento del mundo real ”
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Diferencia entre implementar en RPA e IPOO - Diseño En.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
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
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases Abstractas & Interfaces Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

Introducción a la Programación Orientada a Objetos IPOO TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

PARADIGMAS DE PROGRAMACIÓN Un programa es un modelo de la resolución de un problema. Un lenguaje de programación es una notación formal que permite implementar un modelo en una computadora. El desarrollo de un programa es un proceso de abstracción que se aborda siguiendo un paradigma de programación. La elección del paradigma de programación está ligada al dominio de aplicación del problema. La elección del lenguaje de programación en el cual se implementará un programa depende fuertemente del paradigma de programación elegido. Introducción a la Programación Orientada a Objetos IPOO

PARADIGMAS DE PROGRAMACIÓN Usualmente, un paradigma puede ser caracterizado mediante un principio básico, fácil de formular. Para llevar a la práctica este principio, es necesario establecer un conjunto de métodos y técnicas, coherentes. Un paradigma guía y controla la forma en que un problema va a ser planteado y resuelto, provee una "filosofía de desarrollo". Introducción a la Programación Orientada a Objetos IPOO Un paradigma de programación es una colección de patrones conceptuales que orientan el proceso de desarrollo de software y determinan la estructura de un programa válido.

PARADIGMAS DE PROGRAMACIÓN Introducción a la Programación Orientada a Objetos IPOO Imperativo Orientado a Objetos Declarativo Aplicativo ABSTRACCIÓN MODELOS

PARADIGMA IMPERATIVO En el paradigma imperativo un programa se concibe como una secuencia de instrucciones que indican como se lleva a cabo la computación. En ejecución un programa es un autómata que provoca una serie de transformaciones sobre la memoria a través de comandos. El flujo de ejecución queda determinado por el programador que establece el orden en el cual van a ejecutarse las instrucciones. La programación estructurada y los métodos de diseño top-down, refinamiento paso a paso y programación modular permiten reducir la complejidad de los problemas, pero no resultan adecuados para aplicaciones a gran escala. Introducción a la Programación Orientada a Objetos IPOO

PROGRAMACIÓN ORIENTADA A OBJETOS El principio de diseño propuesto por la programación orientada a objetos propone identificar a las entidades físicas y conceptuales que participan en un problema y clasificarlas en una estructura de clases de acuerdo a sus atributos y comportamiento. En la implementación un programa orientado a objetos esta constituido por una estructura de clases que brindan patrones de comportamiento. En ejecución cada entidad del problema quedará ligada a un objeto de software que lo modela. Los objetos se comunican a través de mensajes. Introducción a la Programación Orientada a Objetos IPOO

PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción de datos Herencia Polimorfismo Vinculación dinámica Introducción a la Programación Orientada a Objetos IPOO

EN JAVA Abstracción de datos clases y modificadores de acceso. Herencia simple para modelar la relación is-a. Polimorfismo restringido por el chequeo de tipos. Vinculación dinámica entre variables y objetos y entre mensajes y métodos. El paradigma imperativo sigue vigente en el momento que implementamos cada método específico. Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

CLASES ABSTRACTAS En el diseño de una aplicación es posible definir una clase que factoriza propiedades de otras clases más específicas, sin que existan en el problema objetos concretos vinculados a esta clase más general. En este caso la clase se dice abstracta porque fue creada artificialmente para lograr un modelo más adecuado. En ejecución no va a haber instancias de una clase abstracta. Introducción a la Programación Orientada a Objetos IPOO

CLASES ABSTRACTAS Una clase abstracta puede incluir uno, varios, todos o ningún método abstracto. Si una clase hereda de una clase abstracta y no implementa todos los métodos abstractos, también debe ser definida como abstracta. Una clase concreta debe implementar todos los métodos abstractos de sus clases ancestro. El constructor de una clase abstracta sólo va a ser invocado desde los constructores de las clases derivadas. Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Una agencia publicitaria publica avisos en diferentes medios de comunicación: –televisión, –radio, –diarios y –revistas. Cada aviso tiene asociado: –un nombre de fantasía, –un producto, –una empresa y –las fechas inicial y final de publicación. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Las campañas en radios y televisión tienen: –una emisora, –una duración en segundos y –una cantidad de repeticiones por día. No hay dos avisos de radio o TV con el mismo nombre de una misma empresa y en una misma emisora. Los atributos nombre-empresa-emisora son la clave. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Los avisos publicados en diarios y revistas tienen: –un título y –una cantidad de centímetros cuadrados de texto. No hay dos avisos impresos con el mismo nombre de una misma empresa y con el mismo título. Los atributos nombre-empresa-título son la clave. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD El costo de una campaña en radio o televisión se calcula como el producto entre la cantidad de días que dura la campaña, por la cantidad de repeticiones por día, por la duración en segundos, por un monto por segundo fijo. El costo de una campaña en diarios o revistas se calcula como el producto entre la cantidad de centímetros del aviso, un monto fijo por centímetro y la cantidad de días que dura la campaña. … Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Un aviso concreto se publica o bien en radio o en televisión o en revistas o en diarios. De modo que podemos definir una clase Aviso para factorizar atributos y comportamiento compartido. Esta clase no modela ningún objeto del problema real, no tiene sentido crear objetos de software de esta clase. El método costoAviso() es abstracto, todos los avisos tienen un costo pero la manera de calcularlo depende del medio en el que se publica. Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO *Aviso > *costoAviso(): real AvisoRadioTV > costoAviso(): real AvisoImpreso > costoAviso(): real

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Introducción a la Programación Orientada a Objetos IPOO *Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 21 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected int dias; … } Introducción a la Programación Orientada a Objetos IPOO El atributo dias indica la cantidad de días que dura la campaña.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 22 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected Fecha hasta; … } Introducción a la Programación Orientada a Objetos IPOO Si los atributos se acceden desde las clases derivadas, una modificación en la representación puede requerir modificar a las clases derivadas.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 23 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected Fecha hasta; public Aviso(String n, String p, String e, Fecha d, Fecha h) {…} Como no existen instancias de una clase abstracta, el constructor de una clase no va a ser invocado explícitamente para crear objetos de la clase, sino desde los constructores de las clases derivadas.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 24 class AvisoImpreso extends Aviso{ protected static final float costoTexto = 58; protected String titulo; protected int cmTexto; public AvisoImpreso(String n, String p, String e, Fecha d, Fecha h, String tit, float c){ super(n,p,e,d,h); titulo = tit; cm = c; } … }

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 25 class AvisoRadioTV extends Aviso{ protected static final float costoSegundo= 100; protected String emisora; protected int duracion; protected int frecuencia;... }

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 26 abstract class Aviso { abstract public float costoAviso() ; … } class AvisoImpreso extends Aviso{ public float costoAviso(){ return desde.cantDias(hasta) * cmTexto * costoTexto; } …} class AvisoRadioTV extends Aviso{ public float costoAviso() { return duracion * frecuencia * costoSegundo * dias; } …}

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 27 class AvisoRadioTV extends Aviso{ public float costoAviso() { return duracion * frecuencia * costoSegundo * desde.cantDias(hasta)); } Introducción a la Programación Orientada a Objetos IPOO Si los atributos se acceden desde las clases derivadas, la modificación en la representación de la clase Aviso requiere modificar el método costoAviso en la clase AvisoRadioTV.

CASO DE ESTUDIO: AGENCIA PUBLICIDAD La clase Aviso es abstracta porque fue creada artificialmente para factorizar los atributos y el comportamiento común a todos los avisos publicitarios. Podemos declarar variables de clase Aviso pero no crear objetos. El constructor de la clase Aviso solo va a ser invocado desde los constructores de las clases derivadas. En ejecución no va a haber instancias de una clase abstracta. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD En este caso la clase Aviso incluye un método abstracto costoAviso(). Cada clase que especialice a la clase Aviso e implemente al método costoAviso() será una clase concreta. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 30 AvisoImpreso ai; AvisoRadioTV artv; Aviso aviso = new Aviso(…); Introducción a la Programación Orientada a Objetos IPOO Error en compilación, la clase Aviso es abstracta.

CASO DE ESTUDIO: AGENCIA PUBLICIDAD La clase AvisosPublicitarios encapsula una colección de elementos de clase Aviso, representada con un arreglo parcialmente ocupado y ordenado de acuerdo a la clave. La clase brinda servicios para: -Insertar ordenadamente un nuevo Aviso, requiere que la colección no esté llena, no exista un Aviso con la misma clave y el aviso no sea nulo. -Eliminar un Aviso -Decidir si existe un aviso con una clave dada. Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO *Aviso > *costoAviso(): real AvisosPublicitarios > T [] Aviso > costoTotal(): real

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 33 class AvisosPublicitarios { /*Mantiene una colección de Avisos ordenada por clave. */ //Atributos de instancia private Aviso [] T; private int cant; //Constructor public AvisosPublicitarios(int max){ T = new Aviso[max]; } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 34 class Agencia { … AvisosPublicitarios a; AvisoImpreso ai; AvisoRadioTV artv; a = new AvisosPublicitarios(10); artv = new AvisoRadioTV (…); ai = new AvisoImpreso (…); if (!a.estaLlena() && !a.pertenece(artv)) a.insertar(artv); Introducción a la Programación Orientada a Objetos IPOO Recorre la colección para decidir si pertenece y luego nuevamente para insertar ordenadamente.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 35 class Agencia { … AvisosPublicitarios a; AvisoImpreso ai; AvisoRadioTV artv; a = new AvisosPublicitarios(10); artv = new AvisoRadioTV (…); ai = new AvisoImpreso (…); if (!a.estaLlena() && !a.pertenece(artv)) a.insertar(artv); if (!a.estaLlena() && !a.pertenece(ai)) a.insertar(ai); float ct = a.costoTotal(); Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 36 class AvisosPublicitarios { … //Consultas public double costoTotal (){ float c = 0; for (int i = 1; i < cantAvisos();i++) c = c + T[i].costoAviso(); return c; } … } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD 37 :AvisoRadioTV Introducción a la Programación Orientada a Objetos IPOO t :AvisoImpreso Los elementos son instancias de clases derivadas de la clase Aviso

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Consideremos que el diseño del problema tiene que extenderse para incluir también avisos en espacios públicos que administra la Municipalidad. La Municipalidad tiene codificados los espacios públicos con un código numérico que los identifica y ofrece tres tipos de carteles para colocar en esos espacios a los que denomina A, B y C. De modo que la clase AvisoEP tiene dos atributos: codigoEP (entero) y tipoCartel (carácter). El costo de un aviso en un espacio público depende del tipo de cartel: el costo del cartel de tipo B es el doble que el de tipo A (que es una constante) y el C el doble que el B. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Introducción a la Programación Orientada a Objetos IPOO Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha AvisoEP

CASO DE ESTUDIO: AGENCIA PUBLICIDAD AvisoEP > costoBase: real > codigoEP : entero tipoCartel : char > costoAviso(): real Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO *Aviso > *costoAviso(): real AvisoRadioTV > costoAviso(): real AvisoEP > costoAviso(): real AvisoImpreso > costoAviso(): real

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 42 public double costoTotal (){ float c = 0; for (int i = 0; i< cantAvisos();i++) c = c + T[i].costoAviso(); return c; } Introducción a la Programación Orientada a Objetos IPOO El cambio en la especificación no afecta a las clases Aviso, AvisoImpreso, AvisoRadioTV ni AvisosPublicitarios!

Introducción a la Programación Orientada a Objetos IPOO Aviso > equals (a:Aviso) mayor (a:Aviso) AvisosPublicitarios > T [] Aviso > insertar(nuevo:Aviso)

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Consideremos que el diseñador establece que: La clave de un aviso es la combinación nombre-empresa. Dos avisos son iguales si coinciden los atributos nombre y empresa. Un aviso es mayor que otro si es mayor el nombre o los nombres son iguales y es mayor la empresa. La clave de un aviso impreso es la combinación nombre- empresa-título. Dos avisos impresos son iguales si coinciden los atributos nombre, empresa y título. Un aviso impreso es mayor que otro si es mayor el nombre o los nombres son iguales y es mayor la empresa o si son iguales nombre y empresa y es mayor el título. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Algoritmo insertar DE nuevo Buscar la posición de inserción Arrastrar los Avisos Asignar el nuevo Aviso en la posición de inserción Incrementar la cantidad de Avisos Introducción a la Programación Orientada a Objetos IPOO El problema es diferente a los que hemos resuelto previamente, la solución es análoga a otras ya planteada.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 46 //Comandos public void insertar (Aviso nuevo){ /*Requiere que la colección no esté llena y Nuevo esté ligada*/ int pos = posInsercion(nuevo,cantAvisos()); arrastrarDsp (pos, cantAvisos – pos - 1); T[pos] = nuevo; cant++; } Introducción a la Programación Orientada a Objetos IPOO Mantenemos nuestro objetivo de obtener soluciones bien moduladas, aplicando la estrategia de dividir para conquistar en nuestros algoritmos.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 47 private int posInsercion(Aviso con, int n){ int pos = 0; if (n > 0) if (con.mayor(T[n-1])|| con.equals(T[n-1])) pos = n; else pos = posInsercion(con, --n); return pos; } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 48 abstract class Aviso { public boolean equals (Aviso a){ return nombre.equals(a.obtenerNombre())&& empresa.equals(a.obtenerEmpresa()); } Introducción a la Programación Orientada a Objetos IPOO El método está sobrecargado, el tipo estático de la variable determina el método que se liga. class AvisoImpreso extends Aviso { public boolean equals (AvisoImpreso a){ return super.equals(a) && titulo.equals(a.obtenerTitulo()) }

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 49 class AvisoImpreso extends Aviso { public boolean equals (Aviso a){ boolean ig = false; if (getClass() == a.getClass()){ AvisoImpreso ai = (AvisoImpreso) a; ig = super.equals(a) && titulo.equals(ai.obtenerTitulo()); } return ig; } Introducción a la Programación Orientada a Objetos IPOO El método está redefinido, el tipo dinámico de la variable determina el método que se liga.

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Algoritmo eliminar DE con Busca la posición de con Si existe Arrastra los que le siguen una posición Decrementa la cantidad de Avisos Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 51 public void eliminar(Aviso con){ /* Busca la posición de com Arrastra los elementos que le siguen */ int pos = posElemento(con, cant); if (pos < cant){ arrastrarAnt(pos, cant-pos-1); cant--; } } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 52 private void arrastrarAnt(int pos, int n){ /*arrastra n elementos una posición antes*/ if (n > 0){ T[pos] = T[pos + 1]; arrastrarAnt(++pos, --n); } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICIDAD Algoritmo posElemento DE n Caso trivial: Si la colección está vacía el elemento no está y retorna 1 Caso trivial: Si el último elemento de la colección es menor al buscado, el elemento no está y retorna la cantidad de elementos Caso trivial: Si el último elemento de la colección es el buscado, la posición es n- 1 Caso Recursivo: Si el último elemento de la colección es mayor al buscado, busca la posición en los primeros n-1 elementos de la colección Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 54 private int posElemento(Aviso con, int n){ int pos = cant; if (n > 0) if (T[n-1].equals(con)) pos = n-1; else if (T[n-1].mayor(con)) pos = posElemento (con,--n); return pos; } Introducción a la Programación Orientada a Objetos IPOO Si el Aviso no pertenece a la colección retorna cant.

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 55 //Consultas public int cantAvisos (){ return cant; } public boolean estaLlena (){ return cant == T.length; } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 56 public boolean pertenece(Aviso con){ return pertenece(con, cantAvisos()); } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 57 private boolean pertenece(Aviso con, int n){ //Busca un Aviso con el nombre de con boolean esta; if (n = 0) esta = false; else if (con.equals(T[n-1])) esta = true; else if (con.mayor (T[n-1])) esta = false; else esta = pertenece(con, n-1); return esta; }

CASO DE ESTUDIO: AGENCIA PUBLICITARIA 58 public boolean pertenece(Aviso con){ boolean esta = posElemento(con, cant)<cant; return esta; } Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

INTERFACES Una interface es un conjunto de métodos relacionados sin una implementación concreta. Una interface es similar a una clase pero sólo brinda métodos abstractos. Una interface especifica las signaturas de un conjunto de métodos que luego van a ser implementados por una o más clases. Todos los métodos provistos por una interface son públicos Una interface define un tipo a partir del cual es posible declarar variables pero no crear instancias. Introducción a la Programación Orientada a Objetos IPOO

INTERFACES Las interfaces pueden organizarse en una estructura jerárquica, donde cada nivel especializa al anterior. Enfaticemos que una interface no es una clase, no tiene variables de instancia ni implementa los servicios provistos. La definición de interfaces permite simular herencia múltiple. Una clase D puede extender una clase B e implementar una clase I. Introducción a la Programación Orientada a Objetos IPOO

INTERFACES 62 interface ObjetoGrafico { void trasladar(int x,int y); void rotar(float x); void dibujar(); } Introducción a la Programación Orientada a Objetos IPOO

INTERFACES 63 abstract class Poligono { private ColeccionPuntos l; float perimetro(){…}; abstract float area(); } Introducción a la Programación Orientada a Objetos IPOO

INTERFACES 64 class Cuadrado extends Poligono implements ObjetoGrafico { float perimetro() {…} float area() {…} void trasladar(int x,int y){…} void rotar(float x) {…} void dibujar() {…} } Introducción a la Programación Orientada a Objetos IPOO

INTERFACES Una interface puede definir variables y constantes de clase, pero no de instancia. Java brinda interfaces y permite definir otras nuevas. Por el momento no vamos a definir nuevas interfaces, pero sí definiremos clases que implementan interfaces provistas por el lenguaje. Introducción a la Programación Orientada a Objetos IPOO

Introducción a la Programación Orientada a Objetos IPOO TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

CLASES EMBEBIDAS Una clase embebida es una clase que se define dentro de otra. Esta característica permite anidar clases relacionadas y controlar la visibilidad. Introducción a la Programación Orientada a Objetos IPOO class externa { … class interna { }

CLASES EMBEBIDAS Por una cuestión de estilo, por lo general las clases internas se declaran a continuación de las variables de instancia y los métodos. El acceso a una clase interna se limita el acceso a la clase externa. El nombre de la clase interna puede ser reusado fuera de la clase externa. Desde la clase interna se tiene acceso a todas las entidades de la clase externa, públicas y privadas. Introducción a la Programación Orientada a Objetos IPOO

CLASES EMBEBIDAS 69 class externa { private int x = 1; public int p() { interna i = new interna();… } class interna { public int q () { x++; } Introducción a la Programación Orientada a Objetos IPOO

CLASES EMBEBIDAS 70 class prueba{ externa e = new externa(); e.p(); externa.interna i; } Introducción a la Programación Orientada a Objetos IPOO

CLASES EMBEBIDAS Las instancias de la clase externa se crean como siempre. Los métodos de la clase externa pueden crear instancias de la clase interna. Un objeto de la clase interna estará siempre asociado a una instancia de la clase externa. Nuevamente el concepto de clase embebida va a ser aplicado en las próximas clases cuando desarrollen interfaces gráficas simples. Introducción a la Programación Orientada a Objetos IPOO