Tabla de contenido visto en clase y problemas propuestos para ADSW.
El código del repositorio se divide en dos paquetes principales:
es.upm.dit.adsw.g23.clases
, que incluye el código utilizado durante las clases. Posiblemente haya partes incompletas o que no funcionen completamente.es.upm.dit.adsw.g23.ejercicios
, donde se incluye código incompleto.
Descripción general del contenido de cada clase como referencia para el estudio. Cada día incluye los conceptos vistos y los ejercicios prácticos realizados, así como ejercicios y punteros a material para el estudio.
Nota: Puede tomarse como referencia, pero puede haber algún error u omisiones.
- Clase:
- Temario
- Calendario de la asignatura
- Evaluación (prácticas, laboratorios)
- Clase: Repaso de conceptos básicos de programación.
- Contexto de ADSW: ADSW vs PROG vs ingeniería de software
- Práctico: desarrollo de Calculadora a diferentes niveles:
- Sin métodos
- Sin clases
- Con métodos
- Con excepciones
- Con herencia
- Conceptos:
- Orientación a objetos (métodos, clases, objetos)
- Herencia básica
- Excepciones (motivación, creación y declaración en la firma)
- Depuración (lo dejamos para la siguiente clase)
- Sintáxis Java
- Control
- Tipos básicos de datos (int, float, boolean, String)
- Estructuras de datos (arrays, listas, maps...)
- Orientación a objetos
- Clases (herencia)
- Interfaces
- Más general: encapsulamiento (datos + comportamiento)
- Intro a uso de eclipse
- Ejercicios:
- Ampliar calculadora
- Ejecutar línea a línea
- HackerRank:
- E1 Recorrido de Arrays
- E1 Listas
- Ampliar calculadora
- Lecturas recomendadsa:
- Transparencias en moodle:
- Modelado orientado a objetos
- Estructuras de datos en Java
- Transparencias en moodle:
- Clase: Continuación de la clase anterior
- Ejercicios:
- Desarrollar la calculadora desde un proyecto vacío
- Hackerrank:
- E4 Listas
- Clase: Problemas de introducción a ordenación
- Práctico:
- Descarga de este repositorio en eclipse
- Desarrollo de pruebas para la calculadora
- Ejercicios Clase3
- Conceptos:
- Pruebas y depuración
- Introducción a la intuición del orden de complejidad
- Introducción a algoritmos básicos de ordenación
- Práctico:
- Ejercicios:
- Básicos
- Descarga del repositorio
- Completar los ejercicios hechos en clase sin mirar la solución
- Avanzados
- Completar la calculadora para que permita introducir operaciones línea a línea
es.upm.dit.adsw.tema01.EjeciciosAvanzadosClase3
- Básicos
- Lecturas recomendadas
- Moodle: Pruebas y depuración en Java
-
Clase: Problemas de ordenación
- Práctico:
- Repaso soluciones Clase 3
- Ejercicios Clase4: búsqueda binaria y una opción de ordenación
- Conceptos:
- Pruebas y depuración
- Conceptos básicos de complejidad
- Algoritmos básicos de ordenación
- Práctico:
-
Lecturas recomendadas
- Moodle: Pruebas y depuración en Java
- Moodle: Estructuras de datos en Java
- Moodle: Algoritmos de ordenación
Laboratorio 0
Lecturas recomendadas: ver la clase anterior
-
Clase: Problemas de ordenación
- Práctico:
- Ordenación sobre el papel (I)
- Conceptos:
- Algoritmos de ordenación: inserción, selección, burbuja y merge sort
- Práctico:
-
Lecturas recomendadas
- Moodle: Algoritmos de ordenación
- Clase: Problemas de ordenación
- Práctico:
- Ordenación sobre el papel (II)
- Implementaciones de todos los algoritmos
- Conceptos:
- Algoritmos de ordenación: quicksort
- Ordenación de cualquier tipo de elemento
- Práctico:
- Lecturas recomendadas
- Moodle: Algoritmos de ordenación
- Clase: Complejidad (I)
- Práctico:
- Análisis de código y de complejidad de casos simples
- Conceptos:
- Complejidad algorítmica
- Práctico:
- Lecturas recomendadas
- Moodle: Complejidad
- Clase: Complejidad (II)
- Práctico:
- Análisis de código y de complejidad sobre ejemplos de código
- Conceptos:
- Complejidad algorítmica
- Práctico:
- Lecturas recomendadas
- Moodle: Complejidad
- Ejercicios
- Análisis de código y cálculo de complejidad (
tema02.EjerciciosCalculo
)
- Análisis de código y cálculo de complejidad (
- Clase: Complejidad (III)
- Práctico:
- Análisis de código y complejidad en algoritmos de ordenación
- Conceptos:
- Complejidad en ordenación
- Práctico:
- Lecturas recomendadas
- Moodle: Algoritmos de ordenación
- Ejercicios:
- Completar análisis de los algoritmos restantes
- Encontrar fallo en solución Clase 7
Laboratorio 1
- Clase: Diccionarios (I)
- Conceptos:
- Diccionarios (Interfaz)
- Implementación de diccionario con un array
- Implementación de diccionario con arrays ordenados
- Conceptos:
- Ejercicios:
- Implementar
DiccionarioArray
yDiccionarioArrayOrdenado
- Implementar
- Clase: Diccionarios (II)
- Conceptos:
- Implementación de diccionario con árboles binarios
- Implementación de diccionario con tablas Hash
- Conceptos:
- Ejercicios:
- Implementar
DiccionarioArbol
yDiccionarioHash
- Implementar
- Clase de problemas de examen
- Laboratorio 2
- Clase adicional de problemas de examen
- Clase: Grafos (I)
- Conceptos
- Modelado de grafos
- Aplicaciones de grafos
- Terminología y categorización
- Análisis de complejidad de dos posibles implementaciones: lista de arcos y matriz de adyacencia
- Algoritmos sencillos (BFS, DFS)
- Conceptos
- Ejercicios
- Implementar la clase
Grafo
(Grafo no dirigido)- Implementar la clase
Arco
(arco no dirigido)
- Implementar la clase
- Implementar la clase
- Clase: Grafos (II)
- Conceptos:
- BFS y DFS en profundidad
- Implementación de BFS y DFS
- Detección de componentes conexas
- Conceptos:
- Ejercicios:
- Implementar componentes conexas
- Clase: Grafos (III)
- Conceptos:
- BFS y DFS en profundidad
- Implementación de BFS y DFS iterativa
- Conceptos básicos del algoritmo de Prim
- Conceptos:
- Ejercicios:
- Implementar Prim
- Clase: Grafos (IV)
- Conceptos:
- Prim en profundidad
- Análisis de complejidad
- Listas vs colas de prioridad
- El algoritmo de Dijkstra
- Introducción
- Problemas que resuelve
- Diferencias con Prim
- Limitaciones
- Prim en profundidad
- Conceptos:
- Ejercicios:
- Implementar Dijkstra (con modelo de prácticas y con el modelo de este repositorio)
- Clase: Grafos (V)
- Ejercicios:
- Implementación del algoritmo de Dijkstra
- Problemas de examen
- Ejercicios:
- Ejercicios
- Repasar problemas de grafos
- Clase: Concurrencia (I)
- Conceptos:
- Concurrencia
- Procesos y hebras
- Paralelismo
- Conceptos:
- Clase: Concurrencia (II)
- Ejercicios:
- Conteo de palabras en ficheros
- Sin sincronización
- Con cerrojos
- Con synchronized
- Con un monitor
- Conteo de palabras en ficheros
- Ejercicios:
- Clase: Concurrencia (III)
- Conceptos:
- Sincronización condicional
wait
ynotify
/notifyAll
- Patrón productor / consumidor
- Repaso:
- Contador
- Ejercicios:
- Contador productor / consumidor
- Conceptos:
- Clase: Concurrencia (III)
- Ejercicios:
- Filósofos:
- Secuenciales
- Concurrentes
- Sin interbloqueo
- Sin bloqueo vivo
- Filósofos:
- Conceptos:
- Interbloqueo
- Bloqueo vivo
- Ejercicios:
- Clase: Concurrencia (IV)
- Conceptos:
- Inanición
- Ejercicios:
- Examen P2 Junio 2022
- Conceptos:
- Ejercicios de examen
- 20210608_P2 - Lectores y escritores
- 20210707_F1 - Aterrizaje aviones
- 20230605_P2_sol - P1 (grupos de hebras) + P2 (propagación en grafos)
- 20190628_F1 - Coloreado de grafos -> Grafos
- 20210419_P1 - Ciclos -> Grafos
- 20220419_P1 - Pregunta 1 (multigrafo de bancos)
- 13 de junio de 2018 (examenP2-2018-20230706_P2_sol_final.pdfoluciones.pdf) - Preguntas 1 y 2
- 8 de junio de 2017 (ADSW_P2-2017-soluciones.pdf) - Pregunta 1
- 6 de Julio de 2023 (20230706_P2_sol_final.pdf) - Preguntas 1 y 2