Saltar navegación

240919 Intro 3 - Contenido educativo

Ajuste de pantalla

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

Subido el 19 de septiembre de 2024 por Stefano C.

20 visualizaciones

Descargar la transcripción

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? 00:00:00
Entonces, la última vez hemos llegado hasta aquí, más o menos, ¿vale? 00:00:11
Entonces, rápidamente, estas transparencias. 00:00:18
Nosotros hemos dicho que vamos a seguir más o menos estos pasos de aquí, ¿vale? 00:00:21
Vamos a utilizar como primer paradigma de programación la programación estructurada 00:00:28
Es decir, empezaremos desde lo más sencillo, desde programitas muy sencillos 00:00:31
Que se basan sobre tres elementos de programación principales 00:00:37
Que son las secuencias, una instrucción después de la otra 00:00:43
Nuestros primeros ejercicios serán así 00:00:46
Será hacer una operación y escribir el resultado 00:00:49
pedir el nombre 00:00:54
y que te escriba hola y tu nombre 00:00:56
cosas de este estilo, uno detrás de otro 00:00:58
secuencias, luego empezaremos 00:01:00
con una cosa un poquito más difícil 00:01:02
que es el if, es el condicional 00:01:04
es si pasa una determinada 00:01:06
cosa, si hay una determinada condición 00:01:08
entonces 00:01:10
haces esto, si no está 00:01:11
esta condición, entonces haz otra cosa 00:01:14
¿vale? dos opciones 00:01:16
y luego añadiremos 00:01:18
las sentencias 00:01:21
iterativas, que es 00:01:22
este trocito de código 00:01:24
házmelo más de una vez 00:01:26
házmelo hasta que una 00:01:28
condición, mientras que una condición 00:01:30
sea verdadera, sigue haciendo 00:01:32
esto, esto, esto, esto, cuando esta condición 00:01:34
se vuelve falsa 00:01:36
sal de este trozo de código 00:01:38
o hazme este trozo de código 00:01:39
por 10 veces 00:01:42
combinando estas 00:01:43
3 cosas que están en todos 00:01:46
cualquier lenguaje de programación 00:01:48
que pilléis vosotros, tiene estas 00:01:50
tres cosas como mínimo vale pues se hacen cosas más avanzadas 00:01:52
llegará un momento en que nuestros programas serán suficientemente complejos 00:01:58
para decir vale vamos a organizarlos un poquito mejor mi programa hace dos tres 00:02:02
cuatro tareas pues esas dos tres cuatro tareas la pongo en módulos distintos en 00:02:07
métodos primero y luego si queremos también en módulos que son como 00:02:12
colecciones de métodos de funciones entonces nos moveremos a la programación 00:02:16
modular. Esto primer trimestre. A final de primer trimestre, principio del segundo trimestre, ya nos 00:02:20
moveremos a la programación orientada a objetos. Veremos que todo lo que hemos aprendido se utiliza 00:02:28
en la programación orientada a objetos, pero vamos, hacemos un salto de abstracción en lógico un 00:02:34
poquito más cerca de cómo piensan las personas. La orientación a objeto está pensada para, en un 00:02:40
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. 00:02:48
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. 00:03:00
y todo lo que puede hacer un alumno. Se puede escribir, puede pedir la media de sus notas, puede desmatricularse, no lo sé. 00:03:13
Todo lo que para mí es interesante lo empaqueto todo en lo que es una clase, lo de public class. 00:03:23
La clase es una abstracción generalizada de un concepto. 00:03:32
El alumno. ¿Qué alumno? ¿Tú o tú? No. Un alumno cualquiera. 00:03:38
A partir de allí, a partir de una clase, yo puedo instanciar objetos. 00:03:44
Es decir, crear un alumno concreto. El alumno que se llama Sara. El alumno que se llama Francisco. 00:03:50
Pero esto todavía no lo veremos en futuro. 00:04:01
Todo lo que hemos dicho hasta aquí 00:04:04
En las transparencias, en las slides hasta aquí 00:04:08
Son en general 00:04:11
Para cualquier lenguaje de programación o cosa por el estilo 00:04:13
Ahora vamos a ver un poquito Java 00:04:16
Como funciona, lo hemos dicho ya varias veces 00:04:19
Nosotros hemos hablado de compilación 00:04:23
De interpretación y sabemos que Java utiliza las dos cosas 00:04:24
Pero aquí es para formalizar 00:04:28
¿Qué es Java? 00:04:31
Nosotros hemos hablado hasta ahora de lenguajes de programación en general 00:04:33
Hemos hecho una prueba con Java, pero vamos a ver qué es Java 00:04:36
Y cómo se coloca en lo que hemos dicho hasta ahora 00:04:40
La programación modular es sustancialmente organizar mejor lo que es en la programación estructurada 00:04:41
En la programación estructurada tú haces tu sistema así 00:04:51
Lo creas y añades cosas, añades cosas 00:04:55
La programación modular sería la idea de 00:04:57
no, antes de empezar a desarrollar me voy a crear bloques en función de las tareas que tiene que hacer mi sistema 00:04:59
y luego creo un módulo o varios módulos dependiendo de la complejidad por cada uno de estos bloques 00:05:10
y luego desarrollo las funciones y los programas en base a cada uno de estos módulos 00:05:16
al final de eso cuando tengo los módulos por separado, tengo el módulo que es gestión a los profesores 00:05:22
el módulo que gestiona los alumnos 00:05:28
el módulo que gestiona las asignaturas 00:05:30
hago para decir, pues los combino 00:05:32
en un sistema que utilice estos módulos 00:05:34
de alguna forma 00:05:36
es un modo de organizar mejor 00:05:36
las cosas 00:05:40
en realidad nosotros esto lo haremos luego 00:05:41
en objetos, y yo todo lo que os enseñaré 00:05:43
las cosas que iremos haciendo 00:05:45
fuera de la orientación a objetos 00:05:47
está siempre pensada con pinceladas de objetos 00:05:49
para que un día te diga, esto es lo que tienes que hacer 00:05:51
y ya sabréis 00:05:54
programar orientado a objetos sin saber 00:05:56
Que hemos programado objetos 00:05:58
Pero es que la programación estructurada 00:06:00
Está dentro de la programación de objetos 00:06:11
O sea, tú cuando programas objetos 00:06:13
Dices, vale, el alumno 00:06:15
El alumno tiene que tener 00:06:17
La función para matricularse 00:06:19
Dentro de la función para matricularse 00:06:20
Lo que estás haciendo es programación estructural 00:06:23
El if, el while 00:06:24
Esta if, while 00:06:27
Secuencias 00:06:29
Son las cosas que usas para programar 00:06:31
No es que están obsoletas 00:06:33
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. 00:06:35
Entonces, equipos de trabajo distintos, por ejemplo, pueden trabajar en módulos distintos en paralelo 00:06:49
y cuando llegas a la orientación a objetos, pues tú lo que estás haciendo es dividir tu problema 00:06:56
en todos los posibles objetos que puedan trabajar, desarrollarlos hasta por separado 00:07:03
y luego tener un sistema que va utilizando estos objetos. 00:07:08
Es sustancialmente una forma para organizar mejor el código, poderlo reutilizar mejor 00:07:11
y para evitar que mis proyectos se hundan 00:07:16
porque llega un momento en que no sé dónde meter la mano 00:07:19
porque todo es demasiado complejo 00:07:21
aquí como reduzco la complejidad 00:07:22
porque cada cosa está compartimentada 00:07:24
organizada, dividida, separada 00:07:28
pues si tengo un error en la parte de alumno 00:07:32
toco la parte de alumno, no toco el sistema completo 00:07:34
la no estructurada es todavía peor de la estructurada 00:07:37
porque no utilizaba ni siquiera funciones y cosas por el estilo 00:07:46
y entonces era mucho más complejo 00:07:49
de manejar 00:07:51
y mientras que los sistemas 00:07:52
eran muy sencillos, era suficiente 00:07:54
cuanto más los sistemas son 00:07:57
complejos, si no te organizas 00:07:59
pues no lo consigues 00:08:01
si, si 00:08:02
que nosotros 00:08:04
si y no, es que 00:08:05
nosotros empezamos por public 00:08:08
class en low world 00:08:10
has hecho una clase, estás programando 00:08:12
orientado a objeto 00:08:14
solo que nosotros no nos fijamos en eso 00:08:15
y nos centramos más 00:08:18
en la programación estructural 00:08:20
de momento 00:08:22
que si no sabes 00:08:23
cómo hacer un muro 00:08:33
no vas a hacer un castillo 00:08:34
entonces este es el castillo 00:08:35
la programación orientada a objetos 00:08:38
con muchas cosas potentes pero complejas 00:08:39
antes habrá que aprender 00:08:42
que es un if 00:08:44
antes de poder programar objetos 00:08:45
antes de crear una persona 00:08:47
y luego un alumno que hereda la persona 00:08:50
y poder crear una colección de personas que pueden ser alumnos o personas normales 00:08:53
y gestionarlas y cosas por el estilo, pues tendré que saber que es un if. 00:09:02
Entonces vamos a aprender if. 00:09:07
¿Dudas? 00:09:10
Sí. 00:09:13
A ver, diagramas de flujo, pseudocódigo y cosas por el estilo, 00:09:32
yo creo que nosotros no los vamos a ver. 00:09:39
Por varias razones. 00:09:42
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? 00:09:44
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. 00:10:02
Yo creo que en torno de desarrollos veréis algo de OML 00:10:16
Existen lenguajes gráficos o cosas por el estilo 00:10:21
Como el Universal Modeling Language 00:10:27
Que están pensados para las fases previas del programar 00:10:30
Para crear lo que es el diagrama de clases 00:10:35
Cómo se organizan las clases, el diagrama de Gantt 00:10:37
Cosas de ese estilo que sirven más bien en ingeniería del software 00:10:41
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. 00:10:46
Eso no quita que dentro de unos años 00:11:09
Estaréis diseñando vuestros sistemas 00:11:12
Puede ser, porque luego al fin y al cabo 00:11:14
Donde de verdad uno se hace 00:11:16
Programador informático 00:11:18
Es en la experiencia que hace trabajando 00:11:19
Seréis expertos en no sé qué 00:11:22
Y llegará un momento en que sabréis 00:11:24
Crear sistemas de no sé qué 00:11:26
Muy buenos 00:11:29
Y sabréis los errores que habéis hecho 00:11:30
En los proyectos anteriores y los evitaréis 00:11:32
Diagrama de flujo 00:11:34
Un año se intentó hacer 00:11:37
Otro profesor 00:11:41
Empezó con diagramas de flujos 00:11:42
Más intensivos, pseudocódigo 00:11:44
Y no tocó Java todo el primer trimestre 00:11:46
No se vio 00:11:48
Una 00:11:50
Significativa mejoría 00:11:51
En los resultados 00:11:54
Y entonces a mi me gusta más que toqueteéis 00:11:56
Directamente el Java 00:11:58
Porque así tocáis el ordenador 00:12:00
Y trabajáis y os motiváis 00:12:02
Porque diagramas de flujos es papel 00:12:03
lo puedes hacer al ordenador 00:12:05
pero es más aburrido 00:12:08
al diseño 00:12:10
el diseño de lo que vas a hacer 00:12:12
entonces, sí, es una herramienta 00:12:14
potente, es una herramienta interesante 00:12:16
para las cosas 00:12:18
muy sencillas 00:12:20
no es tan útil 00:12:21
a lo mejor llega un momento en que 00:12:23
quitamos tiempo a lo que es hacer ejercicios 00:12:26
y programar en Java 00:12:28
para una cosa que es útil y que puede valer 00:12:29
no es que sea inútil 00:12:32
Pero yo creo que a vosotros 00:12:33
Mi cosa como profesor 00:12:36
Mi opinión como profesor 00:12:39
Es que es mejor que tengáis 00:12:41
Más horas en Java 00:12:44
Más bien que en esa cosa 00:12:45
Luego a lo mejor me equivoco, soy humano 00:12:46
Si os gusta lo que queréis 00:12:49
Pues me preparo clases 00:12:51
Entonces Java 00:12:53
Java es un lenguaje de programación orientado a objetos 00:12:54
Nosotros al principio esta parte de aquí 00:12:57
La ignoraremos, pero luego 00:12:59
De repente 00:13:01
Saldrá y no la dejaremos 00:13:03
Nunca jamás 00:13:05
El objetivo fundamental de Java 00:13:06
Es que lo escribo una vez 00:13:08
Y se ejecuta 00:13:11
En cualquier lado 00:13:14
La cosa potente, útil e interesante 00:13:14
De Java no es su eficiencia 00:13:18
Su velocidad, porque si yo quiero 00:13:20
Eficiencia y velocidad, posiblemente voy 00:13:21
Más hacia C++, C Sharp 00:13:23
O cosas por el estilo 00:13:25
Sino el hecho que pueda hacer 00:13:26
Aplicaciones que una vez que las he 00:13:29
Desarrollado, pues se pueden ejecutar 00:13:31
En cualquier sistema 00:13:34
CPU que tenga 00:13:35
Una Java Virtual Machine 00:13:38
Instalada, el JRE 00:13:39
¿Vale? Instalado, el Java Runtime 00:13:41
Environment 00:13:43
Algunas cosillas y entre ellas 00:13:44
La intérprete, que es la Java Virtual Machine 00:13:49
¿Vale? Si yo tengo un intérprete de Java 00:13:51
Pues desarrollado por quien sea 00:13:53
¿Vale? Porque 00:13:55
Oracle tiene uno, pero el que usamos 00:13:56
nosotros, pero hay otras 00:13:59
implementaciones de la Java Virtual Machine 00:14:01
tú tienes la especificación de cuál es el lenguaje Java 00:14:06
cada uno de los comandos que tiene que hacer y vosotros 00:14:08
dentro de un rato, si queréis y estáis 00:14:12
lo suficientemente locos, podéis haceros vuestra propia Java Virtual Machine 00:14:14
en otro lenguaje o en el lenguaje ese 00:14:18
pero bueno, la idea es que si yo tengo 00:14:20
una Java Virtual Machine, alguien la ha implementado para un determinado 00:14:24
sistema, todas las aplicaciones 00:14:26
que hago y que he hecho 00:14:29
para otros sistemas, para otras Java Vector Machine 00:14:30
pues funcionan allí también 00:14:33
y entonces eso es muy bueno 00:14:34
Java usa 00:14:36
un compilador y un intérprete, entonces 00:14:38
nosotros empezamos por el editor 00:14:40
el editor es el Notebook 00:14:42
el Notepad, lo que hemos usado hasta ahora 00:14:44
o un IDE un poquito más potente 00:14:46
escribimos allí el 00:14:49
código en un fichero .java 00:14:50
con extensión .java 00:14:52
a ese punto tengo el programa 00:14:54
fuente, el programa fuente es el programa que está contenido dentro 00:14:56
del programa .java, hago una compilación utilizando 00:15:00
javac, javac está por javacompiler, y esto me transforma 00:15:04
el programa fuente en un lenguaje 00:15:09
intermedio, que es el lenguaje bytecode, que es el que cuando hemos abierto 00:15:12
antes no es inteligible para el ser humano, el ser humano 00:15:16
no está pensado para que el ser humano lea bytecode 00:15:20
¿Por qué se hace este paso? Porque en la fase de compilación se pueden optimizar algunas cosas 00:15:23
Si Java ve que una determinada variable, un trozo de código, algo de tu programa se repite muchas veces 00:15:32
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 00:15:40
Entonces es un organizarse un poquito de forma distinta a lo que tú has hecho 00:15:49
Si lo consigues entender, para que luego el producto final sea un poquito mejor 00:15:55
Sea un poquito más optimizado con respecto a lo que has hecho tú 00:16:00
O lo que has escrito tú directamente 00:16:03
Una vez que tengo el bytecode, el bytecode está almacenado en un fichero .class 00:16:05
El .class es el que me sirve para poder pasárselo como parámetro a la Java Virtual Machine, JVM 00:16:11
Que sería el comando java 00:16:21
Y él leyendo línea por línea del bytecode 00:16:23
Instrucción por instrucción del bytecode 00:16:27
Pues lo va a interpretar y transformar en código máquina 00:16:31
Para que el procesador lo pueda ejecutar 00:16:35
¿Dudas? 00:16:37
Entonces, si yo he escrito un programa 00:16:39
¿Vale? 00:16:44
Quiero que tú lo ejecutes 00:16:46
¿Vale? Y tú tienes instalado 00:16:48
Una Java Virtual Machine 00:16:50
¿Qué te mando por correo para que tú puedas ejecutarlo? 00:16:51
El .class 00:17:02
Eso porque 00:17:02
El IDE 00:17:09
El entorno 00:17:12
Integrado de desarrollo 00:17:13
Lo hacen automático, pero nosotros hemos visto que no 00:17:15
Cuando tú haces el Java C 00:17:17
O sea, cuando tú guardas el Java 00:17:19
Con el Notepad 00:17:21
El Java C, el class nos ha creado. 00:17:23
Pero lo que quiero decir es que lo que se instala en los ordenadores es esto. 00:17:26
La javetomachine, el intérprete. 00:17:32
Entonces, si yo te mando el .java, tú no lo puedes ejecutar a menos que tú no tengas el compilador de Java. 00:17:33
Y el compilador de Java no hace parte del entorno de ejecución. 00:17:42
No es el intérprete. 00:17:48
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. 00:17:50
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. 00:18:02
Entonces, si yo puedo hacer un programa en Java 00:18:16
Lo compilo 00:18:19
Cuidado, cuando lo compilo, no lo compilo 00:18:21
Como lo compilo en C++ 00:18:23
En base al sistema que yo tengo 00:18:24
Lo estoy compilando a un lenguaje intermedio 00:18:27
Independiente de lo que hay por debajo 00:18:30
Que es el bytecode 00:18:33
Y a este punto yo te puedo mandar 00:18:35
El bytecode a ti 00:18:38
Que tienes instalado la Java Virtual Machine 00:18:40
Y tu Java Virtual Machine 00:18:43
Será capaz de interpretar el bytecode 00:18:44
entonces lo puede ejecutar 00:18:46
entonces, si yo quiero 00:18:49
mandar mi programa Java a los demás 00:18:51
lo compilo 00:18:54
y luego le mando el .class 00:18:55
ellos no tienen el código fuente 00:18:57
pero lo pueden ejecutar 00:18:59
está claro que si alguien es otro programador 00:19:01
y está interesado en el código fuente 00:19:03
le puedo mandar el código fuente y luego eso lo compile él 00:19:05
pero las personas 00:19:07
normales no tienen instalados 00:19:09
en casa el JDK, al máximo 00:19:11
tienen un JRE 00:19:13
y también porque este es el JDK 00:19:14
y este es el jdk 00:19:19
el jdk es más pequeño que el jdk 00:19:20
y dentro de un jdk 00:19:22
está el jdk 00:19:25
el jdk es el jdk con algo más 00:19:26
por ejemplo, el java compile 00:19:31
entonces 00:19:32
la idea es que yo cuando luego tengo que 00:19:35
distribuir mi programa 00:19:37
no quiero distribuir todo incluido el 00:19:38
compilador que nadie tocará nunca porque 00:19:41
si no eres un programador no tocas el 00:19:42
compilador, yo lo que quiero 00:19:44
distribuir es, asumiendo que 00:19:46
tú tengas ya instalado un Java Virtual Machine 00:19:48
que puedes hasta bajarte de otro sitio 00:19:50
no soy yo que te lo tengo que dar 00:19:52
y yo te voy a mandar mi programa 00:19:54
ya listo para ser 00:19:57
interpretado por el Java Virtual Machine 00:19:58
¿Dudas? 00:20:00
00:20:04
El JDK incluye 00:20:04
JDK 00:20:11
Va a salir 00:20:11
tu programa, si tu programa era 00:20:20
pídeme un 00:20:23
valor, pídeme otro valor, súmalo y 00:20:24
dame la suma, pues se juntará 00:20:27
eso. Si no tienes el Java Runtime Environment, no tienes cómo lanzar el intérprete, que 00:20:29
es la Java Virtual Machine. Y si no lanzas el intérprete, no se ejecuta. El bytecode 00:20:41
no es ejeutable. El bytecode es un lenguaje intermedio que es interpretable por el Java 00:20:45
Virtual Machine. Entonces, si no tengo una Java Virtual Machine, no puedo interpretarlo 00:20:52
no puedo ejecutar dudas qué más está puesto la idea vale yo hago la compilación una vez tengo 00:20:56
el bytecode y a este punto el bytecode lo puedo lanzar en distintas java virtual machine está para 00:21:07
la máquina uno que por ejemplo es un windows esto para la máquina 2 que por ejemplo es un linux este 00:21:14
por ejemplo para un Android 00:21:18
que se yo, con que haya 00:21:21
la Java Virtual Machine 00:21:23
instalada 00:21:24
puede la Java Virtual Machine interpretar 00:21:26
el bytecode y ejecutarse 00:21:29
en código máquina distinto 00:21:30
propio para cada uno de ellos 00:21:33
entonces si yo he escrito una vez 00:21:34
el programa, lo he compilado una vez 00:21:36
en bytecode 00:21:39
y ya no lo tengo que compilar más 00:21:40
este compilado se puede ejecutar 00:21:42
allá donde haya un intérprete 00:21:44
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. 00:21:46
Pero si no soy un informático, eso de compilar me va a sonar chino. 00:22:00
Si tú dices a tu amigo que no estudia informática 00:22:04
Dice, compila este fichero y ya te funciona 00:22:12
Pues no sabe de dónde empezar 00:22:16
Tú le dices, instálate esto, le das el link 00:22:18
Él hace doble clic adelante, adelante, adelante 00:22:22
Y ahora le funciona tu programa 00:22:24
Porque un programa no necesariamente es una clase sola 00:22:25
Puede ser cinco clases distintas 00:22:35
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. 00:22:41
el problema en el juego 00:22:55
también tiene 00:23:08
el juego cuando tú lo instalas es un zip 00:23:09
luego tú le das doble clic 00:23:12
y te lo 00:23:14
expande 00:23:15
y allí hay 00:23:18
las mapas, hay las texturas 00:23:20
hay los sonidos, hay las cosas 00:23:22
y todo eso no son clases 00:23:24
pero por algún lado si es un juego hecho en clase 00:23:25
pues habrá una serie de ficheros 00:23:28
que representarán los varios objetos 00:23:30
que tienes en el juego 00:23:32
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. 00:23:33
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. 00:23:47
00:23:57
No, es un poco distinto 00:23:59
Porque 00:24:20
Sí, pero tiene que compilar 00:24:20
Tiene que saber cómo se compila 00:24:24
Cosa que 00:24:26
Aquí no es necesario 00:24:27
Tú lo que tienes que hacer 00:24:31
Es sostancialmente 00:24:32
Tener la Java Virtual Machine instalada 00:24:33
Y esto no lo haces tú 00:24:35
Empresa X, lo hace Oracle 00:24:37
O quien sea 00:24:40
Tú en tu ordenador 00:24:41
Le tienes que decir que este programa funciona con Java 00:24:43
O lo puedes hasta empaquetar 00:24:46
Para que luego vaya de golpe 00:24:48
Tú tienes un instalador, le das al instalador 00:24:49
Y el instalador te instala la Java Art Machine 00:24:51
Entonces, ya está 00:24:53
Y el concepto es que 00:24:55
Es una filosofía un poco distinta 00:24:57
Porque quien desarrolla en Java 00:25:00
No se preocupa de lo que pueda haber por debajo 00:25:01
¿Vale? 00:25:05
Si yo compilo en C 00:25:06
O sea, si yo programo en C 00:25:08
O en C++ 00:25:10
Luego tendré un compilador 00:25:11
que me hace la compilación 00:25:13
para este ordenador 00:25:15
pero tengo que tener cuidado 00:25:16
porque a lo mejor a mi en este ordenador 00:25:18
me compila todo perfectamente 00:25:20
pero en otro entorno cuando voy a compilar 00:25:22
a lo mejor me da un tipo de error 00:25:25
no garantiza 00:25:26
que el hecho que compile aquí 00:25:28
compile también en otro lado 00:25:30
el intérprete 00:25:32
yo no me he ocupado de la Java Virtual Machine 00:25:36
la Java Virtual Machine ha hecho otro 00:25:39
y son ellos que han hecho la Java Virtual Machine 00:25:40
que se encargan de que funcione Windows 00:25:42
De que funcione Linux 00:25:44
Yo eso lo doy por hecho 00:25:45
Yo asumo que exista una cosa que funcione 00:25:48
¿Quién se encarga de eso? 00:25:50
Pues las grandes empresas y cosas por el estilo 00:25:52
Si hay un error, son ellos que lo resuelven 00:25:54
Sobre esta plataforma 00:25:56
Que me proporcionan 00:25:58
Yo hago funcionar mis ficheros 00:25:59
Mis programas 00:26:03
Sin tener que 00:26:04
Oye, mira, esto funcionará allí 00:26:06
Si funciona Jordan Machine, funcionará también en mí 00:26:08
A nivel alto, sí 00:26:11
A nivel bajo, cada uno tendrá 00:26:20
Su propia implementación 00:26:22
Habrá una Java Automachine para Windows 00:26:23
Y una Java Automachine para Linux 00:26:26
Todas las Java Automachines 00:26:27
Que pueden ser implementadas 00:26:32
En el lenguaje que te da la gana 00:26:34
Porque eso será un ejeutable 00:26:35
Entonces a lo mejor está implementado en C++ 00:26:36
Pero será un intérprete 00:26:39
El programa que yo hago en C++ es un intérprete 00:26:41
Que pilla bytecode y lo ejecuta 00:26:43
Y a nosotros no nos interesa 00:26:47
Porque lo han hecho otros 00:26:49
¿Y cómo se hace eso? 00:26:51
No me interesa, la Java Virtual Machine está hecha 00:26:53
La única cosa es que si yo quiero hacer un programa 00:26:55
Y lo quiero vender 00:26:59
En el sistema operativo 00:27:00
Stefanux 00:27:03
¿Vale? 00:27:05
Y en Stefanux no hay una Java Virtual Machine 00:27:06
Pues mi programa en Java ya no va 00:27:08
Pero la probabilidad que alguien 00:27:10
Interesado en hacer funcionar 00:27:12
Todos los ecosistemas Java 00:27:14
En Stefanux 00:27:16
Pues decida de, voy a crear una Java Virtual Machine 00:27:17
Para eso, vale, es posible 00:27:20
Cuando alguien lo haya hecho 00:27:22
Pues todos los programas de Java 00:27:23
Compilados en bytecode pueden trabajarse ahí 00:27:25
Es que no son 00:27:28
Unificados, no sé qué quiere decir 00:27:32
Con unificados 00:27:34
Porque cada sistema tendrá su Java Virtual Machine 00:27:35
Pero la ejecución de bytecode 00:27:38
Es independiente de la máquina en la que estás 00:27:40
Es la Java Virtual Machine 00:27:42
Que es dependiente 00:27:43
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. 00:27:44
En vez de en C es distinto, compilando sin intérprete. 00:27:57
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é. 00:28:03
Y ahora creo un nuevo proyecto 00:28:13
Y lo tengo que probar en Windows 00:28:15
Y en Linux y en no sé qué 00:28:17
¿Sí? 00:28:19
Es distinto 00:28:22
Esto es más portable 00:28:22
El término técnico es más portable 00:28:24
Lo escribes una vez y ya te funciona en todos 00:28:27
Lo que soporta en una llave de tono 00:28:29
¿Más dudas? ¿Había una duda al fondo? 00:28:31
Ya está resuelta 00:28:35
¿Más dudas? 00:28:36
Sigo 00:28:39
Vale, concepto de algoritmo 00:28:39
Ya lo hemos hablado al principio, más o menos, y es un concepto reciente sencillo, pero tiene su miga. 00:28:43
Vuestro trabajo se divide en dos. 00:28:52
Primero es ser programadores, o sea, viene alguien y os dice, tú tienes que hacer esto, 00:28:56
y tu programa tiene que hacer esta cosa, esta cosa, esta cosa, esta cosa, esta cosa, súper detallado, 00:29:02
y te dice, hazlo, y tú te metes allí y no piensas y haces lo que te han dicho. 00:29:06
Pero lo más probable es que no llegue un detalle suficiente para que tú dices 00:29:11
Leo una frase y la transformo en una instrucción 00:29:17
Leo otra frase y la transformo en otra instrucción 00:29:23
Lo más probable es que tu jefe, tu entorno de trabajo, quien te pide de trabajar 00:29:25
Te diga, oye mira, yo tengo este problema 00:29:30
Tengo estos datos, estos datos hay que hacerle este tipo de operación 00:29:33
Y al final tiene que salir una salida de este tipo 00:29:38
Entonces, cuando tú tienes más o menos 00:29:41
Has hablado con el cliente 00:29:44
Con quien te manda a hacer un trabajo 00:29:46
Y te queda claro que tiene que hacer tu proyecto 00:29:48
A este punto viene la parte difícil 00:29:52
Que es encontrar un algoritmo 00:29:55
Que dada una cierta entrada 00:29:59
Te produzca una determinada salida 00:30:02
Hacer el algoritmo no es trivial 00:30:04
Si el problema es muy sencillo 00:30:07
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. 00:30:10
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. 00:30:26
Y es, ¿os acordáis cuando la primera vez os dije que tenéis que cambiar vuestra forma de pensar? 00:30:41
Es que un programador, un informático, tiene que empezar a pensar en términos de algoritmos. 00:30:48
En términos de, sé que me dan, sé que quieren obtener, pero ¿cómo paso de aquí a aquí? 00:30:55
¿Cuáles son los pasos correctos para que vaya de aquí a aquí y si posible rápidamente? 00:31:02
De forma eficiente. 00:31:07
Entonces, un algoritmo es un conjunto ordenado y finito de operaciones que nos permiten hallar la solución a un problema. 00:31:10
Una secuencia de instrucciones para llegar a la solución 00:31:16
Tened en cuenta que esto va muy bien de la mano con la programación imperativa 00:31:21
Programación imperativa es decir, haz esto, haz esto, haz esto, haz esto 00:31:26
Pues el algoritmo es la secuencia de pasos que tiene que hacer para poder lograr 00:31:29
Ejemplos de algoritmos en la vida real es hacer una tarta, lo decimos el otro día 00:31:34
Te dice, echa X gramos de azúcar, echa X gramos de harina, mezcla todo, echa la levadura, ponlo en el horno 00:31:41
Pues esos son los pasos para obtener una tarta 00:31:51
Cambiar una bombilla 00:31:53
Comprar si hay bombilla de repuesto 00:31:55
En caso de que existan, quitar bombilla vieja, poner una nueva y comprobar si funciona 00:31:59
Si no, bajar a comprar 00:32:05
Esta es una secuencia de pasos que puede hacer 00:32:06
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. 00:32:09
Los algoritmos son la base de la programación 00:32:28
Si sabéis sacar algoritmos, bien 00:32:34
Si os cuesta ver por dónde van los algoritmos 00:32:38
Pues hay que afinar esa cosa, hay que entrenarla 00:32:42
Hay que probar y probar y probar a hacer algoritmo 00:32:47
Hasta que esto os salga más fácil 00:32:49
Tened en cuenta que lo que aprenderemos aquí al principio serán piezas sueltas de Lego 00:32:52
Luego, cuando vosotros queréis montar vuestro velero de Lego 00:32:57
Pues es el algoritmo, el velero 00:33:03
Es cómo meter estas piezas una tras de otra para llegar a lo que queréis hacer 00:33:05
Y eso es lo difícil 00:33:11
No es difícil aprender un lenguaje 00:33:12
Porque me preguntaban antes, ¿por qué Java y no Python? 00:33:15
Porque da igual, da igual cuál usamos 00:33:19
Java es bastante conocido, usamos Java 00:33:22
Pero el objetivo de programación de este curso no es que vosotros aprendáis Java 00:33:25
Es que vosotros aprendáis los fundamentos de la programación 00:33:30
Y que luego en vuestra empresa en vez que Java utilizan C Sharp 00:33:33
Pues vosotros en una semana aprendéis la sintaxis de C Sharp y empezáis a programar en C Sharp 00:33:39
Los programas son algoritmos escritos en un lenguaje inteligible por el ordenador 00:33:46
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. 00:33:53
La definición del algoritmo tiene que seguir reglas sintáticas y tiene que cubrir todos los casos posibles. Esto también es complejo. 00:34:03
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. 00:34:10
Muchas veces cuando vosotros os enfrentáis a un problema, tenéis que mirar qué puede pasar con este problema. 00:34:19
Puede pasar esto, puede pasar esto, puede pasar esto. 00:34:27
Y vuestro programa tiene que ser capaz de seguir todas las posibilidades de este problema. 00:34:29
¿Qué puede hacer un alumno? 00:34:37
Se puede matricular, se puede desmatricular o se puede ir de viaje por seis meses. 00:34:39
Entonces, suspender la matrícula. 00:34:45
Estos son los casos que quiero poder plasmar en mi algoritmo. 00:34:47
Vale, perfecto, hago todo el programa y si ahora viene fuera un nuevo caso, pues tengo un problema. 00:34:53
Porque a lo mejor como he plasmado el alumno, como he pensado todo el sistema, hacer este cuarto caso va a ser complejo. 00:34:59
Tengo que volver a tocar partes del programa que pensaba que ya estaban bien. 00:35:08
Algo que no tiene que ser determinista 00:35:12
En cada momento el procesador tiene que saber 00:35:17
Cuáles son las instrucciones que tiene que ejecutar 00:35:19
Esto es importante también 00:35:21
Nosotros programamos de forma determinista 00:35:22
Programar de forma determinista quiere decir 00:35:25
Que yo estoy aquí, a este punto de mi programa 00:35:27
Sé perfectamente cuál es la siguiente instrucción 00:35:30
Si el procesador no sabe que viene a continuación 00:35:32
Mal 00:35:36
¿Que puede haber un if? 00:35:37
00:35:40
Pero cuando yo ejecuto el if 00:35:41
Yo sabré si después de haber ejecutado este if 00:35:43
Tendré que hacer esta parte de código 00:35:46
O esta parte de código 00:35:48
A lo mejor dependiendo de la condición 00:35:50
O una o la otra 00:35:52
Pero yo tengo que saber 00:35:53
Donde ir 00:35:55
Lo veremos 00:35:57
El característico de un algoritmo 00:36:01
Debe resolver el problema para el que fue formulado 00:36:04
Importante, muchas veces si os daré ejercicios 00:36:07
Diciendo, vuestro ejercicio tiene que hacer esto 00:36:10
Y vosotros decís, lo he acabado 00:36:12
Y cuando voy a ver, hace otra cosa 00:36:13
Pues es un problema 00:36:15
Tenéis que estar seguros 00:36:17
Que cuando hacéis un algoritmo 00:36:20
Sea para lo que se ha pedido 00:36:21
Si yo os pido 00:36:24
Resolverme las sumas 00:36:26
Y vosotros hacéis un algoritmo 00:36:28
Que hace multiplicaciones 00:36:30
Pues hay algo raro 00:36:31
Tiene que ser independiente del ordenador 00:36:32
O sea, el algoritmo 00:36:35
No tiene nada que ver 00:36:37
Ni siquiera con el lenguaje 00:36:39
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. 00:36:40
No he usado Java, no he usado Python, no he usado nada 00:37:05
He pensado los pasos 00:37:09
Ahora, luego cuando voy a hacer el programa 00:37:10
Cuando tengo claro el algoritmo 00:37:13
Voy a hacer el programa, usaré un lenguaje de programación o otro 00:37:15
Los algoritmos deben ser precisos 00:37:17
Los resultados del cálculo deben ser exactos 00:37:21
De forma rigurosa 00:37:24
No puedo dar soluciones aproximadas 00:37:25
Y los algoritmos deben ser finitos 00:37:28
Antes o después tu algoritmo tiene que acabar 00:37:31
En realidad hay algoritmos que pueden ser infinitos 00:37:34
Pensad en un cajero 00:37:38
Un cajero de sacar dinero 00:37:39
Tú vas allí, haces lo que sea, sacas 50 euros 00:37:41
Y el programa no acaba 00:37:44
Vuelve arriba para que una siguiente persona vaya allí y saque otro dinero 00:37:47
Pero aún así, tu algoritmo, si lo pillas en una sola ejecución, pues es finito 00:37:52
Pide la tarjeta, pide el PIN, pide cuánto dinero, dale el dinero 00:37:59
Vuelve arriba 00:38:03
el algoritmo debe poder repetirse 00:38:04
o sea, no me vale una cosa que 00:38:11
una vez en mi casa cuando lo he lanzado 00:38:13
ha funcionado 00:38:15
y ahora no entiendo por qué no funciona 00:38:16
pero yo lo he hecho porque ha funcionado una vez 00:38:18
pues no, el algoritmo tiene que poder ser descrito 00:38:20
a otra persona y que otra persona lo pueda implementar 00:38:23
y que funcione siempre 00:38:25
principio característica de validez 00:38:26
un algoritmo es válido si carece de errores 00:38:30
intentamos no poner errores 00:38:33
Debería ser eficiente 00:38:35
Es decir, debería intentar hacer el algoritmo lo más bueno posible 00:38:37
Para que gaste los menores recursos posibles para hacer lo que tiene que hacer 00:38:43
Y a veces es mejorable, a veces yo hago una solución 00:38:49
Y luego viene alguien y me dice, se lo haces de esta otra forma 00:38:53
Mejora, pues, entonces lo haré de otra forma 00:38:55
Y óptimo, un algoritmo óptimo si es el más eficiente posible 00:38:59
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 00:39:05
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. 00:39:17
Pero se considera óptimo si no hay una forma de hacerlo mejor. 00:39:27
Y bueno, estos son elementos de un algoritmo, ya lo hemos dicho 00:39:31
Entrada, proceso y salida 00:39:39
Entrada es lo que me dan al principio 00:39:40
Proceso es lo que hago yo 00:39:42
La secuencia de pasos que elaboran estos datos de entrada 00:39:44
Y al final obtendré algo que quiero poner como elemento de salida 00:39:53
Y allí es donde escribo 00:39:58
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. 00:40:01
Aquí se os da cuatro opciones de cuatro problemas 00:40:15
Definid por algún lado, en Word o donde sea 00:40:21
Cuáles son los algoritmos para estos problemas 00:40:25
Algoritmo 00:40:31
¿Vale? 00:40:33
Yo paro esto 00:40:36
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
20
Fecha:
19 de septiembre de 2024 - 13:33
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
40′ 44″
Relación de aspecto:
16:10 El estándar usado por los portátiles de 15,4" y algunos otros, es ancho como el 16:9.
Resolución:
1152x720 píxeles
Tamaño:
92.03 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid