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

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 Herencia."— 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 Herencia y Polimorfismo 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 2016

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 - 2016 2 TEMARIO Repaso. Clases abstractas. Caso de estudio: Agencia publicitaria.

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 PROGRAMACIÓN ORIENTADA A OBJETOS Un lenguaje de programación orientado a objetos debe soportar los siguientes conceptos: –Abstracción de datos y encapsulamiento –Herencia –Polimorfismo y ligadura dinámica Java brinda recursos para soportar todos estos conceptos. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 HERENCIA En el diseño de una aplicación siguiendo el paradigma orientado a objetos las clases son organizadas de acuerdo a sus atributos y comportamiento. La herencia es un mecanismo que permite establecer una relación de generalización-especialización entre las clases que conforman un sistema. Cuando la herencia es simple la organización es jerárquica y las clases se estructuran como un árbol. Un objeto que es instancia de una clase es también instancia de sus clases ancestro siguiendo la rama en el árbol. Introducción a la Programación Orientada a Objetos IPOO - 2016 4

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 POLIMORFISMO El polimorfismo es una mecanismo que permite que un mismo nombre pueda estar ligado a distintos significados. –Una variable polimórfica puede referenciar a objetos de diferentes clases. –Una asignación polimórfica asocia a una variable declarada de una clase dada, un objeto de una clase derivada. –Un método polimórfico recibe como parámetros a variables polimórficas. Introducción a la Programación Orientada a Objetos IPOO - 2016 5

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 LIGADURA La ligadura puede establecerse antes o durante la ejecución. El tipo estático de una variable es la clase que se liga en la declaración, antes de la ejecución. El tipo dinámico de una variable es la clase del objeto al que está ligada la variable en ejecución. Cuando un método se redefine, la ligadura entre un mensaje y un método se determina en ejecución, de acuerdo a la la clase del objeto. Esto es, el tipo dinámico de una variable determina la ligadura entre un mensaje y un método. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 CHEQUEO DE TIPOS En Java tipo estático de una variable determina –las clases de los objetos a los que puede referenciar –los mensajes que puede recibir. El compilador establece chequeos que evitan algunos errores en ejecución. El compilador NO establece la ligadura entre un mensaje y el método, pero controla que esta ligadura sea segura, es decir no provoque un error en ejecución. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 Introducción a la Programación Orientada a Objetos IPOO - 2016 8 TEMARIO Repaso. Clases abstractas. Caso de estudio: Agencia publicitaria.

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 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 diseño que modele la realidad. En ejecución no va a haber objetos de software de una clase abstracta. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 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 - 2016 10

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 Introducción a la Programación Orientada a Objetos IPOO - 2016 11 TEMARIO Repaso. Clases abstractas. Caso de estudio: Agencia publicitaria.

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 CASO DE ESTUDIO: AGENCIA PUBLICITARIA 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 –una duración en días. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 CASO DE ESTUDIO: AGENCIA PUBLICITARIA 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. Los atributos nombre-empresa son la clave. Introducción a la Programación Orientada a Objetos IPOO - 2016 13

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 PUBLICITARIA Los avisos publicados en diarios y revistas tienen: –un título, –una cantidad de centímetros cuadrados de texto. No hay dos avisos impresos con el mismo nombre de una misma empresa. Los atributos nombre-empresa son la clave Introducción a la Programación Orientada a Objetos IPOO - 2016 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 PUBLICITARIA 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 - 2016 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 PUBLICITARIA En el caso de estudio descripto, 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 - 2016 16

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

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 PUBLICITARIA Introducción a la Programación Orientada a Objetos IPOO - 2016 18 *Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha

19 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 El El atributo dias indica la cantidad de días que dura la campaña. No hay dos avisos que coincidan en los atributos nombre-empresa, es decir, puede haber dos avisos de la misma empresa O con el mismo nombre, pero no con la misma empresa Y con el mismo nombre. Introducción a la Programación Orientada a Objetos IPOO - 2016 19 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected int dias;

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 PUBLICITARIA 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. 20 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected int dias; //Constructor public Aviso (String n, String p, String e, Fecha d, int di)

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 Si los atributos se acceden desde las clases derivadas, una modificación en la representación puede requerir modificar a las clases derivadas. 21 abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected Fecha hasta; //Constructor public Aviso (String n, String p, String e, Fecha d, int di)

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 class AvisoImpreso extends Aviso{ protected static final float costoTexto= 58; protected String titulo; protected int cmTexto; //Constructor public AvisoImpreso(String n, String p, String e, Fecha d, int di, String tit, float c){ super(n,p,e,d,di); titulo = tit; cm = c; }

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 class AvisoRadioTV extends Aviso{ protected static final float costoSegundo=100; protected String emisora; protected int duracion; protected int frecuencia; public AvisoImpreso(String n, String p, String e, Fecha d,int di, String em,int du,int fr){ super(n,p,e,d,di); emisora = em; duracion = du; frecuencia = fr; }

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

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 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 - 2016 25

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)); } 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 PUBLICITARIA 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 - 2016 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 PUBLICITARIA 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, primero por empresa y luego por nombre. 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 - 2016 29

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

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 PUBLICITARIA 31 class AvisosPublicitarios { /*Mantiene una colección de Avisos ordenados por empresa y luego por nombre. */ //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 - 2016

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

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

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 Introducción a la Programación Orientada a Objetos IPOO - 2016 34 :AvisoRadioTV :AvisoImpreso Los elementos son instancias de clases derivadas de la clase Aviso

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 AvisosPublicitarios { … //Consultas public double costoTotal (){ float c = 0; for (int i=0;i < cantAvisos();i++) c = c + T[i].costoAviso() ; return c; } … } La ligadura entre el mensaje y el método costoAviso se establece en ejecución y depende de la clase del objeto referenciado por T[i]

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 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 - 2016 36

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 PUBLICITARIA 37 *Aviso AvisoImpreso AvisoRadioTV AvisosPublicitarios Fecha AvisoEP

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 PUBLICITARIA Introducción a la Programación Orientada a Objetos IPOO - 2016 38 AvisoEP > costoBase: real > codigoEP: entero tipoCartel: char > costoAviso(): real

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 PUBLICITARIA AvisoRadioTV > costoAviso(): real AvisoImpreso > costoAviso(): real AvisoEP > costoAviso(): real *Aviso > costoAviso(): real

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

41 AvisosPublicitarios > T [] Aviso > insertar(nuevo: Aviso) *Aviso > equals(a: Aviso) mayor(a: Aviso) Para decidir la equivalencia o establecer la relación mayor se compara empresa y luego nombre

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 El diseñador estableció que la clave de un aviso es la combinación empresa-nombre. Dos avisos son iguales si coinciden los atributos nombre y empresa. Un aviso es mayor que otro si es mayor la empresa o las empresas son iguales y es mayor el nombre. Introducción a la Programación Orientada a Objetos IPOO - 2016 42

43 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 43 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 - 2016 El problema es diferente a los que hemos resuelto previamente, la solución es análoga a otras propuestas antes.

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 PUBLICITARIA 44 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 - 2016

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 PUBLICITARIA 45 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; } Mantenemos nuestro objetivo de obtener soluciones moduladas, aplicando la estrategia de dividir para conquistar en nuestros algoritmos.


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

Presentaciones similares


Anuncios Google