Presentación
Contenidos
- 1. Profesorado
- 2. Contexto
- 3. Evaluación
- 4. Teoría
- 4.1. TEMA 1: Organización de la memoria. Tipos abstractos de datos.
- 4.2. TEMA 2: Tipos abstractos de datos: Listas (simples, dobles), Pilas, Colas.
- 4.3. TEMA 3: Tipos abstractos de datos: Árboles, Grafos.
- 4.4. TEMA 4: El paradigma orientado a objetos. Características básicas de los lenguajes orientados a objetos.
- 4.5. TEMA 5: Clases y objetos. Espacios de nombres.
- 4.6. TEMA 6: Programación dirigida por eventos.
- 4.7. TEMA 7: Relaciones entre objetos. Herencia. Polimorfismo. Enlace dinámico.
- 4.8. TEMA 8: Genericidad.
- 4.9. TEMA 9: Excepciones. Patrón RAII.
- 4.10. TEMA 10: Estudio de diversos lenguajes de programación orientados a objetos.
- 4.11. TEMA 11: POO con lenguajes no orientados a objetos.
- 4.12. TEMA 12: Pruebas unitarias.
- 5. Prácticas
- 6. Planificación semanal
- 7. Consejos
1. Profesorado
- Antonio-M Corbí Bellot, Francisco José Castellanos Regalado. DLSI.
- Tutorías: UA-Cloud o presenciales (con reserva previa desde UA-Cloud).
2. Contexto
- Primer curso: Programación I , primer semestre
Primer curso: Programación II , segundo semestre.
La asignatura dispone de página web propia. Es recomendable que la consultes habitualmente.
- Tercer curso: Algoritmia
3. Evaluación
- La asignatura consta de dos bloques:
- Teoría
- Prácticas.
- Cada uno de ellos tiene un peso del 50% en la nota final.
3.1. Primer periodo de evaluación (C3)
- Para promediar teoría y prácticas es necesario obtener como mínimo un 4.0 en ambos bloques.
- Para superar la asignatura, la nota final debe ser igual o superior a 5.0.
- El bloque de teoría consta de un único examen final.
Es un examen tipo test del tipo elegir la única respuesta posible entre cuatro alternativas.
Tres respuestas erróneas anulan una correcta.
Es conveniente hacerlo a lápiz ya que puedes corregir respuestas previas que hayas marcado y quieras cambiar.
- El bloque de prácticas consta de:
- Evaluación continua (4 prácticas) con un peso del 20% sobre la nota final.
- Un examen práctico final realizado en el laboratorio y con un peso del 30% sobre la nota final. Los ejercicios de los que constará serán similares a los realizados en las prácticas hechas durante el curso.
- La asistencia a las sesiones prácticas es obligatoria. Se permite un máximo de 4 faltas justificadas.
3.2. Segundo período de evaluación (C4)
- Si no se supera el primer período de evaluación entonces en la
convocatoria C4:
- Se deberá presentar obligatoriamente al examen final de teoría y o prácticas del bloque al que no se haya llegado a una nota mínima de 4.0 en la convocatoria C3.
Se puede presentar opcionalmente al examen final de teoría y o prácticas del bloque en el que tenga una 4.0 <= nota < 5.0 en la convocatoria C3.
La decisión de presentarse a dicho examen corresponde al propio alumno teniendo en cuenta que la nota obtenida en esa prueba en esta convocatoria sustituye a la obtenida en la C3.
- Para promediar teoría y prácticas es necesario obtener como mínimo un 4.0 en ambos bloques.
- El examen de prácticas será un examen práctico realizado en el laboratorio, su contenido será del mismo estilo que en la convocatoria de junio. En esta convocatoria la nota de este examen será la nota total del bloque de prácticas, es decir, el 50% de la nota final.
3.3. Sistema de evaluación que se aplicará en la convocatoria de diciembre
- Se realizará un examen de teoría y uno de prácticas, ambos similares a los de la convocatoria de julio.
- Para promediar teoría y prácticas es necesario obtener como mínimo un 4.0 en ambos bloques.
3.4. Importante
- En cualquier apartado puntuable de la asignatura una calificación de 3.99 no es un 4.0.
- No se admiten entregas de prácticas fuera de plazo o por otro cauce que no sea el indicado en el enunciado. Si esto ocurriera esa entrega será ignorada, tenlo en cuenta.
- La publicación de notas se realiza en la web del DLSI.
- Si necesitas revisar cualquier práctica de la asignatura debes reservar una tutoría presencial desde la aplicación de UA Cloud.
La corrección de las prácticas se realiza con la versión del compilador de
C++
que tenéis instalada en los laboratorios de la EPS.Tenlo en cuenta dado que:
C++
es un lenguaje diferente aC
.Cambios en la versión del compilador y/o en la de la biblioteca estándar de
C++
pueden hacer que tu código no compile o funcione de manera diferente a como lo haría con la versión del compilador de la EPS.
En la asignatura empleamos la versión de
C++
de 2017, más conocida como C++17 y más concretamente la que implementa el compilador instalado en los laboratorios de la EPS.Una forma sencilla de tenerlo instalado es usando una máquina virtual de VirtualBox. Aquí tienes la imagen VDI de la instalación de Ubuntu en la EPS. Puedes descargarla de aquí.
- En la asignatura se realiza un control de copias con cada entrega de prácticas.
- Una práctica copiada supondrá tener una nota de cero en la misma para todos los alumnos implicados. Además, se informará a las direcciones del DLSI y de la EPS de ello para que se tomen las medidas disciplinarias oportunas.
Es conveniente que leas el Reglamento para la evaluación de los aprendizajes de la UA, p.e en el artículo 14 donde se habla de Realización fraudulenta de pruebas de evaluación, punto 1:
Durante la prueba, el alumnado está obligado a observar las normas sobre autenticidad del ejercicio y privacidad del mismo.
- Fíjate que:
- Copiar una práctica de otra persona total o parcialmente incumple el 14.1 (autenticidad).
- Difundir una práctica (para que otros se la copien o se inspiren), también incumple el 14.1 (privacidad)
4. Teoría
El temario de la asignatura es el siguiente:
4.1. TEMA 1: Organización de la memoria. Tipos abstractos de datos.
- El lenguaje de programación C++ ( C++98, C++11, C++14, C++17, C++20 y C++23 ).
- Gestión y uso de memoria basada en la pila ( stack ), en almacenamiento global y en almacenamiento dinámico.
- Introducción a los Tipos Abstractos de Datos (TAD).
4.2. TEMA 2: Tipos abstractos de datos: Listas (simples, dobles), Pilas, Colas.
- Definición.
- Operaciones básicas.
- Diferentes implementaciones.
4.3. TEMA 3: Tipos abstractos de datos: Árboles, Grafos.
- Definición.
- Operaciones básicas.
- Diferentes implementaciones.
- Tipos de árboles. Tipos de grafos.
4.4. TEMA 4: El paradigma orientado a objetos. Características básicas de los lenguajes orientados a objetos.
- Presentación y justificación del modelo de programación orientada a objetos.
- Requisitos para que un lenguaje se considere orientado a objetos.
- C++ como lenguaje orientado a objetos.
4.5. TEMA 5: Clases y objetos. Espacios de nombres.
- Definición del concepto de clase y del concepto de objeto.
- Diferentes tipos de clases (abstractas, metaclases, interfaces, etc…).
- Concepto de espacio de nombres. Agrupación de símbolos en espacios de nombres.
- Variables de clase, de instancia. Métodos de clase, de instancia.
4.6. TEMA 6: Programación dirigida por eventos.
- ¿Qué es un evento? ¿Cómo se producen?
- Cómo cambia nuestro estilo de programación.
- Cómo realizarla tanto desde C como desde C++.
4.7. TEMA 7: Relaciones entre objetos. Herencia. Polimorfismo. Enlace dinámico.
- Tipos de relaciones entre objetos en ausencia de herencia (uso, composición).
- Concepto de herencia entre clases.
- Herencia de implementación y herencia de interfaz.
- Relación Es un entre objetos. Concepto de polimorfismo.
- Tipos de herencia (simple, múltiple).
- Implicaciones de la herencia entre clases y la relación Es un entre objetos.
- Qué es el enlace dinámico. Ventajas e inconvenientes.
- Cómo influye en el diseño de lenguajes orientados a objetos (virtual, final).
4.8. TEMA 8: Genericidad.
- Concepto de Genericidad. Características y usos.
- La genericidad como otro tipo de polimorfismo.
- Metaprogramación: ejecución de código en tiempo de compilación.
4.9. TEMA 9: Excepciones. Patrón RAII.
- Tratamiento de errores bajo el paradigma orientado a objetos.
- Qué es una excepción, Jerarquía de clases de excepciones.
- Cómo influye en el diseño de lenguajes orientados a objetos (
try
,throw
,catch
,finally
). - Patrón de diseño RAII y tratamiento de excepciones.
4.10. TEMA 10: Estudio de diversos lenguajes de programación orientados a objetos.
- Cómo implementan diferentes lenguajes de programación las características explicadas hasta ahora. Java, C#, D, Python, etc…
4.11. TEMA 11: POO con lenguajes no orientados a objetos.
- Usando sólo el lenguaje C simularemos la herencia de clases, paso de mensajes, enlace dinámico y variables de clase.
5. Prácticas
- En la parte de evaluación continua tenemos cuatro prácticas
individuales:
- Práctica 1: Ejercicios de repaso de Programación-I.
- Práctica 2: Implementación y uso de TADs.
- Práctica 3: Programación Dirigida por Eventos.
- Práctica 4: Programación Orientada a Objetos.
Disponemos también de una Práctica 0 la cual nos sirve como práctica de iniciación en la asignatura.
No cuenta para la nota final.
- Además de un examen individual de prácticas en el laboratorio. Este examen se hace el mismo día del examen de teoría.
A partir del curso 2022/2023 la asignatura va a proporcionaros docencia complementaria al inicio de algunas clases de prácticas.
Se trata de que conozcáis y sepáis usar algunas herramientas adicionales que os serán muy útiles a la hora de programar:
Make /
Makefiles
, el depurador gdb y la herramienta de análisis en tiempo de ejecución valgrind.Estas tres herramientas ya las veníamos explicando desde hace algunos cursos.
- Trabajo con el S.O. desde un terminal: Bash shell script
- Doxygen para generar la documentación de tu código a partir de ciertos comentarios puestos en él.
- Git para realizar control de versiones. Solo veremos el uso local del mismo.
- Dear ImGui para crear aplicaciones con Interfaz Gráfico de Usuario. Esta parte depende de que hayamos visto lo correspondiente a Programación Orientada a Objetos.
5.1. Entrega de prácticas
- Se realizará en https://pracdlsi.dlsi.ua.es y en el plazo de tiempo allí establecido.
- Se pueden realizar tantas entregas como se quiera, sólo se corregirá la última.
- Es necesario seguir estrictamente las instrucciones de los enunciados de las prácticas (especialmente en lo referente al formato de la salida).
- Ten en cuenta lo anterior pues No se admitirán entregas por otro conducto y/o fuera de plazo.
5.2. Corrección de las prácticas
- Será automática. La no compilación o no enlace del código
implicará una nota de 0.0, los errores en tiempo de ejecución que
causen una finalización anómala de la práctica (
violación de segmento, división por cero, etc...
) implicarán una nota de 0.0. - Para revisar la corrección de tus prácticas reserva una tutoría presencial desde la app de UA-Cloud.
- No se debe entregar un programa principal. Ya lo proporcionará el programa corrector correspondiente de la práctica.
- Importante: Debeis respetar:
- Nombres de tipos, de funciones, de estructuras, etc…
- La signatura de funciones.
- Nombres de carpetas donde se encuentren los archivos de código fuente.
- Uso de mayúsculas/minúsculas en nombres de archivos.
- Recordad, no es lo mismo que una función muestre un resultado por
pantalla (
printf
,cout
) que lo devuelva.
6. Planificación semanal
6.1. Planificación de la teoría
6.2. Planificación de las prácticas
7. Consejos
La asignatura no es difícil pero sí tiene muchos conceptos nuevos; estudia día a día.
Para que te sirva como referencia… por cada hora de clase deberías dedicarle alrededor de hora y media de estudio en casa.
- Aprovecha las tutorías, realiza tantas como necesites.
- Dispondréis con suficiente antelación de las transparencias empleadas en clase de teoría para facilitaros el seguimiento de las mismas.