Curso 2024-2025
Una gran parte del código elaborado en clase se puede encontrar en el siguiente repositorio Git: https://gitlab.com/aherranz/p2-live
Transparencias, hojas de ejercicios y mini-laboratorios:
- Sesión 1: En Marcha + hoja de ejercicios “recordatorio”
- Sesión 2: Objetos, referencias y variables + mini-laboratorio
- Sesión 3: Clases
- Sesión 4: Fracciones (hoja de ejercicios): este curso hemos transformado esta sesión en un laboratorio.
- Sesión 5: Terminología en Orientación a Objetos
- Sesión 6: Modelización + hoja de ejercicios: en este curso 2023-2024 esta sesión no se va a dar para poder avanzar en contenido teórico dado que ya tenemos laboratorios.
- Sesión 7: Invocación de métodos + hoja de ejercicios
- Sesión 8: Arrays
- Sesión 9: Índices y nulles + hoja de ejercicios
- Sesión 10: Pilas
- Sesión 11: Tipos Abstractos de Datos + hoja de ejercicios
- Sesión 12: Módulos
- Sesión 13: Packages + hoja de ejercicios
- Sesión 14: Cadena simplemente enlazada 1
- Sesión 15: Cadena simplemente enlazada 2 (ejercicios en clase)
- Sesión 16: Listas 1
- Sesión 17: Listas 2 (ejercicios en clase)
- Sesión 18: Genéricos + hoja de ejercicios
- Sesión 19: Herencia 1
- Sesión 20: Herencia 2
- Sesión 22: Redimensión
- Sesión 23: Pilas y Colas
Curso 2023-2024
Una gran parte del código elaborado en clase se puede encontrar en el siguiente repositorio Git: https://gitlab.com/aherranz/p2-live
Transparencias y hojas de ejercicios:
- Sesión 1: En Marcha + hoja de ejercicios “recordatorio”
- Sesión 2: Objetos, referencias y variables
- Sesión 3: Clases
- Sesión 4: Fracciones (hoja de ejercicios): este curso hemos transformado esta sesión en un laboratorio.
- Sesión 5: Terminología en Orientación a Objetos
- Sesión 6: Modelización + hoja de ejercicios: en este curso 2023-2024 esta sesión no se va a dar para poder avanzar en contenido teórico dado que ya tenemos laboratorios.
- Sesión 7: Invocación de métodos + hoja de ejercicios
- Sesión 8: Arrays
- Sesión 9: Índices y nulles + hoja de ejercicios
- Sesión 10: Pilas
- Sesión 11: Tipos Abstractos de Datos + hoja de ejercicios
- Sesión 12: Módulos
- Sesión 13: Packages + hoja de ejercicios
- Sesión 14: Cadena simplemente enlazada 1
- Sesión 15: Cadena simplemente enlazada 2 (ejercicios en clase)
- Sesión 16: Listas 1
- Sesión 17: Listas 2: en este curso 2023-2024 esta sesión se aborda en el laboratorio 8.
- Sesión 18: Genéricos + hoja de ejercicios
- Sesión 19: Herencia 1
- Sesión 20: Herencia 2
- Sesión 21: Excepciones
- Sesión 22: Redimensión
- Sesión 23: Pilas y Colas
Cursos anteriores
Curso 2022-2023
Una gran parte del código elaborado en clase se puede encontrar en el siguiente repositorio Git: https://gitlab.com/aherranz/p2-live
Transparencias y hojas de ejercicios:
- Contacto
- Sesión 1: En Marcha + hoja de ejercicios “recordatorio”
- Sesión 2: Objetos, referencias y variables
- Sesión 3: Clases
- Sesión 4: Racionales (ejercicios opcionales para casa): este curso hemos dedicado dos sesiones a las transparencias de la sesión anterior. Por esta razón no abordaremos en clase la hoja de ejercicios de racionales. Si tienes dudas para resolverlos puedes preguntar en clase o en tutoría.
- Sesión 5: Terminología en Orientación a Objetos
- Sesión 6: Modelización + hoja de ejercicios: en este curso 2021-2022 esta sesión no se va a dar para poder avanzar en contenido necesario para la práctica obligatoria 1.
- Sesión 7: Invocación de métodos + hoja de ejercicios
- Sesión 8: Arrays
- Sesión 9: Índices y nulles + hoja de ejercicios
- Sesión 10: Pilas: quedó pendiente de verlo más adelante, se utiliza como ejercicio en la sesión de pilas y colas
- Sesión 11: Tipos Abstractos de Datos + hoja de ejercicios
- Sesión 12: Módulos
- Sesión 13: Packages + hoja de ejercicios
- Sesión 14: Cadena simplemente enlazada 1
- Sesión 15: Cadena simplemente enlazada 2 (ejercicios en clase)
- Sesión 16: Listas 1
- Sesión 17: Listas 2
- Sesión 18: Genéricos + hoja de ejercicios
- Sesión 19: Herencia 1
- Sesión 20: Herencia 2
- Sesión 21: Excepciones
- Sesión 22: Redimensión
- Sesión 23: Pilas y Colas
Curso 2021-2022
Transparencias y hojas de ejercicios:
-
Sesión 4: Racionales (ejercicios opcionales para casa): este curso hemos dedicado dos sesiones a las transparencias de la sesión anterior. Por esta razón no abordaremos en clase la hoja de ejercicios de racionales. Si tienes dudas para resolverlos puedes preguntar en clase o en tutoría.
-
Sesión 6: Modelización + hoja de ejercicios: en este curso 2021-2022 esta sesión no se va a dar para poder avanzar en contenido necesario para la práctica obligatoria 1.
-
Sesión 9: Índices y nulles + hoja de ejercicios
Los siguientes extractos de código se han visto en clase:
1 2 3 4 5 6 7 8 9 10 11 12
// Añadir una canción al array // =========================== // Paso 1: buscar primer índice con null int pos = 0; while (pos < playlist.length && playlist[pos] != null) { pos++; } // Paso 2: poner la nueva canción en ese índice if (pos < playlist.length) { playlist[pos] = new Cancion(t, a, v); }
1 2 3 4 5 6 7 8 9 10 11 12 13
// Borrar una canción (título t) // ============================= // Paso 1: buscar el índice de la canción int pos = 0; while (pos < playlist.length && (playlist[pos] == null || !t.equals(playlist[pos].titulo()))) { pos++; } // Paso 2: borrar la canción de ese índice if (pos < playlist.length) { playlist[pos] = null; }
-
¿Quieres probar tu implementación de pila acotada? Inténtalo con este test:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
public class PilaDeEnterosTest { public static void main(String[] args) throws Exception { final int N = 1000000000; System.out.format("Creando pila con capacidad para %,d enteros\n", N); PilaDeEnteros p = new PilaDeEnteros(N); int dato; System.out.format("Empiezan los tests\n"); assert p.vacia(); assert !p.llena(); System.out.format("LLenando\n"); for (int i = 1; i < N; i++) { dato = i; p.apilar(dato); assert !p.vacia(); assert !p.llena(); assert p.cima() == dato; } dato = N; p.apilar(dato); assert p.llena(); System.out.format("Vaciando\n"); for (int i = N; i > 1; i--) { dato = i; assert !p.vacia(); assert p.cima() == dato; p.desapilar(); assert !p.llena(); } dato = 1; assert !p.vacia(); assert !p.llena(); assert p.cima() == dato; p.desapilar(); assert p.vacia(); assert !p.llena(); System.out.format("Tests terminados (¿has ejecutado con java -ea?)\n"); } }
-
Sesión 14: Cadena simplemente enlazada 1
El siguiente extracto de código se ha visto en clase, puedes probarlo en la herramienta Java Visualizer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
class NodoInt { int dato; NodoInt siguiente; } public class NodoIntTest { static final int N = 10; public static void main(String[] args) { NodoInt n = null; NodoInt aux; for (int i = 0; i < N; i++) { /* INSERTAR i COMO PRIMERO DE LA LISTA */ aux = new NodoInt(); aux.dato = i; aux.siguiente = n; n = aux; } assert n.dato == N - 1; /* CALCULA LA LONGITUD DE n Y LA DEJA EN j */ int j = 0; aux = n; while (aux != null) { aux = aux.siguiente; j++; } assert aux == null; assert j == N; } }
-
Sesión 15: Cadena simplemente enlazada 2 (ejercicios en clase)
El siguiente extracto de código lo he escrito en clase, ahora tienes que terminar todas las funciones y, por supuesto, antes, escribir más tests:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
class NodoStr { String dato; NodoStr siguiente; } public class OperacionesNodo { static NodoStr crearVacia() { return null; } static boolean esVacia(NodoStr cadena) { return cadena == null; } static NodoStr insertarP(NodoStr cadena, String s) { NodoStr nuevo = new NodoStr(); nuevo.dato = s; nuevo.siguiente = cadena; return nuevo; } static int longitud(NodoStr cadena) { NodoStr aux = cadena; int contador = 0; while (aux != null) { aux = aux.siguiente; contador++; } return contador; } static String ultimo(NodoStr cadena) { NodoStr aux = cadena; while (aux.siguiente != null) { aux = aux.siguiente; } return aux.dato; } public static void main(String args[]) { NodoStr l; l = crearVacia(); assert esVacia(l) : "La lista vacía debería ser vacía"; assert longitud(l) == 0 : "La long de la lista vacía debería ser 0"; l = insertarP(l, "Hola"); assert !esVacia(l) : "La lista con un elemento no es vacía"; assert longitud(l) == 1 : "La long de una lista con un elemento debería ser 1"; for (int i = 0; i < 1000; i++) { l = insertarP(l, "" + i); } assert longitud(l) == 1001 : "La long de la lista tras insertar 1001 elementos es 1001"; assert ultimo(l) == "999" : "La long de la lista tras insertar 1001 elementos es 1001"; System.out.println("OperacionesNodo.main terminado"); } }
-
Los siguientes extractos de código muestra el interfaz IList, un test para cualquier clase que lo implemente, un test para ver el rendimiento y una implementación final realizada en clase.
|
|
|
|
|
|
|
|
Curso 2020-2021
Estos vídeos sólo están accesibles para estudiantes de la UPM. Si estás interesado en acceder a ellos, por favor contacta conmigo.
Transparencias y hojas de ejercicios:
- Contacto
- Sesión 0: Presentación
- Sesión 1: En Marcha
- Sesión 2: Objetos, referencias y variables
- Sesión 3: Clases
- Sesión 4: Racionales (ejercicios en clase)
- Sesión 5: Terminología en Orientación a Objetos
- Sesión 6: Modelización + hoja de ejercicios
- Sesión 7: Invocación de métodos + hoja de ejercicios
- Sesión 8: Arrays
- Sesión 9: Índices y nulles + hoja de ejercicios
- Sesión 10: Pilas
- Sesión 11: Tipos Abstractos de Datos + hoja de ejercicios
- Sesión 12: Módulos
- Sesión 13: Packages + hoja de ejercicios
- Sesión 14: Cadena simplemente enlazada 1
- Sesión 15: Cadena simplemente enlazada 2 (ejercicios en clase)
- Sesión 16: Práctica 1
- Sesión 17: Listas 1
- Sesión 18: Listas 2
- Sesión 19: Genéricos
- Sesión 20: Herencia 1
- Sesión 21: Herencia 2
- Sesión 22: Arrays redimensionables
- Sesión 23: Excepciones
- Sesión 24: Pilas y Colas