Prólogo PARTE I: PROGRAMACIÓN ORIENTADA A OBJETOS 1. Introducción: la orientación a objetos Conceptos previos Programación estructurada Programación modular Abstracción Ocultamiento de implementación Hacia un nuevo paradigma Calidad del software Orientación a objetos Reducción de la brecha entre el mundo de los problemas y el mundo de los modelos Aumento del nivel de complejidad de los sistemas Reutilización y extensión del código Uso de prototipos Programación en ambientes de interfaz de usuario gráfica Programación por eventos Programación orientada a objetos Significado Lenguajes de programación orientada a objetos Herramientas visuales y de desarrollo rápido de aplicaciones 2. Programación orientada a objetos: generalidades y encapsulamiento Objetos y clases Objetos Clases Encapsulamiento La abstracción en programación orientada a objetos El ocultamiento en programación orientada a objetos Encapsulamiento Tipos especiales de atributos Atributos de clase Atributos con valor constante Atributos con restricciones Métodos de clase Terminología de objetos Estados, eventos y transiciones Operaciones Estado observable de un objeto Pasaje por valor y por referencia en programación orientada a objetos Constructores Destructores Sobrecarga Implementación de objetos y clases en distintos lenguajes Objetos y clases en Object Pascal Objetos y clases en C++ Objetos y clases en Java Ejercicio resuelto: implementación de números racionales Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio resuelto: implementación de conjuntos Enunciado Solución en Object Pascal Solución en C++ Solución en Java 3. Programación orientada a objetos: reutilización y extensión del código Reutilización con composición Composición Agregación Reutilización con herencia Definición y ejemplos Utilización de herencia Herencia múltiple Herencia con excepciones Especialización con menos atributos Constructores, destructores, herencia y composición Atributos y métodos protegidos Generalización, especialización e instanciación Interfaces Concepto de interfaz Un ejemplo de interfaces: la clase adaptadora Elección de implementación: ¿composición, herencia o interfaces? Implementación de reutilización del código en distintos lenguajes Composición, herencia e interfaces en Object Pascal Composición y herencia simple y múltiple en C++ Composición, herencia e interfaces en Java Ejercicio resuelto: implementación de matrices Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio resuelto: uso de la implementación de matrices Enunciado Solución en Object Pascal Solución en C++ Solución en Java 4. Programación orientada a objetos: polimorfismo Polimorfismo Polimorlismo y vinculación tardía Redefinición Sobrecarga y redefinición Objetos polimorfos o conversión de tipo automática Métodos virtuales Constructores y destructores virtuales Grados de polimorfismo Clases y métodos abstractos Clases abstractas Métodos abstractos Clases utilitarias y clases sin estado Uso de información de tipos en tiempo de ejecución Transformación de tipos Moldeo automático y moldeo explícito Datos estructurados con elementos de varios tipos Información de tipos en tiempo de ejecución Implementación del polimorfismo en distintos lenguajes Polimorfismo y otros aspectos en Object Pascal Polimorfismo y otros aspectos en C++ Polimorfismo y otros aspectos en Java Ejercicio resuelto: propiedades de una inmobiliaria Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio resuelto: uso de ta implementación de la inmobiliaria Enunciado Solución en Object Pascal Solución en C++ Solución en Java 5. Documentando la programación Documentación en general UML para documentar la programación UML Diagramas de clases Diagramas de secuencia Diagramas de estados Diagramas de actividades Diagramas y programas Documentación interna Documentación interna de la programación El caso de javadoc Estándares de nomenclatura Ejercicio resuelto: diagramas de actividades, clases y secuencia Enunciado Solución Ejercicio resuelto: un diagrama de estados Enunciado Solución 6. Temas misceláneos de programación orientada a objetos Colecciones en los lenguajes orientados a objetos Colecciones y niveles de abstracción Tipos genéricos y clases parametrizadas Iteradores Colecciones e iteradores en Java Colecciones e iteradores en C++ Colecciones en Object Pascal (Delplti y Kylix) Programación guiada por eventos La programación secuencial y sus limitaciones Eventos y programación Mensajes y eventos Metodologías de ruteo de mensajes Manejo de los eventos Generalización del concepto de eventos en programación orientada a objetos Componentes Paquetes Un soporte para la administración de clases Organización de las clases en Object Pascal Organización de las clases en C++ Organización de las clases en Java Colaboraciones Patrones de diseño Patrones de diseño y de arquitectura Caso I: Singleton Caso II: recorridos de colecciones Caso III: el patrón observador Lenguajes orientados a objetos Simula Smalltalk C++ Object Pascal / Delphi / Kylix Java Python C# Visual Basic 6 Javascript Un cuadro comparativo de lenguajes Ejercicio resuelto: un paquete de figuras geométricas Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio propuesto: patrón observador Enunciado 7. Análisis global del paradigma de orientación a objetos Qué aporta de nuevo la programación orientada a objetos Una serie de requisitos mínimos para ser "orientado a objetos" Conceptos de desarrollo de software antes y después de la orientación a objetos Definición de sistema Cohesión y acoplamiento Ciclo de vida tradicional del software Desarrollo con prototipos completos El Proceso Unificado de Desarrollo de Software Extreme programming Desarrollo orientado a objetos para proyectos pequeños Algunas notas sobre mantenimiento Una introducción a las pruebas en programación orientada a objetos Las pruebas en el desarrollo de software Las pruebas en las metodologías de desarrollo incrementat Las pruebas en extreme programming Pruebas y programación orientada a objetos El futuro de la orientación a objetos Recomendaciones generales para diseño y programación orientada a objetos PARTE II: ASPECTOS AVANZADOS 8. Tratamiento de problemas en tiempo de ejecución y excepciones Dependencia de estados Introducción Enfoques conservadores Enfoques optimistas Excepciones Errores y excepciones Distintas formas de tratar excepciones Transacciones Lanzamiento de excepciones Captura de excepciones: manejadores Atributos y métodos en excepciones creadas por el programador Excepciones derivadas Excepciones en Object Pascal Excepciones en C++ Excepciones en Java El patrón de moldes de métodos para invariantes Algunas desventajas del modelo actual de excepciones Ejercicio resuelto: implementación de fechas con excepciones Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio propuesto: jerarquía de excepciones Enunciado 9. Distintos modelos de datos ¿Objetos estáticos o referencias? Inicialización, asignación y liberación de memoria Copia y clonación Asignación y copia en el modelo estático La clonación en el modelo dinámico Igualdad y desigualdad Ejercicio resuelto: implementación de copia/clonación e igualdad Enunciado Solución en Object Pascal Solución en C++ Solución en Java Ejercicio propuesto: copia/clonación e igualdad Enunciado 10. Persistencia de objetos Persistencia y objetos persistentes Conceptos básicos Separación de la capa de acceso a datos Normas de la persistencia Persistencia y bases de datos relacionales Bases de datos orientadas a objetos Evolución del modelo de clases Soluciones para el almacenamiento de objetos Serialización y XML Serialización en Java Del modelo de objetos al modelo relacional Consideraciones adicionales Problemas con objetos complejos Los lenguajes orientados a objetos y la persistencia Ejercicio resuelto: serialización XML Enunciado Solución en Object Pascal Ejercicio resuelto: serialización a una cadena de bytes Enunciado Solución en Java 11. Concurrencia y programación orientada a objetos Conceptos generales Haciendo varias cosas a la vez Concurrencia Procesos e hilos Concurrencia y programación orientada a objetos Representación de concurrencia en UML Escenarios concurrentes Comunicación entre objetos activos Objetos activos comunicándose con objetos pasivos Prioridades Problemas y soluciones Exclusión mutua y sincronización de métodos y bloques Inconvenientes de la sincronización de métodos Objetos inmutables Llaves de lectura y escritura Confinamiento Llaves de exclusión mutua (mutex) Semáforos Actualizaciones optimistas Otras soluciones para evitar la sincronización de métodos Bloqueos transitorios y bloqueos patológicos Interbloqueo Dependencia de estados, excepciones y constructores Problemas con los compiladores y las optimizaciones Cuándo usar concurrencia y cuándo no Concurrencia y lenguajes de programación Concurrencia en Java Concurrencia en Object Pascal (Delphi y Kylix) Concurrencia en C++ Temas afines Programación en contextos de multiprocesamiento Computación distribuida Ejercicio resuelto: exclusión en el acceso a una cuenta bancaria Enunciado Solución en Java I (con sincronización total) Solución en Java II (con llaves de lectura y escritura) Solución en Object Pascal con llaves de lectura y escritura Ejercicio resuelto: múltiples hilos en la multiplicación de grandes matrices Enunciado Solución en Object Pascal Solución en Java PARTE III: ALGUNAS APLICACIONES 12. Programación en ambientes de interfaz de usuario gráfica Programación en interfaces gráficas y objetos Implementación de la programación por eventos en los lenguajes orientados a objetos WIMP y programación por eventos Eventos en Delphi y Kylix Eventos en Java Swing ¿Eventos en C++? Separación de capas de interfaz de usuario y modelo Interfaces de usuario y HCI Independencia de diálogo MVC Consecuencias de la independencia de diálogo 13. Programación Web Conceptos básicos Redes e Internet Aplicaciones y World Wide Web HTML y contenido dinámico del lado del cliente Generación de páginas en el servidor Sitios Web, Aplicaciones Web y Servicios Web La programación de aplicaciones y servicios Web Aplicando la orientación a objetos Otras consideraciones Separación en capas
programacion orientada a objetos luis joyanes aguilar pdf
By macubo at 15:48
No comments
0 comentarios:
Publicar un comentario