Download Introducción
Document related concepts
Transcript
INTRODUCCION A LA PROGRAMACION ORIENTADA A OBJETOS (POO) Presentación basada en: Capítulos 3 y 5. Programación Orientada a objetos. Luis Joyanes Aguilar. 2a ed. 1998. 1. Introducción Fases del ciclo de vida del software: 1) Análisis, 6% 2) Diseño, 5% 3) Implementación, 7% 4) Depuración, 15% 5) Mantenimiento, 67% Factores en la calidad del software: Eficiencia, portabilidad, verificabilidad, integridad (protección contra procesos sin derecho de acceso), facilidad de uso, corrección, robustez (situaciones anómalas), extensibilidad, reutilización, compatibilidad, etc. 1 Abstracción en programación Capacidad para encapsular y aislar la información del diseño y ejecución. Mecanismos en programación: Programación Imperativa Programación Estructurada Abstracción de Datos Programación Orientada a Objetos Evolución Programación estructurada(1) Desde principios de los 70. Dificultad de trabajo en grupo. No hay correspondencia estrecha entre datos reales y programas. 2 Programación estructurada(2) Abstracción de operaciones Estructura de un módulo: Interfaz Implementación Datos de entrada Datos de salida Descripción funcionalidad Datos locales Secuencia de instrucciones Sintaxis del lenguaje: Organización del código en bloques de instrucciones Extensión del lenguaje con nuevas operaciones Definición de funciones y procedimientos Llamadas a nuevas funciones y procedimientos Tipos abstractos de datos(1) Se fundamenta en: Un tipo abstracto de datos consiste en: Abstracción de Datos + Abstracción de Operaciones Estructura de datos que almacena información para representar un determinado concepto Funcionalidad: conjunto de operaciones que se pueden realizar sobre el tipo de datos Sintaxis del lenguaje: Módulos asociados a tipos de datos No introduce necesariamente variaciones respecto a la programación modular 3 Tipos abstractos de datos(2) Abstracción de los datos Abstracción de las operaciones La POO (1) Programación orientada a objetos Soporte sintáctico para los tipos abstractos de datos + Prestaciones asociadas a las jerarquías de clases + Cambio de perspectiva Se basa en el concepto de objeto Objeto = tipo abstracto de datos con estado (atributos) y comportamiento (operaciones) propios Funciones Objeto Variables 4 La POO (2) Aparece el concepto de jerarquía de tipos, y con él los conceptos de: Herencia de estructura y funcionalidad Polivalencia de los tipos Polimorfismo Sintaxis del lenguaje: Definición de clases Funciones explícitamente asociadas a clases Creación de objetos Acceso a atributos, invocación de método La POO (2) Ejemplo en Java Ejemplo en C++ 5 La POO (3) Ventajas del uso de la POO Adecuada en prototipos y simulación. Reusabilidad (mecanismos de abstracción y herencia) En programación convencional: uso de funciones y procedimientos Adecuada para entornos de bases de datos y en sistemas Cliente/Servidor Idónea para tratamiento de Interfaces de Usuario. Características de la POO(1) Generales: Construcción de sistemas complejos a partir de componentes. Modelado más fiel al mundo real. Estimación de reducción de 40% con respecto a la programación convencional. El modelo objeto (Booch, 1994): Abstracción Los paradigmas clasicos estructurados usan una abstracción funcional (procedimental) por un lado, y una de datos por otro. El paradigma objetual define un objeto como una abstracción de datos y funciones, separando además su implementación de su apariencia externa. Las características esenciales del objeto Una grapadora: Color, Número de ganchos, rellenar, grapar, etc. 6 Características de la POO(2) Encapsulamiento El contenido de alguna información está oculto Barrera conceptual sobre colección de datos que solo me permite modificarlos a través de las operaciones definidas por esa barrera Una clase contiene: una interfaz pública una implementación Ventajas: Reducción de la cohesión entre distintos objetos, lo que implica la construcción de objetos independientes. Cambiar un objeto no afecta al resto, sólo al objeto en cuestión. Localización: la información relativa a un objeto está centrada en la definición de él mismo y no distribuida en otros objetos. Esto implica fácil modificación, fácil adaptación a los cambios, rápida ubicación de lo que hay que cambiar. Características de la POO(3) Protección Integridad: sólo permite cambiar el estado por sí mismo, a través de sus operaciones propias. Esto asegura la integridad y la consistencia de la Data. Modularidad Subdivisión de una aplicación en otras más pequeñas (módulos). Un módulo es un conjunto de clases 7 Características de la POO(4) Jerarquía Ordenamiento de las abstracciones Tipos: Polimorfismo Herencia (“es-un”); generalización/especialización Herencia simple o múltiple Agregación (“parte-de”) Una misma operación (método) realizada de diferente modo comer (hombre, vaca, delfin, tigre); clase mamífero Otras propiedades Concurrrencia (multitarea), Persistencia, Uso de excepciones Lenguajes OO Cronología: Simula (1967) Smalltalk (1980) C++ (1983, 1990) Object Pascal (1988) Lisp CLOS (1989) Java (1995, 1997, 1998) Primeros lenguajes POO: Simula-67 Smalltalk-80 Objeto (datos+métodos). Clase. Herencia. Verdadero primer lenguaje de POO Concepto de paso de mensajes (activación de métodos) Orientación: Puros (Smalltalk) Híbridos (C++) 8 Conceptos de la POO (1) Principales: Objeto (una instancia de una clase): atributos + métodos Métodos: operaciones sobre los objetos Clases: categorías de objetos con propiedades y operaciones comunes Jerarquía de herencia entre clases Relaciones, objetos compuestos Conceptos equivalentes: Programación (tipo, variable) POO (clase, objeto) Conceptos de la POO (2) Ciclo de vida de los objetos Creación Manipulación Empleado x = crear Empleado (···) Constructores: inicialización de atributos Acceso a atributos: x . nombre Invocación de métodos: x . salario_neto ( ) Destrucción Explícita (C++) Automática (Java)Æ garbage collection Ejemplo: Al desaparecer un directivo, actualizar relación de subordinados 9 Conceptos de la POO (3) Encapsulamiento Miembros privados y públicos Interfaz pública de una clase (miembros públicos, datos y métodos) Se pueden invocar desde fuera de la clase Ejemplo (clase Robot) Datos: privado x (entero) privado y (entero) Métodos: público void avanzar (entero, entero) público entero posicionX () público entero posicionY () público void avanzar (entero) Conceptos de la POO (4) NO Los puede Accesar Los puede Accesar Objeto X 10 Conceptos de la POO (5) La Herencia Herencia de Estructura: Herencia de Funcionalidad: Conceptos de la POO (6) Clase Abstracta:No admite una instancia directa. Ejemplo: clase Figura. Sería inválido Clase Concreta: Admite la creación de Instancias Herencia Múltiple: 11 Conceptos de la POO (7) Ligadura Se refiere a la conexión entre una llamada a una función y el código real ejecutado como resultado de la llamada Tipos: Ligadura Estática El compilador y el enlazador definen directamente la posición fija del código que se ejecuta en cada llamada a la función Sinónimo: Ligadura temprana, anticipada. Conceptos de la POO (7) Ligadura Dinámica El compilador no defina la posición a llamar, sino que espera hará el tiempo de ejecución para decidir cual es la posición real seleccionada entre una lista de posiciones. El propio código debe deducir en tiempo de ejecución cual es la función a invocar e invocarla a continuación. Esta característica permite definir y manejar jerarquías de clases de un modo simple 12 Conceptos de la POO (7) Ligadura Dinámica: Calcular área de figura seleccionada Conceptos de la POO (8) Calcular área de la intersección de figuras seleccionadas 13 Análisis y diseño OO-UML (1) Análisis y diseño OO-UML (2) 14 Análisis y diseño OO-UML (3) Trabajo próxima clase Lectura: Trabajo: Capitulo 3: Conceptos fundamentales de la programación orientada a objetos. Resumen escrito del capitulo (3 hojas a espacio sencillo). Solucionar los problemas del punto 3.2 Fecha de entrega: Febrero 11 Integrantes: 3 estudiantes (ni más ni menos) 15