Tema 1 Introducción al paradigma de programación orientado a objetos Programación Orientada a Objetos Curso 2013/2014 Contenido Paradigmas de programación vs. Lenguajes de programación. Evolución de los lenguajes de programación. Lenguajes de programación orientados a objetos (LPOO). Características del lenguaje Java. Características del paradigma de programación orientado a objetos Calidad del Software. Curso 2013/2014 Programación Orientada a Objetos 2 Evolución de los lenguajes de programación La evolución de los lenguajes de programación está ligada al crecimiento de la complejidad de las aplicaciones. Adaptación a las nuevas aplicaciones y a la mejora de la capacidad de procesamiento del hardware. La forma de programar se acerca más a los conceptos del dominio de la aplicación (abstracción). Curso 2013/2014 Programación Orientada a Objetos 3 Paradigmas de programación Paradigma de programación: Colección de conceptos que guían el proceso de construcción de un programa, determinando su estructura. Estos conceptos controlan la forma en que pensamos y formulamos los programas. Un lenguaje de programación refleja un paradigma. Paradigma de programación Lenguaje de programación Imperativo Pascal, C, … Orientado a Objetos Java, C++, C#, … Curso 2013/2014 Programación Orientada a Objetos 4 Evolución de los lenguajes OO Simula (1964): Comienzo de la OO. Se utilizaba como lenguaje de simulación. Ha influido en el desarrollo de otros lenguajes OO. Smalltalk (1972): Basado en Simula. Define los principios del paradigma OO: Todo es un objeto. Los objetos que se comunican mediante mensajes. Todo objeto es creado a partir de una clase (tipo). Encapsulación del comportamiento asociado a un tipo. Las clases se organizan en jerarquías de herencia. Curso 2013/2014 Programación Orientada a Objetos 5 Lenguajes OO – Años 80 Popularidad de los lenguajes OO. C++ (1985): Extensión de C con características OO. Muy popular, ayudó a difundir la POO. Eiffel (1985): Bertrand Meyer Lenguaje orientado a objetos puro. Fruto de un profundo estudio del paradigma OO. Lenguaje “teórico” poco utilizado. Curso 2013/2014 Programación Orientada a Objetos 6 Lenguajes OO – Años 90 Java (1995): Sun Microsystems. Lenguaje OO puro. Se popularizó por su uso en la web. Actualmente soporta una extensa plataforma de desarrollo de software (numerosas bibliotecas de código). C# (2000): Combina C++ y Java. Integrado en la plataforma .NET de Microsoft. Curso 2013/2014 Programación Orientada a Objetos 7 Características del lenguaje Java Sencillo: La sintaxis de Java es muy parecida a C++ Elimina las características de C++ más complejas, por ejemplo, punteros. Orientado a Objetos: A diferencia de C++, es un lenguaje OO puro. Las capacidades OO son similares a las de C++. Curso 2013/2014 Programación Orientada a Objetos 8 Características del lenguaje Java Independiente de la plataforma de ejecución: El compilador Java genera código intermedio (bytecodes) independiente de la plataforma. Los bytecodes son interpretados por la máquina virtual de Java. El código compilado se puede ejecutar en muchas plataformas (Windows, Linux, Mac, etc.) siempre y cuando cuenten con el entorno de ejecución de Java (incluye la máquina virtual) La tecnología de implementación (compilador+intérprete) hace que el código Java sea portable. Curso 2013/2014 Programación Orientada a Objetos 9 Características del lenguaje Java Robusto: Lenguaje fuertemente tipado Mecanismo de excepciones El compilador detecta muchos problemas que, en otros lenguajes, aparecerían en tiempo de ejecución. Gestión de errores en tiempo de ejecución Elimina los errores derivados de una mala gestión de memoria Mecanismo de “recogida de basura” Elimina la gestión de punteros. Curso 2013/2014 Programación Orientada a Objetos 10 Orientación a Objetos Técnica de programación que organiza el software como una colección de objetos que colaboran para realizar la funcionalidad de un sistema. Curso 2013/2014 Programación Orientada a Objetos 11 Orientación a Objetos Nuevo enfoque de programación centrado en los conceptos (abstracciones) del dominio de la aplicación. Estrategia de desarrollo: el software se organiza en torno a los módulos que son deducidos de los tipos de objetos del dominio de la aplicación. Diferencia con el paradigma imperativo: Centrado en las funciones, qué hace el sistema, en lugar de quién lo hace. Estrategia de desarrollo: refinamiento por pasos sucesivos. Curso 2013/2014 Programación Orientada a Objetos 12 Desarrollo Orientado a Objetos Identificar los objetos relevantes al problema. Describir los tipos de objetos y su propiedades. Encontrar las operaciones para los tipos de objetos. Identificar relaciones entre objetos. Utilizar los tipos de objetos y relaciones para estructurar el software. Curso 2013/2014 Programación Orientada a Objetos 13 Ejemplo: Objeto Coche Tiene las propiedades: •Color •Velocidad •Carburante Operaciones que puede realizar: •Mover •Parar •Girar a la derecha •Girar a la izquierda •Arrancar Curso 2013/2014 Programación Orientada a Objetos 14 Clases de objetos Los objetos con propiedades similares y el mismo comportamiento se agrupan en clases. Curso 2013/2014 Programación Orientada a Objetos 15 Clase Coche Coche color velocidad carburante mover() parar() girarDerecha() girarIzquierda() arrancar() Curso 2013/2014 Programación Orientada a Objetos 16 Relaciones entre objetos A es un cliente de B si todo objeto de A puede contener información sobre uno o más objetos de B. B hereda de A si B representa una versión especializada de A Curso 2013/2014 Programación Orientada a Objetos 17 Relación de clientela • Una persona tiene información sobre el coche que posee. Curso 2013/2014 Programación Orientada a Objetos 18 Relación de herencia Turismo ES UN Coche. Turismo es una especialización de Coche que tiene nuevas propiedades y funcionalidad. Curso 2013/2014 Programación Orientada a Objetos 19 Comunicación entre objetos Objetos se comunican mediante paso de mensajes Curso 2013/2014 Programación Orientada a Objetos 20 Calidad del software La ingeniería del software tiene como objetivo la producción de software de calidad. La OO se propone como una técnica para mejorar la calidad del software. Los datos son más estables que las funciones. La calidad del software se describe como la combinación de varios factores internos y externos. Curso 2013/2014 Programación Orientada a Objetos 21 Calidad del software Factores Externos Factores Internos Pueden ser detectados por los usuarios Calidad externa es la que realmente preocupa Sólo los perciben los diseñadores y programadores Medio para conseguir la calidad externa Objetivo: Buenas propiedades internas Curso 2013/2014 Satisfacer factores externos Programación Orientada a Objetos 22 Factores Externos Corrección: Robustez: Es la capacidad de los productos software de realizar con exactitud su tarea (cumplir su especificación). Es la capacidad de los productos software de reaccionar adecuadamente ante situaciones excepcionales. Extensibilidad: Es la facilidad de adaptación de los productos software a los cambios en la especificación. La dificultad de adaptación es proporcional al tamaño de la aplicación. Curso 2013/2014 Programación Orientada a Objetos 23 Factores Externos Reutilización: Es la capacidad de un producto software de ser utilizado en la construcción de diferentes aplicaciones. Mejora la productividad. Otros factores: Eficiencia. Portabilidad. Facilidad de uso. Facilidad reparación de errores. Curso 2013/2014 Programación Orientada a Objetos 24 Modularidad Factor interno que contribuye a la calidad del software. Definición: Propiedad que tiene un sistema que ha sido descompuesto en un conjunto de módulos cohesivos y débilmente acoplados. Alta cohesión: Módulo con responsabilidades altamente relacionadas y que no hace gran cantidad de trabajo (módulo especializado). Bajo acoplamiento: Un módulo que depende de pocos módulos. Facilita la comprensión del código. Limita el impacto de los errores. Curso 2013/2014 Programación Orientada a Objetos 25 Principios de Diseño Modular Ocultación de la información: Consiste en ocultar los detalles de la implementación al código cliente, reduciendo así el acoplamiento. Se seleccionan un conjunto de propiedades que se hacen públicas a los clientes (interfaz) y se oculta el resto (implementación). Principio de Elección Única: Evitar manejar listas de variantes. A veces no es evitable. Minimizar los módulos que conocen la lista de variantes. Curso 2013/2014 Programación Orientada a Objetos 26 Principios de Diseño Modular Principio Abierto-Cerrado: Un módulo está abierto si está disponible para ser adaptado: añadir o modificar funcionalidad. Un módulo está cerrado si está disponible para ser utilizado. La extensibilidad del código se ve favorecida por módulos que estén abiertos y cerrados al mismo tiempo. Objetivo: extender un módulo sin afectar al código que ya hacía uso de ese módulo. Curso 2013/2014 Programación Orientada a Objetos 27 Mantenimiento de software Fase del ciclo de vida del software que sucede después de que haya sido entregado. Corresponde al mayor periodo en la vida de una aplicación y se estima un coste del 70%. Tipos de mantenimiento: Adaptación a cambios en la especificación. Reparación de errores. El mantenimiento se ve favorecido por: Extensibilidad. Facilidad de reparación de errores. Reutilización. Curso 2013/2014 Programación Orientada a Objetos 28 OO y calidad del software Mantenimiento: Extensibilidad: Los objetos (conceptos) de un problema son entidades más estables que las funciones. La estructura del software “mimetiza” los conceptos el dominio de la aplicación. Reutilización: La reutilización de código forma parte de los conceptos básicos de la OO (herencia). Curso 2013/2014 Programación Orientada a Objetos 29