1 00:00:00,370 --> 00:00:11,070 Vale, estoy grabando esta clase, por lo tanto, si hacéis alguna pregunta, comentario, levantar la mano, habláis, me estáis dando implícitamente el consentimiento para grabar. 2 00:00:11,509 --> 00:00:21,190 ¿Vale? Si no queréis que vuestras preguntas o comentarios sean grabados, me decís algo para que pare la grabación un momento, me hacéis la pregunta y luego seguimos. 3 00:00:21,449 --> 00:00:24,109 ¿Vale? No sé por qué, pero está en vuestro diálogo. 4 00:00:25,210 --> 00:00:28,109 Entonces, vamos a empezar a ver qué es la programación. 5 00:00:28,109 --> 00:00:29,649 programación, tened en cuenta que 6 00:00:29,649 --> 00:00:32,289 aquí hay alguien de vosotros 7 00:00:32,289 --> 00:00:33,929 que ya sabe un poco programar 8 00:00:33,929 --> 00:00:35,909 que ya ha visto programación, otros lo han visto 9 00:00:35,909 --> 00:00:37,689 en la ESO, otros la saben 10 00:00:37,689 --> 00:00:39,630 porque ha aprendido por su cuenta 11 00:00:39,630 --> 00:00:41,429 pues la primera parte 12 00:00:41,429 --> 00:00:44,109 para estas personas será un poco aburrida 13 00:00:44,109 --> 00:00:45,990 ¿vale? en el sentido que yo voy a 14 00:00:45,990 --> 00:00:47,829 empezar desde cero porque 15 00:00:47,829 --> 00:00:49,869 habrá otras personas que no han visto 16 00:00:49,869 --> 00:00:50,890 programación en su vida 17 00:00:50,890 --> 00:00:53,770 entonces aprovechad para 18 00:00:53,770 --> 00:00:55,570 dar un repaso 19 00:00:55,570 --> 00:00:57,609 a las bases que tenéis 20 00:00:57,609 --> 00:01:05,230 de conocimientos de programación, sacad dieces en los exámenes primeros que son los fáciles 21 00:01:05,230 --> 00:01:10,409 y luego ya iremos construyendo cosas más complejas, ¿vale? Si también tenéis comentarios 22 00:01:10,409 --> 00:01:15,349 o aportar algo o decir algo sobre algo que sabéis y que yo no estoy diciendo o que para 23 00:01:15,349 --> 00:01:22,109 vosotros se hace de otra forma, pues me lo decís y lo discutimos, ¿vale? Entonces, ¿qué 24 00:01:22,109 --> 00:01:23,890 ¿Qué es la programación en general? 25 00:01:24,230 --> 00:01:31,569 Es la creación de un conjunto concreto de instrucciones que un ordenador puede interpretar, denominado programa de ordenador. 26 00:01:32,170 --> 00:01:33,670 ¿Qué quiere decir esto? 27 00:01:33,790 --> 00:01:37,549 ¿Vosotros habéis oído alguna vez hablar del concepto de algoritmo? 28 00:01:38,409 --> 00:01:39,629 ¿Sabéis qué es un algoritmo? 29 00:01:40,609 --> 00:01:41,290 ¿Qué es un algoritmo? 30 00:01:42,129 --> 00:01:46,819 Una operación matemática. 31 00:01:46,819 --> 00:01:57,379 Un algoritmo es, dado un objetivo, hacer algo 32 00:01:57,379 --> 00:02:02,939 La secuencia de pasos, la secuencia de instrucciones que tengo que seguir 33 00:02:02,939 --> 00:02:04,719 Para lograr ese objetivo 34 00:02:04,719 --> 00:02:09,280 En informática utilizamos algoritmos mogollón 35 00:02:09,280 --> 00:02:13,360 Pero en realidad los algoritmos también se utilizan fuera de la informática 36 00:02:13,360 --> 00:02:14,740 También en la vida real 37 00:02:14,740 --> 00:02:18,240 Cuando tú haces una tarta, la receta es un algoritmo 38 00:02:18,240 --> 00:02:23,780 Te da los inputs, las entradas, lo que te empieza a pedir, que son los ingredientes 39 00:02:23,780 --> 00:02:29,020 Te da los pasos que tienes que seguir, cómo mezclar y cuándo mezclar los ingredientes 40 00:02:29,020 --> 00:02:32,840 Para hacer un proceso, para hacer un algoritmo, para hacer una serie de instrucciones 41 00:02:32,840 --> 00:02:35,900 Que al final obtendrán la tarta que estabas haciendo 42 00:02:35,900 --> 00:02:44,300 Entonces, la idea es esta, cuando se programa, la idea que estamos haciendo es dialogar, comunicar con el ordenador 43 00:02:44,300 --> 00:02:50,520 Decirle al ordenador, oye mira, estos son los pasos que tienes que hacer para lograr lo que tú quieres 44 00:02:50,520 --> 00:02:58,819 Para poder hablar con el ordenador se necesita un lenguaje que nos permita comunicar con él 45 00:02:58,819 --> 00:03:08,060 No podemos, bueno, no podíamos ahora cada vez más comunicarnos con el ordenador en castellano o con lenguaje natural 46 00:03:08,060 --> 00:03:15,419 Hoy en día, con un chat GPT, inteligencia artificial, o Gemini, o lo que sea, pues ya está yendo la cosa hacia allí. 47 00:03:15,659 --> 00:03:21,199 Tú estás hablando con tu ordenador, diciéndole qué quiere que haga tu programa en lenguaje natural, 48 00:03:21,580 --> 00:03:25,780 él lo interpreta y te saca un código que es capaz luego de ejecutarse en ordenador. 49 00:03:26,460 --> 00:03:28,400 ¿Vale? Pero todavía le falta. 50 00:03:28,759 --> 00:03:34,400 ¿Vale? Muchas veces el programita sencillo sí que lo hace bien, pero programas más complejos, sistemas más complejos, 51 00:03:34,400 --> 00:03:44,099 Pues eres tú, programador, que tienes que dividir la complejidad del sistema entero en pequeños trocitos más sencillos 52 00:03:44,099 --> 00:03:47,000 Y a ese punto la inteligencia artificial te puede echar una mano 53 00:03:47,000 --> 00:03:52,780 Tú le pides todos los trocitos pequeños, las funciones que quieres que haga, las operaciones que quiere que haga 54 00:03:52,780 --> 00:03:58,580 Y luego tú, como programador, las combinas de tal forma que haga un sistema mucho más cómodo 55 00:03:58,580 --> 00:04:04,000 Entonces, la programación es crear este conjunto de instrucciones 56 00:04:04,000 --> 00:04:08,039 Es transformar el algoritmo que tengo en mi mente 57 00:04:08,039 --> 00:04:12,199 En una serie de instrucciones que el ordenador puede entender 58 00:04:12,199 --> 00:04:15,340 Para que luego él haga la operación en mi lugar 59 00:04:15,340 --> 00:04:20,259 El programa habitualmente se escribe en un lenguaje de programación 60 00:04:20,259 --> 00:04:24,240 También se puede escribir directamente en lenguaje de máquina o en sembrador 61 00:04:24,240 --> 00:04:27,660 Aquí hay varios niveles de abstracción 62 00:04:27,660 --> 00:04:32,319 Yo puedo escribir un programa simplemente dándole ceros y unos 63 00:04:32,319 --> 00:04:38,420 En la antigüedad de la informática, cuando había las tarjetas perforadas 64 00:04:38,420 --> 00:04:41,540 No sé si habéis visto alguna vez alguna película vieja 65 00:04:41,540 --> 00:04:44,860 O habéis visto historias de la informática, cosas por el estilo 66 00:04:44,860 --> 00:04:48,459 Los primeros programas eran hojas con agujeros 67 00:04:48,459 --> 00:04:52,879 Donde un agujero era un cero, no sé si era un cero o un uno 68 00:04:52,879 --> 00:04:56,199 Y no agujero era un uno, o al revés 69 00:04:56,199 --> 00:04:57,339 ¿Vale? Da igual 70 00:04:57,339 --> 00:05:02,319 El concepto es que un estado de la hoja era un valor 71 00:05:02,319 --> 00:05:03,800 Y el otro estado era lo otro 72 00:05:03,800 --> 00:05:07,379 Entonces había una figura profesional 73 00:05:07,379 --> 00:05:11,300 Que sustancialmente se hacía de interfaz entre 74 00:05:11,300 --> 00:05:14,920 Programador, que no era un programador, era un matemático probablemente 75 00:05:14,920 --> 00:05:15,800 O alguien por el estilo 76 00:05:15,800 --> 00:05:16,920 Y el ordenador 77 00:05:16,920 --> 00:05:20,480 Y lo que hacía el matemático es que se inventaba una serie de operaciones 78 00:05:20,480 --> 00:05:22,839 Sumas, restas y cosas por el estilo 79 00:05:22,839 --> 00:05:25,500 Se la daba escrita a este operador 80 00:05:25,500 --> 00:05:27,180 Que pillaba una tarjeta 81 00:05:27,180 --> 00:05:29,620 Y empezabas a perforarla en ceros y unos 82 00:05:29,620 --> 00:05:31,560 Para que saliera el programa 83 00:05:31,560 --> 00:05:32,980 Que había pedido el matemático 84 00:05:32,980 --> 00:05:35,259 Y entonces 85 00:05:35,259 --> 00:05:37,319 A ese punto la ponía en un ordenador 86 00:05:37,319 --> 00:05:38,939 El ordenador interpretaba los ceros y unos 87 00:05:38,939 --> 00:05:41,720 Y hacía el programa 88 00:05:41,720 --> 00:05:42,459 Hacia la teoría 89 00:05:42,459 --> 00:05:44,360 Entonces, se puede todavía 90 00:05:44,360 --> 00:05:46,819 Programar en ceros y unos 91 00:05:46,819 --> 00:05:49,459 De hecho, hay ramas de la informática 92 00:05:49,459 --> 00:05:50,759 Muy específicas 93 00:05:50,759 --> 00:05:53,699 Que puede que sigan trabajando en ceros y unos 94 00:05:53,699 --> 00:05:55,439 Para programar los propios 95 00:05:55,439 --> 00:06:01,939 procesador. Vosotros esto no lo haréis. Lo veremos más en detalle más adelante, pero 96 00:06:01,939 --> 00:06:07,040 el lenguaje máquina son estos ceros y unos, cada procesador tiene su lenguaje máquina, 97 00:06:07,040 --> 00:06:13,180 una serie de operaciones que puede ejecutar, que son ceros y unos, con sus datos, y que 98 00:06:13,180 --> 00:06:21,439 un Intel o un AMD tienen, posiblemente, conjuntos distintos de lenguaje máquina. Una primera 99 00:06:21,439 --> 00:06:23,579 La extracción es el ensamblador, ¿vale? 100 00:06:23,579 --> 00:06:30,180 Es un pequeño lenguaje, muy poco potente, entre comillas, 101 00:06:30,660 --> 00:06:35,560 que te permite comunicar con el procesador, no en ceros y unos, 102 00:06:35,899 --> 00:06:39,819 sino con palabras un poquito más humanas. 103 00:06:40,519 --> 00:06:46,259 La suma, en vez de ser una tira de ceros y unos que representa esto es la suma 104 00:06:46,259 --> 00:06:51,319 y luego me dices que sumar, pues se escribe ADD, ADD, añadir. 105 00:06:51,439 --> 00:06:56,220 Aún así, programar ensemblador es un inferno 106 00:06:56,220 --> 00:07:01,399 El ensemblador sigue siendo muy cercano a lo que es el lenguaje máquina 107 00:07:01,399 --> 00:07:04,420 Y por lo tanto a veces dependiente del procesador 108 00:07:04,420 --> 00:07:09,860 Los procesadores a lo mejor no admiten determinadas funciones de ensemblador 109 00:07:09,860 --> 00:07:11,579 Que otra sí admite 110 00:07:11,579 --> 00:07:17,120 Y para hacer programas complejos esto se volvería muy grave 111 00:07:17,120 --> 00:07:21,420 Porque un programita muy sencillo de escríbeme en pantalla hola 112 00:07:21,420 --> 00:07:24,920 Pues en el semblador le sale un programa moral 113 00:07:24,920 --> 00:07:28,540 Si seguimos con 114 00:07:28,540 --> 00:07:30,439 Este nivel de abstracciones 115 00:07:30,439 --> 00:07:32,220 Llegamos a los lenguajes de programaciones 116 00:07:32,220 --> 00:07:34,519 De alto nivel, que son los que vemos nosotros 117 00:07:34,519 --> 00:07:36,120 Como Java, C, C++ 118 00:07:36,120 --> 00:07:38,339 De esta forma 119 00:07:38,339 --> 00:07:40,639 Hablaremos más en detalle con esto 120 00:07:40,639 --> 00:07:42,560 Por ahora, la programación es 121 00:07:42,560 --> 00:07:44,180 Este enzima de instrucciones 122 00:07:44,180 --> 00:07:45,680 ¿Cómo le digo las instrucciones? 123 00:07:45,819 --> 00:07:47,060 Pues creando un programa 124 00:07:47,060 --> 00:07:49,319 Y este programa necesita un lenguaje de programación 125 00:07:49,319 --> 00:07:51,800 para poder escribir el programa correctamente. 126 00:07:52,300 --> 00:07:55,720 Programa es un párrafo, es una novela, ¿vale? 127 00:07:55,920 --> 00:07:59,420 Y yo necesito un idioma para poder escribir esta novela. 128 00:07:59,639 --> 00:08:01,160 Este idioma es el lenguaje de programación. 129 00:08:01,300 --> 00:08:03,660 El lenguaje de programación tendrá su sintaxis, 130 00:08:04,779 --> 00:08:07,500 que si yo la escribo mal, pues no se entiende. 131 00:08:07,740 --> 00:08:10,319 Si yo me pongo a hablar en castellano, con palabras castellanas, 132 00:08:10,399 --> 00:08:14,459 pero mezclando frases sin verbos, sin sujeto y cosas así, 133 00:08:14,540 --> 00:08:15,600 pues no nos entendemos. 134 00:08:16,000 --> 00:08:18,300 Cada oración tiene que tener su estructura. 135 00:08:18,300 --> 00:08:21,459 Pues lo mismo cuando hablamos de lenguaje de programación 136 00:08:21,459 --> 00:08:21,879 ¿Vale? 137 00:08:22,199 --> 00:08:23,600 ¿Un lenguaje de programación qué es? 138 00:08:24,000 --> 00:08:26,199 Es un conjunto de símbolos y palabras 139 00:08:26,199 --> 00:08:28,720 Que el usuario tiene a disposición para elaborar un programa 140 00:08:28,720 --> 00:08:30,759 Cada lenguaje de programación 141 00:08:30,759 --> 00:08:33,379 Tendrá un conjunto de palabras reservadas 142 00:08:33,379 --> 00:08:34,960 Que tú puedes utilizar 143 00:08:34,960 --> 00:08:36,600 Y cuando usas esa palabra allí 144 00:08:36,600 --> 00:08:39,820 Estás diciendo al ordenador 145 00:08:39,820 --> 00:08:41,700 Algo específico 146 00:08:41,700 --> 00:08:41,919 ¿Vale? 147 00:08:42,080 --> 00:08:44,379 Para crear un entero, una variable entero 148 00:08:44,379 --> 00:08:46,279 Hasta la palabra reservada int 149 00:08:46,279 --> 00:08:49,080 Cuando yo digo int 150 00:08:49,080 --> 00:08:51,440 A un programa en Java, por ejemplo 151 00:08:51,440 --> 00:08:53,460 Le estoy diciendo algo específico 152 00:08:53,460 --> 00:08:55,279 Le estoy diciendo, mira, aquí estoy creando 153 00:08:55,279 --> 00:08:57,700 Un espacio de memoria donde almacenaré 154 00:08:57,700 --> 00:08:58,899 Un entero 155 00:08:58,899 --> 00:09:04,220 Entonces, los lenguajes 156 00:09:04,220 --> 00:09:06,179 Que tenemos son estos 157 00:09:06,179 --> 00:09:07,519 Ya los he dicho más o menos 158 00:09:07,519 --> 00:09:09,179 El lenguaje máquina es el lenguaje 159 00:09:09,179 --> 00:09:11,740 Que el procesador entiende directamente 160 00:09:11,740 --> 00:09:13,980 Es como comunicar directamente con el lenguaje 161 00:09:13,980 --> 00:09:15,279 Máquina 162 00:09:15,279 --> 00:09:16,600 ¿Por qué existe? 163 00:09:17,360 --> 00:09:21,139 Porque técnicamente este lenguaje es el más eficiente posible 164 00:09:21,139 --> 00:09:24,600 Hablar directamente con el procesador 165 00:09:24,600 --> 00:09:27,720 Hace que mi programa sea lo más eficiente posible 166 00:09:27,720 --> 00:09:28,679 Es un infierno 167 00:09:28,679 --> 00:09:30,200 Pero es muy eficiente 168 00:09:30,200 --> 00:09:34,220 No tengo ningún tipo de paso previo 169 00:09:34,220 --> 00:09:36,740 Para que el ordenador funcione 170 00:09:36,740 --> 00:09:39,000 Escribo el programa y luego el programa lo interpreta 171 00:09:39,000 --> 00:09:39,539 ¿Vale? 172 00:09:39,620 --> 00:09:41,419 Entonces en términos de eficiencia esto está muy bien 173 00:09:41,419 --> 00:09:53,210 Sí, lo veremos 174 00:09:53,210 --> 00:09:53,789 ¿Vale? 175 00:09:54,750 --> 00:09:59,649 Sostancialmente esto sigue existiendo en el sentido de que cuando yo hago alto nivel, 176 00:09:59,970 --> 00:10:05,370 estoy escribiendo palabras que me da la gana, luego tendré que hacer algo, magia, informática, 177 00:10:05,610 --> 00:10:11,750 veremos qué, hay dos opciones, normalmente tres, que me permiten transformar lo que he escrito en alto nivel 178 00:10:11,750 --> 00:10:17,169 a lenguaje mágico, para que el ordenador pueda entender. 179 00:10:17,169 --> 00:10:22,029 El ordenador no puede entender este lenguaje, puede entender solo el lenguaje mágico. 180 00:10:22,029 --> 00:10:25,049 pero yo tengo otros programas 181 00:10:25,049 --> 00:10:26,409 que lo que hacen es traducir 182 00:10:26,409 --> 00:10:28,370 desde el lenguaje que tengo yo 183 00:10:28,370 --> 00:10:30,769 al lenguaje máquina para ese específico 184 00:10:30,769 --> 00:10:32,929 procesador, entonces lo puede ejecutar 185 00:10:32,929 --> 00:10:36,710 el ensemblador 186 00:10:36,710 --> 00:10:38,950 hemos dicho que es un primer paso hacia la extracción 187 00:10:38,950 --> 00:10:41,029 pero sigue siendo muy dependiente 188 00:10:41,029 --> 00:10:42,809 del procesador, lo que usamos 189 00:10:42,809 --> 00:10:44,950 hoy en día para programar siempre todos 190 00:10:44,950 --> 00:10:46,529 son lenguajes de alto nivel 191 00:10:46,529 --> 00:10:49,090 que hay de distintos tipos 192 00:10:49,090 --> 00:10:51,269 hay algunos más alto nivel que otros 193 00:10:51,269 --> 00:10:53,690 Algunos se quedan más cercanos 194 00:10:53,690 --> 00:10:55,090 A lo que es el ensamblador 195 00:10:55,090 --> 00:10:57,809 Y algunos intentan extraer todavía más 196 00:10:57,809 --> 00:10:59,690 Para que sea más fácil para el programador 197 00:10:59,690 --> 00:11:01,090 Al final, escribir 198 00:11:01,090 --> 00:11:02,649 Escribir código 199 00:11:02,649 --> 00:11:05,809 Pero todos son de alto nivel 200 00:11:05,809 --> 00:11:08,049 Tened en cuenta que 201 00:11:08,049 --> 00:11:09,769 Para escribir en pantalla 202 00:11:09,769 --> 00:11:10,129 Hola 203 00:11:10,129 --> 00:11:12,509 Un lenguaje de alto nivel 204 00:11:12,509 --> 00:11:13,850 Hago para hacer un ejemplo 205 00:11:13,850 --> 00:11:16,330 Pone el comando print 206 00:11:16,330 --> 00:11:19,129 Y luego entre paréntesis lo que quieres escribir 207 00:11:19,129 --> 00:11:21,009 Escribes print hola 208 00:11:21,009 --> 00:11:22,769 Ya está, has escrito hola en pantalla 209 00:11:22,769 --> 00:11:25,690 Pero en realidad el procesador esto no lo entiende 210 00:11:25,690 --> 00:11:28,250 En realidad necesitamos de alguien 211 00:11:28,250 --> 00:11:29,789 Que pilla este print hola 212 00:11:29,789 --> 00:11:31,389 Y lo transforma 213 00:11:31,389 --> 00:11:34,070 En lenguaje mágico 214 00:11:34,070 --> 00:11:35,129 ¿Sí? De alguna forma 215 00:11:35,129 --> 00:11:37,610 O en ensemblador y que luego haya un intérprete de ensemblador 216 00:11:37,610 --> 00:11:38,110 No lo sé 217 00:11:38,110 --> 00:11:42,070 Pero al fin y al cabo tiene que transformarse en una tira de ceros y unos 218 00:11:42,070 --> 00:11:43,490 Que el procesador pueda entender 219 00:11:43,490 --> 00:11:45,769 Que no será una sola operación 220 00:11:45,769 --> 00:11:47,090 Yo he escrito solo print hola 221 00:11:47,090 --> 00:11:48,649 Pero en realidad serán 222 00:11:48,649 --> 00:11:50,750 20 operaciones 223 00:11:50,750 --> 00:11:52,190 que tiene que hacer el procesador 224 00:11:52,190 --> 00:11:54,669 para pillar los datos que son 225 00:11:54,669 --> 00:11:56,590 H, O, L, A, ponerlos 226 00:11:56,590 --> 00:11:58,769 en una misma zona de memoria 227 00:11:58,769 --> 00:11:59,889 este punto acceder al 228 00:11:59,889 --> 00:12:02,250 monitor, decirle al monitor 229 00:12:02,250 --> 00:12:04,570 oye monitor, quiero que vaya a escribir esta cosa 230 00:12:04,570 --> 00:12:06,490 hablar con el driver del monitor para que 231 00:12:06,490 --> 00:12:08,590 active el monitor para que se escriba esta cosa 232 00:12:08,590 --> 00:12:09,889 y luego se escribirá 233 00:12:09,889 --> 00:12:12,470 hay un mogollón de procesos 234 00:12:12,470 --> 00:12:14,029 detrás, que yo no quiero ver 235 00:12:14,029 --> 00:12:16,929 porque yo soy un programador y por definición 236 00:12:16,929 --> 00:12:27,830 Bueno, soy perezoso y quiero hacer lo menos posible con máximo de, no sé, logro, con máximo de dinero, obtener lo máximo haciendo lo mismo. 237 00:12:27,990 --> 00:12:28,269 ¿Vale? ¿Sí? 238 00:12:29,750 --> 00:12:34,159 Pues bueno, programación de alto nivel imperativos, ¿vale? 239 00:12:34,639 --> 00:12:39,539 Entonces, en los lenguajes de alto nivel una instrucción engloba varias instrucciones máquinas. 240 00:12:39,659 --> 00:12:43,120 Lo que es decir, que tengo solo print, pero en realidad por debajo estoy haciendo muchas cosas. 241 00:12:43,120 --> 00:13:00,700 El concepto de abstraer es el concepto de pillar muchas operaciones comunes que se hacen mucho, como por ejemplo escribir en pantalla porque es la forma con que el ordenador comunica el resultado al usuario. 242 00:13:00,700 --> 00:13:12,980 Entonces escribir en pantalla se hace mucho. Pues como esta es una operación que se hace mucho, en vez de tener que escribir cada vez 20 líneas de código ensemblador para decir ahora escribí esto y ahora tengo que escribir otra cosa, otras veces las 20 líneas. 243 00:13:12,980 --> 00:13:20,299 Pues no, voy abstrayendo y me creo una abstracción, una palabra abstracta, una palabra, una función, ¿vale? 244 00:13:20,740 --> 00:13:25,860 Que me dice, cuando uso esta función, él sabrá que tiene que hacer todos los pasos que tiene que hacer, ¿vale? 245 00:13:26,039 --> 00:13:32,639 Y voy abstrayendo, voy haciendo cosas, programas más abstractos, usando palabras más abstractas, 246 00:13:32,860 --> 00:13:38,019 que luego se concretarán en ceros y unos, pero no lo voy a hacer yo, lo va a hacer alguien por mí. 247 00:13:38,419 --> 00:13:39,139 Veremos sobre qué. 248 00:13:40,080 --> 00:13:40,440 ¿Se entiende? 249 00:13:40,440 --> 00:13:47,000 Un lenguaje imperativo describe una secuencia de operaciones a realizar para obtener un resultado 250 00:13:47,000 --> 00:13:51,340 Cuando yo estoy con la programación imperativa 251 00:13:51,340 --> 00:13:55,179 Sostancialmente yo le estoy diciendo al ordenador que hace 252 00:13:55,179 --> 00:13:59,039 Hace esto, luego esto, luego esto, luego esto, luego esto 253 00:13:59,039 --> 00:14:04,039 Nosotros trabajaremos con esta principalmente 254 00:14:04,039 --> 00:14:08,220 Luego se cambiará un poquito y veremos algunos matices de estas de aquí 255 00:14:08,220 --> 00:14:12,120 Pero nuestra principal programación es esta de aquí 256 00:14:12,120 --> 00:14:14,159 Luego hay otros tipos de programación 257 00:14:14,159 --> 00:14:15,820 La declarativa y cosas por el estilo 258 00:14:15,820 --> 00:14:21,000 Que en vez enfocan de forma distinta lo que es programar 259 00:14:21,000 --> 00:14:22,700 Aquí yo le estoy diciendo al ordenador 260 00:14:22,700 --> 00:14:25,419 La secuencia de operaciones en la declarativa 261 00:14:25,419 --> 00:14:28,379 Es más bien, filosóficamente hablando 262 00:14:28,379 --> 00:14:35,159 Definir lo que quiero yo al final de mi proceso 263 00:14:35,159 --> 00:14:40,700 y que luego él, en cierto sentido, se busque la vida para encontrar las operaciones para llegar allí. 264 00:14:41,480 --> 00:14:50,059 Hay algunos campos de la informática en los que la programación imperativa funciona relativamente mal 265 00:14:50,059 --> 00:14:56,940 y es mejor otras cosas como la programación lógica, la programación funcional, la programación declarativa, 266 00:14:57,559 --> 00:15:03,659 que hace que los problemas que nos enfrentamos sean más fáciles de resolver con otro tipo de programación. 267 00:15:03,659 --> 00:15:07,019 Lo más común que usamos hoy en día en programación 268 00:15:07,019 --> 00:15:10,360 Es programación imperativa 269 00:15:10,360 --> 00:15:12,580 Voy describiendo las operaciones que tiene que hacer 270 00:15:12,580 --> 00:15:18,100 Dentro de este mundo 271 00:15:18,100 --> 00:15:20,779 Programación alto nivel imperativo 272 00:15:20,779 --> 00:15:23,860 Podemos encontrar varios lenguajes 273 00:15:23,860 --> 00:15:25,820 Que hacen cosas un poquito distintas 274 00:15:25,820 --> 00:15:28,320 Hay los lenguajes no estructurados 275 00:15:28,320 --> 00:15:29,519 Como el BASIC 276 00:15:29,519 --> 00:15:32,639 Aquí estamos en 1995 277 00:15:32,639 --> 00:15:39,659 Que es basado en la línea de código 278 00:15:39,659 --> 00:15:40,460 ¿Vale? 279 00:15:40,580 --> 00:15:43,519 O sea, el elemento importante 280 00:15:43,519 --> 00:15:45,460 De los programas escritos en BASIC 281 00:15:45,460 --> 00:15:46,700 Son las líneas de código 282 00:15:46,700 --> 00:15:49,059 De hecho, las líneas de código venían hasta numeradas 283 00:15:49,059 --> 00:15:50,480 Y tienen 284 00:15:50,480 --> 00:15:53,460 El maldito GOTU 285 00:15:53,460 --> 00:15:54,720 ¿Vale? 286 00:15:55,299 --> 00:15:57,320 Esto es un comando 287 00:15:57,320 --> 00:15:58,639 Que te permite 288 00:15:58,639 --> 00:16:01,259 Dentro de tu código 289 00:16:01,259 --> 00:16:03,320 de mil líneas 290 00:16:03,320 --> 00:16:05,700 saltar a una línea 291 00:16:05,700 --> 00:16:07,120 concreta que quieres tú 292 00:16:07,120 --> 00:16:08,580 go to línea 7 293 00:16:08,580 --> 00:16:10,940 tú estabas ejecutando 294 00:16:10,940 --> 00:16:13,159 llegas a este comando y saltas 295 00:16:13,159 --> 00:16:14,899 a la línea 7, sea o hace sea 296 00:16:14,899 --> 00:16:15,779 ¿vale? 297 00:16:16,240 --> 00:16:18,539 esto es la causa 298 00:16:18,539 --> 00:16:21,419 de por qué muchos de los 299 00:16:21,419 --> 00:16:23,019 proyectos 300 00:16:23,019 --> 00:16:25,279 de primeros años 90 301 00:16:25,279 --> 00:16:26,059 y cosas por el estilo 302 00:16:26,059 --> 00:16:28,240 al crecer se hundieron 303 00:16:28,240 --> 00:16:31,080 porque esta cosa 304 00:16:31,080 --> 00:16:33,240 De poder saltar donde te da la gana 305 00:16:33,240 --> 00:16:34,399 Y con el Goutou 306 00:16:34,399 --> 00:16:35,940 Hacía que el código 307 00:16:35,940 --> 00:16:37,340 Se volviera 308 00:16:37,340 --> 00:16:39,120 Inmantenible 309 00:16:39,120 --> 00:16:41,299 En el sentido que no era fácil 310 00:16:41,299 --> 00:16:44,299 Porque tú tenías un millón de líneas de código 311 00:16:44,299 --> 00:16:46,299 Y de repente tenías salto 312 00:16:46,299 --> 00:16:48,000 A zonas distintas del código 313 00:16:48,000 --> 00:16:49,940 Y cuando tenías que meter las manos allí 314 00:16:49,940 --> 00:16:52,320 Pues o eras el que lo ha escrito todo 315 00:16:52,320 --> 00:16:53,399 Y lo tenías en la cabeza 316 00:16:53,399 --> 00:16:55,899 Y entonces a lo mejor podías salir de allí 317 00:16:55,899 --> 00:16:58,700 Pero si es el que había hecho todo el programa 318 00:16:58,700 --> 00:16:59,779 Se había ido de la empresa 319 00:16:59,779 --> 00:17:01,899 Y ahora otro tenía que meter las manos allí 320 00:17:01,899 --> 00:17:03,139 Era imposible 321 00:17:03,139 --> 00:17:06,319 Lo que causaba que los proyectos se hundieran 322 00:17:06,319 --> 00:17:08,440 Y tuvieran que empezar desde cero 323 00:17:08,440 --> 00:17:10,759 Haciéndolo el mismo proyecto pero desde cero otra vez 324 00:17:10,759 --> 00:17:11,700 ¿Vale? 325 00:17:12,980 --> 00:17:14,059 Este problema 326 00:17:14,059 --> 00:17:14,700 ¿Vale? 327 00:17:14,819 --> 00:17:17,220 En basarse sobre línea de código 328 00:17:17,220 --> 00:17:20,420 Este malvado 329 00:17:20,420 --> 00:17:21,920 Butú 330 00:17:21,920 --> 00:17:24,180 Llevaron a una evolución 331 00:17:24,180 --> 00:17:25,299 De la informática 332 00:17:25,299 --> 00:17:28,039 Hacia los programas estructurados 333 00:17:28,039 --> 00:17:28,619 ¿Vale? 334 00:17:28,619 --> 00:17:32,579 Los programas estructurados en vez de basarse sobre línea de código 335 00:17:32,579 --> 00:17:35,500 Se basan sobre funciones y módulos 336 00:17:35,500 --> 00:17:41,319 O sea, yo empaqueto un conjunto de líneas de código 337 00:17:41,319 --> 00:17:51,359 En un ente, en algo que llamaré función o módulo 338 00:17:51,359 --> 00:17:53,819 Al que luego le doy un nombre 339 00:17:53,819 --> 00:17:58,440 Y cuando quiero ejecutar esas líneas de código 340 00:17:58,440 --> 00:18:00,420 Llamo a esa función ese nombre 341 00:18:00,420 --> 00:18:02,480 en vez de tener que escribir otra vez 342 00:18:02,480 --> 00:18:03,859 esa línea de código 343 00:18:03,859 --> 00:18:05,920 y eso es muy bueno 344 00:18:05,920 --> 00:18:08,579 es muy bueno porque me organiza el código 345 00:18:08,579 --> 00:18:10,420 y es muy bueno porque me permite 346 00:18:10,420 --> 00:18:11,700 reutilizar el código 347 00:18:11,700 --> 00:18:13,559 entonces cuando yo hago 348 00:18:13,559 --> 00:18:15,779 una serie de operaciones 349 00:18:15,779 --> 00:18:18,579 bla bla bla que me escriben en pantalla 350 00:18:18,579 --> 00:18:20,720 el DNI de un usuario 351 00:18:20,720 --> 00:18:22,700 que le he pasado por parámetro 352 00:18:22,700 --> 00:18:24,339 pues todo esto 353 00:18:24,339 --> 00:18:26,319 lo incrusto en la función 354 00:18:26,319 --> 00:18:27,660 lo llamo 355 00:18:27,660 --> 00:18:30,000 imprime usuario 356 00:18:30,000 --> 00:18:33,039 Y ahora cada vez que quiero imprimir un usuario 357 00:18:33,039 --> 00:18:34,720 Tengo la función imprimusuario 358 00:18:34,720 --> 00:18:36,380 Al que le paso un código 359 00:18:36,380 --> 00:18:38,119 Que es el código identificador del usuario 360 00:18:38,119 --> 00:18:40,859 Y él en automático me escribe toda la información de ese usuario 361 00:18:40,859 --> 00:18:43,000 Y si de repente 362 00:18:43,000 --> 00:18:44,859 Esa misma función la quiero usar 363 00:18:44,859 --> 00:18:47,440 En otro proyecto porque los usuarios son los mismos 364 00:18:47,440 --> 00:18:49,119 Pues simplemente me copio 365 00:18:49,119 --> 00:18:50,759 Esa función y ya la tengo 366 00:18:50,759 --> 00:18:53,630 ¿Entendéis? 367 00:18:57,559 --> 00:19:00,000 C o Pascal 368 00:19:00,000 --> 00:19:01,859 Son típicos 369 00:19:01,859 --> 00:19:03,740 Ejemplos de programas 370 00:19:03,740 --> 00:19:05,279 que usan 371 00:19:05,279 --> 00:19:06,960 funciones inmóviles 372 00:19:06,960 --> 00:19:08,519 hoy en día 373 00:19:08,519 --> 00:19:11,039 esto no se suele usar 374 00:19:11,039 --> 00:19:14,019 C a veces sale por ahí 375 00:19:14,019 --> 00:19:15,380 o en 376 00:19:15,380 --> 00:19:16,880 proyectos legacy 377 00:19:16,880 --> 00:19:18,640 proyectos que vienen desde 378 00:19:18,640 --> 00:19:21,279 no se sabe cuándo y que nadie se atreve 379 00:19:21,279 --> 00:19:23,500 de destruir porque si no 380 00:19:23,500 --> 00:19:24,920 la empresa se hunde 381 00:19:24,920 --> 00:19:27,799 o si yo estoy buscando 382 00:19:27,799 --> 00:19:29,599 un nivel 383 00:19:29,599 --> 00:19:31,799 de eficiencia 384 00:19:31,799 --> 00:19:42,420 Eficiencia X, un cierto nivel de eficiencia, y quedarme más cercano a la baja, al bajo nivel, ¿vale? 385 00:19:42,420 --> 00:19:47,700 Me da una ventaja con respecto a irme todavía más alto nivel, ¿vale? 386 00:19:48,119 --> 00:19:51,680 Pero es raro, C hoy en día se usa poco, ¿vale? 387 00:19:52,119 --> 00:19:58,660 Lo que se suele utilizar bastante comúnmente hoy en día es la orientación a objetos, que es la evolución de lo estructural. 388 00:19:59,420 --> 00:20:00,259 ¿Qué quiere decir eso? 389 00:20:00,259 --> 00:20:02,720 Pues habíamos pillado las funciones 390 00:20:02,720 --> 00:20:04,160 Y habían creado estas funciones 391 00:20:04,160 --> 00:20:05,740 Diciendo, oye, trozos de código 392 00:20:05,740 --> 00:20:07,240 Lo pongo en la función y le doy un nombre 393 00:20:07,240 --> 00:20:10,480 Pues ahora voy a crear objetos 394 00:20:10,480 --> 00:20:11,640 ¿Qué son objetos? 395 00:20:12,119 --> 00:20:14,519 Un objeto es la modelización 396 00:20:14,519 --> 00:20:16,799 De un concepto 397 00:20:16,799 --> 00:20:18,339 Dentro de mi programa 398 00:20:18,339 --> 00:20:19,740 Dentro de mi sistema 399 00:20:19,740 --> 00:20:21,779 Yo estoy haciendo una escuela 400 00:20:21,779 --> 00:20:22,579 ¿Vale? 401 00:20:23,099 --> 00:20:26,039 Quiero utilizar dentro de la escuela 402 00:20:26,039 --> 00:20:26,920 Los alumnos 403 00:20:26,920 --> 00:20:30,079 Para luego matricularlos en materias 404 00:20:30,079 --> 00:20:35,740 para luego darles notas, para luego mandarle un mensaje, no lo sé, pero tengo el concepto de alumno. 405 00:20:36,720 --> 00:20:43,799 Entonces voy a mirar en mi sistema cuáles son las características principales de este alumno, 406 00:20:44,539 --> 00:20:50,039 su nombre, su apellido, el DNI, el número de identificación de alumno, la dirección donde vive, 407 00:20:50,420 --> 00:20:53,519 las notas que pilla a lo largo del curso, no lo sé. 408 00:20:53,519 --> 00:20:59,960 Lo que a mí me interesa es que sistemas distintos podrían tener una modelización de alumno distinta. 409 00:21:00,079 --> 00:21:09,880 El sistema para secretaría, a lo mejor no le interesan las notas, hago para decir, mientras el sistema para los profesores, las notas sí que le interesan mucho. 410 00:21:12,299 --> 00:21:23,039 Entonces, una vez que yo he creado este objeto y sé sus características, le añado también su comportamiento, lo que puede hacer este objeto. 411 00:21:23,039 --> 00:21:27,460 Por ejemplo, un objeto alumno puede presentarse 412 00:21:27,460 --> 00:21:30,980 Entonces tendrá la función presentarse 413 00:21:30,980 --> 00:21:33,500 Que dirá, hola, me llamo, pilla mi nombre 414 00:21:33,500 --> 00:21:36,299 Mi apellido es, pilla mi apellido 415 00:21:36,299 --> 00:21:40,420 Y tengo de media, pilla todas tus notas, calcula la media y escriba 416 00:21:40,420 --> 00:21:44,160 Y luego tendrá otra función 417 00:21:44,160 --> 00:21:46,880 Como por ejemplo, matricularme asignatura 418 00:21:46,880 --> 00:21:49,799 Que pilla como parámetro una asignatura 419 00:21:49,799 --> 00:21:52,539 Y matricula a este alumno 420 00:21:52,539 --> 00:21:53,839 A esta asignatura 421 00:21:53,839 --> 00:21:59,180 Ahora, todas las características del objeto 422 00:21:59,180 --> 00:22:02,259 Y todas las funciones y comportamientos 423 00:22:02,259 --> 00:22:03,240 De este objeto 424 00:22:03,240 --> 00:22:06,220 Se empaquetan en un objeto 425 00:22:06,220 --> 00:22:07,759 En lo que viene a llamarse un objeto 426 00:22:07,759 --> 00:22:11,339 Antes yo me basaba en las funciones 427 00:22:11,339 --> 00:22:13,220 Entonces si tenía dos funciones 428 00:22:13,220 --> 00:22:15,079 La de matricularse y la de presentarse 429 00:22:15,079 --> 00:22:16,640 Eran dos funciones distintas 430 00:22:16,640 --> 00:22:18,259 Desvincularlas entre ellas 431 00:22:18,259 --> 00:22:28,339 Pues ahora creo una única entidad que engloba las características de esa entidad y lo que puede hacer esa entidad. 432 00:22:28,759 --> 00:22:32,480 Y todo está en un único paquete, en un único objeto. 433 00:22:34,579 --> 00:22:37,180 Pues esto es como se programa hoy en día. 434 00:22:38,319 --> 00:22:40,299 Y es lo que veremos a partir del segundo río. 435 00:22:40,299 --> 00:22:45,200 Antes nosotros trabajaremos 436 00:22:45,200 --> 00:22:47,480 Imperativo estructurado 437 00:22:47,480 --> 00:22:48,920 Que es como la base 438 00:22:48,920 --> 00:22:50,640 Es lo más facilito 439 00:22:50,640 --> 00:22:54,079 No nos meteremos en las cosas avanzadas 440 00:22:54,079 --> 00:22:55,279 De orientación a objetos 441 00:22:55,279 --> 00:22:57,740 Cuando luego sabremos hacer 442 00:22:57,740 --> 00:22:59,400 Pequeñas funciones 443 00:22:59,400 --> 00:23:00,519 Pequeños algoritmos 444 00:23:00,519 --> 00:23:02,200 Pequeños ejercicios 445 00:23:02,200 --> 00:23:03,200 Que hacemos aquí en clase 446 00:23:03,200 --> 00:23:05,559 Dominamos el if, el while, el switch 447 00:23:05,559 --> 00:23:08,720 El for, cosillas por el estilo 448 00:23:08,720 --> 00:23:10,180 A este punto diremos 449 00:23:10,180 --> 00:23:12,819 Ahora hagamos un paso más adelante 450 00:23:12,819 --> 00:23:14,859 Vamos al mundo de los objetos 451 00:23:14,859 --> 00:23:16,819 Y veremos cómo se usan los objetos 452 00:23:16,819 --> 00:23:18,400 Y las potencialidades que tienen 453 00:23:18,400 --> 00:23:20,599 Si os acordáis todos los superpoderes 454 00:23:20,599 --> 00:23:21,640 Del que hablamos ayer 455 00:23:21,640 --> 00:23:23,339 De las cosas avanzadas 456 00:23:23,339 --> 00:23:24,680 Pues todas las cosas avanzadas 457 00:23:24,680 --> 00:23:27,660 Surgen a raíz del concepto de objeto 458 00:23:27,660 --> 00:23:29,839 Cuando yo tengo los objetos 459 00:23:29,839 --> 00:23:31,619 Entonces puedo hacer que un objeto 460 00:23:31,619 --> 00:23:32,720 Herede de otro objeto 461 00:23:32,720 --> 00:23:34,359 Que haya el alumno 462 00:23:34,359 --> 00:23:36,880 Pero un alumno es una persona 463 00:23:36,880 --> 00:23:38,519 Entonces yo puedo crearme 464 00:23:38,519 --> 00:23:40,980 Un objeto persona 465 00:23:40,980 --> 00:23:43,700 Que a lo mejor tiene mucho del alumno 466 00:23:43,700 --> 00:23:45,059 Pero no todo del alumno 467 00:23:45,059 --> 00:23:46,400 Una persona no tiene notas 468 00:23:46,400 --> 00:23:49,440 No tiene materia a la que está matriculado 469 00:23:49,440 --> 00:23:51,539 Pero sí tiene nombre, apellido, DNI 470 00:23:51,539 --> 00:23:53,839 Y a este punto con esta persona 471 00:23:53,839 --> 00:23:55,500 Me puedo crear por un lado el alumno 472 00:23:55,500 --> 00:23:57,680 Añadiéndole que también tiene notas 473 00:23:57,680 --> 00:23:59,740 Y también desde persona me puedo decir 474 00:23:59,740 --> 00:24:01,400 Pero también existe profesor 475 00:24:01,400 --> 00:24:04,019 Que tendrá, será siempre una persona 476 00:24:04,019 --> 00:24:05,980 Pero con características distintas 477 00:24:05,980 --> 00:24:07,259 Y esto se llama herencia 478 00:24:07,259 --> 00:24:10,720 Y un montón de otras cosas así 479 00:24:10,720 --> 00:24:12,839 Que surgen a raíz de esto 480 00:24:12,839 --> 00:24:14,839 ¿Qué programas, qué lenguaje de programación 481 00:24:14,839 --> 00:24:16,200 Son orientados a objetos? 482 00:24:16,759 --> 00:24:17,099 Java 483 00:24:17,099 --> 00:24:23,099 C++ 484 00:24:23,099 --> 00:24:26,500 C Sharp 485 00:24:26,500 --> 00:24:28,619 Python 486 00:24:28,619 --> 00:24:30,059 Y muchos otros 487 00:24:30,059 --> 00:24:33,180 Estos son cuatro de los que 488 00:24:33,180 --> 00:24:35,500 Que más son comunes 489 00:24:35,500 --> 00:24:36,980 Y que giran por aquí 490 00:24:36,980 --> 00:24:38,160 por el instituto, ¿vale? 491 00:24:38,839 --> 00:24:40,299 C++ creo que hoy 492 00:24:40,299 --> 00:24:41,980 no lo usa nadie, ¿vale? 493 00:24:42,099 --> 00:24:45,059 En el instituto digo, pero Java, C Sharp 494 00:24:45,059 --> 00:24:47,079 y Python sí que hay asignaturas que se dan 495 00:24:47,079 --> 00:24:48,059 en estas asignaturas. 496 00:24:49,119 --> 00:24:50,599 Aquí creo que principalmente 497 00:24:50,599 --> 00:24:52,299 Java y C Sharp, por ahí. 498 00:24:53,880 --> 00:24:54,839 C Sharp 499 00:24:54,839 --> 00:24:55,380 es el próximo juego. 500 00:24:56,000 --> 00:24:58,980 Y, nota, pues, C Sharp 501 00:24:58,980 --> 00:25:01,079 es C++ 502 00:25:01,079 --> 00:25:03,279 más más, si no lo sabéis. 503 00:25:03,920 --> 00:25:05,079 ¿Veis que aquí son cuatro más? 504 00:25:05,079 --> 00:25:15,829 El lenguaje estructurado ya no se usa 505 00:25:15,829 --> 00:25:16,990 Pero se usa 506 00:25:16,990 --> 00:25:20,250 Porque todo lo que hacemos dentro de los objetos 507 00:25:20,250 --> 00:25:21,569 Es lenguaje estructurado 508 00:25:21,569 --> 00:25:25,150 Entonces si no sabes programar estructurado 509 00:25:25,150 --> 00:25:26,329 No sabes programar 510 00:25:26,329 --> 00:25:26,750 No puedes 511 00:25:26,750 --> 00:25:27,789 ¿Vale? 512 00:25:28,410 --> 00:25:30,089 Y si sabes programar objetos 513 00:25:30,089 --> 00:25:31,309 Sabes programar estructurado 514 00:25:31,309 --> 00:25:34,549 Entonces hoy en día no se suele trabajar 515 00:25:34,549 --> 00:25:36,390 Teniendo en mente esto 516 00:25:36,390 --> 00:25:39,109 Se suele trabajar teniendo en mente objetos 517 00:25:39,109 --> 00:25:48,680 Lo digo por la practicidad 518 00:25:48,680 --> 00:25:50,180 Incluso a objetos 519 00:25:50,180 --> 00:25:52,319 pero de hecho nosotros programaremos 520 00:25:52,319 --> 00:25:54,200 objetos, nosotros empezamos con Java 521 00:25:54,200 --> 00:25:56,059 no empezó con C, cosa de cuestión 522 00:25:56,059 --> 00:25:57,920 nosotros trabajamos Java, pero 523 00:25:57,920 --> 00:26:00,299 a votar el primer día 524 00:26:00,299 --> 00:26:01,839 todo lo que implica 525 00:26:01,839 --> 00:26:03,900 la orientación a objetos y cosas por el estilo 526 00:26:03,900 --> 00:26:06,319 es muy complejo, entonces nosotros vamos paso por paso 527 00:26:06,319 --> 00:26:07,640 y no es que yo os diré 528 00:26:07,640 --> 00:26:09,779 mira, ahora estáis programando así 529 00:26:09,779 --> 00:26:11,539 estamos programando siempre en Java 530 00:26:11,539 --> 00:26:14,160 y solo que los primeros ejercicios 531 00:26:14,160 --> 00:26:16,500 que tú haces, más que orientados 532 00:26:16,500 --> 00:26:18,079 a objetos, serán 533 00:26:18,079 --> 00:26:19,539 de programación estructurada 534 00:26:19,539 --> 00:26:21,279 Mientras vas aprendiendo 535 00:26:21,279 --> 00:26:23,539 En cuanto sepamos hacer 536 00:26:23,539 --> 00:26:24,619 Una función 537 00:26:24,619 --> 00:26:27,079 En un módulo, porque al fin y al cabo 538 00:26:27,079 --> 00:26:29,960 Un objeto dentro tiene funciones 539 00:26:29,960 --> 00:26:31,019 Los comportamientos 540 00:26:31,019 --> 00:26:32,680 Si no sabes hacer una función, ¿qué haces? 541 00:26:33,720 --> 00:26:35,799 Entonces, en cuanto sepamos hacer 542 00:26:35,799 --> 00:26:36,900 Funciones sin módulos 543 00:26:36,900 --> 00:26:39,480 Pues a este punto diré, vale, ahora los empaquetamos 544 00:26:39,480 --> 00:26:41,140 De esta forma, y de hecho habrá una clase 545 00:26:41,140 --> 00:26:43,339 En que diré, mirad, vosotros estabais ya 546 00:26:43,339 --> 00:26:44,799 Programando en objetos 547 00:26:44,799 --> 00:26:47,539 Desde el principio, porque esto, esto y esto 548 00:26:47,539 --> 00:26:49,140 Y ahora lo vamos a utilizar 549 00:26:49,140 --> 00:26:50,440 De forma más consciente 550 00:26:50,440 --> 00:26:52,019 ¿Sí? 551 00:26:53,640 --> 00:26:54,480 ¿Más dudas? 552 00:26:59,730 --> 00:27:00,029 Vale 553 00:27:00,029 --> 00:27:05,180 Lenguaje de programación de alto nivel 554 00:27:05,180 --> 00:27:06,619 Declarativos, ¿vale? 555 00:27:06,920 --> 00:27:07,779 Lo que decíamos antes 556 00:27:07,779 --> 00:27:09,759 Entonces existe otro mundo 557 00:27:09,759 --> 00:27:13,539 Que no es el imperativo 558 00:27:13,539 --> 00:27:14,940 Recuerdo que el imperativo es 559 00:27:14,940 --> 00:27:16,839 Haz esto, luego esto, luego esto 560 00:27:16,839 --> 00:27:18,859 Y yo digo al ordenador la secuencia 561 00:27:18,859 --> 00:27:19,539 De programas 562 00:27:19,539 --> 00:27:22,900 De pasos, de instrucciones 563 00:27:22,900 --> 00:27:23,559 Que tiene que hacer 564 00:27:23,559 --> 00:27:25,380 Pues en el mundo declarativo 565 00:27:25,380 --> 00:27:28,680 Se describe el resultado deseado 566 00:27:28,680 --> 00:27:29,200 ¿Vale? 567 00:27:29,259 --> 00:27:31,480 No como se logra 568 00:27:31,480 --> 00:27:34,240 Los pasos para llegar a ese resultado 569 00:27:34,240 --> 00:27:35,500 Sino en cierto sentido 570 00:27:35,500 --> 00:27:36,960 Tú das una serie de vínculos 571 00:27:36,960 --> 00:27:39,200 Para decir el programa 572 00:27:39,200 --> 00:27:41,019 Al final me tiene que dar un resultado 573 00:27:41,019 --> 00:27:42,279 Con estas características 574 00:27:42,279 --> 00:27:43,000 De esta forma 575 00:27:43,000 --> 00:27:44,619 Esto es lo que tienes que alcanzar 576 00:27:44,619 --> 00:27:45,420 ¿Vale? 577 00:27:45,779 --> 00:27:48,279 Normalmente definido con funciones 578 00:27:48,279 --> 00:27:51,000 Funciones o matemáticas o lógicas 579 00:27:51,000 --> 00:27:51,779 ¿Vale? 580 00:27:52,640 --> 00:27:53,039 Entonces 581 00:27:53,039 --> 00:27:55,140 Aquí hay unos cuantos 582 00:27:55,140 --> 00:27:59,019 Lenguajes 583 00:27:59,019 --> 00:28:01,200 Que funcionan más o menos así 584 00:28:01,200 --> 00:28:03,440 Lisp es funcional 585 00:28:03,440 --> 00:28:05,319 Se basa en funciones matemáticas 586 00:28:05,319 --> 00:28:07,420 Prolog 587 00:28:07,420 --> 00:28:08,740 Es lógico 588 00:28:08,740 --> 00:28:12,000 Más bien que funciones matemáticas 589 00:28:12,000 --> 00:28:13,559 Está trabajando con una rama 590 00:28:13,559 --> 00:28:15,000 De la matemática que es la lógica 591 00:28:15,000 --> 00:28:17,380 Entonces hace teoremas 592 00:28:17,380 --> 00:28:19,819 Reglas básicas y a partir de reglas básicas 593 00:28:19,819 --> 00:28:21,839 Va componiendo para crear 594 00:28:21,839 --> 00:28:23,660 cosas más grandes 595 00:28:23,660 --> 00:28:25,680 en vez de programar con 596 00:28:25,680 --> 00:28:28,279 tú le das una serie de axiomas 597 00:28:28,279 --> 00:28:30,420 una serie de reglas básicas 598 00:28:30,420 --> 00:28:31,660 que puede utilizar 599 00:28:31,660 --> 00:28:34,299 y a partir de allí le dices, tienes que llegar aquí 600 00:28:34,299 --> 00:28:35,420 y él intentará 601 00:28:35,420 --> 00:28:38,259 componer estas reglas básicas 602 00:28:38,259 --> 00:28:39,039 para llegar allí 603 00:28:39,039 --> 00:28:42,460 y el que más entenderéis 604 00:28:42,460 --> 00:28:43,779 el que más cercano a vosotros 605 00:28:43,779 --> 00:28:46,039 y lo vais a estudiar, SQL 606 00:28:46,039 --> 00:28:48,299 SQL es 607 00:28:48,299 --> 00:28:50,380 el lenguaje con el que 608 00:28:50,380 --> 00:28:52,759 se hacen las peticiones 609 00:28:52,759 --> 00:28:53,759 a las bases de datos 610 00:28:53,759 --> 00:28:55,700 uno de los dos 611 00:28:55,700 --> 00:28:58,599 entonces si lo pensáis 612 00:28:58,599 --> 00:29:00,700 si alguien ha visto alguna vez 613 00:29:00,700 --> 00:29:01,180 un SQL 614 00:29:01,180 --> 00:29:04,059 cuando vosotros hacéis una query SQL 615 00:29:04,059 --> 00:29:06,559 lo que estáis definiendo es lo que queréis 616 00:29:06,559 --> 00:29:07,240 al final 617 00:29:07,240 --> 00:29:10,200 yo quiero todos los alumnos 618 00:29:10,200 --> 00:29:12,680 que tengan una nota media 619 00:29:12,680 --> 00:29:13,779 mayor que 5 620 00:29:13,779 --> 00:29:15,680 y que vivan en Madrid 621 00:29:15,680 --> 00:29:18,000 la escribes en SQL 622 00:29:18,000 --> 00:29:19,759 lo que estás definiendo no es 623 00:29:19,759 --> 00:29:21,539 Cómo llegar a ese resultado 624 00:29:21,539 --> 00:29:24,039 Tú estás definiendo lo que quieres al final 625 00:29:24,039 --> 00:29:26,500 Un listado de estos alumnos con estas características 626 00:29:26,500 --> 00:29:28,420 Estás definiendo el resultado 627 00:29:28,420 --> 00:29:31,180 Luego, cómo lo saca el programa SU 628 00:29:31,180 --> 00:29:34,420 ¿Sí? 629 00:29:34,839 --> 00:29:35,799 En un cierto sentido 630 00:29:35,799 --> 00:29:38,160 De esto no veremos prácticamente nada 631 00:29:38,160 --> 00:29:39,000 ¿Vale? 632 00:29:40,339 --> 00:29:42,599 Normalmente en empresas estándar 633 00:29:42,599 --> 00:29:44,619 De toda la vida 634 00:29:44,619 --> 00:29:47,240 Lo que se usa es la inferativa orientada a objeto 635 00:29:47,240 --> 00:29:49,500 Por eso nosotros es lo que vamos a estudiar 636 00:29:49,500 --> 00:29:52,700 En algunos nichos 637 00:29:52,700 --> 00:29:54,299 Más bien de investigación 638 00:29:54,299 --> 00:29:55,859 Que de uso real 639 00:29:55,859 --> 00:29:58,720 Pues salen estos señores de aquí 640 00:29:58,720 --> 00:30:00,099 Yo como anécdota 641 00:30:00,099 --> 00:30:02,259 Cuando estaba en la universidad 642 00:30:02,259 --> 00:30:03,960 En un 643 00:30:03,960 --> 00:30:06,799 En análisis de lenguaje natural 644 00:30:06,799 --> 00:30:07,700 Una cosa de ese estilo 645 00:30:07,700 --> 00:30:10,140 Nos dieron una tarea para hacer 646 00:30:10,140 --> 00:30:11,660 Pues yo me puse a hacerla en Java 647 00:30:11,660 --> 00:30:14,240 Me salió un programa que funcionaba 648 00:30:14,240 --> 00:30:15,539 De, bueno, no sé 649 00:30:15,539 --> 00:30:16,980 Mil líneas de código 650 00:30:16,980 --> 00:30:19,940 Pasaba tres tardes allí trabajando 651 00:30:19,940 --> 00:30:22,559 Y lo hacía junto con otra chica 652 00:30:22,559 --> 00:30:23,819 Que era extranjera 653 00:30:23,819 --> 00:30:24,660 No sé de dónde 654 00:30:24,660 --> 00:30:27,680 Entonces ella miró mi código 655 00:30:27,680 --> 00:30:28,859 Después cuando nos reunimos 656 00:30:28,859 --> 00:30:30,140 Dice, si está bien, funciona 657 00:30:30,140 --> 00:30:32,299 Pero yo creo que en Prologue se hace más fácil 658 00:30:32,299 --> 00:30:34,579 Se puso allí media hora 659 00:30:34,579 --> 00:30:37,279 Sacó un programa de 20 líneas 660 00:30:37,279 --> 00:30:39,680 Y funcionaba igual que el mío 661 00:30:39,680 --> 00:30:40,819 Hacía las mismas cosas 662 00:30:40,819 --> 00:30:43,880 Pero ella había hecho mil líneas de código 663 00:30:43,880 --> 00:30:45,039 Y tardaba tres días 664 00:30:45,039 --> 00:30:46,240 Y ella lo había hecho en 20 minutos 665 00:30:46,240 --> 00:30:49,519 Yo no he aprendido nunca 666 00:30:49,519 --> 00:30:50,480 Prologue Lisp 667 00:30:50,480 --> 00:30:52,859 Pero me ha quedado 668 00:30:52,859 --> 00:30:54,140 A lo mejor debe 669 00:30:54,140 --> 00:30:57,859 Ejemplos 670 00:30:57,859 --> 00:30:59,559 ¿Qué es esto? 671 00:30:59,559 --> 00:31:08,680 Esto es 672 00:31:08,680 --> 00:31:09,519 Ensamblador 673 00:31:09,519 --> 00:31:11,960 Lenguaje ensamblador 674 00:31:11,960 --> 00:31:14,079 Todos los programas 675 00:31:14,079 --> 00:31:15,660 Que os voy a enseñar ahora 676 00:31:15,660 --> 00:31:17,559 Hacen exactamente lo mismo 677 00:31:17,559 --> 00:31:20,180 Que es calcular la serie de Fibonacci 678 00:31:20,180 --> 00:31:22,259 ¿Sabéis que es la serie de Fibonacci? 679 00:31:22,259 --> 00:31:24,920 Es una serie de números 680 00:31:24,920 --> 00:31:27,400 Donde el siguiente número 681 00:31:27,400 --> 00:31:29,700 Es la suma de los dos anteriores 682 00:31:29,700 --> 00:31:31,579 Y empieza por 1, 1 683 00:31:31,579 --> 00:31:33,059 Entonces 1, 1 684 00:31:33,059 --> 00:31:35,119 El siguiente número es 1 más 1, 2 685 00:31:35,119 --> 00:31:37,319 El siguiente número es 2 más 1, 3 686 00:31:37,319 --> 00:31:39,460 El siguiente número es 3 más 2, 5 687 00:31:39,460 --> 00:31:41,720 El siguiente número es 5 más 3, 8 688 00:31:41,720 --> 00:31:43,619 Etcétera, etcétera 689 00:31:43,619 --> 00:31:45,400 ¿Sí? Esa es la serie de Fibonacci 690 00:31:45,400 --> 00:31:47,359 Pues esto es un programa 691 00:31:47,359 --> 00:31:49,259 Escrito de Ensemblador 692 00:31:49,259 --> 00:31:51,539 Que va pillando 693 00:31:51,539 --> 00:31:53,240 los datos que tiene que pillar 694 00:31:53,240 --> 00:31:55,099 los mueve en los registros 695 00:31:55,099 --> 00:31:56,980 porque aquí estamos hablando 696 00:31:56,980 --> 00:31:59,299 al procesador, estamos a un nivel 697 00:31:59,299 --> 00:32:01,079 muy muy bajo, no es 698 00:32:01,079 --> 00:32:02,579 el nivel de ceros y unos 699 00:32:02,579 --> 00:32:05,220 todavía esto ya es una extracción 700 00:32:05,220 --> 00:32:06,000 ¿vale? 701 00:32:07,019 --> 00:32:08,819 pero es un nivel muy bajo 702 00:32:08,819 --> 00:32:11,119 tan bajo que vosotros sabéis que 703 00:32:11,119 --> 00:32:13,559 en un ordenador hay distintos tipos de memoria 704 00:32:13,559 --> 00:32:14,440 hay el disco duro 705 00:32:14,440 --> 00:32:17,220 la memoria que cuando apagas y entiendes sigue allí 706 00:32:17,220 --> 00:32:18,380 hay la RAM 707 00:32:18,380 --> 00:32:20,579 mucho más rápida, mucho más cara 708 00:32:20,579 --> 00:32:23,240 pero que no consigue mantener la información 709 00:32:23,240 --> 00:32:24,680 cuando apagáis y encendéis 710 00:32:24,680 --> 00:32:27,000 y luego hay una serie de cachés 711 00:32:27,000 --> 00:32:28,680 cuando compráis un 712 00:32:28,680 --> 00:32:31,259 procesador que viene con cachés 713 00:32:31,259 --> 00:32:33,200 de nivel 3, de 4 714 00:32:33,200 --> 00:32:34,500 megabytes 715 00:32:34,500 --> 00:32:37,160 pues que son 716 00:32:37,160 --> 00:32:39,359 otras memorias siempre más 717 00:32:39,359 --> 00:32:41,359 pequeñas, siempre más rápidas 718 00:32:41,359 --> 00:32:42,660 y siempre más caras 719 00:32:42,660 --> 00:32:45,619 que están cuanto más cerca del procesador 720 00:32:45,619 --> 00:32:47,400 porque en vez 721 00:32:47,400 --> 00:32:49,420 de acceder siempre a la RAM 722 00:32:49,420 --> 00:32:50,380 o al disco duro 723 00:32:50,380 --> 00:32:51,579 Que sería una cosa lenta 724 00:32:51,579 --> 00:32:54,359 Lo que hace el procesador es copiarse un trozo 725 00:32:54,359 --> 00:32:56,799 Grande del programa 726 00:32:56,799 --> 00:32:58,559 Más cerca de él 727 00:32:58,559 --> 00:33:00,519 Y de este trozo otro trocito 728 00:33:00,519 --> 00:33:01,660 Más cerca todavía 729 00:33:01,660 --> 00:33:03,779 Y otro trocito más cerca todavía 730 00:33:03,779 --> 00:33:05,220 Los tres niveles de caché 731 00:33:05,220 --> 00:33:08,160 Y luego las operaciones 732 00:33:08,160 --> 00:33:09,599 Que está haciendo en un momento 733 00:33:09,599 --> 00:33:11,839 Lo hacen memorias muy pequeñitas 734 00:33:11,839 --> 00:33:13,039 Que se llaman registros 735 00:33:13,039 --> 00:33:15,299 Que son lo más rápido 736 00:33:15,299 --> 00:33:17,539 Lo más pequeño porque contienen 737 00:33:17,539 --> 00:33:19,539 32 bits o 64 bits 738 00:33:19,539 --> 00:33:22,480 Y que está 739 00:33:22,480 --> 00:33:24,480 Lo más caros 740 00:33:24,480 --> 00:33:26,299 Son absolutamente lo más caros 741 00:33:26,299 --> 00:33:29,200 Que están dentro del propio chip del procesador 742 00:33:29,200 --> 00:33:30,819 Y por lo tanto se pueden trabajar 743 00:33:30,819 --> 00:33:32,720 Se pueden utilizar muy rápidamente 744 00:33:32,720 --> 00:33:34,220 Si os fijáis 745 00:33:34,220 --> 00:33:36,880 Estos R están por registro 746 00:33:36,880 --> 00:33:37,539 O sea 747 00:33:37,539 --> 00:33:38,359 El 748 00:33:38,359 --> 00:33:41,559 El ensemblador 749 00:33:41,559 --> 00:33:44,079 Está trabajando con los registros 750 00:33:44,079 --> 00:33:45,839 Del propio procesador 751 00:33:45,839 --> 00:33:47,740 Entonces dependiendo de cuantos registros 752 00:33:47,740 --> 00:33:49,859 que en el procesador, esto puede cambiar 753 00:33:49,859 --> 00:33:51,059 si yo tengo 754 00:33:51,059 --> 00:33:53,519 un procesador con 755 00:33:53,519 --> 00:33:55,559 64 registros y uso 756 00:33:55,559 --> 00:33:57,559 el registro 65, no me va a funcionar 757 00:33:57,559 --> 00:33:59,279 entonces 758 00:33:59,279 --> 00:34:01,920 los programas, estos tipos de programas 759 00:34:01,920 --> 00:34:03,599 dependen del tipo de 760 00:34:03,599 --> 00:34:04,859 procesador que tengáis 761 00:34:04,859 --> 00:34:07,759 y hace todos estos pasos 762 00:34:07,759 --> 00:34:08,940 de aquí, sigue aquí 763 00:34:08,940 --> 00:34:11,480 todo esto es 764 00:34:11,480 --> 00:34:13,139 sustancialmente comentado 765 00:34:13,139 --> 00:34:15,019 para que pueda 766 00:34:15,019 --> 00:34:17,380 calcular el 767 00:34:17,380 --> 00:34:19,280 número n de la 768 00:34:19,280 --> 00:34:20,760 secuencia de Fibonacci 769 00:34:20,760 --> 00:34:23,099 yo digo, calculan el cuarto número 770 00:34:23,099 --> 00:34:24,980 el número 4 de la secuencia de Fibonacci 771 00:34:24,980 --> 00:34:26,860 y calculará que es 772 00:34:26,860 --> 00:34:28,519 1, 1, 2, 3 773 00:34:28,519 --> 00:34:30,119 y me dirás, es el 3 774 00:34:30,119 --> 00:34:37,659 entonces, esto es 775 00:34:37,659 --> 00:34:38,420 semblador 776 00:34:38,420 --> 00:34:40,159 esto es C 777 00:34:40,159 --> 00:34:47,780 aquí ya estamos a alto nivel 778 00:34:47,780 --> 00:34:48,860 ¿vale? 779 00:34:49,239 --> 00:34:50,460 hemos dado un salto 780 00:34:50,460 --> 00:34:53,619 no es lenguaje máquina 781 00:34:53,619 --> 00:34:55,599 ceros y unos, no es en semblador 782 00:34:55,599 --> 00:34:57,599 ahora estamos a C 783 00:34:57,599 --> 00:35:04,050 en Java esto no está 784 00:35:04,050 --> 00:35:06,989 esto no está en Java 785 00:35:06,989 --> 00:35:09,789 en Java existe en .auto.println 786 00:35:09,789 --> 00:35:10,869 en .println 787 00:35:10,869 --> 00:35:14,030 lo puedes programar tú 788 00:35:14,030 --> 00:35:15,230 o que alguien lo haya programado 789 00:35:15,230 --> 00:35:17,309 pero en el Java oficial 790 00:35:17,309 --> 00:35:18,210 esto no está 791 00:35:18,210 --> 00:35:19,949 que luego la gente lo programa 792 00:35:19,949 --> 00:35:21,429 pero lo puedes hacer tú 793 00:35:21,429 --> 00:35:25,389 y scanf 794 00:35:25,389 --> 00:35:33,019 se puede 795 00:35:33,019 --> 00:35:36,099 pero por ejemplo hay características de esto 796 00:35:36,099 --> 00:35:37,199 que Java no tiene. 797 00:35:37,519 --> 00:35:39,739 Ahora hablaremos de eso. 798 00:35:40,480 --> 00:35:48,579 No es Java, era Ensemblado. 799 00:35:48,840 --> 00:35:49,960 Son lenguajes distintos. 800 00:35:50,380 --> 00:35:52,500 Es un lenguaje casi 801 00:35:52,500 --> 00:35:53,980 lo más bajo nivel que puede. 802 00:35:55,559 --> 00:35:56,019 Es lo mismo. 803 00:35:56,460 --> 00:35:58,599 Es buscar el elemento 804 00:35:58,599 --> 00:35:59,840 N de la serie Fibonacci. 805 00:36:02,500 --> 00:36:03,139 Ensemblado. 806 00:36:03,840 --> 00:36:04,599 Se llama Ensemblado. 807 00:36:07,159 --> 00:36:07,840 Ensembler. 808 00:36:17,389 --> 00:36:18,769 Lenguaje marca no es un lenguaje 809 00:36:18,769 --> 00:36:19,309 de programación. 810 00:36:19,309 --> 00:36:21,929 ¿Es un lenguaje único o hay...? 811 00:36:21,929 --> 00:36:26,690 El ensemblador es que es dependiente del procesador. 812 00:36:27,070 --> 00:36:30,989 Entonces, la idea es común, pero hay funciones en el ensemblador 813 00:36:30,989 --> 00:36:36,289 que algunos procesadores pueden ejecutar y que algunos otros no. 814 00:36:37,130 --> 00:36:42,710 Entonces, si tú quieres programar en eso, deberías irte a ver qué procesador tienes 815 00:36:42,710 --> 00:36:47,690 y qué tipo de ensemblador tienes y cuáles son los comandos admitidos en ese ensemblador. 816 00:36:47,690 --> 00:36:56,090 ¿Por qué no se enseña directamente C y luego Java? 817 00:36:56,489 --> 00:36:58,469 Primero porque C no es orientado a objetos 818 00:36:58,469 --> 00:37:01,489 Y nosotros queremos aprender los orientados a objetos 819 00:37:01,489 --> 00:37:01,690 ¿Vale? 820 00:37:01,949 --> 00:37:05,489 Y segundo, C tiene un problema muy serio 821 00:37:05,489 --> 00:37:08,690 Que tiene también C++, por ejemplo 822 00:37:08,690 --> 00:37:12,190 Que es que la memoria que utiliza tu programa 823 00:37:12,190 --> 00:37:13,690 La tienes que gestionar tú 824 00:37:13,690 --> 00:37:15,110 ¿Vale? 825 00:37:15,429 --> 00:37:18,190 Cuando tú creas una variable, cuando tú creas un array 826 00:37:18,190 --> 00:37:21,130 Cuando tú creas algo que almacene algo 827 00:37:21,130 --> 00:37:23,570 Tú tienes que decirle al programa 828 00:37:23,570 --> 00:37:26,670 Aloca una cierta cantidad de memoria 829 00:37:26,670 --> 00:37:28,309 Para que yo pueda escribir aquí 830 00:37:28,309 --> 00:37:31,570 Y cuando no la usas más 831 00:37:31,570 --> 00:37:32,869 La tienes que deshacer 832 00:37:32,869 --> 00:37:34,849 Y eso es un infierno 833 00:37:34,849 --> 00:37:44,449 Un paso antes 834 00:37:44,449 --> 00:37:48,429 Antes de poder decir que este lado de este cuadrado vale 3 835 00:37:48,429 --> 00:37:50,130 Tengo que decirle 836 00:37:50,130 --> 00:37:53,469 Oye, sistema, reserva un trozo de RAM 837 00:37:53,469 --> 00:37:55,929 4 bytes de RAM 838 00:37:55,929 --> 00:37:57,429 porque aquí dentro 839 00:37:57,429 --> 00:37:59,630 yo voy a escribir el número 3 840 00:37:59,630 --> 00:38:02,190 que luego me representará el lado del triángulo 841 00:38:02,190 --> 00:38:07,380 cada valor que tú creas 842 00:38:07,380 --> 00:38:10,579 entonces esto es una cosa que se hacía 843 00:38:10,579 --> 00:38:12,199 yo he programado en C 844 00:38:12,199 --> 00:38:15,570 en la universidad 845 00:38:15,570 --> 00:38:17,750 y todavía por la noche me despierto 846 00:38:17,750 --> 00:38:18,949 sudando 847 00:38:18,949 --> 00:38:21,750 a la frase 848 00:38:21,750 --> 00:38:23,150 segmentation fault 849 00:38:23,150 --> 00:38:25,829 porque cuando te equivocas 850 00:38:25,829 --> 00:38:27,989 En C lo que te dice es 851 00:38:27,989 --> 00:38:28,969 Segmentation for 852 00:38:28,969 --> 00:38:30,769 No te dice dónde te has equivocado 853 00:38:30,769 --> 00:38:33,809 Te dice segmentation for 854 00:38:33,809 --> 00:38:36,949 Y tú a buscar en las 2000 líneas de código 855 00:38:36,949 --> 00:38:39,250 Dónde no has alocado bien la memoria 856 00:38:39,250 --> 00:38:40,250 Donde habías dicho 857 00:38:40,250 --> 00:38:41,610 Reservo 4 bytes 858 00:38:41,610 --> 00:38:43,329 Pero lo has escrito 5 859 00:38:43,329 --> 00:38:52,690 Al máximo 860 00:38:52,690 --> 00:38:55,030 Si te hubiésemos tocado algo 861 00:38:55,030 --> 00:38:56,250 No en esta asignatura 862 00:38:56,250 --> 00:38:57,889 O C++ 863 00:38:57,889 --> 00:38:59,170 Que es orientada a objetos 864 00:38:59,170 --> 00:39:00,389 O C sharp 865 00:39:00,389 --> 00:39:01,869 Que es la evolución 866 00:39:01,869 --> 00:39:09,050 Y de hecho C Sharp tiene una sintaxis prácticamente idéntica a Java 867 00:39:09,050 --> 00:39:13,369 Hay muchísimas cosas de C Sharp que son iguales a Java 868 00:39:13,369 --> 00:39:16,710 Próximo año, en segundo, veréis otros lenguajes de programación 869 00:39:16,710 --> 00:39:19,889 O de lenguaje de marcas o lenguaje de scripting 870 00:39:19,889 --> 00:39:23,309 Pero más o menos vamos por allí, no son exactamente equivalentes 871 00:39:23,309 --> 00:39:27,289 Pero por allí, como PHP, como JavaScript, lo de este año 872 00:39:27,289 --> 00:39:30,269 No sé si en segundo creo que también 873 00:39:30,269 --> 00:39:31,469 Se sharpa algo 874 00:39:31,469 --> 00:39:36,230 Toda forma, tened en cuenta que 875 00:39:36,230 --> 00:39:37,469 Ya que estamos, os lo digo 876 00:39:37,469 --> 00:39:40,510 El lenguaje que 877 00:39:40,510 --> 00:39:41,269 Que le dais 878 00:39:41,269 --> 00:39:43,090 No cuenta de nada 879 00:39:43,090 --> 00:39:44,789 En el sentido que 880 00:39:44,789 --> 00:39:47,690 El lenguaje que vais a utilizar 881 00:39:47,690 --> 00:39:50,630 Es Turing equivalente 882 00:39:50,630 --> 00:39:52,510 Es decir, todos los lenguajes 883 00:39:53,130 --> 00:39:54,690 Pueden llegar a hacer 884 00:39:54,690 --> 00:39:55,210 Lo mismo 885 00:39:55,210 --> 00:39:58,050 Entonces utilizar Java o utilizar C Sharp 886 00:39:58,050 --> 00:39:59,869 No es que te da una ventaja con respecto al otro 887 00:39:59,869 --> 00:40:01,150 Lo que tenéis que entender 888 00:40:01,150 --> 00:40:03,670 Es la filosofía que está por debajo 889 00:40:03,670 --> 00:40:05,130 Lo que se puede hacer 890 00:40:05,130 --> 00:40:07,730 Y hacer un algoritmo 891 00:40:07,730 --> 00:40:09,989 Y luego plasmarlo en un programa 892 00:40:09,989 --> 00:40:11,849 Esa es la parte 893 00:40:11,849 --> 00:40:12,670 Un poco importante 894 00:40:12,670 --> 00:40:15,650 Luego la sintaxis, el cómo se escriben las cosas 895 00:40:15,650 --> 00:40:17,949 Las palabras que podéis utilizar 896 00:40:17,949 --> 00:40:19,869 Si tenéis que utilizar printf 897 00:40:19,869 --> 00:40:21,250 O println 898 00:40:21,250 --> 00:40:22,969 Si tenéis que utilizar scanf 899 00:40:22,969 --> 00:40:25,230 O readint o nextint 900 00:40:25,230 --> 00:40:26,130 O cosas por el estilo 901 00:40:26,130 --> 00:40:28,469 Esa es una cosa que se aprende en dos semanas de trabajo 902 00:40:28,469 --> 00:40:31,230 Cambiar de un lenguaje a otro 903 00:40:31,230 --> 00:40:32,530 No es tremendo 904 00:40:32,530 --> 00:40:34,750 Lo que es difícil es programar 905 00:40:34,750 --> 00:40:36,210 Si sabes programar en Java 906 00:40:36,210 --> 00:40:37,690 Puedes tardar un mes 907 00:40:37,690 --> 00:40:40,329 Y luego sabrás tardar también en C++ 908 00:40:40,329 --> 00:40:41,409 O en C Sharp 909 00:40:41,409 --> 00:40:44,849 Con algunas pequeñeces 910 00:40:44,849 --> 00:40:47,170 Como esta de la gestión de memoria 911 00:40:47,170 --> 00:40:48,550 En C++ 912 00:40:48,550 --> 00:40:49,769 Si se necesita 913 00:40:49,769 --> 00:40:52,150 T, C++, se necesita gestionar 914 00:40:52,150 --> 00:40:53,429 La memoria uno mismo 915 00:40:53,429 --> 00:40:55,489 Mientras en Java, por ejemplo 916 00:40:55,489 --> 00:40:57,949 Y en C Sharp 917 00:40:57,949 --> 00:40:59,590 Pues la memoria ya 918 00:40:59,590 --> 00:41:01,429 Alguien más la gestiona 919 00:41:01,429 --> 00:41:04,070 Entonces yo simplemente le digo, quiero escribir un entero 920 00:41:04,070 --> 00:41:05,590 Y luego alguien 921 00:41:05,590 --> 00:41:08,150 Mágicamente me reserva el espacio justo para un entero 922 00:41:08,150 --> 00:41:09,789 ¿Por qué vemos Java 923 00:41:09,789 --> 00:41:10,889 En vez de C++? 924 00:41:11,269 --> 00:41:12,190 Porque es más fácil 925 00:41:12,190 --> 00:41:15,269 Me centro en la programación 926 00:41:15,269 --> 00:41:17,710 De algoritmo 927 00:41:17,710 --> 00:41:19,289 Sin tener que 928 00:41:19,289 --> 00:41:21,030 pelearme con 929 00:41:21,030 --> 00:41:22,750 la parte de 930 00:41:22,750 --> 00:41:25,230 memoria, etc. ¿Y por qué entonces 931 00:41:25,230 --> 00:41:26,309 sigue existiendo C++? 932 00:41:27,769 --> 00:41:29,150 Porque si yo 933 00:41:29,150 --> 00:41:31,210 tengo control directo sobre la 934 00:41:31,210 --> 00:41:32,949 memoria, puedo hacer 935 00:41:32,949 --> 00:41:34,889 programas más eficientes. 936 00:41:36,809 --> 00:41:39,210 Si yo delego la gestión 937 00:41:39,210 --> 00:41:41,210 de la memoria a alguien más, no sé 938 00:41:41,210 --> 00:41:42,429 qué está haciendo con la memoria. 939 00:41:42,789 --> 00:41:45,309 Y como no sé qué está haciendo con la memoria, puedo asumir 940 00:41:45,309 --> 00:41:47,190 que a veces gaste más memoria 941 00:41:47,190 --> 00:41:48,050 de la que debería. 942 00:41:48,050 --> 00:41:52,030 Sin embargo, si soy yo que gestiono la memoria directamente 943 00:41:52,030 --> 00:41:55,369 Sé que si gestiono más memoria de lo que debería 944 00:41:55,369 --> 00:41:56,329 Es un error mío 945 00:41:56,329 --> 00:41:57,730 Y que lo puedo modificar 946 00:41:57,730 --> 00:42:02,090 Entonces, en programas como por ejemplo juegos 947 00:42:02,090 --> 00:42:09,050 El C++ sigue siendo bastante utilizado 948 00:42:09,050 --> 00:42:11,829 Porque me permite trabajar con la memoria 949 00:42:11,829 --> 00:42:13,369 Me permite hacer más eficiente 950 00:42:13,369 --> 00:42:16,469 Y que funcione el mismo programa, el mismo juego 951 00:42:16,469 --> 00:42:19,030 En ordenadores también con menos capacidades 952 00:42:19,030 --> 00:42:20,269 Y por lo tanto 953 00:42:20,269 --> 00:42:21,510 Puedo venderlo 954 00:42:21,510 --> 00:42:24,349 Como los juegos tienen que ser 955 00:42:24,349 --> 00:42:26,510 Muy optimizados para funcionar muy bien 956 00:42:26,510 --> 00:42:28,070 Pues el tema es más 957 00:42:28,070 --> 00:42:29,190 Puede ser un programa 958 00:42:29,190 --> 00:42:31,610 Un level de programación que se utiliza 959 00:42:31,610 --> 00:42:32,889 ¿Sí? 960 00:42:33,190 --> 00:42:35,489 Hacer un juego en Java 961 00:42:35,489 --> 00:42:38,010 Se puede, hacen lo mismo 962 00:42:38,010 --> 00:42:40,590 Pero normalmente es menos eficiente 963 00:42:40,590 --> 00:42:41,170 ¿Vale? 964 00:42:41,469 --> 00:42:44,190 Luego depende también, o sea, a nivel que programamos nosotros 965 00:42:44,190 --> 00:42:45,969 Nosotros de eficiente hacemos poco o nada 966 00:42:45,969 --> 00:42:48,909 Nosotros ya tendremos suficientes problemas 967 00:42:48,909 --> 00:42:50,769 Para hacer que funcione el programa 968 00:42:50,769 --> 00:42:52,889 Ahora luego hazlo eficiente 969 00:42:52,889 --> 00:42:54,530 Eficiente dentro de 6 años 970 00:42:54,530 --> 00:42:55,469 Cuando estáis en la empresa 971 00:42:55,469 --> 00:42:59,840 Por pasos 972 00:42:59,840 --> 00:43:02,159 Entonces, esto es C 973 00:43:02,159 --> 00:43:04,219 Fijaos que ahora hay 974 00:43:04,219 --> 00:43:06,099 Funciones, ¿vale? 975 00:43:06,199 --> 00:43:08,000 Esta función de aquí, printf 976 00:43:08,000 --> 00:43:09,380 Que pilla una 977 00:43:09,380 --> 00:43:12,000 Texto 978 00:43:12,000 --> 00:43:13,760 Lo que hace es escribir en pantalla 979 00:43:13,760 --> 00:43:15,800 ¿Vale? A lo mejor 980 00:43:15,800 --> 00:43:17,000 Escribir en pantalla 981 00:43:17,000 --> 00:43:19,980 En otros lenguajes 982 00:43:19,980 --> 00:43:21,059 Más de bajo nivel 983 00:43:21,059 --> 00:43:23,039 Requiere varias operaciones 984 00:43:23,039 --> 00:43:24,960 Aquí yo, el C 985 00:43:24,960 --> 00:43:26,460 Me proporciona el mismo 986 00:43:26,460 --> 00:43:29,340 Una función creada por los 987 00:43:29,340 --> 00:43:31,159 Creadores de C, por los desarrolladores de C 988 00:43:31,159 --> 00:43:33,280 Que cuando yo la llamo, lo que hará es 989 00:43:33,280 --> 00:43:35,039 Escribirme esto en pantalla, ya está 990 00:43:35,039 --> 00:43:36,699 A alto nivel, he abstraído 991 00:43:36,699 --> 00:43:39,340 ¿Y cómo se hace? ¿Y qué monitor tengo? 992 00:43:39,460 --> 00:43:41,320 ¿Y cómo es el driver que escribe esta cosa? 993 00:43:41,579 --> 00:43:42,619 No me interesa 994 00:43:42,619 --> 00:43:43,460 ¿Vale? 995 00:43:47,059 --> 00:43:48,239 No me interesa 996 00:43:48,239 --> 00:43:54,039 Lo que me interesa es que el programa lo hará 997 00:43:54,039 --> 00:44:05,239 Pregúntalo a los conserjes 998 00:44:05,239 --> 00:44:14,820 Otra función, scanf 999 00:44:14,820 --> 00:44:18,539 Scanf es una función que pilla dos parámetros