Upgrade to Pro — share decks privately, control downloads, hide ads and more …

POO - U1

POO - U1

U1 - Introducción al paradigma de programación orientada a objetos

Jaime Jesús Delgado Meraz

September 27, 2017
Tweet

More Decks by Jaime Jesús Delgado Meraz

Other Decks in Programming

Transcript

  1. Temario • Introducción • Orientación a Objetos • Paradigmas de

    Programación • Elementos del modelo de objetos • Objetos y Clases • Herencia • Polimorfismo • Modularidad y Abstracción • Encapsulamiento • Lenguaje de Modelado Unificado • Diagrama de Clases 2
  2. Introducción • La programación orientada a objetos (POO), representa un

    intento de hacer programas que modelen de manera más cercana a la manera en que las personas piensan y se comportan en la vida real. • En los primeros lenguajes de programación, la resolución de problemas se hacía identificando una tarea computacional que debía ser ejecutada para dar solución a dicho problema. • Programar consistía entonces, en encontrar una secuencia de instrucciones que completaran dicha tarea. 4
  3. Introducción • En la programación orientada a objetos, en lugar

    de tareas, encontramos objetos: • Entidades que tienen comportamientos, que almacenan información y que pueden interactuar con otros objetos. • En el software, los objetos pueden representar entidades reales o abstractas en el dominio del problema. 5 Persona (Entidad Real) Sirena (Entidad Abstracta)
  4. Introducción • Utilizar la POO, permite hacer el diseño de

    un programa de manera más natural y por lo tanto más fácil de programar y de que el código sea entendible. • Los lenguajes de programación orientados a objetos incluyen un conjunto de características que los hacen diferentes de los lenguajes estándar. • Hacer uso de dichas características, no es de manera automática, sino que requiere de orientar nuestro pensamiento para resolver problemas, con una visión orientada a objetos. 6
  5. Orientación a Objetos • En el diseño de software, la

    orientación a objetos es un conjunto de herramientas y métodos, que permiten a los programadores construir sistemas de software: • Confiables • Intuitivos • Mantenibles • Bien documentados • Reusables • Para que finalmente dichos sistemas satisfagan los requerimientos de los usuarios. 7
  6. Orientación a Objetos • La orientación a objetos provee a

    los programadores con nuevas herramientas mentales y de conceptualización, que tienen un gran uso en la solución de problemas informáticos. • Los lenguajes orientados a objetos deben dar soporte a los siguientes conceptos: 1. Instanciación de Objetos 2. Clases 3. Herencia 4. Polimorfismo 8
  7. Paradigmas de Programación • La programación orientada a objetos es

    uno de los múltiples paradigmas de programación. • Otros paradigmas de programación comunes incluyen: • Programación Imperativa (Pascal, C) • Programación Lógica (Prolog) • Programación Funcional (Haskell, Lisp) • Estos últimos, lógico y funcional, hacen uso de lenguajes que se conocen como de tipo declarativo. 9
  8. Paradigmas de Programación • Podemos decir que, un paradigma de

    programación es una forma de conceptualización para las técnicas de cómputo, y de como las tareas deben estructurarse y organizarse. 10 La palabra paradigma se define como un modelo, ejemplo, forma o estilo de hacer algo DEFINICIÓN
  9. Paradigmas de Programación • Es posible distinguir entre dos tipos

    de lenguajes de programación: • Imperativos, que describen el conocimiento del “como” debe hacerse algo. • Declarativos, que describen el conocimiento de “que es” lo que se va a resolver. 11 Algoritmo Solución Lenguajes Imperativos Algoritmo Solución Lenguajes Declarativos ?
  10. 14 Pensemos en objetos… Un programa orientado a objetos está

    estructurado como una comunidad de agentes que interactuan entre sí, denominados objetos. Cada objeto tiene un rol que jugar y provee un servicio o realiza una acción que es usada por otros miembros de la comunidad. DEFINICIÓN
  11. Objetos y Clases • En la POO, hablar de los

    conceptos de objetos y clases de manera separada es algo difícil. • Un objeto es cualquier cosa, mientras que una clase consiste en una categoría de cosas. • Un objeto es elemento específico que pertenece a una clase, es decir, es una instancia de una clase. • Una clase define las características de sus objetos y los métodos que pueden aplicarse a dichos objetos. 16
  12. 18 Objetos y Clases El tipo de dato de una

    variable define que acciones se pueden realizar con una variable. Una clase es similar a un tipo de dato complejo para objetos, que define que es lo que se puede hacer con ellos. NOTA
  13. Objetos y Clases • Supongamos que existe la clase Plato…

    • Un Plato tiene atributos como tamaño y color, y métodos como llenar y limpiar. • miPlato es un objeto, y a su vez instancia, de la clase Plato. • Si instanciaramos tuPlato como un objeto de la misma clase. • Observaríamos que miPlato y tuPlato son instancias de la misma clase, por lo que comparten características y métodos. 19
  14. Herencia • El concepto de utilizar clases, provee de una

    manera útil de organizar objetos, esto es especialmente útil puesto que las clases son reusables. • Esto es, que podemos extenderlas (heredarlas); podemos crear clases nuevas que extiendan o que sean descendientes de clases existentes. • Las clases descendientes, pueden heredar todos los atributos de la clase original (padre), o pueden sobreescribir métodos de su clase padre a necesidad. • Utilizar la herencia ahorra una gran cantidad de trabajo, ya que cuando creamos una clase que hereda de otra, sólo debemos agregar las nuevas características y funciones. 20
  15. Herencia • De manera similar a lo anterior, se pueden

    crear programas de manera más fácil, si muchos de sus componentes son usados “como tal” o con mínimas modificaciones. 21 Cuando una compañía automotriz diseña un nuevo modelo, no vuelve a construir cada componente desde cero, sino más bien, reutiliza componente previamente utilizados en otros modelos. Se reutilizan características y/o se modifican funciones heredadas de un elemento ya existente. EJEMPLO
  16. Herencia • La herencia no permite escribir programas que no

    se podían escribir si la herencia no existiera… • Es decir, que se podría crear cada parte de un programa desde cero, pero definitivamente, reutilizar las clases existentes, hace el trabajo de programación mucho más fácil. 22
  17. Herencia • En geometría, un Cubo es un descendiente de

    un Cuadrado. • Un Cubo tiene todos los atributos de un Cuadrado, más una característica extra: profundidad. • Un Cubo, sin embargo, tiene un método diferente de calcular el areaTotal (y volumen) al que tiene un Cuadrado. • En los negocios, un EmpleadoMedioTiempo contiene todos los atributos de un Empleado, más algunos atributos especiales. • Puesto que los lenguajes de programación orientados a objetos permiten herencia, podemos construir clases que sean extensiones de clases existentes; y con esto evitamos comenzar desde cero cada vez que queramos crear una clase. 
 23
  18. Polimorfismo • Los módulos de programación podrían ocasionalmente verse en

    la necesidad de cambiar la forma en que operan dependiendo de su contexto. • Los programas orientados a objetos utilizan el polimorfismo para llevar a cabo la misma operación de una manera personalizada en cada objeto. 24
  19. Polimorfismo • Es importante notar que el concepto de polimorfismo

    únicamente existe en los lenguajes orientados a objetos, y no existe un comportamiento similar en otros tipo de lenguajes. • Sin el polimorfismo, se tendrían que usar módulos separados o diferentes nombres para un método que multiplica dos números y otro que multiplica tres. • Sin el polimorfismo, se tendrían que generar nombres de módulos separados para un método para limpiar un plato, otro para limpiar un carro y otro más para limpiar un bebé. 25
  20. Modularidad • La programación en los lenguajes procedurales, tiene dos

    grandes desventajas: 1.El proceso de programación requiere tanto detalle, que el programador, suele olvidar el problema general. 2.Instrucciones simples, requeridas en distintas partes del código, tienen que reescribirse más de una vez. • Escribir programas, se volvió más fácil, cuando los lenguajes de programación comenzaron a permitir la escritura de métodos (grupos de instrucciones que pueden ser ejecutados como unidad). 29
  21. Modularidad • El uso de métodos, permite a los programadores,

    agrupar instrucciones juntas, a estos grupos de instrucciones se les conoce como: funciones, procedimientos, métodos, subprogramas, subrutinas o simplemente rutinas. • Los programas modulares son más fáciles de leer, que aquellos no modulares, puesto que el nombre descriptivo de un grupo, representa una serie de pasos detallados. 30
  22. • La abstracción, es el proceso de poner atención a

    propiedades o características importantes, ignorando los detalles. • La abstracción no es un proceso lejano de la vida real, y se ve reflejado en algo tan simple como hacer una lista de pendientes. Abstracción 31 La mujer llorando - Picasso
  23. Abstracción • Si seguimos en ejemplo de la lista de

    pendientes… • Hacer las compras • Lavar el carro • Pagar el agua • Recoger a los niños • Cada una de las tareas, requiere de múltiples pasos y decisiones, sin embargo, no se describe cada detalle involucrado con las mismas. • Por supuesto, se debe poner atención a los detalles en algún momento, y en un programa modularizado, cada módulo deberá ser escrito paso a paso. 32
  24. Abstracción • Es normal que cuando se trabajo con objetos

    en la vida real, se de por sentado la abstracción. • Cuando se habla por teléfono, no es necesario pensar en como se transmiten las señales, como se forman las palabras que se dicen, como se realizan los cobros de teléfono, etc. • Si se tuviera que hacer, probablemente nunca llegaríamos a completar una llamada. • Programar en lenguajes de alto nivel, nos permite hacer uso de la abstracción, de esta manera, los programas pueden escribirse más rápido. 33
  25. Encapsulamiento • Los módulos o procedimientos actúan relativamente como mini

    programas autónomos. • Estos procedimientos no solo puede contener sus conjuntos de instrucciones, sino también sus propias variables. • Las variables e instrucciones dentro de un módulo están ocultas y contenidas, es decir, encapsuladas, lo que hace el módulo independiente de los demás, y por lo tanto reusable. 34
  26. • En la vida real, se observan muchos ejemplos de

    encapsulamiento. • Cuando se construye una casa, no se inventan las instalaciones de plomería, electricidad y aire acondicionado. • Más bien, se hace uso de sistemas previamente diseñados, probados, lo que reduce tiempo y esfuerzo. Encapsulamiento 35
  27. • De manera similar a la vida real, el encapsulamiento,

    ahorra tiempo y dinero y mejora la confiabilidad. • Si una función o método ha sido probado con previamente, se tiene la confianza de que producirá el resultado correcto. • Los lenguajes procedurales están limitados en la programación. Se deben saber los nombres y que módulos usar, y no es posible reusar los nombres para otros módulos en el mismo programa. • En la programación orientada a objetos, se reducen drásticamente este tipo de limitaciones. Encapsulamiento 36
  28. • El UML, por sus siglas en inglés es el

    lenguaje de modelado de sistemas más conocido y utilizado en la actualidad. • Esta respaldado por el Object Management Group (OMG). • Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. • Ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos, funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y compuestos reciclados. Lenguaje de Modelado Unificado 38
  29. Estándar UML • Desde el año 2005, UML es un

    estándar aprobado por la ISO como ISO/IEC 19501:2005 Information technology — Open Distributed Processing — Unified Modeling Language (UML) Versión 1.4.2. • En el año 2012 se actualizó la norma a la última versión definitiva disponible en ese momento, la 2.4.1, dando lugar a las normas ISO/IEC 19505-1 e ISO/IEC 19505-2. 40
  30. Diagramas UML • UML en su versión 2.5, soporta 3

    tipos de diagramas diferentes: 41 Estructurales Diagramas de clase, componentes, despliegue, objetos, paquetes, perfiles, estructura compuesta Comportamiento Diagramas de actividades, casos de uso, máquina de estados Interacción Diagramas globales de interacciones, comunicación, secuencia, de tiempos
  31. Diagramas de Clase • En la ingeniería de software, un

    diagrama de clases en UML es un tipo de diagrama de estructura que describe la estructura de un sistema, mostrando las clases que lo componen, indicando los atributos y métodos de las mismas, así como sus relaciones. • El diagrama de clases es el componente principal para el modelado orientado a objetos. • Se utiliza principalmente para el modelado conceptual de una aplicación, así como para el modelado detallado al transformar los modelos en código. • UML ofrece mecanismos para representar las clases y sus miembros (métodos y atributos), al igual que información adicional. 42
  32. 44 Clases Nombre de la Clase Atributos Operaciones (Métodos) En

    singular accesibilidad nombreAtributo: tipoDato accesibilidad nombreMétodo ( parámetro 1: tipoDato, parámetro 2: tipoDato, parámetro N: tipoDato ) : tipoDatoRetorno
  33. Accesibilidad • También conocidos como modificadores de acceso, sirven para

    delimitar, el alcance de un atributo o método. • público (+): Visible dentro y fuera de la clase • privado (-): Sólo visible por los métodos de la clase • protegido (#): Visible por los métodos de la clase y por métodos de clases derivadas, cuando hay herencia. • Pueden aplicarse tanto a atributos como a métodos. 45
  34. 46 Clases Empleado - id: int - nombre: String -

    apellido: String - salario: double + calcularPagoMensual (diasTrab int): double Ejemplo:
  35. Paquetes • Agrupan lógicamente las clases que tienen alguna relación

    entre sí. • Es posible agrupar por módulos y submódulos de una aplicación. • Igualmente es posible agrupar por tipo de funcionalidad. 47 Paquete X Paquete Y
  36. Relaciones • Las clases pueden conectarse con otras clases de

    diferentes formas, a estas conexiones se les denomina relaciones. 49 Asociación Uso / Dependencia Herencia Composición Agregación
  37. Relaciones • Indica que una clase invoca a uno o

    varios métodos que se encuentran en la clase con la cual se relaciona. 50 USO
  38. Relaciones • Indica que una clase B, hereda de una

    clase A. • Los objetos de la clase B, toman los atributos y métodos de la clase A como si fueran propios. 51 HERENCIA
  39. Relaciones • Se utiliza para expresar que una clase contiene

    múltiples objetos de otra clase. 54 AGREGACIÓN Ejemplos de Multiplicidad 1 Uno 1, 2 Uno o dos 5 Cinco 0 .. * / * Entre cero y muchos 1 .. * Entre uno y muchos 5 .. 10 Entre cinco y diez
  40. Relaciones • Es una relación de agregación fuertemente ligada, es

    decir, que por lo menos debe existir un objeto de la clase contenida en la clase contenedora para que exista relación. 55 COMPOSICIÓN
  41. Relaciones • Cuando los objetos de una clase tienen alguna

    referencia con objetos de otra clase se utiliza una relación de asociación. Se representa con una línea continua. 56 ASOCIACIÓN
  42. Referencias • https://www.sitepoint.com/getting-started-java/ • https://www.sitepoint.com/java-language-basics/ • https://www.sitepoint.com/understanding-java- variables-and-data-types/ • https://www.sitepoint.com/oriented-concepts-java-1/

    • https://www.sitepoint.com/oriented-concepts-java-2/ • https://www.sitepoint.com/interface-and-inheritance-in- java-inheritance/ • https://www.sitepoint.com/quick-guide-to- polymorphism-in-java/ 57