Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos

Este libro presenta una introducción a los principales elementos del paradigma Orientado a Objetos. Con el fin de evitar caer en particularidades de un lenguaje concreto, el texto utiliza UML como notación estándar para ilustrar conceptos fundamentales de este paradigma como son la encapsulación, la generalización y el polimorfismo. El libro aúna los principios teóricos con ejemplos prácticos en distintos lenguajes de programación, y presenta abundancia de ejercicios resueltos en C++. Los contenidos de este libro son suficentes para organizar en torno a ellos un curso de 'Introducción al Paradigma Orientado a Objetos', materia obligatoria en las titulaciones de Informática de la inmensa mayoría de las universidades españolas. Este libro es el resultado de la experiencia acumulada por los autores a lo largo de varios años de docencia en el seno del Departamento de Lenguajes y Sistemas Informáticos de la Universidad de Alicante. Las labores de investigación de los autores incluyen metodologías de análisis, diseño y desarrollo de aplicaciones siguiendo el paradigma Orientado a Objetos.

  • Cover
  • Índice general
  • 1. Introducción al paradigma orientado a objetos
    • 1.1. El progreso de la abstracción
      • 1.1.1. Abstracción
    • 1.2. Principales Paradigmas de Programación
      • 1.2.1. Lenguaje y pensamiento
      • 1.2.2. Los lenguajes de programación y los niveles de abstracción
      • 1.2.3. Mecanismos de abstracción
    • 1.3. El paradigma orientado a objetos
      • 1.3.1. Motivación
      • 1.3.2. El paradigma orientado a objetos
      • 1.3.3. Un nuevo modo de ver el mundo
      • 1.3.4. Características básicas de un lenguaje OO
      • 1.3.5. Características opcionales
    • 1.4. Historia de los lenguajes orientados a objetos
      • 1.4.1. Simula
      • 1.4.2. Smalltalk
      • 1.4.3. Los años 80
      • 1.4.4. C++
      • 1.4.5. Java
      • 1.4.6. Eiffel
      • 1.4.7. De los 90 al presente
    • 1.5. Metas del paradigma orientado a objetos
      • 1.5.1. Principales parámetros de calidad extrínsecos
      • 1.5.2. Principales parámetros intrínsecos
      • 1.5.3. Otros parámetros
    • 1.6. Conclusiones
  • 2. Fundamentos de la programación orientada a objetos
    • 2.1. Motivación
    • 2.2. Clases
      • 2.2.1. Partes de la definición de una clase
      • 2.2.2. Visibilidad
      • 2.2.3. Clase versus Tipo abstracto de dato
    • 2.3. Atributos
      • 2.3.1. Tipos de atributo
      • 2.3.2. Inicialización de atributos
      • 2.3.3. Atributos de clase
      • 2.3.4. Atributos constantes
    • 2.4. Operaciones
      • 2.4.1. Tipos de operaciones
      • 2.4.2. Un poco de UML
      • 2.4.3. Constructor
      • 2.4.4. Constructor de copia
      • 2.4.5. Constructor versus método
      • 2.4.6. Destructor
      • 2.4.7. Forma canónica ortodoxa de una clase
    • 2.5. El concepto de interfaz
    • 2.6. El concepto de objeto
      • 2.6.1. Estado y Comportamiento
      • 2.6.2. Creación e Inicialización
      • 2.6.3. Punteros y ubicación en memoria
    • 2.7. Metaclases
    • 2.8. El diseño de aplicaciones OO
    • 2.9. Relaciones entre clases y relaciones entre objetos
      • 2.9.1. Asociación
      • 2.9.2. Relaciones todo-parte
      • 2.9.3. Relación de Uso (Dependencia)
    • 2.10. Conclusiones
    • 2.11. Ejercicios resueltos
    • 2.12. Ejercicios propuestos
  • 3. Herencia
    • 3.1. Introducción a la Herencia
      • 3.1.1. Motivación
      • 3.1.2. Definición de herencia
      • 3.1.3. Herencia como implementación de la generalización
      • 3.1.4. Tipos de herencia
      • 3.1.5. Caracterización de la herencia
      • 3.1.6. Herencia en C++
      • 3.1.7. Sintaxis
    • 3.2. Herencia Simple
      • 3.2.1. Introducción
      • 3.2.2. El constructor y destructor en Herencia Simple
      • 3.2.3. Orden de las llamadas del constructor y destructor
      • 3.2.4. Ejemplo de Herencia Simple
      • 3.2.5. Particularidades de la Herencia
      • 3.2.6. Ejercicios
    • 3.3. Herencia Múltiple
      • 3.3.1. Introducción
      • 3.3.2. Uso de ámbito en Herencia Múltiple
      • 3.3.3. Uso de virtual en Herencia Múltiple
      • 3.3.4. Ejercicio
    • 3.4. Herencia de Interfaz
      • 3.4.1. Clases Abstractas
      • 3.4.2. Ejercicios
    • 3.5. Herencia de Implementación
      • 3.5.1. Uso seguro de la Herencia de Implementación
      • 3.5.2. Uso inseguro de la Herencia de Implementación
      • 3.5.3. Herencia de construcción en C++ (Herencia de implementación pura)
    • 3.6. Beneficios y costes de la herencia
      • 3.6.1. Beneficios
      • 3.6.2. Costes
    • 3.7. Elección de la técnica de reutilización de software
      • 3.7.1. Introducción
      • 3.7.2. Uso de composición (Layering)
      • 3.7.3. Uso de herencia
      • 3.7.4. Composición vs. Herencia. Ejemplo
      • 3.7.5. Ejercicios
    • 3.8. Conclusiones
    • 3.9. Ejercicios resueltos
    • 3.10. Ejercicios propuestos
  • 4. Polimorfismo
    • 4.1. Polimorfismo y reutilización
      • 4.1.1. Motivación
      • 4.1.2. Tiempo de enlace en los lenguajes de programación
    • 4.2. Sobrecarga
      • 4.2.1. Conceptos previos: signatura y ámbito
      • 4.2.2. Sobrecarga basada en ámbito
      • 4.2.3. Sobrecarga basada en signaturas de tipo
      • 4.2.4. Alternativas a la sobrecarga
    • 4.3. Polimorfismo en jerarquías de herencia
      • 4.3.1. Redefinición
      • 4.3.2. Shadowing
      • 4.3.3. Sobrescritura
    • 4.4. Variables polimórficas
      • 4.4.1. Variables polimórficas simples
      • 4.4.2. La variable receptora
      • 4.4.3. Downcasting
      • 4.4.4. Polimorfismo puro
    • 4.5. Genericidad
      • 4.5.1. Funciones genéricas en C++
      • 4.5.2. Plantillas de clase en C++
      • 4.5.3. Constantes en plantillas en C++
      • 4.5.4. Herencia en clases genéricas
      • 4.5.5. Relaciones entre instancias de plantillas
      • 4.5.6. Diferencia entre herencia y genericidad
    • 4.6. Caso de estudio
    • 4.7. Conclusiones
    • 4.8. Ejercicios resueltos
    • 4.9. Ejercicios propuestos
  • 5. Gestión de errores y otras características
    • 5.1. Gestión de errores
      • 5.1.1. Motivación
      • 5.1.2. Concepto de excepción
      • 5.1.3. El mecanismo de excepciones en C++ y Java
      • 5.1.4. Lanzamiento de excepciones
      • 5.1.5. Excepciones estándares de C++
      • 5.1.6. Ejemplo: Excepciones definidas por el programador
      • 5.1.7. Ejemplo: Excepciones en apertura de ficheros
      • 5.1.8. Ventajas del uso de excepciones
      • 5.1.9. Excepciones en Java
    • 5.2. Otras características
      • 5.2.1. Persistencia
      • 5.2.2. Concurrencia
      • 5.2.3. Aserciones
      • 5.2.4. Recogida de basura
      • 5.2.5. Reflexión
    • 5.3. Conclusiones
    • 5.4. Ejercicios resueltos
    • 5.5. Ejercicios propuestos

SUSCRÍBASE A NUESTRO BOLETÍN

Al suscribirse, acepta nuestra Politica de Privacidad