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
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
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)
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
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
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
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
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
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 ?
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
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
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
• 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
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
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
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
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
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
ú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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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