240919 Intro 3 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
Sí
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
Sí
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
Sí
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