1 00:00:00,000 --> 00:00:10,460 Voy a grabar esta clase, por lo tanto, si habláis y el micrófono os graba, pues me dais vuestra autorización a que se oiga la pregunta, ¿vale? 2 00:00:11,000 --> 00:00:17,219 Entonces, la última vez hemos llegado hasta aquí, más o menos, ¿vale? 3 00:00:18,480 --> 00:00:21,359 Entonces, rápidamente, estas transparencias. 4 00:00:21,480 --> 00:00:28,199 Nosotros hemos dicho que vamos a seguir más o menos estos pasos de aquí, ¿vale? 5 00:00:28,199 --> 00:00:31,859 Vamos a utilizar como primer paradigma de programación la programación estructurada 6 00:00:31,859 --> 00:00:37,439 Es decir, empezaremos desde lo más sencillo, desde programitas muy sencillos 7 00:00:37,439 --> 00:00:43,939 Que se basan sobre tres elementos de programación principales 8 00:00:43,939 --> 00:00:46,960 Que son las secuencias, una instrucción después de la otra 9 00:00:46,960 --> 00:00:49,640 Nuestros primeros ejercicios serán así 10 00:00:49,640 --> 00:00:54,179 Será hacer una operación y escribir el resultado 11 00:00:54,179 --> 00:00:56,759 pedir el nombre 12 00:00:56,759 --> 00:00:58,719 y que te escriba hola y tu nombre 13 00:00:58,719 --> 00:01:00,520 cosas de este estilo, uno detrás de otro 14 00:01:00,520 --> 00:01:02,560 secuencias, luego empezaremos 15 00:01:02,560 --> 00:01:04,000 con una cosa un poquito más difícil 16 00:01:04,000 --> 00:01:06,420 que es el if, es el condicional 17 00:01:06,420 --> 00:01:08,900 es si pasa una determinada 18 00:01:08,900 --> 00:01:10,819 cosa, si hay una determinada condición 19 00:01:10,819 --> 00:01:11,519 entonces 20 00:01:11,519 --> 00:01:14,760 haces esto, si no está 21 00:01:14,760 --> 00:01:16,980 esta condición, entonces haz otra cosa 22 00:01:16,980 --> 00:01:18,739 ¿vale? dos opciones 23 00:01:18,739 --> 00:01:21,120 y luego añadiremos 24 00:01:21,120 --> 00:01:22,840 las sentencias 25 00:01:22,840 --> 00:01:24,359 iterativas, que es 26 00:01:24,359 --> 00:01:26,000 este trocito de código 27 00:01:26,000 --> 00:01:28,019 házmelo más de una vez 28 00:01:28,019 --> 00:01:30,519 házmelo hasta que una 29 00:01:30,519 --> 00:01:32,680 condición, mientras que una condición 30 00:01:32,680 --> 00:01:34,599 sea verdadera, sigue haciendo 31 00:01:34,599 --> 00:01:36,900 esto, esto, esto, esto, cuando esta condición 32 00:01:36,900 --> 00:01:38,260 se vuelve falsa 33 00:01:38,260 --> 00:01:39,879 sal de este trozo de código 34 00:01:39,879 --> 00:01:42,319 o hazme este trozo de código 35 00:01:42,319 --> 00:01:43,560 por 10 veces 36 00:01:43,560 --> 00:01:46,420 combinando estas 37 00:01:46,420 --> 00:01:48,099 3 cosas que están en todos 38 00:01:48,099 --> 00:01:50,519 cualquier lenguaje de programación 39 00:01:50,519 --> 00:01:52,540 que pilléis vosotros, tiene estas 40 00:01:52,540 --> 00:01:58,239 tres cosas como mínimo vale pues se hacen cosas más avanzadas 41 00:01:58,239 --> 00:02:02,319 llegará un momento en que nuestros programas serán suficientemente complejos 42 00:02:02,319 --> 00:02:07,280 para decir vale vamos a organizarlos un poquito mejor mi programa hace dos tres 43 00:02:07,280 --> 00:02:12,199 cuatro tareas pues esas dos tres cuatro tareas la pongo en módulos distintos en 44 00:02:12,199 --> 00:02:16,039 métodos primero y luego si queremos también en módulos que son como 45 00:02:16,039 --> 00:02:20,939 colecciones de métodos de funciones entonces nos moveremos a la programación 46 00:02:20,939 --> 00:02:28,680 modular. Esto primer trimestre. A final de primer trimestre, principio del segundo trimestre, ya nos 47 00:02:28,680 --> 00:02:34,199 moveremos a la programación orientada a objetos. Veremos que todo lo que hemos aprendido se utiliza 48 00:02:34,199 --> 00:02:40,379 en la programación orientada a objetos, pero vamos, hacemos un salto de abstracción en lógico un 49 00:02:40,379 --> 00:02:48,960 poquito más cerca de cómo piensan las personas. La orientación a objeto está pensada para, en un 50 00:02:48,960 --> 00:02:59,060 En cierto sentido, diseñar los sistemas de forma más fácil, de forma más cercana a como pensamos nosotros las cosas, nosotros los seres humanos. 51 00:03:00,960 --> 00:03:13,639 Yo quiero modelizar un alumno, entonces pienso en cuáles son las características que son propias de un alumno, su nombre, su nota, su no sé qué, las que me interesan para mi sistema. 52 00:03:13,639 --> 00:03:22,939 y todo lo que puede hacer un alumno. Se puede escribir, puede pedir la media de sus notas, puede desmatricularse, no lo sé. 53 00:03:23,060 --> 00:03:30,740 Todo lo que para mí es interesante lo empaqueto todo en lo que es una clase, lo de public class. 54 00:03:32,020 --> 00:03:38,740 La clase es una abstracción generalizada de un concepto. 55 00:03:38,740 --> 00:03:43,740 El alumno. ¿Qué alumno? ¿Tú o tú? No. Un alumno cualquiera. 56 00:03:44,979 --> 00:03:50,180 A partir de allí, a partir de una clase, yo puedo instanciar objetos. 57 00:03:50,879 --> 00:03:58,039 Es decir, crear un alumno concreto. El alumno que se llama Sara. El alumno que se llama Francisco. 58 00:04:01,460 --> 00:04:04,159 Pero esto todavía no lo veremos en futuro. 59 00:04:04,159 --> 00:04:08,680 Todo lo que hemos dicho hasta aquí 60 00:04:08,680 --> 00:04:11,080 En las transparencias, en las slides hasta aquí 61 00:04:11,080 --> 00:04:13,840 Son en general 62 00:04:13,840 --> 00:04:16,660 Para cualquier lenguaje de programación o cosa por el estilo 63 00:04:16,660 --> 00:04:19,220 Ahora vamos a ver un poquito Java 64 00:04:19,220 --> 00:04:23,079 Como funciona, lo hemos dicho ya varias veces 65 00:04:23,079 --> 00:04:24,980 Nosotros hemos hablado de compilación 66 00:04:24,980 --> 00:04:28,920 De interpretación y sabemos que Java utiliza las dos cosas 67 00:04:28,920 --> 00:04:31,160 Pero aquí es para formalizar 68 00:04:31,160 --> 00:04:33,040 ¿Qué es Java? 69 00:04:33,540 --> 00:04:36,579 Nosotros hemos hablado hasta ahora de lenguajes de programación en general 70 00:04:36,579 --> 00:04:40,060 Hemos hecho una prueba con Java, pero vamos a ver qué es Java 71 00:04:40,060 --> 00:04:41,959 Y cómo se coloca en lo que hemos dicho hasta ahora 72 00:04:41,959 --> 00:04:51,040 La programación modular es sustancialmente organizar mejor lo que es en la programación estructurada 73 00:04:51,040 --> 00:04:55,240 En la programación estructurada tú haces tu sistema así 74 00:04:55,240 --> 00:04:57,600 Lo creas y añades cosas, añades cosas 75 00:04:57,600 --> 00:04:59,980 La programación modular sería la idea de 76 00:04:59,980 --> 00:05:10,319 no, antes de empezar a desarrollar me voy a crear bloques en función de las tareas que tiene que hacer mi sistema 77 00:05:10,319 --> 00:05:16,120 y luego creo un módulo o varios módulos dependiendo de la complejidad por cada uno de estos bloques 78 00:05:16,120 --> 00:05:22,480 y luego desarrollo las funciones y los programas en base a cada uno de estos módulos 79 00:05:22,480 --> 00:05:28,420 al final de eso cuando tengo los módulos por separado, tengo el módulo que es gestión a los profesores 80 00:05:28,420 --> 00:05:30,000 el módulo que gestiona los alumnos 81 00:05:30,000 --> 00:05:32,139 el módulo que gestiona las asignaturas 82 00:05:32,139 --> 00:05:34,199 hago para decir, pues los combino 83 00:05:34,199 --> 00:05:36,199 en un sistema que utilice estos módulos 84 00:05:36,199 --> 00:05:36,720 de alguna forma 85 00:05:36,720 --> 00:05:40,180 es un modo de organizar mejor 86 00:05:40,180 --> 00:05:41,500 las cosas 87 00:05:41,500 --> 00:05:43,759 en realidad nosotros esto lo haremos luego 88 00:05:43,759 --> 00:05:45,819 en objetos, y yo todo lo que os enseñaré 89 00:05:45,819 --> 00:05:47,519 las cosas que iremos haciendo 90 00:05:47,519 --> 00:05:49,519 fuera de la orientación a objetos 91 00:05:49,519 --> 00:05:51,819 está siempre pensada con pinceladas de objetos 92 00:05:51,819 --> 00:05:54,100 para que un día te diga, esto es lo que tienes que hacer 93 00:05:54,100 --> 00:05:56,000 y ya sabréis 94 00:05:56,000 --> 00:05:58,079 programar orientado a objetos sin saber 95 00:05:58,079 --> 00:06:00,399 Que hemos programado objetos 96 00:06:00,399 --> 00:06:11,670 Pero es que la programación estructurada 97 00:06:11,670 --> 00:06:13,050 Está dentro de la programación de objetos 98 00:06:13,050 --> 00:06:15,649 O sea, tú cuando programas objetos 99 00:06:15,649 --> 00:06:17,750 Dices, vale, el alumno 100 00:06:17,750 --> 00:06:19,170 El alumno tiene que tener 101 00:06:19,170 --> 00:06:20,790 La función para matricularse 102 00:06:20,790 --> 00:06:23,269 Dentro de la función para matricularse 103 00:06:23,269 --> 00:06:24,910 Lo que estás haciendo es programación estructural 104 00:06:24,910 --> 00:06:27,069 El if, el while 105 00:06:27,069 --> 00:06:29,569 Esta if, while 106 00:06:29,569 --> 00:06:31,449 Secuencias 107 00:06:31,449 --> 00:06:33,990 Son las cosas que usas para programar 108 00:06:33,990 --> 00:06:35,129 No es que están obsoletas 109 00:06:35,129 --> 00:06:49,850 Son lo que usas para luego hacer. Lo que cambia es cómo organizas estas cosas. En la programación estructural, ese es el único que tienes y no organizas el código mucho. En la programación modular empiezas a dividirlos por módulos. 110 00:06:49,850 --> 00:06:56,209 Entonces, equipos de trabajo distintos, por ejemplo, pueden trabajar en módulos distintos en paralelo 111 00:06:56,209 --> 00:07:03,430 y cuando llegas a la orientación a objetos, pues tú lo que estás haciendo es dividir tu problema 112 00:07:03,430 --> 00:07:08,230 en todos los posibles objetos que puedan trabajar, desarrollarlos hasta por separado 113 00:07:08,230 --> 00:07:11,170 y luego tener un sistema que va utilizando estos objetos. 114 00:07:11,829 --> 00:07:16,129 Es sustancialmente una forma para organizar mejor el código, poderlo reutilizar mejor 115 00:07:16,129 --> 00:07:19,050 y para evitar que mis proyectos se hundan 116 00:07:19,050 --> 00:07:21,209 porque llega un momento en que no sé dónde meter la mano 117 00:07:21,209 --> 00:07:22,610 porque todo es demasiado complejo 118 00:07:22,610 --> 00:07:24,550 aquí como reduzco la complejidad 119 00:07:24,550 --> 00:07:28,889 porque cada cosa está compartimentada 120 00:07:28,889 --> 00:07:32,029 organizada, dividida, separada 121 00:07:32,029 --> 00:07:34,750 pues si tengo un error en la parte de alumno 122 00:07:34,750 --> 00:07:37,889 toco la parte de alumno, no toco el sistema completo 123 00:07:37,889 --> 00:07:46,399 la no estructurada es todavía peor de la estructurada 124 00:07:46,399 --> 00:07:49,079 porque no utilizaba ni siquiera funciones y cosas por el estilo 125 00:07:49,079 --> 00:07:51,199 y entonces era mucho más complejo 126 00:07:51,199 --> 00:07:52,560 de manejar 127 00:07:52,560 --> 00:07:54,899 y mientras que los sistemas 128 00:07:54,899 --> 00:07:57,019 eran muy sencillos, era suficiente 129 00:07:57,019 --> 00:07:59,180 cuanto más los sistemas son 130 00:07:59,180 --> 00:08:01,319 complejos, si no te organizas 131 00:08:01,319 --> 00:08:02,439 pues no lo consigues 132 00:08:02,439 --> 00:08:04,399 si, si 133 00:08:04,399 --> 00:08:05,560 que nosotros 134 00:08:05,560 --> 00:08:08,740 si y no, es que 135 00:08:08,740 --> 00:08:10,980 nosotros empezamos por public 136 00:08:10,980 --> 00:08:12,540 class en low world 137 00:08:12,540 --> 00:08:14,540 has hecho una clase, estás programando 138 00:08:14,540 --> 00:08:15,459 orientado a objeto 139 00:08:15,459 --> 00:08:18,680 solo que nosotros no nos fijamos en eso 140 00:08:18,680 --> 00:08:20,759 y nos centramos más 141 00:08:20,759 --> 00:08:22,420 en la programación estructural 142 00:08:22,420 --> 00:08:23,160 de momento 143 00:08:23,160 --> 00:08:33,120 que si no sabes 144 00:08:33,120 --> 00:08:34,100 cómo hacer un muro 145 00:08:34,100 --> 00:08:35,539 no vas a hacer un castillo 146 00:08:35,539 --> 00:08:38,460 entonces este es el castillo 147 00:08:38,460 --> 00:08:39,720 la programación orientada a objetos 148 00:08:39,720 --> 00:08:42,679 con muchas cosas potentes pero complejas 149 00:08:42,679 --> 00:08:44,120 antes habrá que aprender 150 00:08:44,120 --> 00:08:45,279 que es un if 151 00:08:45,279 --> 00:08:47,980 antes de poder programar objetos 152 00:08:47,980 --> 00:08:50,840 antes de crear una persona 153 00:08:50,840 --> 00:08:53,139 y luego un alumno que hereda la persona 154 00:08:53,139 --> 00:09:02,980 y poder crear una colección de personas que pueden ser alumnos o personas normales 155 00:09:02,980 --> 00:09:06,100 y gestionarlas y cosas por el estilo, pues tendré que saber que es un if. 156 00:09:07,100 --> 00:09:08,259 Entonces vamos a aprender if. 157 00:09:10,960 --> 00:09:11,240 ¿Dudas? 158 00:09:13,679 --> 00:09:13,840 Sí. 159 00:09:32,860 --> 00:09:38,620 A ver, diagramas de flujo, pseudocódigo y cosas por el estilo, 160 00:09:39,299 --> 00:09:41,759 yo creo que nosotros no los vamos a ver. 161 00:09:42,659 --> 00:09:43,779 Por varias razones. 162 00:09:44,299 --> 00:10:02,100 Nosotros haremos ejercicios suficientemente sencillos para que no se necesita un diseño muy intenso previo, ¿vale? O sea, pilla dos variables, súmalas y escribe el resultado, ¿vale? 163 00:10:02,100 --> 00:10:16,759 Primeros ejercicios, ¿qué haremos? Pues tenemos que hacer un diseño, a lo mejor no, ¿vale? Ahora, a lo mejor algunas pinceladas de vez en cuando lo hablaremos, cuando hablaremos de algoritmos, pues algo diremos. 164 00:10:16,759 --> 00:10:21,379 Yo creo que en torno de desarrollos veréis algo de OML 165 00:10:21,379 --> 00:10:27,480 Existen lenguajes gráficos o cosas por el estilo 166 00:10:27,480 --> 00:10:30,019 Como el Universal Modeling Language 167 00:10:30,019 --> 00:10:35,379 Que están pensados para las fases previas del programar 168 00:10:35,379 --> 00:10:37,799 Para crear lo que es el diagrama de clases 169 00:10:37,799 --> 00:10:41,440 Cómo se organizan las clases, el diagrama de Gantt 170 00:10:41,440 --> 00:10:46,519 Cosas de ese estilo que sirven más bien en ingeniería del software 171 00:10:46,519 --> 00:11:09,440 Para un proyecto muy, muy grande no puedes empezar a programar. Tienes que antes saber qué vas a hacer, dividirlo entre los grupos de trabajo y luego que ellos programen. Ahora, el perfil hacia que vais vosotros no es de ingeniero de software. En el sentido, ingeniero de software es una carrera universitaria. Vosotros vais más bien hacia programación, programadores. 172 00:11:09,440 --> 00:11:12,679 Eso no quita que dentro de unos años 173 00:11:12,679 --> 00:11:14,879 Estaréis diseñando vuestros sistemas 174 00:11:14,879 --> 00:11:16,779 Puede ser, porque luego al fin y al cabo 175 00:11:16,779 --> 00:11:18,220 Donde de verdad uno se hace 176 00:11:18,220 --> 00:11:19,960 Programador informático 177 00:11:19,960 --> 00:11:22,179 Es en la experiencia que hace trabajando 178 00:11:22,179 --> 00:11:24,639 Seréis expertos en no sé qué 179 00:11:24,639 --> 00:11:26,320 Y llegará un momento en que sabréis 180 00:11:26,320 --> 00:11:29,120 Crear sistemas de no sé qué 181 00:11:29,120 --> 00:11:30,000 Muy buenos 182 00:11:30,000 --> 00:11:32,159 Y sabréis los errores que habéis hecho 183 00:11:32,159 --> 00:11:34,179 En los proyectos anteriores y los evitaréis 184 00:11:34,179 --> 00:11:37,419 Diagrama de flujo 185 00:11:37,419 --> 00:11:41,440 Un año se intentó hacer 186 00:11:41,440 --> 00:11:42,200 Otro profesor 187 00:11:42,200 --> 00:11:44,340 Empezó con diagramas de flujos 188 00:11:44,340 --> 00:11:46,259 Más intensivos, pseudocódigo 189 00:11:46,259 --> 00:11:48,240 Y no tocó Java todo el primer trimestre 190 00:11:48,240 --> 00:11:50,899 No se vio 191 00:11:50,899 --> 00:11:51,559 Una 192 00:11:51,559 --> 00:11:54,379 Significativa mejoría 193 00:11:54,379 --> 00:11:56,039 En los resultados 194 00:11:56,039 --> 00:11:58,879 Y entonces a mi me gusta más que toqueteéis 195 00:11:58,879 --> 00:12:00,379 Directamente el Java 196 00:12:00,379 --> 00:12:02,139 Porque así tocáis el ordenador 197 00:12:02,139 --> 00:12:03,279 Y trabajáis y os motiváis 198 00:12:03,279 --> 00:12:05,259 Porque diagramas de flujos es papel 199 00:12:05,259 --> 00:12:08,440 lo puedes hacer al ordenador 200 00:12:08,440 --> 00:12:10,039 pero es más aburrido 201 00:12:10,039 --> 00:12:12,559 al diseño 202 00:12:12,559 --> 00:12:14,179 el diseño de lo que vas a hacer 203 00:12:14,179 --> 00:12:16,860 entonces, sí, es una herramienta 204 00:12:16,860 --> 00:12:18,340 potente, es una herramienta interesante 205 00:12:18,340 --> 00:12:20,620 para las cosas 206 00:12:20,620 --> 00:12:21,519 muy sencillas 207 00:12:21,519 --> 00:12:23,840 no es tan útil 208 00:12:23,840 --> 00:12:26,220 a lo mejor llega un momento en que 209 00:12:26,220 --> 00:12:28,740 quitamos tiempo a lo que es hacer ejercicios 210 00:12:28,740 --> 00:12:29,600 y programar en Java 211 00:12:29,600 --> 00:12:32,799 para una cosa que es útil y que puede valer 212 00:12:32,799 --> 00:12:33,980 no es que sea inútil 213 00:12:33,980 --> 00:12:36,919 Pero yo creo que a vosotros 214 00:12:36,919 --> 00:12:39,960 Mi cosa como profesor 215 00:12:39,960 --> 00:12:41,519 Mi opinión como profesor 216 00:12:41,519 --> 00:12:44,240 Es que es mejor que tengáis 217 00:12:44,240 --> 00:12:45,360 Más horas en Java 218 00:12:45,360 --> 00:12:46,720 Más bien que en esa cosa 219 00:12:46,720 --> 00:12:49,720 Luego a lo mejor me equivoco, soy humano 220 00:12:49,720 --> 00:12:51,980 Si os gusta lo que queréis 221 00:12:51,980 --> 00:12:53,019 Pues me preparo clases 222 00:12:53,019 --> 00:12:54,720 Entonces Java 223 00:12:54,720 --> 00:12:57,379 Java es un lenguaje de programación orientado a objetos 224 00:12:57,379 --> 00:12:59,279 Nosotros al principio esta parte de aquí 225 00:12:59,279 --> 00:13:01,019 La ignoraremos, pero luego 226 00:13:01,019 --> 00:13:03,720 De repente 227 00:13:03,720 --> 00:13:05,799 Saldrá y no la dejaremos 228 00:13:05,799 --> 00:13:06,419 Nunca jamás 229 00:13:06,419 --> 00:13:08,820 El objetivo fundamental de Java 230 00:13:08,820 --> 00:13:11,580 Es que lo escribo una vez 231 00:13:11,580 --> 00:13:14,000 Y se ejecuta 232 00:13:14,000 --> 00:13:14,960 En cualquier lado 233 00:13:14,960 --> 00:13:18,080 La cosa potente, útil e interesante 234 00:13:18,080 --> 00:13:20,000 De Java no es su eficiencia 235 00:13:20,000 --> 00:13:21,799 Su velocidad, porque si yo quiero 236 00:13:21,799 --> 00:13:23,820 Eficiencia y velocidad, posiblemente voy 237 00:13:23,820 --> 00:13:25,980 Más hacia C++, C Sharp 238 00:13:25,980 --> 00:13:26,799 O cosas por el estilo 239 00:13:26,799 --> 00:13:29,659 Sino el hecho que pueda hacer 240 00:13:29,659 --> 00:13:31,639 Aplicaciones que una vez que las he 241 00:13:31,639 --> 00:13:34,120 Desarrollado, pues se pueden ejecutar 242 00:13:34,120 --> 00:13:35,679 En cualquier sistema 243 00:13:35,679 --> 00:13:38,059 CPU que tenga 244 00:13:38,059 --> 00:13:39,899 Una Java Virtual Machine 245 00:13:39,899 --> 00:13:41,039 Instalada, el JRE 246 00:13:41,039 --> 00:13:43,820 ¿Vale? Instalado, el Java Runtime 247 00:13:43,820 --> 00:13:44,679 Environment 248 00:13:44,679 --> 00:13:49,639 Algunas cosillas y entre ellas 249 00:13:49,639 --> 00:13:51,320 La intérprete, que es la Java Virtual Machine 250 00:13:51,320 --> 00:13:53,340 ¿Vale? Si yo tengo un intérprete de Java 251 00:13:53,340 --> 00:13:55,980 Pues desarrollado por quien sea 252 00:13:55,980 --> 00:13:56,799 ¿Vale? Porque 253 00:13:56,799 --> 00:13:59,720 Oracle tiene uno, pero el que usamos 254 00:13:59,720 --> 00:14:01,700 nosotros, pero hay otras 255 00:14:01,700 --> 00:14:06,179 implementaciones de la Java Virtual Machine 256 00:14:06,179 --> 00:14:08,940 tú tienes la especificación de cuál es el lenguaje Java 257 00:14:08,940 --> 00:14:12,039 cada uno de los comandos que tiene que hacer y vosotros 258 00:14:12,039 --> 00:14:14,639 dentro de un rato, si queréis y estáis 259 00:14:14,639 --> 00:14:18,220 lo suficientemente locos, podéis haceros vuestra propia Java Virtual Machine 260 00:14:18,220 --> 00:14:20,259 en otro lenguaje o en el lenguaje ese 261 00:14:20,259 --> 00:14:24,100 pero bueno, la idea es que si yo tengo 262 00:14:24,100 --> 00:14:26,980 una Java Virtual Machine, alguien la ha implementado para un determinado 263 00:14:26,980 --> 00:14:29,279 sistema, todas las aplicaciones 264 00:14:29,279 --> 00:14:30,779 que hago y que he hecho 265 00:14:30,779 --> 00:14:33,240 para otros sistemas, para otras Java Vector Machine 266 00:14:33,240 --> 00:14:34,360 pues funcionan allí también 267 00:14:34,360 --> 00:14:36,340 y entonces eso es muy bueno 268 00:14:36,340 --> 00:14:38,879 Java usa 269 00:14:38,879 --> 00:14:40,759 un compilador y un intérprete, entonces 270 00:14:40,759 --> 00:14:42,720 nosotros empezamos por el editor 271 00:14:42,720 --> 00:14:44,460 el editor es el Notebook 272 00:14:44,460 --> 00:14:46,720 el Notepad, lo que hemos usado hasta ahora 273 00:14:46,720 --> 00:14:49,000 o un IDE un poquito más potente 274 00:14:49,000 --> 00:14:50,740 escribimos allí el 275 00:14:50,740 --> 00:14:52,960 código en un fichero .java 276 00:14:52,960 --> 00:14:54,159 con extensión .java 277 00:14:54,159 --> 00:14:56,820 a ese punto tengo el programa 278 00:14:56,820 --> 00:15:00,779 fuente, el programa fuente es el programa que está contenido dentro 279 00:15:00,779 --> 00:15:04,700 del programa .java, hago una compilación utilizando 280 00:15:04,700 --> 00:15:09,139 javac, javac está por javacompiler, y esto me transforma 281 00:15:09,139 --> 00:15:12,240 el programa fuente en un lenguaje 282 00:15:12,240 --> 00:15:16,779 intermedio, que es el lenguaje bytecode, que es el que cuando hemos abierto 283 00:15:16,779 --> 00:15:20,740 antes no es inteligible para el ser humano, el ser humano 284 00:15:20,740 --> 00:15:23,740 no está pensado para que el ser humano lea bytecode 285 00:15:23,740 --> 00:15:32,480 ¿Por qué se hace este paso? Porque en la fase de compilación se pueden optimizar algunas cosas 286 00:15:32,480 --> 00:15:40,500 Si Java ve que una determinada variable, un trozo de código, algo de tu programa se repite muchas veces 287 00:15:40,500 --> 00:15:49,320 Posiblemente cuando lo transforma en bytecode hará algo para que acceder a ese trozo de código sea más fácil, sea más rápido 288 00:15:49,320 --> 00:15:55,019 Entonces es un organizarse un poquito de forma distinta a lo que tú has hecho 289 00:15:55,019 --> 00:16:00,440 Si lo consigues entender, para que luego el producto final sea un poquito mejor 290 00:16:00,440 --> 00:16:03,960 Sea un poquito más optimizado con respecto a lo que has hecho tú 291 00:16:03,960 --> 00:16:05,179 O lo que has escrito tú directamente 292 00:16:05,179 --> 00:16:11,519 Una vez que tengo el bytecode, el bytecode está almacenado en un fichero .class 293 00:16:11,519 --> 00:16:21,039 El .class es el que me sirve para poder pasárselo como parámetro a la Java Virtual Machine, JVM 294 00:16:21,039 --> 00:16:23,019 Que sería el comando java 295 00:16:23,019 --> 00:16:27,519 Y él leyendo línea por línea del bytecode 296 00:16:27,519 --> 00:16:31,259 Instrucción por instrucción del bytecode 297 00:16:31,259 --> 00:16:35,059 Pues lo va a interpretar y transformar en código máquina 298 00:16:35,059 --> 00:16:37,340 Para que el procesador lo pueda ejecutar 299 00:16:37,340 --> 00:16:39,799 ¿Dudas? 300 00:16:39,799 --> 00:16:44,690 Entonces, si yo he escrito un programa 301 00:16:44,690 --> 00:16:46,009 ¿Vale? 302 00:16:46,830 --> 00:16:48,649 Quiero que tú lo ejecutes 303 00:16:48,649 --> 00:16:50,690 ¿Vale? Y tú tienes instalado 304 00:16:50,690 --> 00:16:51,769 Una Java Virtual Machine 305 00:16:51,769 --> 00:16:55,230 ¿Qué te mando por correo para que tú puedas ejecutarlo? 306 00:17:02,129 --> 00:17:02,850 El .class 307 00:17:02,850 --> 00:17:09,950 Eso porque 308 00:17:09,950 --> 00:17:12,630 El IDE 309 00:17:12,630 --> 00:17:13,849 El entorno 310 00:17:13,849 --> 00:17:15,329 Integrado de desarrollo 311 00:17:15,329 --> 00:17:17,789 Lo hacen automático, pero nosotros hemos visto que no 312 00:17:17,789 --> 00:17:19,509 Cuando tú haces el Java C 313 00:17:19,509 --> 00:17:21,910 O sea, cuando tú guardas el Java 314 00:17:21,910 --> 00:17:23,089 Con el Notepad 315 00:17:23,089 --> 00:17:25,230 El Java C, el class nos ha creado. 316 00:17:26,210 --> 00:17:32,390 Pero lo que quiero decir es que lo que se instala en los ordenadores es esto. 317 00:17:32,630 --> 00:17:33,970 La javetomachine, el intérprete. 318 00:17:33,970 --> 00:17:42,109 Entonces, si yo te mando el .java, tú no lo puedes ejecutar a menos que tú no tengas el compilador de Java. 319 00:17:42,569 --> 00:17:47,470 Y el compilador de Java no hace parte del entorno de ejecución. 320 00:17:48,329 --> 00:17:50,210 No es el intérprete. 321 00:17:50,210 --> 00:18:01,930 Entonces, si tú tienes instalado el intérprete, solo el JRE, el Java Runtime Environment, y yo te mando un punto Java, tu programa no puede hacer nada. 322 00:18:02,910 --> 00:18:16,950 Sin embargo, yo, que soy programador, tengo instalado el JDK, el Java Development Kit, que además del Java, de la Java Virtual Machine, tiene también el Java Compiler. 323 00:18:16,950 --> 00:18:19,410 Entonces, si yo puedo hacer un programa en Java 324 00:18:19,410 --> 00:18:21,009 Lo compilo 325 00:18:21,009 --> 00:18:23,349 Cuidado, cuando lo compilo, no lo compilo 326 00:18:23,349 --> 00:18:24,609 Como lo compilo en C++ 327 00:18:24,609 --> 00:18:27,430 En base al sistema que yo tengo 328 00:18:27,430 --> 00:18:30,450 Lo estoy compilando a un lenguaje intermedio 329 00:18:30,450 --> 00:18:33,130 Independiente de lo que hay por debajo 330 00:18:33,130 --> 00:18:35,690 Que es el bytecode 331 00:18:35,690 --> 00:18:38,049 Y a este punto yo te puedo mandar 332 00:18:38,049 --> 00:18:40,690 El bytecode a ti 333 00:18:40,690 --> 00:18:43,170 Que tienes instalado la Java Virtual Machine 334 00:18:43,170 --> 00:18:44,809 Y tu Java Virtual Machine 335 00:18:44,809 --> 00:18:46,549 Será capaz de interpretar el bytecode 336 00:18:46,549 --> 00:18:49,779 entonces lo puede ejecutar 337 00:18:49,779 --> 00:18:51,500 entonces, si yo quiero 338 00:18:51,500 --> 00:18:54,019 mandar mi programa Java a los demás 339 00:18:54,019 --> 00:18:55,380 lo compilo 340 00:18:55,380 --> 00:18:57,299 y luego le mando el .class 341 00:18:57,299 --> 00:18:59,240 ellos no tienen el código fuente 342 00:18:59,240 --> 00:19:01,160 pero lo pueden ejecutar 343 00:19:01,160 --> 00:19:03,960 está claro que si alguien es otro programador 344 00:19:03,960 --> 00:19:05,559 y está interesado en el código fuente 345 00:19:05,559 --> 00:19:07,640 le puedo mandar el código fuente y luego eso lo compile él 346 00:19:07,640 --> 00:19:09,779 pero las personas 347 00:19:09,779 --> 00:19:11,839 normales no tienen instalados 348 00:19:11,839 --> 00:19:13,619 en casa el JDK, al máximo 349 00:19:13,619 --> 00:19:14,460 tienen un JRE 350 00:19:14,460 --> 00:19:19,299 y también porque este es el JDK 351 00:19:19,299 --> 00:19:20,859 y este es el jdk 352 00:19:20,859 --> 00:19:22,900 el jdk es más pequeño que el jdk 353 00:19:22,900 --> 00:19:25,220 y dentro de un jdk 354 00:19:25,220 --> 00:19:26,460 está el jdk 355 00:19:26,460 --> 00:19:31,160 el jdk es el jdk con algo más 356 00:19:31,160 --> 00:19:32,920 por ejemplo, el java compile 357 00:19:32,920 --> 00:19:35,039 entonces 358 00:19:35,039 --> 00:19:37,039 la idea es que yo cuando luego tengo que 359 00:19:37,039 --> 00:19:38,539 distribuir mi programa 360 00:19:38,539 --> 00:19:41,099 no quiero distribuir todo incluido el 361 00:19:41,099 --> 00:19:42,900 compilador que nadie tocará nunca porque 362 00:19:42,900 --> 00:19:44,779 si no eres un programador no tocas el 363 00:19:44,779 --> 00:19:46,859 compilador, yo lo que quiero 364 00:19:46,859 --> 00:19:48,920 distribuir es, asumiendo que 365 00:19:48,920 --> 00:19:50,779 tú tengas ya instalado un Java Virtual Machine 366 00:19:50,779 --> 00:19:52,799 que puedes hasta bajarte de otro sitio 367 00:19:52,799 --> 00:19:54,160 no soy yo que te lo tengo que dar 368 00:19:54,160 --> 00:19:57,220 y yo te voy a mandar mi programa 369 00:19:57,220 --> 00:19:58,799 ya listo para ser 370 00:19:58,799 --> 00:20:00,740 interpretado por el Java Virtual Machine 371 00:20:00,740 --> 00:20:02,680 ¿Dudas? 372 00:20:04,180 --> 00:20:04,359 Sí 373 00:20:04,359 --> 00:20:11,140 El JDK incluye 374 00:20:11,140 --> 00:20:11,579 JDK 375 00:20:11,579 --> 00:20:20,990 Va a salir 376 00:20:20,990 --> 00:20:23,369 tu programa, si tu programa era 377 00:20:23,369 --> 00:20:24,490 pídeme un 378 00:20:24,490 --> 00:20:27,089 valor, pídeme otro valor, súmalo y 379 00:20:27,089 --> 00:20:29,250 dame la suma, pues se juntará 380 00:20:29,250 --> 00:20:41,160 eso. Si no tienes el Java Runtime Environment, no tienes cómo lanzar el intérprete, que 381 00:20:41,160 --> 00:20:45,779 es la Java Virtual Machine. Y si no lanzas el intérprete, no se ejecuta. El bytecode 382 00:20:45,779 --> 00:20:52,059 no es ejeutable. El bytecode es un lenguaje intermedio que es interpretable por el Java 383 00:20:52,059 --> 00:20:56,059 Virtual Machine. Entonces, si no tengo una Java Virtual Machine, no puedo interpretarlo 384 00:20:56,059 --> 00:21:07,150 no puedo ejecutar dudas qué más está puesto la idea vale yo hago la compilación una vez tengo 385 00:21:07,150 --> 00:21:14,410 el bytecode y a este punto el bytecode lo puedo lanzar en distintas java virtual machine está para 386 00:21:14,410 --> 00:21:18,789 la máquina uno que por ejemplo es un windows esto para la máquina 2 que por ejemplo es un linux este 387 00:21:18,789 --> 00:21:21,130 por ejemplo para un Android 388 00:21:21,130 --> 00:21:23,170 que se yo, con que haya 389 00:21:23,170 --> 00:21:24,210 la Java Virtual Machine 390 00:21:24,210 --> 00:21:26,730 instalada 391 00:21:26,730 --> 00:21:29,029 puede la Java Virtual Machine interpretar 392 00:21:29,029 --> 00:21:30,789 el bytecode y ejecutarse 393 00:21:30,789 --> 00:21:33,170 en código máquina distinto 394 00:21:33,170 --> 00:21:34,569 propio para cada uno de ellos 395 00:21:34,569 --> 00:21:36,910 entonces si yo he escrito una vez 396 00:21:36,910 --> 00:21:39,109 el programa, lo he compilado una vez 397 00:21:39,109 --> 00:21:40,730 en bytecode 398 00:21:40,730 --> 00:21:42,769 y ya no lo tengo que compilar más 399 00:21:42,769 --> 00:21:44,910 este compilado se puede ejecutar 400 00:21:44,910 --> 00:21:46,609 allá donde haya un intérprete 401 00:21:46,609 --> 00:22:00,670 Si esto lo pensara en C, la Java Art Machine no estaría, entonces cuando hago la compilación la tengo que hacer una vez para la máquina 1, compilar para la máquina 2 y compilar para la máquina 3. 402 00:22:00,809 --> 00:22:04,869 Pero si no soy un informático, eso de compilar me va a sonar chino. 403 00:22:04,869 --> 00:22:12,349 Si tú dices a tu amigo que no estudia informática 404 00:22:12,349 --> 00:22:16,509 Dice, compila este fichero y ya te funciona 405 00:22:16,509 --> 00:22:18,109 Pues no sabe de dónde empezar 406 00:22:18,109 --> 00:22:22,250 Tú le dices, instálate esto, le das el link 407 00:22:22,250 --> 00:22:24,230 Él hace doble clic adelante, adelante, adelante 408 00:22:24,230 --> 00:22:25,589 Y ahora le funciona tu programa 409 00:22:25,589 --> 00:22:35,490 Porque un programa no necesariamente es una clase sola 410 00:22:35,490 --> 00:22:41,190 Puede ser cinco clases distintas 411 00:22:41,190 --> 00:22:55,690 De hecho, cuando tendremos los objetos, alumno será la clase alumno con su alumno.java que se compilará en alumno.class y profesor será la clase profesor que está en profesor.java que se compilará en profesor.class. 412 00:22:55,690 --> 00:23:08,759 el problema en el juego 413 00:23:08,759 --> 00:23:09,640 también tiene 414 00:23:09,640 --> 00:23:12,220 el juego cuando tú lo instalas es un zip 415 00:23:12,220 --> 00:23:14,359 luego tú le das doble clic 416 00:23:14,359 --> 00:23:15,079 y te lo 417 00:23:15,079 --> 00:23:18,799 expande 418 00:23:18,799 --> 00:23:20,460 y allí hay 419 00:23:20,460 --> 00:23:22,380 las mapas, hay las texturas 420 00:23:22,380 --> 00:23:24,079 hay los sonidos, hay las cosas 421 00:23:24,079 --> 00:23:25,400 y todo eso no son clases 422 00:23:25,400 --> 00:23:28,480 pero por algún lado si es un juego hecho en clase 423 00:23:28,480 --> 00:23:30,420 pues habrá una serie de ficheros 424 00:23:30,420 --> 00:23:32,420 que representarán los varios objetos 425 00:23:32,420 --> 00:23:33,720 que tienes en el juego 426 00:23:33,720 --> 00:23:46,940 Eso sí. Pero que cuanto más complejo sea un programa, más clases tendrá. Justo porque tú quieres mantenerlas separadas. Y tú tendrás la clase alumno, que representa a un alumno, con todo lo que tiene que ver con un alumno. 427 00:23:47,059 --> 00:23:57,059 Y si mañana haces un nuevo sistema donde hay alumnos, no tienes que volver a escribirlo desde cero. Te pillas esa misma clase, la copias en el otro sistema y ya tienes un alumno. 428 00:23:57,059 --> 00:23:59,000 Sí 429 00:23:59,000 --> 00:24:20,119 No, es un poco distinto 430 00:24:20,119 --> 00:24:20,839 Porque 431 00:24:20,839 --> 00:24:24,619 Sí, pero tiene que compilar 432 00:24:24,619 --> 00:24:26,799 Tiene que saber cómo se compila 433 00:24:26,799 --> 00:24:27,960 Cosa que 434 00:24:27,960 --> 00:24:31,000 Aquí no es necesario 435 00:24:31,000 --> 00:24:32,720 Tú lo que tienes que hacer 436 00:24:32,720 --> 00:24:33,680 Es sostancialmente 437 00:24:33,680 --> 00:24:35,700 Tener la Java Virtual Machine instalada 438 00:24:35,700 --> 00:24:37,460 Y esto no lo haces tú 439 00:24:37,460 --> 00:24:40,319 Empresa X, lo hace Oracle 440 00:24:40,319 --> 00:24:41,299 O quien sea 441 00:24:41,299 --> 00:24:43,259 Tú en tu ordenador 442 00:24:43,259 --> 00:24:46,039 Le tienes que decir que este programa funciona con Java 443 00:24:46,039 --> 00:24:48,039 O lo puedes hasta empaquetar 444 00:24:48,039 --> 00:24:49,339 Para que luego vaya de golpe 445 00:24:49,339 --> 00:24:51,640 Tú tienes un instalador, le das al instalador 446 00:24:51,640 --> 00:24:53,579 Y el instalador te instala la Java Art Machine 447 00:24:53,579 --> 00:24:55,200 Entonces, ya está 448 00:24:55,200 --> 00:24:57,779 Y el concepto es que 449 00:24:57,779 --> 00:25:00,319 Es una filosofía un poco distinta 450 00:25:00,319 --> 00:25:01,920 Porque quien desarrolla en Java 451 00:25:01,920 --> 00:25:05,220 No se preocupa de lo que pueda haber por debajo 452 00:25:05,220 --> 00:25:06,319 ¿Vale? 453 00:25:06,980 --> 00:25:08,599 Si yo compilo en C 454 00:25:08,599 --> 00:25:10,779 O sea, si yo programo en C 455 00:25:10,779 --> 00:25:11,400 O en C++ 456 00:25:11,400 --> 00:25:13,480 Luego tendré un compilador 457 00:25:13,480 --> 00:25:15,400 que me hace la compilación 458 00:25:15,400 --> 00:25:16,579 para este ordenador 459 00:25:16,579 --> 00:25:18,559 pero tengo que tener cuidado 460 00:25:18,559 --> 00:25:20,779 porque a lo mejor a mi en este ordenador 461 00:25:20,779 --> 00:25:22,420 me compila todo perfectamente 462 00:25:22,420 --> 00:25:25,220 pero en otro entorno cuando voy a compilar 463 00:25:25,220 --> 00:25:26,440 a lo mejor me da un tipo de error 464 00:25:26,440 --> 00:25:28,220 no garantiza 465 00:25:28,220 --> 00:25:30,579 que el hecho que compile aquí 466 00:25:30,579 --> 00:25:32,519 compile también en otro lado 467 00:25:32,519 --> 00:25:36,950 el intérprete 468 00:25:36,950 --> 00:25:39,410 yo no me he ocupado de la Java Virtual Machine 469 00:25:39,410 --> 00:25:40,829 la Java Virtual Machine ha hecho otro 470 00:25:40,829 --> 00:25:42,890 y son ellos que han hecho la Java Virtual Machine 471 00:25:42,890 --> 00:25:44,750 que se encargan de que funcione Windows 472 00:25:44,750 --> 00:25:45,789 De que funcione Linux 473 00:25:45,789 --> 00:25:48,349 Yo eso lo doy por hecho 474 00:25:48,349 --> 00:25:50,789 Yo asumo que exista una cosa que funcione 475 00:25:50,789 --> 00:25:52,109 ¿Quién se encarga de eso? 476 00:25:52,450 --> 00:25:54,410 Pues las grandes empresas y cosas por el estilo 477 00:25:54,410 --> 00:25:56,789 Si hay un error, son ellos que lo resuelven 478 00:25:56,789 --> 00:25:58,650 Sobre esta plataforma 479 00:25:58,650 --> 00:25:59,910 Que me proporcionan 480 00:25:59,910 --> 00:26:03,130 Yo hago funcionar mis ficheros 481 00:26:03,130 --> 00:26:04,789 Mis programas 482 00:26:04,789 --> 00:26:06,990 Sin tener que 483 00:26:06,990 --> 00:26:08,930 Oye, mira, esto funcionará allí 484 00:26:08,930 --> 00:26:11,130 Si funciona Jordan Machine, funcionará también en mí 485 00:26:11,130 --> 00:26:20,339 A nivel alto, sí 486 00:26:20,339 --> 00:26:22,500 A nivel bajo, cada uno tendrá 487 00:26:22,500 --> 00:26:23,619 Su propia implementación 488 00:26:23,619 --> 00:26:26,220 Habrá una Java Automachine para Windows 489 00:26:26,220 --> 00:26:27,920 Y una Java Automachine para Linux 490 00:26:27,920 --> 00:26:32,619 Todas las Java Automachines 491 00:26:32,619 --> 00:26:34,380 Que pueden ser implementadas 492 00:26:34,380 --> 00:26:35,660 En el lenguaje que te da la gana 493 00:26:35,660 --> 00:26:36,839 Porque eso será un ejeutable 494 00:26:36,839 --> 00:26:39,000 Entonces a lo mejor está implementado en C++ 495 00:26:39,000 --> 00:26:41,220 Pero será un intérprete 496 00:26:41,220 --> 00:26:43,299 El programa que yo hago en C++ es un intérprete 497 00:26:43,299 --> 00:26:46,660 Que pilla bytecode y lo ejecuta 498 00:26:47,240 --> 00:26:49,920 Y a nosotros no nos interesa 499 00:26:49,920 --> 00:26:51,279 Porque lo han hecho otros 500 00:26:51,279 --> 00:26:52,799 ¿Y cómo se hace eso? 501 00:26:53,119 --> 00:26:55,160 No me interesa, la Java Virtual Machine está hecha 502 00:26:55,160 --> 00:26:59,319 La única cosa es que si yo quiero hacer un programa 503 00:26:59,319 --> 00:27:00,299 Y lo quiero vender 504 00:27:00,299 --> 00:27:03,759 En el sistema operativo 505 00:27:03,759 --> 00:27:05,119 Stefanux 506 00:27:05,119 --> 00:27:06,000 ¿Vale? 507 00:27:06,119 --> 00:27:08,539 Y en Stefanux no hay una Java Virtual Machine 508 00:27:08,539 --> 00:27:10,200 Pues mi programa en Java ya no va 509 00:27:10,200 --> 00:27:12,759 Pero la probabilidad que alguien 510 00:27:12,759 --> 00:27:14,339 Interesado en hacer funcionar 511 00:27:14,339 --> 00:27:16,059 Todos los ecosistemas Java 512 00:27:16,059 --> 00:27:17,220 En Stefanux 513 00:27:17,220 --> 00:27:20,160 Pues decida de, voy a crear una Java Virtual Machine 514 00:27:20,160 --> 00:27:22,160 Para eso, vale, es posible 515 00:27:22,160 --> 00:27:23,680 Cuando alguien lo haya hecho 516 00:27:23,680 --> 00:27:25,660 Pues todos los programas de Java 517 00:27:25,660 --> 00:27:28,119 Compilados en bytecode pueden trabajarse ahí 518 00:27:28,119 --> 00:27:32,039 Es que no son 519 00:27:32,039 --> 00:27:34,160 Unificados, no sé qué quiere decir 520 00:27:34,160 --> 00:27:35,160 Con unificados 521 00:27:35,160 --> 00:27:38,059 Porque cada sistema tendrá su Java Virtual Machine 522 00:27:38,059 --> 00:27:40,039 Pero la ejecución de bytecode 523 00:27:40,039 --> 00:27:42,339 Es independiente de la máquina en la que estás 524 00:27:42,339 --> 00:27:43,880 Es la Java Virtual Machine 525 00:27:43,880 --> 00:27:44,500 Que es dependiente 526 00:27:44,500 --> 00:27:55,900 Como tú tienes un solo programa que tienes que hacer funcionar en tu máquina, cuando este programa, la Java Electromachine, funciona en tu sistema, pues ya todo lo de Java puede funcionar en tu sistema. 527 00:27:57,339 --> 00:28:02,500 En vez de en C es distinto, compilando sin intérprete. 528 00:28:03,299 --> 00:28:13,579 Es que cada aplicación por separado las tienes que compilar para que funcione en tu sistema y en Linux y en Windows y en no sé qué. 529 00:28:13,579 --> 00:28:15,920 Y ahora creo un nuevo proyecto 530 00:28:15,920 --> 00:28:17,440 Y lo tengo que probar en Windows 531 00:28:17,440 --> 00:28:19,119 Y en Linux y en no sé qué 532 00:28:19,119 --> 00:28:21,220 ¿Sí? 533 00:28:22,059 --> 00:28:22,960 Es distinto 534 00:28:22,960 --> 00:28:24,960 Esto es más portable 535 00:28:24,960 --> 00:28:27,200 El término técnico es más portable 536 00:28:27,200 --> 00:28:29,740 Lo escribes una vez y ya te funciona en todos 537 00:28:29,740 --> 00:28:31,480 Lo que soporta en una llave de tono 538 00:28:31,480 --> 00:28:33,759 ¿Más dudas? ¿Había una duda al fondo? 539 00:28:35,500 --> 00:28:36,619 Ya está resuelta 540 00:28:36,619 --> 00:28:37,619 ¿Más dudas? 541 00:28:39,180 --> 00:28:39,660 Sigo 542 00:28:39,660 --> 00:28:43,670 Vale, concepto de algoritmo 543 00:28:43,670 --> 00:28:51,170 Ya lo hemos hablado al principio, más o menos, y es un concepto reciente sencillo, pero tiene su miga. 544 00:28:52,009 --> 00:28:55,430 Vuestro trabajo se divide en dos. 545 00:28:56,849 --> 00:29:02,049 Primero es ser programadores, o sea, viene alguien y os dice, tú tienes que hacer esto, 546 00:29:02,509 --> 00:29:06,710 y tu programa tiene que hacer esta cosa, esta cosa, esta cosa, esta cosa, esta cosa, súper detallado, 547 00:29:06,750 --> 00:29:11,210 y te dice, hazlo, y tú te metes allí y no piensas y haces lo que te han dicho. 548 00:29:11,210 --> 00:29:17,829 Pero lo más probable es que no llegue un detalle suficiente para que tú dices 549 00:29:17,829 --> 00:29:23,230 Leo una frase y la transformo en una instrucción 550 00:29:23,230 --> 00:29:25,150 Leo otra frase y la transformo en otra instrucción 551 00:29:25,150 --> 00:29:30,910 Lo más probable es que tu jefe, tu entorno de trabajo, quien te pide de trabajar 552 00:29:30,910 --> 00:29:33,150 Te diga, oye mira, yo tengo este problema 553 00:29:33,150 --> 00:29:38,130 Tengo estos datos, estos datos hay que hacerle este tipo de operación 554 00:29:38,130 --> 00:29:41,049 Y al final tiene que salir una salida de este tipo 555 00:29:41,049 --> 00:29:44,650 Entonces, cuando tú tienes más o menos 556 00:29:44,650 --> 00:29:46,450 Has hablado con el cliente 557 00:29:46,450 --> 00:29:48,589 Con quien te manda a hacer un trabajo 558 00:29:48,589 --> 00:29:52,309 Y te queda claro que tiene que hacer tu proyecto 559 00:29:52,309 --> 00:29:55,349 A este punto viene la parte difícil 560 00:29:55,349 --> 00:29:59,089 Que es encontrar un algoritmo 561 00:29:59,089 --> 00:30:02,049 Que dada una cierta entrada 562 00:30:02,049 --> 00:30:04,769 Te produzca una determinada salida 563 00:30:04,769 --> 00:30:07,670 Hacer el algoritmo no es trivial 564 00:30:07,670 --> 00:30:10,529 Si el problema es muy sencillo 565 00:30:10,529 --> 00:30:26,950 Fantástico. Si el problema es complejo, el algoritmo se vuelve complejo. Y es donde la mayoría de vosotros tendrá dificultad. Muchos de vosotros aprenderán la sintaxis, sabrán perfectamente crear una variable y hacer un if. 566 00:30:26,950 --> 00:30:41,009 Pero cuando frente a un problema, este es el problema que tenemos, encontrar la solución en términos de qué pasos tiene que hacer mi programa para que logre lo que tiene que hacer, pues eso os va a costar. 567 00:30:41,730 --> 00:30:48,349 Y es, ¿os acordáis cuando la primera vez os dije que tenéis que cambiar vuestra forma de pensar? 568 00:30:48,349 --> 00:30:54,349 Es que un programador, un informático, tiene que empezar a pensar en términos de algoritmos. 569 00:30:55,329 --> 00:31:01,869 En términos de, sé que me dan, sé que quieren obtener, pero ¿cómo paso de aquí a aquí? 570 00:31:02,170 --> 00:31:07,170 ¿Cuáles son los pasos correctos para que vaya de aquí a aquí y si posible rápidamente? 571 00:31:07,970 --> 00:31:08,829 De forma eficiente. 572 00:31:10,849 --> 00:31:16,630 Entonces, un algoritmo es un conjunto ordenado y finito de operaciones que nos permiten hallar la solución a un problema. 573 00:31:16,630 --> 00:31:21,750 Una secuencia de instrucciones para llegar a la solución 574 00:31:21,750 --> 00:31:26,230 Tened en cuenta que esto va muy bien de la mano con la programación imperativa 575 00:31:26,230 --> 00:31:29,269 Programación imperativa es decir, haz esto, haz esto, haz esto, haz esto 576 00:31:29,269 --> 00:31:34,109 Pues el algoritmo es la secuencia de pasos que tiene que hacer para poder lograr 577 00:31:34,109 --> 00:31:41,170 Ejemplos de algoritmos en la vida real es hacer una tarta, lo decimos el otro día 578 00:31:41,170 --> 00:31:51,690 Te dice, echa X gramos de azúcar, echa X gramos de harina, mezcla todo, echa la levadura, ponlo en el horno 579 00:31:51,690 --> 00:31:53,829 Pues esos son los pasos para obtener una tarta 580 00:31:53,829 --> 00:31:55,309 Cambiar una bombilla 581 00:31:55,309 --> 00:31:59,630 Comprar si hay bombilla de repuesto 582 00:31:59,630 --> 00:32:05,130 En caso de que existan, quitar bombilla vieja, poner una nueva y comprobar si funciona 583 00:32:05,130 --> 00:32:06,950 Si no, bajar a comprar 584 00:32:06,950 --> 00:32:09,869 Esta es una secuencia de pasos que puede hacer 585 00:32:09,869 --> 00:32:28,910 Fijaos que aquí hay un if. Si existen bombillas nuevas, haz esto. Si no, haz este otro. Pues esto es un if. En informática lo traduciremos con una sentencia if condicional. 586 00:32:28,910 --> 00:32:34,940 Los algoritmos son la base de la programación 587 00:32:34,940 --> 00:32:38,480 Si sabéis sacar algoritmos, bien 588 00:32:38,480 --> 00:32:42,420 Si os cuesta ver por dónde van los algoritmos 589 00:32:42,420 --> 00:32:47,019 Pues hay que afinar esa cosa, hay que entrenarla 590 00:32:47,019 --> 00:32:49,619 Hay que probar y probar y probar a hacer algoritmo 591 00:32:49,619 --> 00:32:52,000 Hasta que esto os salga más fácil 592 00:32:52,000 --> 00:32:57,740 Tened en cuenta que lo que aprenderemos aquí al principio serán piezas sueltas de Lego 593 00:32:57,740 --> 00:33:03,180 Luego, cuando vosotros queréis montar vuestro velero de Lego 594 00:33:03,180 --> 00:33:05,359 Pues es el algoritmo, el velero 595 00:33:05,359 --> 00:33:11,180 Es cómo meter estas piezas una tras de otra para llegar a lo que queréis hacer 596 00:33:11,180 --> 00:33:12,380 Y eso es lo difícil 597 00:33:12,380 --> 00:33:15,220 No es difícil aprender un lenguaje 598 00:33:15,220 --> 00:33:18,900 Porque me preguntaban antes, ¿por qué Java y no Python? 599 00:33:19,539 --> 00:33:22,119 Porque da igual, da igual cuál usamos 600 00:33:22,119 --> 00:33:25,099 Java es bastante conocido, usamos Java 601 00:33:25,099 --> 00:33:30,279 Pero el objetivo de programación de este curso no es que vosotros aprendáis Java 602 00:33:30,279 --> 00:33:33,960 Es que vosotros aprendáis los fundamentos de la programación 603 00:33:33,960 --> 00:33:39,059 Y que luego en vuestra empresa en vez que Java utilizan C Sharp 604 00:33:39,059 --> 00:33:46,519 Pues vosotros en una semana aprendéis la sintaxis de C Sharp y empezáis a programar en C Sharp 605 00:33:46,519 --> 00:33:53,789 Los programas son algoritmos escritos en un lenguaje inteligible por el ordenador 606 00:33:53,789 --> 00:34:03,190 O sea, que al fin y al cabo el algoritmo, cuando tú lo has pensado, utilizas el lenguaje de programación para plasmarlo en algo que el ordenador luego sabrá ver. 607 00:34:03,730 --> 00:34:10,269 La definición del algoritmo tiene que seguir reglas sintáticas y tiene que cubrir todos los casos posibles. Esto también es complejo. 608 00:34:10,929 --> 00:34:19,210 Las reglas sintáticas ya hemos hablado, el lenguaje tiene una forma de escribir las cosas, esto es más complejo, el cubrir todos los casos posibles. 609 00:34:19,210 --> 00:34:26,510 Muchas veces cuando vosotros os enfrentáis a un problema, tenéis que mirar qué puede pasar con este problema. 610 00:34:27,030 --> 00:34:29,289 Puede pasar esto, puede pasar esto, puede pasar esto. 611 00:34:29,449 --> 00:34:36,949 Y vuestro programa tiene que ser capaz de seguir todas las posibilidades de este problema. 612 00:34:37,889 --> 00:34:39,070 ¿Qué puede hacer un alumno? 613 00:34:39,150 --> 00:34:44,210 Se puede matricular, se puede desmatricular o se puede ir de viaje por seis meses. 614 00:34:45,210 --> 00:34:47,210 Entonces, suspender la matrícula. 615 00:34:47,210 --> 00:34:53,170 Estos son los casos que quiero poder plasmar en mi algoritmo. 616 00:34:53,969 --> 00:34:58,989 Vale, perfecto, hago todo el programa y si ahora viene fuera un nuevo caso, pues tengo un problema. 617 00:34:59,789 --> 00:35:08,150 Porque a lo mejor como he plasmado el alumno, como he pensado todo el sistema, hacer este cuarto caso va a ser complejo. 618 00:35:08,309 --> 00:35:12,429 Tengo que volver a tocar partes del programa que pensaba que ya estaban bien. 619 00:35:12,429 --> 00:35:17,389 Algo que no tiene que ser determinista 620 00:35:17,389 --> 00:35:19,630 En cada momento el procesador tiene que saber 621 00:35:19,630 --> 00:35:21,530 Cuáles son las instrucciones que tiene que ejecutar 622 00:35:21,530 --> 00:35:22,750 Esto es importante también 623 00:35:22,750 --> 00:35:25,289 Nosotros programamos de forma determinista 624 00:35:25,289 --> 00:35:27,530 Programar de forma determinista quiere decir 625 00:35:27,530 --> 00:35:30,070 Que yo estoy aquí, a este punto de mi programa 626 00:35:30,070 --> 00:35:32,829 Sé perfectamente cuál es la siguiente instrucción 627 00:35:32,829 --> 00:35:36,789 Si el procesador no sabe que viene a continuación 628 00:35:36,789 --> 00:35:37,690 Mal 629 00:35:37,690 --> 00:35:40,730 ¿Que puede haber un if? 630 00:35:40,989 --> 00:35:41,230 Sí 631 00:35:41,230 --> 00:35:43,869 Pero cuando yo ejecuto el if 632 00:35:43,869 --> 00:35:46,449 Yo sabré si después de haber ejecutado este if 633 00:35:46,449 --> 00:35:48,530 Tendré que hacer esta parte de código 634 00:35:48,530 --> 00:35:50,050 O esta parte de código 635 00:35:50,050 --> 00:35:52,230 A lo mejor dependiendo de la condición 636 00:35:52,230 --> 00:35:53,670 O una o la otra 637 00:35:53,670 --> 00:35:55,710 Pero yo tengo que saber 638 00:35:55,710 --> 00:35:57,610 Donde ir 639 00:35:57,610 --> 00:36:01,579 Lo veremos 640 00:36:01,579 --> 00:36:04,630 El característico de un algoritmo 641 00:36:04,630 --> 00:36:07,670 Debe resolver el problema para el que fue formulado 642 00:36:07,670 --> 00:36:10,190 Importante, muchas veces si os daré ejercicios 643 00:36:10,190 --> 00:36:12,070 Diciendo, vuestro ejercicio tiene que hacer esto 644 00:36:12,070 --> 00:36:13,469 Y vosotros decís, lo he acabado 645 00:36:13,469 --> 00:36:15,610 Y cuando voy a ver, hace otra cosa 646 00:36:15,610 --> 00:36:17,010 Pues es un problema 647 00:36:17,010 --> 00:36:20,070 Tenéis que estar seguros 648 00:36:20,070 --> 00:36:21,889 Que cuando hacéis un algoritmo 649 00:36:21,889 --> 00:36:24,130 Sea para lo que se ha pedido 650 00:36:24,130 --> 00:36:26,769 Si yo os pido 651 00:36:26,769 --> 00:36:28,190 Resolverme las sumas 652 00:36:28,190 --> 00:36:30,150 Y vosotros hacéis un algoritmo 653 00:36:30,150 --> 00:36:31,210 Que hace multiplicaciones 654 00:36:31,210 --> 00:36:32,610 Pues hay algo raro 655 00:36:32,610 --> 00:36:35,929 Tiene que ser independiente del ordenador 656 00:36:35,929 --> 00:36:37,590 O sea, el algoritmo 657 00:36:37,590 --> 00:36:39,510 No tiene nada que ver 658 00:36:39,510 --> 00:36:40,730 Ni siquiera con el lenguaje 659 00:36:40,730 --> 00:37:05,670 Cuando tú piensas en cómo se soluciona un problema y ves las secuencias de instrucciones, no la piensas en Java, la piensas en general, diagrama de flujo, el pseudocodio, hasta lo puedes hacer en un papel diciendo antes tendré que pillar un valor, luego pillar otro valor, luego sumar estos valores, luego escribirlo en pantalla. 660 00:37:05,670 --> 00:37:09,090 No he usado Java, no he usado Python, no he usado nada 661 00:37:09,090 --> 00:37:10,630 He pensado los pasos 662 00:37:10,630 --> 00:37:13,130 Ahora, luego cuando voy a hacer el programa 663 00:37:13,130 --> 00:37:15,090 Cuando tengo claro el algoritmo 664 00:37:15,090 --> 00:37:17,809 Voy a hacer el programa, usaré un lenguaje de programación o otro 665 00:37:17,809 --> 00:37:21,710 Los algoritmos deben ser precisos 666 00:37:21,710 --> 00:37:24,309 Los resultados del cálculo deben ser exactos 667 00:37:24,309 --> 00:37:25,530 De forma rigurosa 668 00:37:25,530 --> 00:37:28,750 No puedo dar soluciones aproximadas 669 00:37:28,750 --> 00:37:31,789 Y los algoritmos deben ser finitos 670 00:37:31,789 --> 00:37:34,849 Antes o después tu algoritmo tiene que acabar 671 00:37:34,849 --> 00:37:38,110 En realidad hay algoritmos que pueden ser infinitos 672 00:37:38,110 --> 00:37:39,429 Pensad en un cajero 673 00:37:39,429 --> 00:37:41,829 Un cajero de sacar dinero 674 00:37:41,829 --> 00:37:44,710 Tú vas allí, haces lo que sea, sacas 50 euros 675 00:37:44,710 --> 00:37:47,010 Y el programa no acaba 676 00:37:47,010 --> 00:37:52,110 Vuelve arriba para que una siguiente persona vaya allí y saque otro dinero 677 00:37:52,110 --> 00:37:59,309 Pero aún así, tu algoritmo, si lo pillas en una sola ejecución, pues es finito 678 00:37:59,309 --> 00:38:03,530 Pide la tarjeta, pide el PIN, pide cuánto dinero, dale el dinero 679 00:38:03,530 --> 00:38:04,289 Vuelve arriba 680 00:38:04,289 --> 00:38:11,980 el algoritmo debe poder repetirse 681 00:38:11,980 --> 00:38:13,420 o sea, no me vale una cosa que 682 00:38:13,420 --> 00:38:15,719 una vez en mi casa cuando lo he lanzado 683 00:38:15,719 --> 00:38:16,539 ha funcionado 684 00:38:16,539 --> 00:38:18,480 y ahora no entiendo por qué no funciona 685 00:38:18,480 --> 00:38:20,199 pero yo lo he hecho porque ha funcionado una vez 686 00:38:20,199 --> 00:38:23,360 pues no, el algoritmo tiene que poder ser descrito 687 00:38:23,360 --> 00:38:25,780 a otra persona y que otra persona lo pueda implementar 688 00:38:25,780 --> 00:38:26,960 y que funcione siempre 689 00:38:26,960 --> 00:38:30,800 principio característica de validez 690 00:38:30,800 --> 00:38:33,679 un algoritmo es válido si carece de errores 691 00:38:33,679 --> 00:38:35,659 intentamos no poner errores 692 00:38:35,659 --> 00:38:37,980 Debería ser eficiente 693 00:38:37,980 --> 00:38:43,780 Es decir, debería intentar hacer el algoritmo lo más bueno posible 694 00:38:43,780 --> 00:38:49,159 Para que gaste los menores recursos posibles para hacer lo que tiene que hacer 695 00:38:49,159 --> 00:38:53,179 Y a veces es mejorable, a veces yo hago una solución 696 00:38:53,179 --> 00:38:55,639 Y luego viene alguien y me dice, se lo haces de esta otra forma 697 00:38:55,639 --> 00:38:59,719 Mejora, pues, entonces lo haré de otra forma 698 00:38:59,719 --> 00:39:05,139 Y óptimo, un algoritmo óptimo si es el más eficiente posible 699 00:39:05,139 --> 00:39:17,019 Hay algunos algoritmos que son así de buenos y más que así no se puede hacer, no existe una forma de mejorar este resultado 700 00:39:17,019 --> 00:39:26,619 y puede ser hay algunos problemas que son tan complejos que a lo mejor el algoritmo mejor en absoluto tarda años en resolver ese problema. 701 00:39:27,280 --> 00:39:31,480 Pero se considera óptimo si no hay una forma de hacerlo mejor. 702 00:39:31,480 --> 00:39:39,110 Y bueno, estos son elementos de un algoritmo, ya lo hemos dicho 703 00:39:39,110 --> 00:39:40,710 Entrada, proceso y salida 704 00:39:40,710 --> 00:39:42,750 Entrada es lo que me dan al principio 705 00:39:42,750 --> 00:39:44,630 Proceso es lo que hago yo 706 00:39:44,630 --> 00:39:53,750 La secuencia de pasos que elaboran estos datos de entrada 707 00:39:53,750 --> 00:39:58,550 Y al final obtendré algo que quiero poner como elemento de salida 708 00:39:58,550 --> 00:40:01,210 Y allí es donde escribo 709 00:40:01,210 --> 00:40:15,090 Vale, ahora para hacer algo que no es informático al 100%, pero para que vosotros penséis un poco y no os dormáis del todo, pues probamos a hacer algoritmos. 710 00:40:15,090 --> 00:40:21,210 Aquí se os da cuatro opciones de cuatro problemas 711 00:40:21,210 --> 00:40:25,650 Definid por algún lado, en Word o donde sea 712 00:40:25,650 --> 00:40:31,809 Cuáles son los algoritmos para estos problemas 713 00:40:31,809 --> 00:40:33,630 Algoritmo 714 00:40:33,630 --> 00:40:36,269 ¿Vale? 715 00:40:36,269 --> 00:40:40,000 Yo paro esto