Paradigmas de programación Prog. orientada a objetos Conceptos de Programación Orientada a Objetos Abstracción de Programación estructurada Programación imperativa 2 Programación estructurada (I) Programación estructurada (II) Abstracción de operaciones Bloque principal Valores de entrada Valores de entrada Valor(es) de salida Procedimiento Función Estructura de un módulo: Interfaz Datos de entrada Datos de salida Descripción funcionalidad Sintaxis del lenguaje: Implementación Datos locales Secuencia de instrucciones i Organización del código en bloques de instrucciones Definición de funciones y procedimientos Extensión del lenguaje con nuevas operaciones Llamadas a nuevas funciones y procedimientos 3 4 Programación estructurada: ventajas Programación estructurada: ejemplo Facilita el desarrollo Se evita la repetición del trabajo Trabajo de programación compartimentado en módulos independientes Diseño top-down: descomposición en subproblemas Facilita el mantenimiento Claridad del código Independencia de los módulos Favorece la reutilización double u1, u2, m; u1 = 4; u2 = -2; m = sqrt (u1*u1 + u2*u2); printf ( %lf, m); double modulo (double u1, double u2) double m; m = sqrt (u1*u1 + u2*u2); return m; printf ( %lf, modulo (4, -2)); 5 6
Tipos abstractos de Abstracción de Abstracción de + abstracción de operaciones Un tipo abstracto de consiste en: Estructura de que almacena información para representar un a b c x y z determinado concepto Funcionalidad: conjunto de operaciones que se pueden realizar sobre el tipo de Sintaxis del lenguaje: Módulos asociados a tipos de No introduce necesariamente variaciones respecto a la programación modular 7 8 Abstracción de operaciones Ejemplo de TAD en C Entrada Entrada struct vector double x; double y; ; arg1 arg1 arg2 arg3 Salida Salida void construir (vector *u, double u1, double u2) u->x = u1; u->y = u2; double modulo (vector u) double m; m = sqrt (u.x*u.x + u.y*u.y); return m; vector u; construir (&u, 4, -2); printf ( %lf, modulo (u)); 9 10 Ejemplo de TAD: extensibilidad Tipos abstractos de : ventajas... double producto (vector u, vector v) return u.x * v.x + u.y * v.y; vector u, v; construir (&u, 4, -2); construir (&v, 1, 5); printf ( %lf, producto (u, v)); Conceptos del dominio reflejados en el código Encapsulamiento: ocultación de la complejidad interna y detalles de los y las operaciones Especificación vs. implementación: utilización del tipo de independiente de su programación interna Mayor modularidad: también los Mayor facilidad de mantenimiento, reutilización 11 12
Programación orientada a objetos Programación orientada a objetos = soporte sintáctico para los tipos abstractos de + prestaciones asociadas a las jerarquías de clases + cambio de perspectiva Programación orientada a objetos (I) Soporte sintáctico explícito para la abstracción de Cambia el punto de vista: los programas son apéndices de los Aparece un nuevo concepto: objeto Objeto = tipo abstracto de con estado (atributos) y comportamiento (operaciones) propios Aparece el concepto de jerarquía de tipos, y con él: Herencia de estructura y funcionalidad Polivalencia de los tipos Funciones Polimorfismo Objeto Sintaxis del lenguaje: Definición de clases Funciones explícitamente asociadas a clases Variables Creación de objetos Acceso a atributos, invocación de métodos 13 14 Programación orientada a objetos (II) Programación orientada a objetos: ejemplo en Java class Vector private double x; private double y; Vector (double u1, double u2) x = u1; y = u2; double modulo () return Math.sqrt (x*x x + y*y); y); class MainClass public static void main (String args []) Vector u = new Vector (4, -2); System.out.println (u.modulo ()); 15 16 Programación orientada a objetos: ejemplo en C++ class Vector private: double x; double y; public: Vector (double u1, double u2) x = u1; y = u2; double modulo () return sqrt (x*x + y*y); ; Vector u (4, -2); cout << u.modulo (); Programación orientada a objetos: ventajas Ventajas de la abstracción de + disciplina de programación Reutilización de código, mantenimiento y extensión de las aplicaciones Desarrollo e integración de software orientado a componentes Potencia del lenguaje: herencia, polimorfismo Reflejar conceptos de problemas reales? Más fácil de utilizar? 17 18
Lenguajes orientados a objetos Simula (1967) Smalltalk (1980) C++ (1983, 1990) Object Pascal (1988) Lisp CLOS (1989) Java (1995, 1997, 1998...) Lenguajes puros vs. híbridos Elementos de la programación orientada a objetos Objetos: atributos + métodos Métodos: operaciones sobre los objetos Clases: categorías de objetos con propiedades y operaciones comunes Jerarquías de clases En algunos lenguajes las clases son objetos Caso particular: paradigma prototipo-instancia Relaciones, objetos compuestos 19 20 Estructura conceptual de un objeto Propiedades: valores Relaciones con otros objetos Métodos: código Acceso al estado del objeto Cálculos sobre el estado Modificación del estado Constructores: inicialización nombre edad división sueldo bruto calcular salario neto nombre edad división sueldo bruto categoría Relaciones entre objetos Tipos de relaciones Especialización: sólo entre clases Agregación: objetos compuestos formados por partes Asociación: relaciones arbitrarias (p.e. jefe de empleado) Implementación Lenguajes con elementos específicos para relaciones Atributos que contienen referencias (punteros) a objetos 21 22 Objetos: encapsulamiento Porción visible: interfaz (protocolo) Contrato público de comportamiento Descripción de operaciones: información de entrada y de salida Porción oculta: implementación Datos Estructura de para almacenar la información Código que se ejecuta para realizar las operaciones Interfaz Métodos Ciclo de vida de los objetos Creación Reserva de memoria: x = crear ( ) Inicialización de atributos: constructores Manipulación Acceso a atributos: x. nombre Invocación de métodos: x. salario_neto ( ) Destrucción Liberar la memoria Destruir partes internas, si las hay Eliminar referencias al objeto destruido (p.e. jefe) 23 24
Jerarquías de objetos Herencia de estructura Jerarquía de tipos nombre edad x Cliente y = crear z = crear x = y división sueldo bruto Cliente nombre empresa teléfono de contacto x = z categoría 25 26 Herencia de funcionalidad Facilidad de extensión Reutilización especialización especialización calcular salario neto Cliente Modularidad calcular salario neto Cliente herencia calcular salario neto Administrativo 27 28 Herencia múltiple Herencia múltiple Resolución de la ambigüedad curso asignaturas matricularse (asignatura) Estudiante Licenciado año promoción especialidad nota media x A Alumno doctorado año promoción especialidad nota media curso asignaturas matricularse (asignatura) y t B D x y z t C y z Dobj=crearD D obj. x obj. y 29 30
Polimorfismo Ligadura dinámica (II) Sobrecarga Recta r1 = crear Recta Recta r2 = crear Recta Vector v = crear Vector r1.paralela (r2) r1.paralela (v) Sobreescritura (especialización) x = crear persona y = crear x._ ( ) y._ ( ) Ligadura dinámica x y = crear x = y x._ ( ) y._ ( ) Calcular área de figura seleccionada área ( ) Figura Triángulo Rectángulo Elipse área ( ) área ( ) área ( ) 31 32 Ligadura dinámica de argumentos Ligadura dinámica de argumentos: ambigüedad (I) Calcular área de la intersección de figuras seleccionadas Triángulo double intersección (Triángulo t) double intersección (Elipse e) double intersección (Rectángulo r) A C f (A x, B y) f (B x, A y) Rectángulo double intersección (Triángulo t) double intersección (Elipse e) double intersección (Rectángulo r) Elipse double intersección (Triángulo t) double intersección (Elipse e) double intersección (Rectángulo r) B B b 1 = crear B B b 2 = crear B C c = crear C c. f (b 1, b 2 )? 33 34 Ligadura dinámica de argumentos: ambigüedad (II) Ligadura dinámica de argumentos: ambigüedad (III) A f (B x) A B D f (A x) f (B x) B b = crear B B f (A x)? b. f (b) C? C c = crear C D d = crear D d. f (c) 35 36
Análisis y Diseño Orientado a Objetos Unified Modeling Language (UML) Lenguaje gráfico estándar para visualizar, especificar, construir y documentar las partes de un sistema de software Con cualquier proceso de desarrollo A lo largo de todo el ciclo de vida Con distintas tecnologías de implementación Herramientas para generar código Partes de un modelo en UML El modelo de clases El modelo de casos de uso El modelo de interacción El modelo de estados El modelo de implementación El modelo de instalación (deployment) 37 Diagramas UML Estructurales De comportamiento Clases Casos de uso Objetos Secuencia Componentes Colaboración Instalación Estados Actividad 38 Diagramas UML Estructurales De comportamiento Clases Casos de uso Objetos Secuencia Componentes Colaboración Instalación Estados Actividad Diagramas de clases y objetos Clase Atributos Operaciones Objeto Atributos Operaciones Interfaz Dependencia Generalización Asociación Agregación Composición 39 40 Diagrama de clases nombre : String edad : Integer 1..* Utiliza 0..* Ordenador nombre : String memoria : Integer Formado por Figura abstract * posición : Punto * Formado por Canvas Usuario1 : Servidor7 : Ordenador draw ( ) abstract area ( ) : Integer abstract s Diagrama de objetos nombre ="Juan" fecha nac. = 21/07/76 Usuario2 : nombre = "Luis fecha nac. = 21/07/85 nombre ="Andromeda" memoria = 256 PC12 : Ordenador nombre = "Anubis" memoria = 128 Grupo draw ( ) area ( ) : Integer Círculo centro : Punto radio : Integer draw ( ) area ( ) : Integer Polígono draw ( ) area ( ) : Integer Formado por * Punto x : Integer y : Integer 41 42
Casos de uso Casos de uso Cancel appointment Comunicación Cancel appointment Caso de uso Comunicación Actor Make appointment Scheduler Actor Caso de uso Make appointment Scheduler Patient Request medication Doctor Patient Caso de uso Request medication Actor Doctor Caso de uso Actor Pay bill Clerk Pay bill Clerk 43 44 Secuencia Secuencia Objetos caller exchange receiver lift receiver caller exchange receiver lift receiver dial tone dial digit dial tone dial digit Mensajes...... ringing tone phone rings ringing tone phone rings answer phone answer phone stop tone stop ringing stop tone stop ringing 45 Focos de control 46 Estados Estados Inicio Estados Fin start digit(n) Partial dial start digit(n) Partial dial digit(n) digit(n) Transiciones 47 48