1 / 59

Un programa es un modelo de la resolución de un problema.

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.

cynara
Download Presentation

Un programa es un modelo de la resolución de un problema.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 programaes un proceso de abstracciónque se abordasiguiendo un paradigma de programación. La elección del paradigma de programaciónestáligada al dominio de aplicación del problema. La elección del lenguaje de programaciónen el cual se implementará un programadependefuertemente del paradigma de programaciónelegido. Introducción a la Programación Orientada a Objetos

  2. Paradigmas de Programación 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. 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

  3. Paradigmas de Programación Declarativo Aplicativo Imperativo Orientado a Objetos ABSTRACCIÓN MODELOS Introducción a la Programación Orientada a Objetos

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

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

  6. Programación Orientada a Objetos La POO requiere que el lenguaje brinde: Abstracción de datos, encapsulamiento y composición (relación hasa) mediante los conceptos de clase y los modificadores de acceso Herencia jerárquica para modelar la relación isa. Polimorfismo restringido por el chequeo de tipos. Vinculación dinámica de código. El paradigma imperativo sigue vigente en el momento que implementamos cada método específico. Introducción a la Programación Orientada a Objetos

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

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

  9. 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 final de publicación. No hay dos avisos con el mismo nombre de una misma empresa. Los atributos empresa-nombre son la clave Las campañas en radios y televisión tienen una emisora, una duración en segundos y una cantidad de repeticiones por día. Los avisos publicados en diarios y revistas tienen un título, una cantidad de centímetros cuadrados de texto. Introducción a la Programación Orientada a Objetos

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

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

  12. Caso de estudio: Agencia Publicitaria *Aviso <<atributos de clase>> <<atributos de instancia>> <<consultas>> *costoAviso(): real AvisoRadioTV AvisoImpreso <<atributos de clase>> <<atributos de instancia>> <<atributos de clase>> <<atributos de instancia>> <<consultas>> costoAviso(): real <<consultas>> costoAviso(): real Introducción a la Programación Orientada a Objetos

  13. Caso de estudio: Agencia Publicitaria AvisosPublicitarios Aviso Fecha AvisoImpreso AvisoRadioTV Introducción a la Programación Orientada a Objetos

  14. Caso de estudio: Agencia Publicitaria abstract class Aviso{ protected String nombre; protected String producto; protected String empresa; protected Fecha desde; protected Fecha hasta; … } Todos los avisos tienen un costo pero el cómputo de este valor depende del tipo de aviso particular. Introducción a la Programación Orientada a Objetos

  15. Caso de estudio: Agencia Publicitaria 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. Introducción a la Programación Orientada a Objetos

  16. Caso de estudio: Agencia Publicitaria 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; } … } Introducción a la Programación Orientada a Objetos

  17. Caso de estudio: Agencia Publicitaria class AvisoRadioTV extends Aviso{ protected static final float costoSegundo= 100; protected String emisora; protected int duracion; protected int frecuencia; ... } Introducción a la Programación Orientada a Objetos

  18. Caso de estudio: Agencia Publicitaria 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 *desde.cantDias(hasta)); } …} Introducción a la Programación Orientada a Objetos

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

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

  21. Caso de estudio: Agencia Publicitaria AvisoImpreso ai; AvisoRadioTV artv; Aviso aviso = new Aviso(…); Error en compilación, la clase Aviso es abstracta Introducción a la Programación Orientada a Objetos

  22. Caso de Estudio: Agencia Publicitaria La clase AvisosPublicitariosencapsula 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 y no exista un Aviso con el mismo nombre y empresa en la colección. Eliminar un Aviso Decidir si existe un aviso con una clave dada.

  23. Caso de Estudio: Agencia Publicitaria Aviso <<atributos de clase>> <<atributos de instancia>> <<consultas>> costoAviso(): real AvisosPublicitarios <<atributos de clase>> <<atributos de instancia>> T [] Aviso <<consultas>> costoTotal(): real Introducción a la Programación Orientada a Objetos

  24. Caso de estudio: Agencia Publicitaria 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

  25. Caso de estudio: Agencia Publicitaria 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); Recorre la colección para decidir si pertenece y luego nuevamente para insertar ordenadamente. Introducción a la ProgramaciónOrientada a Objetos

  26. Caso de estudio: Agencia Publicitaria class Agencia { … AvisosPublicitarios a; AvisoImpreso ai; AvisoRadioTV artv; a = new AvisosPublicitarios(); 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

  27. Caso de estudio: Agencia Publicitaria 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

  28. Caso de estudio: Agencia Publicitaria T AvisoRadioTV AvisoImpreso Los elementos son instancias de clases derivadas de la clase Aviso Introducción a la Programación Orientada a Objetos

  29. Caso de Estudio: Agencia Publicitaria Aviso <<atributos de clase>> <<atributos de instancia>> <<consultas>> igualClave(a:Aviso) mayorClave(a:Aviso) AvisosPublicitarios <<atributos de clase>> <<atributos de instancia>> T [] Aviso <<consultas>> insertar(nuevo:Aviso) Introducción a la Programación Orientada a Objetos

  30. Caso de estudio: Agencia Publicitaria abstract class Aviso { … //Consultas public boolean igualClave(Aviso a){ return nombre.equals(a.obtenerNombre())&& empresa.equals(a.obtenerEmpresa()); } public boolean mayorClave(Aviso a){ String s1= nombre+empresa; String s2 = a.obtenerNombre()+ a.obtenerEmpresa(); return s1.compareTo(s2) > 0; } … } Introducción a la Programación Orientada a Objetos

  31. Caso de estudio: Agencia Publicitaria 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 El problema es diferente a los que hemos resuelto previamente, la solución es análoga a otras ya planteada

  32. Caso de estudio: Agencia Publicitaria //Comandos public void insertar (Aviso nuevo){ //Requiere que la colección no esté llena int pos = posInsercion(nuevo,cantAvisos()); arrastrarDsp (pos,cantAvisos-pos-1); T[pos] = nuevo; cant++; } Mantenemos nuestro objetivo de obtener soluciones bien moduladas, aplicando la estrategia de dividir para conquistar en nuestros algoritmos.

  33. Caso de estudio: Agencia Publicitaria private int posInsercion (Aviso con,int n){ int pos = 0; if (n > 0) if (con.mayorClave(T[n-1])|| con.igualClave(T[n-1])) pos = n; else pos = posInsercion (con,--n); return pos; }

  34. Caso de estudio: Agencia Publicitaria private void arrastrarDsp (int pos,int n){ /*arrastra n elementos una posición después*/ if (n > 0){ T[pos+n] = T[pos+n-1]; arrastrarDsp(pos,--n); } }

  35. Caso de estudio: Agencia Publicitaria 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

  36. Caso de estudio: Agencia Publicitaria 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--; } }

  37. Caso de estudio: Agencia Publicitaria 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); } }

  38. Caso de estudio: Agencia Publicitaria 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

  39. Caso de estudio: Agencia Publicitaria private int posElemento(Aviso con,int n){ int pos=cant; if (n > 0) if (T[n-1].igualClave(con)) pos = n-1; else if (T[n-1].mayorClave(con)) pos = posElemento (con,--n); return pos; } Si el Aviso no pertenece a la colección retorna cant

  40. Caso de estudio: Agencia Publicitaria //Consultas public int cantAvisos (){ return cant; } public boolean estaLlena (){ return cant == T.length; }

  41. Caso de estudio: Agencia Publicitaria public boolean pertenece(Aviso con){ return pertenece(con,cantAvisos()); }

  42. Caso de estudio: Agencia Publicitaria 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.igualClave(T[n-1])) esta = true; else if (con.mayorClave(T[n-1])) esta = false; else esta = pertenece (con,n-1); return esta; }

  43. Caso de estudio: Agencia Publicitaria public boolean pertenece(Aviso con){ boolean esta = posElemento(con,cant)<cant; return esta; }

  44. Caso de estudio: Agencia Publicitaria AvisosPublicitarios Aviso Fecha AvisoImpreso AvisoRadioTV AvisoEP Introducción a la Programación Orientada a Objetos

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

  46. Caso de estudio: Agencia Publicitaria AvisoEP <<atributos de clase>> costoBase: real <<atributos de instancia>> codigoEP : entero tipoCartel : char <<consultas>> costoAviso(): real Introducción a la Programación Orientada a Objetos

  47. Caso de estudio: Agencia Publicitaria *Aviso <<atributos de clase>> <<atributos de instancia>> <<consultas>> *costoAviso(): real AvisoRadioTV AvisoImpreso AvisoEP <<atributos de clase>> <<atributos de instancia>> <<atributos de clase>> <<atributos de instancia>> <<atributos de clase>> <<atributos de instancia>> <<consultas>> costoAviso(): real <<consultas>> costoAviso(): real <<consultas>> costoAviso(): real Introducción a la Programación Orientada a Objetos

  48. Caso de estudio: Agencia Publicitaria public double costoTotal (){ float c = 0; for (int i = 0; i< cantAvisos();i++) c = c+T[i].costoAviso(); return c; } 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

  49. 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ónOrientada a Objetos

  50. 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ónOrientada a Objetos

More Related