Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Departamento de Computación Programación Orientada a Objetos Algoritmos y Programación II Junio, 2004 Las tecnologías de objetos hoy Desde los 70 hasta hoy los lenguajes de programación dirigidos a objetos (u orientados a objetos) han obtenido un éxito y una difusión sin precedentes. Hoy en día los lenguajes OO son claramente predominantes sobre los lenguajes de programación tradicionales Multitud de librerías y desarrollos tecnológicos actuales están basados en objetos. Los métodos de diseño orientado a objetos de aplicaciones están dominando los tradicionales. Conocer y dominar los conceptos de la POO es fundamental 1 La evolución de la programación Lenguajes de bajo nivel Lenguajes de alto nivel Lenguajes estructurados Tipos abstractos de datos Programación orientada a objetos Ensamblador Basic, COBOL Modula 2, Pascal, C Modula 2, Pascal, C SmallTalk, C++, Java Lenguajes de bajo nivel: Cercanos al CPU. Difíciles para el programador. Gran cantidad de instrucciones para realizar una tarea. Justificables por la poca velocidad y memoria principal de los primeros computadores. Lenguajes de bajo nivel Lenguajes de alto nivel Lenguajes estructurados Tipos abstractos de datos Programación orientada a objetos Ensamblador Basic, COBOL Modula 2, Pascal, C Modula 2, Pascal, C SmallTalk, C++, Java Lenguajes de alto nivel. Mayor nivel de abstracción y acercamiento al hombre. Inconvenientes: Los proyectos grandes resultan difíciles de desarrollar, mantener y depurar. Dificultades para la programación en equipo. Escaso grado de reutilización. Variables accesibles desde cualquier punto Saltos incondicionales: GOTOs. 2 Lenguajes de bajo nivel Lenguajes de alto nivel Lenguajes estructurados Tipos abstractos de datos Programación orientada a objetos Ensamblador Basic, COBOL Modula 2, Pascal, C Modula 2, Pascal, C SmallTalk, C++, Java Lenguajes estructurados. Intentan solventar los lenguajes tradicionales. problemas detectados en los Se eliminan los saltos incondicionales y se adopta una estrategia modular, donde cada variable tiene un ámbito en la cual es accesible. Aparecen los procedimientos, como cajas negras que reciben datos, realizan operaciones y devuelven resultados. La solución a un problema se plantea en términos de procedimientos, cada uno de los cuales resuelve un subproblema. Lenguajes estructurados. Ventajas: Se facilita la gestión de grandes proyectos software. La programación modular facilita la programación en equipo. Facilita la reutilización del código en distintos proyectos. Surgen algunas dudas: Cómo se subdivide un problema en subproblemas. Cómo se identifican. Hasta cuando hay que subdividir. Si un procedimiento resuelve parte de un problema mayor. Será fácil que pueda reutilizarse en otros problemas, o será demasiado dependiente y específico de aquel Nueva forma de programación spaghetti: muchos procedimientos que se llaman entre ellos. 3 Programación mediante TDAs Un TDA agrupa en una única unidad, los datos y los procedimientos que lo manipulan. Cada TDA se implementa en un módulo de programa por separado, dejando visible solo la interfaz y ocultando los detalles de implementación. Programación mediante TDAs Ventajas: Los TDAs son fácilmente identificables en un problema: representan entidades matemáticas (vector, punto, polinómio, función, etc.) o estructuras de datos (pilas, colas, listas, etc.). Un TDA no resulta específico de ningún problema, por tanto es fácil su reutilización. Los TDAs son elegantes, legibles y fáciles de depurar. Inconvenientes: Un TDA no es en general una estructura del lenguaje de programación, por tanto es fácil cometer errores en su construcción. Repetición de código entre TDAs similares. Tradicional limitación a estructuras de datos y objetos matemáticos. 4 Programación orientada a objetos Los TDAs se formalizan y se extienden con nuevas ideas, pasando a llamarse objetos. Nuevos mecanismos: herencia, polimorfismo, etc. Aparecen lenguajes que los soportan. El grado de abstracción es el más alto posible, los objetos representan conceptos del problema que se intenta resolver: clientes, productos, etc. Programación orientada a objetos Ventajas: El desarrollo de aplicaciones es muy sencillo e intuitivo. El código es muy elegante, fácil de comprender y mantener. Los objetos son completamente independientes, por tanto la facilidad para la programación en equipo y la reutilización son muy altos. Inconvenientes: Al principio resulta difícil resolver un problema mediante objetos, supone un cambio de mentalidad respecto a la programación tradicional. 5 Entidades y objetos Nuestra mente estructura la realidad en elementos que denominaremos ENTIDADES, que son las unidades básicas del razonamiento o la memoria. Conocimiento • Descripción física • Opinión • Comparación con otras entidades ... Concepto “Libro” La POO intenta que el diseño de los programas sean un reflejo de la realidad. Entidad Objeto Concepto Identificador “Libro” “Libro” Características Conocimiento Conocimiento descriptivo (atributos) color = azul peso = 250 gramos paginas = 320 Conocimiento operacional (métodos u operaciones) abrir cerrar ir a página (n) leer página (n) 6 Noción de Objeto Un objeto esta definido por la información que éste maneja, y por su comportamiento. En OO, se dice que un objeto encapsula información y comportamientos: Las informaciones son los datos incluidos en el objeto, llamados también atributos, variables de instancias o datos. Los comportamientos son los tratamientos aplicables al objeto, llamados también métodos u operaciones. Atributos Atributos Nombre Nombre Edad Edad Empresa Empresa Métodos Métodos CambiarEdad CambiarEdad CambiarEmpresa CambiarEmpresa La encapsulación de un objeto Persona Noción Noción de Clase y de Instancia Para manejar la encapsulación, todos los objetos con las mismas propiedades (atributos y comportamientos) se reúnen en una familia, a la que se le denomina clase. Donde los objetos que la conforman son las instancias de la clase. Una clase describe las propiedades de sus instancias: Constituye una especie de molde para la creación de objetos. Esta creación se denomina instanciación. Recoge los tratamientos aplicables a esos objetos. Cada tratamiento corresponde a un método que se describe por una serie de líneas de código 7 Noción Noción de Clase y de Instancia La noción de clase puede asimilarse, con la noción de tipo. Una clase define las propiedades de todos los objetos que tiene asociados. Un objeto es una materialización de su clase. Los objetos de una misma clase tienen todos los atributos de su clase, y estos atributos pueden tener valores diferentes, según las instancias. El valor de los atributos es propio de cada objeto. Por el contrario, todas las instancias de una misma clase comparten los comportamientos definidos en la clase. Noción Noción de Clase y de Instancia Nombre: Pedro Edad: 30 años Empresa: UC Nombre: José Edad: 40 años Empresa: UCV Instanciación Atributos Atributos Nombre Nombre Edad Edad Empresa Empresa Métodos Métodos CambiarEdad CambiarEdad CambiarEmpresa CambiarEmpresa Instanciación La clase Persona y sus instancias 8 Representación gráfica (notación UML) de una clase Libro título autor tamaño número de páginas abrir cerrar ir a página leer página Atributos Métodos Representación gráfica de un objeto. b:Libro título = “Programación orientada a objetos” autor = “Timothy Budd” tamaño = 25x20 número de páginas = 410 Control de los Mensajes En OO, se envía un mensaje a un objeto que lo recibe, y éste puede reaccionar de 2 maneras: Si el mensaje corresponde a un tratamiento definido en la clase del objeto, el protocolo del método correspondiente se ejecuta. El objeto ha respondido en este caso al mensaje que se le ha enviado Sino, el objeto rechaza el mensaje señalando un error Error ¡No comprendo el mensaje! CambiarNombre(“Rosa”) Objeto Persona: la Sra. Ana 9 Control de los Mensajes Se puede considerar que un objeto es responsable del control y ejecución de los mensajes que se le aplican. Todo objeto que recibe un mensaje reaciona inmediatamente al mismo, y avisa al programador la validez del mismo. El comportamiento de un objeto, es responsabilidad del propio objeto, lo que permite detectar de una forma rápida y fácil los errores. Resúmen Programa OO Colección estructurada de clases Clase Implementación de un TDA Objeto Una instancia de una clase 10 Resúmen Objeto Es una instancia de una clase, creada en tiempo de ejecución Es una estructura de datos formada por tantos campos como atributos tiene la clase. El estado de un objeto viene dado por el valor de los campos Los métodos permiten consultar y modificar el estado del objeto. Durante la ejecución de un programa OO se crearán un conjunto de objetos. Resúmen Un METODO está compuesto por: Cabecera: Identificador y Parámetros Cuerpo: Secuencia de instrucciones ¿Qué instrucciones podemos incluir en el cuerpo de un método? Asignación Condicional Iteración Invocación a otro método = Mensajes Creación de objetos Un método se ejecutará como respuesta a un mensaje. 11 Resúmen Creación de objetos en C++ Inicialización implícita mediante CONSTRUCTORES que realizan la inicialización después de que los objetos son creados. Un constructor: procedimiento especial con el mismo nombre que la clase Se invoca siempre que se crea un objeto de la clase: No tiene valores de retorno ¿Los objetos sustituyen a los TDAs tradicionales? TDAs Abstracción, encapsulación y ocultación de información. Alto nivel de reutilización y facilidades para la programación en equipo. No existen lenguajes de programación orientados a TDAs. Pueden ser implementados en cualquier lenguaje estructurado como C. Son sencillos y en general eficientes. Objetos Abstracción, encapsulación, ocultación de información, herencia, polimorfismo, etc. Altísimo nivel de reutilización y facilidades para la programación en equipo. Requieren lenguajes de programación orientados a objetos. Pueden ser complejos y presentar problemas de eficiencia en ciertos casos. 12