Ingeniería Informática
Profesor Víctor Jiménez
Bibliografía recomendada: Existen muchos libros que pueden servir para aprender programación orientada a objetos y programación en C++. En la sección de Referencias puedes encontrar una selección. De ellos, el que en mi opinión se ajusta mejor a los contenidos de nuestro curso es "Programación orientada a objetos con C++" de F. J. Ceballos (2003). Ten en cuenta, no obstante, que los ejemplos de este libro no son perfectos (verás, por ejemplo, un constructor de copia que no considera si el argumento que recibe tiene un puntero que vale NULL, un destructor que no deja los punteros con el valor NULL, o un operador de asignación que no verifica si se está realizando una autoasignación). Consulta también la lista de apartados que no se exigirán en los examenes del curso 2005/2006.
Material de clase: No utilizaré transparencias en clase de teoría (aunque te aconsejo consultar las de los otros profesores de la asignatura). En vez de eso, durante el curso dejaré aquí ficheros con los ejemplos que iré desarrollando en la pizarra.
Temario previsto (esta información se actualizará durante el curso):
- Tema 1: Programación modular.
- Separación de un programa en módulos.
- El lenguaje C++ como C mejorado.
- Entrada/salida estándar con los operadores >> y <<.
- Declaración simplificada de registros.
- Espacio de utilización de variables.
- Referencias.
- Funciones.
- Paso de argumentos por valor, por referencia y por referencia constante.
- Devolución por valor, por referencia y por referencia constante.
- Argumentos con valores por defecto.
- Funciones inline.
- Sobrecarga de funciones.
- Tratamiento de excepciones básico.
- Reserva y liberación dinámica de memoria.
- Nuevos tipos de datos.
- El tipo bool.
- La clase string.
- La clase vector.
- Problemas de la programación modular.
Ejemplos:
Punto.h, Punto.cpp, EjemploPunto.cpp
Circulo.h, Circulo.cpp, EjemploCirculo.cpp
Poligono.h, Poligono.cpp, EjemploPoligono.cpp
Fecha.h, Fecha.cpp, CuentaCorriente.h, CuentaCorriente.cpp, EjemploCuentaCorriente.cpp , MenuCuentaCorriente.cpp
- Tema 2: Programación basada en objetos.
- Clases y objetos en C++.
- Conceptos básicos: clases y objetos, atributos y métodos, estado y comportamiento, interface, ocultación de la información.
- Control de acceso. Acceso público y privado.
- Operador de resolución de ámbito.
- Argumentos explícitos y argumento implícito. El puntero this.
- Separación en ficheros.
- Constructores. Constructor por defecto. Lista de inicialización.
- Destructor. Destructor por defecto.
- Constructor de copia. Constructor de copia por defecto.
- Operador de asignación. Operador de asignación por defecto. El problema de la auto-asignación.
- Punteros a objetos. Creación y destrucción dinámica de objetos, de vectores de objetos y de vectores de punteros a objetos.
- Clases compuestas.
- Clases amigas y funciones amigas.
- Clases anidadas.
- Uso de constructores como conversores.
- Métodos constantes e importancia de declararlos.
- Métodos inline y criterios a seguir.
Ejemplos:
Punto.h, Punto.cpp, EjemploPunto.cpp
Circulo.h, Circulo.cpp, EjemploCirculo.cpp
Poligono.h, Poligono.cpp, EjemploPoligono.cpp
Fecha.h, Fecha.cpp, CuentaCorriente.h, CuentaCorriente.cpp, EjemploCuentaCorriente.cpp , MenuCuentaCorriente.cpp
ColaEnteros.h, ColaEnteros.cpp, EjemploColaEnteros.cpp
PilaEnteros.h, PilaEnteros.cpp, EjemploPilaEnteros.cpp
- Sobrecarga de otros operadores.
- Operadores relacionales: ==, !=, >, <, >=, <=
- Operadores aritméticos binarios: +, -, *, /, +=, -=, *=, /=
- Operadores aritméticos unarios; ++, --, -
- Operadores de entrada/salida (inserción/extracción): >>, <<
- Operador de llamada a función: ()
- Operador de indexación: []
Ejemplos:
Misterios.cpp
Racional.h, Racional.cpp, EjemploRacional.cpp
Cadena.h, Cadena.cpp, EjemploCadena.cpp
Problemas resueltos (ver enunciados en la sección de exámenes):
Multiconjunto (examen 25/01/2005)
Polinomio (examen 20/01/2004)
Region (examen 03/02/2003)
- Clases y objetos en C++.
- Tema 3: Programación orientada a objetos.
- Herencia.
- Introducción. Relaciones de especialización (es-un) vs. relaciones de composición (tiene-un).
- Declaración de clases derivadas.
- Constructores en clases derivadas. Inicialización con constructores de clases base.
- Redefinición de funciones heredadas. Operador de resolución de ámbito.
- Acceso a miembros de la clase base: miembros protected.
- Constructor de copia y operador de asignación en clases derivadas.
- Destructor en clases derivadas.
Ejemplos:
Empleados.h, Empleados.cpp, EjemploEmpleados.cpp
- Ligadura dinámica.
- Punteros y herencia. Tipo estático y tipo dinámico.
- Funciones virtuales. Ligadura dinámica (polimorfismo en tiempo de ejecución).
- Funciones virtuales puras y clases abstractas.
Ejemplos:
Empleados.h, Empleados.cpp, Empresa.h, Empresa.cpp, EjemploEmpresa.cpp
Problemas resueltos (ver enunciados en la sección de exámenes):
Directorio (examen 20/01/2004)
Funciones (examen 25/01/2005)
- Herencia.
- Tema 4: Programación genérica.
- Funciones genéricas.
- Clases genéricas.
- Utilización de la Standard Template Library (STL).
Ejemplos:
Pila.h, Pila.cpp, EjemploPila.cpp
ColaPrioridad.h, ColaPrioridad.cpp, EjemploColaPrioridad.cpp