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

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 Clases."— 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 Clases Abstractas & Interfaces 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 Introducción a la Programación Orientada a Objetos IPOO - 2015 2 TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

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

5 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 PARADIGMAS DE PROGRAMACIÓN Introducción a la Programación Orientada a Objetos IPOO - 2015 5 Imperativo Orientado a Objetos Declarativo Aplicativo ABSTRACCIÓN MODELOS

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

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

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

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 Introducción a la Programación Orientada a Objetos IPOO - 2015 10 TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

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 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 - 2015 11

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 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 - 2015 12

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 Introducción a la Programación Orientada a Objetos IPOO - 2015 13 TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

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: 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 - 2015 14

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: 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 - 2015 15

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: 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 - 2015 16

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: 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 - 2015 17

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: 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 - 2015 18

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

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: AGENCIA PUBLICIDAD Introducción a la Programación Orientada a Objetos IPOO - 2015 20 *Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha

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: 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 - 2015 El atributo dias indica la cantidad de días que dura la campaña.

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: 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 - 2015 Si los atributos se acceden desde las clases derivadas, una modificación en la representación puede requerir modificar a las clases derivadas.

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

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: 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; } … }

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: AGENCIA PUBLICITARIA 25 class AvisoRadioTV extends Aviso{ protected static final float costoSegundo= 100; protected String emisora; protected int duracion; protected int frecuencia;... }

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: 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; } …}

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

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: 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 - 2015 28

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: 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 - 2015 29

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: AGENCIA PUBLICITARIA 30 AvisoImpreso ai; AvisoRadioTV artv; Aviso aviso = new Aviso(…); Introducción a la Programación Orientada a Objetos IPOO - 2015 Error en compilación, la clase Aviso es abstracta.

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: 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 - 2015 31

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

33 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: 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 - 2015

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 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 - 2015 Recorre la colección para decidir si pertenece y luego nuevamente para insertar ordenadamente.

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

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

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 CASO DE ESTUDIO: AGENCIA PUBLICIDAD 37 :AvisoRadioTV Introducción a la Programación Orientada a Objetos IPOO - 2015 t :AvisoImpreso Los elementos son instancias de clases derivadas de la clase Aviso

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 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 - 2015 38

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 CASO DE ESTUDIO: AGENCIA PUBLICIDAD Introducción a la Programación Orientada a Objetos IPOO - 2015 39 Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha AvisoEP

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 CASO DE ESTUDIO: AGENCIA PUBLICIDAD AvisoEP > costoBase: real > codigoEP : entero tipoCartel : char > costoAviso(): real Introducción a la Programación Orientada a Objetos IPOO - 2015 40

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

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 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 - 2015 El cambio en la especificación no afecta a las clases Aviso, AvisoImpreso, AvisoRadioTV ni AvisosPublicitarios!

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

44 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: 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 - 2015 44

45 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: 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 - 2015 45 El problema es diferente a los que hemos resuelto previamente, la solución es análoga a otras ya planteada.

46 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: 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 - 2015 Mantenemos nuestro objetivo de obtener soluciones bien moduladas, aplicando la estrategia de dividir para conquistar en nuestros algoritmos.

47 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: 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 - 2015

48 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: 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 - 2015 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()) }

49 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: 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 - 2015 El método está redefinido, el tipo dinámico de la variable determina el método que se liga.

50 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: 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 - 2015 50

51 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: 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 - 2015

52 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: 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 - 2015

53 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: 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 - 2015 53

54 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: 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 - 2015 Si el Aviso no pertenece a la colección retorna cant.

55 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: 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 - 2015

56 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: AGENCIA PUBLICITARIA 56 public boolean pertenece(Aviso con){ return pertenece(con, cantAvisos()); } Introducción a la Programación Orientada a Objetos IPOO - 2015

57 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: 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; }

58 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: 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 - 2015

59 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 IPOO - 2015 59 TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

60 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 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 - 2015 60

61 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 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 - 2015 61

62 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 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 - 2015

63 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 INTERFACES 63 abstract class Poligono { private ColeccionPuntos l; float perimetro(){…}; abstract float area(); } Introducción a la Programación Orientada a Objetos IPOO - 2015

64 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 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 - 2015

65 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 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 - 2015 65

66 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 IPOO - 2015 66 TEMARIO Paradigmas de programación. Clases abstractas. Caso de estudio: agencia publicidad. Interfaces. Clases embebidas.

67 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 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 - 2015 67 class externa { … class interna { }

68 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 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 - 2015 68

69 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 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 - 2015

70 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 CLASES EMBEBIDAS 70 class prueba{ externa e = new externa(); e.p(); externa.interna i; } Introducción a la Programación Orientada a Objetos IPOO - 2015

71 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 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 - 2015 71


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

Presentaciones similares


Anuncios Google