Fundamentos de la Programación Orientada a Objetos.
Una aplicación a las Estructuras de Datos en JavaTM
(Registro Público del Derecho de Autor: 03-2013-121112211200-01)
El libro ya no está a la venta, cualquier oferta en Internet es un fraude.
Estructura del libro:
Capítulo 1: presenta los elementos fundamentales de la orientación a objetos. La intención del capítulo es la de proporcionar al lector un panorama general del paradigma orientado a objetos sin asociarlo necesariamente con la programación, y mucho menos con algún lenguaje de programación en particular.
Capítulo 2: describe las bases del paradigma orientado a objetos en el contexto de su aplicación a la programación, utilizando a Java como lenguaje de programación. La intención del capítulo es la de concretizar en un lenguaje de programación específico, los conceptos más distintivos del paradigma orientado a objetos, para que en los capítulos siguientes, se puedan aplicar al desarrollo de las estructuras de datos, y mejorar así tanto su comprensión, como la experiencia del lector de manera progresiva.
Capítulo 3: presenta un panorama general de las estructuras de datos, tipos de datos y referencias en Java. Se aborda también un concepto central tanto para el paradigma orientado a objetos, como para las estructuras de datos: los tipos de datos abstractos (ADT). Así mismo, se sientan las bases para la implementación de estructuras de datos basadas en clases de autorreferencia.
Capítulo 4: presenta la primera de las estructuras de datos estudiadas en el libro. El capítulo comienza con la definición de las propiedades y operaciones definidas para el ADT pila, para después presentar la implementación de una pila utilizando un tipo de dato primitivo. Posteriormente,tomando como base dicha implementación, se generaliza el concepto para mostrar la implementación de una pila cuyos elementos son objetos genéricos. Finalmente, se refuerza la definición del ADT, y se muestra la relación que existe entre la implementación y el diseño con el correspondiente diagrama de clases en UML.
Capítulo 5: introduce al lector en el estudio de las estructuras de datos denominadas colas de espera. Se realiza una presentación de la cola de espera así como de su correspondiente implementación, para posteriormente analizar una variante de dicha estructura de datos: las colas de prioridad. Así mismo, el capítulo también presenta los elementos principales para la implementación de objetos con características de relación de orden a través de la interfaz Comparable del API de Java. Dicha característica resultará fundamental para los capítulos posteriores.
Capítulo 6: presenta al lector la última de las estructuras de datos lineales estudiadas en el libro: las listas enlazadas. Así mismo, toda vez que se asume completado el estudio de las pilas, el capítulo muestra la posibilidad de la implementación de dicha estructura de datos por medio de una lista enlazada. Adicionalmente, se comentan las ventajas y desventajas de los enfoques de implementación utilizados.
Capítulo 7: introduce al lector tanto a los conceptos de árboles binarios, como al conocimiento de algunas de las estructuras de datos de árboles más comunes: árboles binarios, árboles binarios de búsqueda (ABB), y árboles AVL. Los árboles binarios son estructuras de datos no lineales, y sus aplicaciones y usos son tan diversos, que están únicamente limitados por la imaginación de quien los utiliza. El capítulo inicia presentando los conceptos relacionados con los árboles binarios en general, y con los ABB y AVL en particular. Presenta además dos tipos de implementación para un ABB: con recursividad y con ciclos, y se describen también los diferentes recorridos que es posible realizar con árboles binarios.
Apéndice A: presenta un compendio de referencia a la mano de Java para el lector familiarizado con algún lenguaje de programación. Al mismo tiempo, es un marco de referencia respecto a características que no se tienen en un enfoque estructurado, como lo son las excepciones y los genéricos por ejemplo. El apéndice presenta además una selección de ejemplos de transición respecto a la forma de hacer las cosas en Java, sin entrar en detalles específicos respecto a la definición y descripción de las estructuras de control, representación y notación de arreglos, etc.
Contenido temático:
1. Orientación a Objetos
1.1. Orígenes
1.2. Paradigma
1.2.1. Una perspectiva diferente
1.2.2. Objetos
1.2.3. Objetos y clases
1.3. Orientación a objetos y modularidad
1.3.1. Cohesión y Acoplamiento
1.4. Características fundamentales de la POO
1.5. Consideraciones finales
2. Programación Orientada a Objetos
2.1. Mensajes y métodos
2.1.1. Métodos sin argumentos
2.1.2. Métodos con argumentos
2.1.3. Métodos y atributos
2.1.4. Métodos y constructores
2.1.5. Sobrecarga
2.2. Herencia
2.2.1. Abstracción
2.2.2. Implementación
2.3. Consideraciones finales
2.3.1. Respecto al envío de mensajes
2.3.2. Respecto a la sobrecarga de operadores
2.3.3. Respecto al paradigma
3. Estructuras de datos
3.1. Panorama general
3.2. Tipos de datos y referencias
3.3. Tipos de datos abstractos (ADT)
3.3.1. Especificación del ADT Racional
3.3.2. Implementación del ADT Racional
3.4. Abstracción de estructuras de datos
3.4.1. Clases autorreferidas
3.4.2. Implementación
3.5. Consideraciones finales
4. Pilas
4.1. Definición
4.1.1. Operaciones primitivas
4.2. Implementación
4.2.1. Pila primitiva
4.2.2. Pila genérica
4.3. Aplicaciones
4.3.1. Análisis básico de expresiones
4.3.2. Notación interfija, postfija y prefija
4.3.3. Evaluación de expresiones
4.4. Consideraciones finales
5. Colas de espera
5.1. Definición
5.1.1. Operaciones primitivas
5.1.2. Representación
5.2. Implementación
5.3. Colas de prioridad
5.3.1. Cola de prioridad ascendente
5.3.2. Cola de prioridad descendente
5.4. Consideraciones finales
6. Listas enlazadas
6.1. Definición
6.1.1. Operaciones primitivas
6.1.2. Representación
6.2. Implementación
6.3. Herencia vs. composición
6.3.1. Implementación de una pila utilizando herencia
6.3.2. Implementación de una pila utilizando composición
6.4. Listas circulares
6.4.1. El problema de Josephus
6.5. Listas doblemente enlazadas
6.5.1. Definición, primitivas y representación
6.6. Consideraciones finales
7. Árboles binarios
7.1. Definición
7.1.1. Representación y conceptos
7.1.2. Operaciones primitivas
7.2. Árbol binario de búsqueda (ABB)
7.2.1. Operaciones primitivas
7.2.2. Representación
7.2.3. Implementación
7.2.4. Eliminación
7.3. Árboles binarios balanceados (AVL)
7.3.1. Definición y conceptos
7.3.2. Rotación simple
7.3.3. Rotación doble
7.4. Consideraciones finales
A. Java
A.1. Orígenes y características
A.2. Estructura general de una clase
A.3. Bienvenid@ a Java
A.4. Compilación
A.5. Ejemplos selectos
A.5.1. Lectura de datos
A.5.2. Estructuras de control
A.5.3. Arreglos
A.5.4. Argumentos en la línea de comandos
A.5.5. Excepciones
A.5.6. Genéricos