Saltar navegación

20251205 POO-Ejer_2 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 6 de diciembre de 2025 por Raquel G.

3 visualizaciones

Descargar la transcripción

Venga, vamos a probarlo 00:00:00
Venga 00:00:02
Ahora nos estamos autenticando 00:00:07
En el cajero 00:00:11
En lugar de con la tarjeta 00:00:12
Le doy los datos 00:00:14
Ahora ya él me dice 00:00:15
¿Qué quieres? Pues quiero ingresar 00:00:18
Uy, primer error, era de esperar 00:00:20
¿Verdad? Este error, ¿por qué me ha salido? 00:00:22
No me ha dejado ni meter cantidad ni nada 00:00:24
Claro, por eso 00:00:26
Entonces, vamos a 00:00:30
Vamos a cambiarlo en su nuevo, aquí después de este next in, vamos a limpiarlo con el next line, no sé si viene por aquí o viene después de este double. 00:00:32
No, no tengo 00:00:58
Scan next 00:01:02
Double y double 00:01:04
Next line 00:01:05
Porque aquí el único 00:01:08
Next line que tengo aquí 00:01:10
He dado el salto de línea 00:01:12
Y luego estoy todo el rato 00:01:14
Bueno, voy a ponerlo a ver si así se arregla 00:01:15
Esto es un poco prueba y error también 00:01:18
Pero sí 00:01:19
No acabo de entender muy bien tampoco 00:01:21
Porque hay 00:01:24
Vale, venga 00:01:24
a ver, no, pues aquí 00:01:28
0, tengo que darle 00:01:34
dos veces, a ver 00:01:36
vamos a revisarlo 00:01:38
en qué momento 00:01:40
eh, sí 00:01:41
pero bueno, eso es antes de 00:01:47
alcanzar el primer 00:01:49
cantidad, o sea el error 00:01:50
que cantidad 00:01:53
ah, no, no me da ningún error, que tonta 00:01:54
es que he puesto su nuevo saldo es 00:01:57
o sea, es que me pide, se me queda esperando 00:01:59
al meter aquí el método, me dice su nuevo saldo es 00:02:01
y se me queda esperando el dato después 00:02:03
vale, vale, vale 00:02:05
vale, o sea, que es confuso la aplicación 00:02:07
porque se me queda esperando después de haberme 00:02:09
dicho su nuevo saldo es 00:02:11
o sea, es un, pues, queda un poco 00:02:12
raro, pero bueno, vamos a ejecutarla 00:02:15
a ver, compone, si le quitas el n 00:02:17
¿qué n? 00:02:19
el n 00:02:23
no, no va a quedar claro, igual se me va a quedar esperando 00:02:23
su nuevo saldo es, se me va a quedar ahí esperando 00:02:28
A ver, el problema es que yo ahora lo arranco 00:02:29
Dime tu nombre 00:02:37
Dime tu saldo 00:02:37
Ahora quiero ingresar 00:02:40
Su nuevo saldo es 00:02:41
Pero se están esperando que le meta la cantidad de ingresar 00:02:43
Venga, voy a meter 2.000 euros 00:02:46
3.000 00:02:48
O sea, el problema es que el mensaje de su nuevo saldo 00:02:49
Me lo está diciendo antes de que haga yo el ingreso 00:02:52
¿Vale? 00:02:54
Pero claro, con la estructura que tengo no lo puedo cambiar 00:02:55
porque es que se lo estoy pasando directamente al sistema 00:02:57
ya, pero es que entonces ya lo he perdido 00:02:59
porque tendría que guardar una variable 00:03:07
y pasárselo 00:03:09
que podría 00:03:10
si lo pongo abajo 00:03:11
lo pongo aquí 00:03:14
lo único es que tengo que usar una variable auxiliar 00:03:18
nada más 00:03:20
lo pongo aquí, su nuevo saldo es 00:03:21
y el problema es que aquí yo ahora 00:03:24
claro, pero lo que yo quiero es que esto 00:03:34
quede oculto 00:03:36
o sea, no quiero usar directamente 00:03:39
el objeto cuenta, ahora explicaremos por qué 00:03:41
vale, el problema, si yo lo dejo 00:03:42
así, cuenta ingresar me ingresa 00:03:45
pero tengo que 00:03:47
el valor de retorno lo voy a tener que 00:03:49
guardar para concatenarlo 00:03:51
aquí, o sea, a ver 00:03:53
pero que tenías ahí un void en el 00:03:53
método, no, no, no, tengo el valor de retorno 00:03:57
por eso se lo he podido pasar al system out 00:03:59
si yo lo único 00:04:00
es evitar, ¿vale? 00:04:03
Guardar una variable auxiliar. El problema es que yo ahora 00:04:05
que no quería yo guardar una variable auxiliar 00:04:07
pero me da igual. 00:04:09
Su nuevo saldo es... 00:04:12
Y aquí le pongo cant y ya está. 00:04:14
¿Vale? 00:04:16
Ahora, ahora. 00:04:22
Confía en mí 00:04:24
y ten paciencia. 00:04:25
Pero la respuesta rápida es porque es muy feo. 00:04:26
Pero ahora 00:04:29
tú confía, ¿vale? 00:04:30
Yo lo que no quiero 00:04:33
es usar el objeto en sí. 00:04:34
solo los métodos que me ofrece 00:04:36
por ahí van los tiros, no el objeto 00:04:38
en sí, solo lo que él me ofrece como métodos 00:04:40
vale, entonces 00:04:42
aquí está claro, ¿no? está claro, primero 00:04:44
el problema que ocurría 00:04:46
es que si yo meto cuenta de ingresar, no es que funcionara mal 00:04:47
sino que el mensaje me daba 00:04:50
antes de tiempo, no es que funcionara mal el programa 00:04:52
entonces ahora yo 00:04:54
ingreso la cantidad 00:04:56
me da el saldo actualizado y la informo 00:04:57
ya está 00:05:01
si meto directamente el saldo actualizado 00:05:01
Perdonad. 00:05:08
Alguien me lo estabais diciendo, ¿verdad? 00:05:10
Claro, ponerlo aquí. 00:05:13
Perdonad, claro, qué tontería. 00:05:14
¿Alguien me estaríais diciendo esto? 00:05:16
¿A que sí? 00:05:17
Claro, ¿alguien me estaba diciendo por ahí? 00:05:20
¿Y por qué no así? 00:05:23
Pues sí, efectivamente, ya tenemos el problema solucionado. 00:05:24
¿Y cómo lo tenías antes? 00:05:26
En otro season. 00:05:27
Ah, ¿tú me estabas diciendo esto? 00:05:31
Claro. 00:05:32
¿Seguro? ¿No te has subido al carro ahora? 00:05:33
No, tienen ya eso, pero yo lo tengo detrás por la mesa. 00:05:34
Claro, tú tienes cuenta, punto, cantidad, que es lo que yo quiero evitar. 00:05:36
Vale, antes es que este mensaje no lo tenía separado en una línea arriba. 00:05:41
Vale, ahora ya esto, vale, más bonito. 00:05:45
Y aquí lo mismo. 00:05:47
Un momentito, vamos a ponerle este aquí también. 00:05:50
Claro, antes de hacer la concatenación, no le queda más remedio. 00:05:58
Claro, ahora, vale, a ver, vamos a volver aquí a esta línea. 00:06:02
Ahora, este system out, ¿qué hace? 00:06:09
La concatenación de dos cosas. 00:06:12
La primera parte la tiene ya, no pasa nada. 00:06:14
Y la segunda se tiene que quedar esperando. 00:06:17
Cuando ya le metemos la cantidad, la procesa y su valor de retorno lo concatena al otro. 00:06:21
¿Vale? 00:06:27
Luego, interesante. 00:06:30
Vale. 00:06:31
Y todo esto lo hemos podido hacer así porque cuenta ingresar me devuelve la cantidad. 00:06:33
Me devuelve la cantidad, si no, no. 00:06:38
Bueno, pues nada, su nuevo, ahora ya aquí en retirar lo he hecho igual, su nuevo saldo es, lo concateno con la llamada al método, con lo cual aquí se va a quedar esperando. 00:06:40
Cuando ya tenga el valor resultante de esa llamada, lo concatena y lo pasa al system out. 00:06:51
Vamos a volver a ejecutar. 00:06:56
Ala, dime tu nombre, otra vez. 00:07:01
Saldo. 00:07:05
Ingreso. 00:07:07
Cantidad. 00:07:08
Vamos a meter 2.000 euros. 00:07:09
Tu nuevo saldo es 3.000. 00:07:11
Muy bien. 00:07:12
Retirar. 00:07:14
1.500, tu nuevo saldo es 1.500 00:07:14
vale, si yo le doy a salir 00:07:18
saldrá, no hace falta que lo pruebe 00:07:20
voy a quedarme a cero a ver qué hace 00:07:21
vamos a retirar 00:07:23
1.500 00:07:25
su nuevo saldo es cero 00:07:27
y no puede seguir 00:07:30
pues ya está y la aplicación termina 00:07:30
bueno, pues estupendo 00:07:33
pues justo lo que queríamos 00:07:35
¿qué? 00:07:36
se entere 00:07:45
Que los bancos lo tienen muy claro 00:07:46
Bueno, pues 00:07:51
Esta aplicación del cajero 00:07:52
Que parece una chorrada 00:07:55
Pero es más interesante de lo que parece 00:07:57
¿Hasta aquí está clara? 00:07:58
¿Vale? ¿Hasta aquí está clara? 00:08:04
Bueno 00:08:07
Pues tiene algunas cosas bonitas 00:08:07
Y tiene algunas otras feas 00:08:10
¿Vale? 00:08:12
¿Cuáles son las bonitas? 00:08:16
que a la hora de operar, hacer los ingresos y las retiradas, 00:08:18
él directamente llama a los métodos para que lo hagan, 00:08:23
lo que hemos dicho antes. 00:08:26
Entonces, así es como tiene que ser. 00:08:28
La aplicación, el interior del objeto no le tiene que importar. 00:08:30
No le tiene que importar. 00:08:36
Lo único que tiene que hacer la aplicación es llamar a los métodos. 00:08:37
Hasta ahí, eso lo hemos hecho bien. 00:08:42
pero es que esta parte de aquí arriba 00:08:43
esta es la que está fea 00:08:46
la de dar los datos 00:08:48
porque está bien hecho 00:08:52
a nivel de código 00:08:54
de compilación está bien hecho 00:08:55
pero yo aquí me estoy metiendo 00:08:57
dentro directamente 00:09:00
de los detalles del objeto 00:09:02
de los detalles 00:09:04
eso es precisamente 00:09:05
el principio básico 00:09:09
no quiero meterme en los detalles del objeto 00:09:10
ni siquiera 00:09:13
ni siquiera para inicializarlos 00:09:14
ni siquiera para eso quiero meterme en los detalles 00:09:16
no me he metido para retirar 00:09:19
ni para ingresar, magnífico 00:09:21
pero aquí me estoy metiendo 00:09:23
para inicializar, es que no querría 00:09:25
meterme, no debería meterme ni para 00:09:27
inicializar en los detalles 00:09:29
¿y cuáles son los detalles? esto, lo que tiene dentro 00:09:30
claro, pues precisamente 00:09:33
para evitar, para evitarnos a nosotros 00:09:35
como main, como aplicación principal 00:09:37
meternos en los detalles 00:09:39
es para lo que existen 00:09:41
unos métodos especiales 00:09:43
que son los métodos constructores. 00:09:45
¿Vale? 00:09:49
Entonces, 00:09:50
el método constructor 00:09:52
es un método especial 00:09:54
que es diferente 00:09:56
y se programa de forma distinta 00:09:58
a los métodos genéricos 00:09:59
que se programan, como hemos visto, 00:10:01
con esas pautas, 00:10:03
parámetros separados por comas 00:10:05
si es que hay más de uno, 00:10:06
nombre del método, 00:10:08
valor que me devuelve, 00:10:09
código, retún si es que me devuelve algo, 00:10:10
Esas son las pautas generales para cualquier otro método y no hay más. Pues los constructores son una excepción. Vale, pues lo contamos así un poco y dejamos el rollo aquí. ¿Qué es un método constructor? Vamos a hacer aquí un método constructor. 00:10:13
Un método constructor es un método al que yo no llamo por código aquí cuando me da la gana, en realidad. 00:10:33
No como lo he llamado a este. 00:10:42
Yo a ingresar lo he llamado aquí, lo podría llamar una y mil veces. 00:10:43
A retirar lo he llamado aquí, lo podría llamar una y mil veces. 00:10:48
Pues al método constructor yo no le llamo cuando quiero. 00:10:51
El método constructor se ejecuta una única vez y es en el momento de crear el objeto. 00:10:53
Es un método, se ejecuta cuando se instancia el objeto. 00:11:00
No se puede ejecutar en otro momento. 00:11:17
Cuando se instancia, se ejecuta automáticamente. 00:11:19
No lo llamo yo, no lo tengo que llamar yo. 00:11:22
Es que se ejecuta ya él automáticamente, cuando se instancia el objeto. 00:11:24
Vale. 00:11:30
Primera restricción que tiene ese método que lo distingue de los demás. 00:11:32
Su nombre 00:11:35
Es obligatorio que se llame 00:11:37
Igual que la clase 00:11:40
Obligatorio 00:11:42
Si no se llama así, entonces no es el constructor 00:11:43
Es otro 00:11:48
Entonces, el constructor de mi clase cuenta 00:11:48
Se llamaría cuenta 00:11:55
Tal cual, con la mayúscula 00:11:57
Con todo, tal cual 00:11:59
Vale 00:12:00
El método constructor 00:12:03
No devuelve nada 00:12:06
No puede devolver nada 00:12:08
Ahora entenderemos por qué 00:12:10
y es tan obligatorio que no devuelva nada 00:12:13
que es que no se pone ni el void. 00:12:15
No se pone ni el void, prohibido. 00:12:17
Si yo pusiera el void, entonces estaría 00:12:21
haciendo otro método distinto 00:12:23
que se llama cuenta, 00:12:25
que no estaría haciendo el constructor. 00:12:27
Este sí es el constructor. 00:12:30
El constructor se llama 00:12:32
como la clase 00:12:33
y delante no se le pone void ni nada. 00:12:34
Vale, pues ¿cuándo se llama este método? 00:12:39
¿A este método cómo lo llamo yo? 00:12:41
Pues a este método se le llama aquí, cuando se instancia el objeto. 00:12:43
En este momento, cuando yo hago new cuenta, automáticamente la máquina virtual se mete aquí y hace lo que haya ahí. 00:12:49
Lo que sea que haya ahí, lo que a mí me dé la gana. 00:13:00
¿Qué es lo que normalmente se hace ahí? 00:13:06
Inicializar los datos. 00:13:10
entonces todo este rollo que yo he puesto aquí 00:13:11
pues este rollo 00:13:13
lo podría haber hecho 00:13:15
todo esto 00:13:18
incluso 00:13:19
a ver, porque 00:13:21
ahora mismo tendremos que hacerlo con el siso 00:13:23
luego ya 00:13:26
al constructor le puedes pasar parámetros 00:13:27
con lo cual el siso lo harías fuera 00:13:30
pero ahora mismo vamos a hacer que no has preguntado nada 00:13:31
vale 00:13:34
no has preguntado nada, con lo cual yo no he dicho nada 00:13:36
de esto último 00:13:38
entonces vamos a meter esto aquí dentro 00:13:38
con lo cual necesito el escáner 00:13:41
aquí dentro 00:13:47
este escáner aquí 00:13:47
control c 00:13:50
aquí 00:13:52
vale 00:13:59
pues entonces este método 00:14:01
cuenta 00:14:03
se llama 00:14:05
automáticamente cuando se invoca 00:14:08
la instanciación, cuando se hace 00:14:10
el new, este en particular 00:14:12
¿qué está haciendo? 00:14:14
dime tu nombre 00:14:16
y lo pone en la propiedad titular 00:14:18
pero ojo, aquí ya este me sobra 00:14:20
este cuenta, aquí ya no pinta nada 00:14:22
este cuenta era el objeto del otro sitio 00:14:24
este aquí ya no pinta nada 00:14:26
ya lo quito 00:14:28
¿qué está haciendo este método? 00:14:29
me pide un valor, lo mete 00:14:32
en la propiedad titular de arriba, lo mete ahí 00:14:34
ya no tengo que poner 00:14:36
titular, la propiedad directamente, su nombre 00:14:38
hombre, si quiero poner this 00:14:40
pues pongo dis porque es lo mismo 00:14:42
pero en este caso 00:14:45
no hay confusión porque no hay parámetros 00:14:47
ni hay nada 00:14:49
si quiero poner dis lo pongo, si no, no 00:14:50
claro, lo que tú quieras, en el constructor 00:14:52
tú haces lo que quieras 00:14:56
¿vale? 00:14:57
entonces, el uso de este método 00:15:01
es precisamente 00:15:03
normalmente, puede hacer uno lo que quiera 00:15:04
pero normalmente es 00:15:07
inicializar el objeto 00:15:09
con los valores que tú quieres. 00:15:11
Y así no tiene que inicializarle este. 00:15:13
Y esta aplicación, como veis, se queda mucho más bonita. 00:15:16
Crea el objeto y llama a los métodos. 00:15:21
Y en esta aplicación, los detalles de cuenta, 00:15:25
como son titular y cantidad, aquí no aparecen. 00:15:30
Aquí en el main, en ningún momento veo yo titular, 00:15:33
cantidad, no veo nada. 00:15:37
bueno, aquí porque lo he puesto 00:15:39
para la condición, que también debería 00:15:41
quitarlo con otro método, pero bueno 00:15:43
aquí he quitado todos los detalles 00:15:44
a esta aplicación lo que hay dentro de cuenta 00:15:46
le da igual, le da igual que sea un titular 00:15:49
y una cantidad, le da lo mismo 00:15:51
porque ya a través del constructor 00:15:53
inicializa los datos 00:15:55
y a través de estos métodos 00:15:56
hace lo que haya que hacer 00:15:58
¿vale? y este 00:16:00
constructor ya lo inicializa 00:16:03
vamos a ejecutarlo a ver si 00:16:04
hemos escrito todo bien 00:16:07
no, puede haber varios 00:16:09
pero tienen que tener diferentes parámetros 00:16:14
el próximo día lo vemos 00:16:16
a menos que queráis que lo veamos ahora 00:16:18
tiempo da 00:16:21
pero es que tus compañeros te van a odiar 00:16:24
entonces 00:16:26
yo es que no sé 00:16:28
cuánto quieres hacer tus amigos o enemigos 00:16:29
yo precisamente no tengo prisa 00:16:32
otros días os digo, me tengo que ir antes 00:16:36
Dime tu saldo 00:16:38
¿Veis? Si funciona todo perfectamente 00:16:43
Retirada 00:16:45
300, hala, ya está 00:16:47
Fuera, ¿vale? 00:16:49
Bueno, pues 00:16:52
Muy útil 00:16:53
El constructor, muy útil 00:16:55
Aquí lo único 00:16:56
Se queda un detallito 00:16:59
Y es que yo vengo diciendo 00:17:00
Ahí dando la matraca 00:17:03
Con que 00:17:04
con separar 00:17:06
separar la parte de 00:17:07
meter los datos de la vista 00:17:09
si lo hago por consola 00:17:11
lo hago por interfaz, separarlo de la clase 00:17:13
y aquí le estoy forzando 00:17:15
a que lo meta así 00:17:17
claro, pero es que yo me puedo hacer 00:17:18
un constructor 00:17:21
al que le das tú los valores 00:17:22
y él 00:17:25
lo usa para inicializar 00:17:27
y los valores se leen desde fuera 00:17:29
sería lo ideal, esa sería una 00:17:31
segunda versión de constructor 00:17:33
Vale, constructor puede haber muchos 00:17:35
Un segundo, hay 15 y nos vamos 00:17:38
Pero ahora paz 00:17:40
Constructores puede haber muchos 00:17:41
Otra variante 00:17:43
Cuenta a la que le voy a pasar 00:17:45
Dos valores, por ejemplo 00:17:48
Un string 00:17:50
Que es el titular 00:17:51
Y un double cantidad 00:17:53
¿Qué va a hacer el constructor 00:17:56
Con estos parámetros? 00:17:59
Pues los va a usar 00:18:01
Para inicializarlos del objeto 00:18:02
Entonces haría distitular igual a titular y dispunto cantidad igual a cantidad. 00:18:04
Claro, entonces este es otro variante de constructor que puede convivir con este 00:18:16
porque se distinguen este parámetros vacíos, este parámetros con cosas. 00:18:20
Este constructor recibe los valores que ya se habrán leído como le dé la gana 00:18:26
a la aplicación, y esos valores 00:18:31
los 00:18:33
utiliza para inicializar 00:18:34
el objeto. 00:18:37
Pregunta perfecta, que cabe aquí. 00:18:40
¿Cómo distingue? Por lo que yo le meto 00:18:42
aquí. Si yo no le meto nada, 00:18:45
él entiende que vas al primero. 00:18:47
Pero imagínate que yo he leído unos valores 00:18:49
antes, y yo he 00:18:51
dicho, dime tu nombre, y yo he guardado 00:18:52
aquí el nombre, en una variable 00:18:54
cualquiera. 00:18:56
String nombre. 00:18:59
lo que sea, dime tu saldo 00:19:01
y yo he guardado aquí el saldo 00:19:03
en una variable cualquiera 00:19:05
pues ahora podría creármelo 00:19:07
objeto, en lugar de creármelo así 00:19:09
me lo creo así 00:19:11
le paso 00:19:14
este valor 00:19:20
y le paso este otro 00:19:21
y ahora ya 00:19:23
este constructor coge estos valores 00:19:25
que yo he leído por aquí, como podría haber leído 00:19:28
de una base de datos, de donde fuera 00:19:30
coge estos dos valores 00:19:31
y los usa para inicializar 00:19:33
los suyos. 00:19:35
¿Vale? 00:19:38
Entonces, normalmente, uno 00:19:40
da los valores al objeto 00:19:42
cuando lo crea a través 00:19:45
de los métodos constructores internos. 00:19:47
No directamente aquí accediendo 00:19:49
a la propiedad. ¿Vale? 00:19:51
Bueno, 00:19:58
dudas o preguntas. 00:20:00
De hecho, esto es tan 00:20:02
truco mágico. 00:20:04
Lo de los constructores es tan 00:20:06
prescriptivo, es tan de hacer, 00:20:07
que el Eclipse, el entorno 00:20:09
de desarrollo Eclipse, como el Intel IE, 00:20:12
como cualquiera, te da una 00:20:14
forma de, pum, hacerlo 00:20:16
tú solito. Es decir, imaginaos 00:20:17
que yo no he hecho constructores. 00:20:20
Este no está. 00:20:22
Y quiero un constructor. 00:20:24
Pues en lugar de escribirlo, hago el vago, 00:20:26
que eso nos encanta 00:20:28
a todos. Botón derecho, 00:20:30
source. En source me voy a 00:20:32
generar constructor. 00:20:33
Generar constructor. 00:20:36
con qué campos, titular, cantidad 00:20:38
generar, pun 00:20:40
y ala, me lo hace aparecer 00:20:42
¿vale? porque es que es lo habitual 00:20:43
que uno use estos constructores 00:20:46
y veis, me lo ha generado 00:20:48
el eclipse no puede ser tan 00:20:50
tonto como para usar 00:20:52
el mismo nombre de variable 00:20:54
y ponerse el tropizo y poner el 00:20:55
dis, es que es lo habitual 00:20:58
¿vale? 00:20:59
¿que cómo lo he generado? source 00:21:02
botón derecho en la 00:21:04
clase en la que quieres generar el constructor, en cuenta 00:21:06
en este caso, source 00:21:08
generar constructor 00:21:10
usando campos, propiedades 00:21:12
aquí marcas que campos 00:21:14
quieres que se inicialicen 00:21:16
generar y ya está, lo que pasa es que me ha 00:21:18
generado otro, claro, dos 00:21:20
con el mismo número de parámetros, dos no puede ser 00:21:22
porque entonces habría confusión, por eso me ha dado 00:21:24
vale, y ya está 00:21:26
venga, ahora sí 00:21:30
que nos vamos 00:21:32
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
3
Fecha:
6 de diciembre de 2025 - 11:26
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
21′ 34″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
92.71 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid