Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Videoconferencia Programación 13/10 - 16:10 - 18:00 - 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 13 de octubre de 2026 por Francisco J. G.

7 visualizaciones

Videoconferencia Programación 13/10 - 16:10 - 18:00

Descargar la transcripción

Aquí y aquí. 00:00:00
Y estáis viendo la pantalla, ¿verdad? 00:00:10
¿Veis el aula virtual, verdad? 00:00:13
Con el temario. 00:00:18
Sí, ¿no? Vale. 00:00:22
¿Alguien me puede decir por dónde me quedé? 00:00:25
Más o menos. 00:00:27
Yo creo que me quedé por la programación declarativa e imperativa. 00:00:30
¿Alguien recuerda? 00:00:33
Vale. 00:00:41
Antes de empezar con la teoría, esto es lo que vamos a ver hoy. 00:00:42
¿Vale? De Java. 00:00:45
¿Qué vamos a ver hoy? 00:00:46
vamos a ver un poquito los tipos de datos 00:00:48
solo que sepáis el tipo double 00:00:51
vamos a hacer un programa sencillo que es calcular la nota media 00:00:54
de tres notas que vamos a introducir por teclado 00:00:57
tendremos que saber cómo crear un objeto 00:01:01
y ya vamos viendo el operador 00:01:04
y vamos a ver cómo crear un método 00:01:09
muy sencillo y la diferencia entre llamar un método estático 00:01:14
y uno no estático. La clase escáner y el ejercicio para calcular 00:01:17
la nota media de tres letras. Esto es lo que vamos a ver luego 00:01:22
con, nos meteremos ya, tengo ya instalado aquí el 00:01:25
NetBeans y lo haremos aquí. Entonces el programa que vamos a hacer 00:01:29
se puede hacer de tres maneras. Entonces voy a hacer con las tres. 00:01:33
Esto sería por una parte lo que vamos a ver después. 00:01:39
En principio voy a hablar un poquito de la teoría. 00:01:41
esto sigue siendo teoría pura y dura 00:01:44
pero que es necesario que sepáis 00:01:48
si vimos la diferencia entre algoritmo y programa 00:01:51
vimos que un algoritmo 00:01:54
nosotros teníamos un 00:01:55
cuando tengáis alguna duda o lo que sea 00:01:57
me interrumpís 00:02:00
un algoritmo realmente 00:02:01
a ti te van a proponer un problema 00:02:04
y ese problema necesita ser resuelto 00:02:06
por medio de un algoritmo 00:02:09
entonces, diferencia entre el algoritmo y el programa 00:02:10
El algoritmo es un medio que vamos a utilizar para resolver un problema. 00:02:14
¿Cómo tiene que ser? Tiene que caracterizarse por tres cosas. 00:02:21
Una, que tiene que ser preciso. Si no es preciso, indicando paso a paso cómo se tiene que realizar. 00:02:24
Si no es preciso, tenemos un problema, aparte del que ya nos han propuesto. 00:02:34
Tiene que ser preciso. Tiene que estar definido. 00:02:38
O sea, si tú lo ejecutas más de una vez y con los mismos valores, tiene que siempre dar el mismo resultado y debe ser finito. Todo algoritmo va a tener una serie de pasos y tienen que ser finitos, no puede ser algo infinito, sino que tiene que tener un número de pasos finito. 00:02:41
O sea que con un comienzo no fina. Y luego todos los pasos intermedios en primeros. En cambio, un programa que es un conjunto de instrucciones que se codifica en un lenguaje de programación y que lo que hace es permitir que ese algoritmo se pueda ejecutar en un ordenador. 00:03:00
Básicamente es eso. Con respecto a cómo representar los algoritmos, pues tenemos aquí tres métodos. Uno que sería con los diagramas de flujo, que si un diagrama de flujo, 00:03:16
mirad, para que veáis un diagrama de flujo 00:03:31
os voy a poner aquí PSEN 00:03:32
este es un programa sencillito 00:03:34
en el que se programa 00:03:37
el pseudocódigo, ¿vale? 00:03:38
entonces, si yo le pongo 00:03:40
vamos a ponerle 00:03:41
salud 00:03:42
esto nos define aquí un algoritmo 00:03:47
esto no tenéis que saberlo, pero es para que veáis 00:03:50
esto lo doy 00:03:52
en un fundamento de programación 00:03:54
solo es para que veáis 00:03:56
el pseudocódigo, como se representa 00:03:56
en un programa 00:04:00
A ver, tenéis que diferenciar lo que es el diseño del algoritmo, que lo podéis hacer con cualquiera de estas tres cosas, con diagrama de flujo, con una tabla de decisión y con un pseudocódigo. 00:04:01
Con tabla de decisión no me voy a meter, que lo sepáis, que hay una serie de posibles condiciones del problema con sus respectivas acciones, que sepáis eso. 00:04:12
Pero con diagrama de flujo y pseudocódigo, sí. 00:04:20
Y pseudocódigo, este programa nos permite crear programas en pseudocódigo. 00:04:22
otro código. Entonces nosotros le podemos poner aquí, ¿veis? Yo le pongo escribir y 00:04:27
le digo que me escriba hola, ¿cómo te llamas? Y luego después le digo leer, ¿vale? Para 00:04:33
que el usuario pueda poner su propio nombre, ¿vale? Con el teclado. Entonces leer y le 00:04:45
ponemos una variable que le va a llamar nombre. Todo lo que pongas por teclado lo va a meter 00:04:52
dentro de esta variable que se llama nombre. Después, le damos a la vez a escribir y le 00:04:57
decimos el saludo. Hola, ¿cómo estás? Vamos a ponerlo por aquí, coma, nombre. ¿Qué 00:05:01
he hecho aquí? Lo que he hecho es, primero, he escrito una cadena de texto en el que escribir, 00:05:17
Lo que nos va a permitir es leer una cadena de texto en la pantalla. 00:05:22
Leer nos permite leer, el usuario puede escribir, le hacen una pregunta, 00:05:25
se aparece un cursor parpadeando y lo que escriba se va a almacenar en esta variable que se llama nombre. 00:05:30
Acordaos que una variable es una opción de cajón con un nombre donde ahí podemos guardar algo. 00:05:35
¿Qué guardaremos? Pues en función de qué tipo sea la variable. 00:05:40
Si es tipo entera, guardaremos números enteros. 00:05:43
Si es tipo decimal, guardaremos números decimales. 00:05:45
y es tipo cadena, guardaremos 00:05:50
cadenas de texto 00:05:52
después digo que 00:05:54
escriba hola, ¿cómo estás? y a continuación 00:05:56
lo que ha escrito el usuario 00:05:58
en la variable nombre, ¿vale? 00:06:00
y veis 00:06:01
lo primero que me hace es poner hola, ¿cómo estás? 00:06:03
pongo Paco 00:06:06
y me saluda, ¿veis? 00:06:07
hola, ¿cómo estás Paco? ¿veis? este es el algoritmo 00:06:09
me han pedido este algoritmo y lo resuelve 00:06:12
aquí tiene 00:06:13
¿por qué he querido que veáis esto? 00:06:15
no porque quiera que aprendáis este programa 00:06:17
sino porque aquí tiene la oportunidad de que veamos lo que es un diagrama de flujo. 00:06:19
Este programa lo convierte luego en un diagrama de flujo y veis, este algoritmo, como hemos visto, es finito. 00:06:25
Tiene un comienzo y un final con una serie de pasos que van en una única dirección. 00:06:32
Siempre es unidireccional. 00:06:36
Podría ser bidireccional, pero luego, aunque sea bidireccional, el algoritmo seguirá una sola línea. 00:06:38
que lo que hace primero lo representa el inicio y el final del algoritmo 00:06:44
en diagramas de flujo lo representa a través de elipses 00:06:49
y cuando haces una operación de escritura en pantalla 00:06:53
lo representa con este paralelepípedo o rectángulo inclinado 00:06:58
en el que veis que la flecha está hacia arriba 00:07:02
que aquí quiere decir que escribe en pantalla 00:07:04
a continuación pasa a la siguiente línea que es nombre 00:07:06
y lo que hace es otro paralelepípedo 00:07:10
Tanto las operaciones de entrada y salida en el ordenador 00:07:12
Las va a ejecutar y las representa a través de un parámetro 00:07:18
Pero ahora el mismo lo representa como una flecha hacia la variable que yo he puesto 00:07:21
O sea, que lo que escriba irá aquí dentro 00:07:27
A continuación, la siguiente sigue con la flecha 00:07:30
Y sigue a otra operación en la que sería escribir 00:07:33
Y veis, es otro parámetro en el que pone 00:07:36
Hola, ¿cómo estás? 00:07:38
Y esta sería la flecha que indica que es de salida 00:07:39
Aquí terminaría el algoritmo 00:07:42
Esta es la manera 00:07:44
La segunda manera de poder representar 00:07:45
Un algoritmo 00:07:51
Bien con pseudocódigo, que sería esto 00:07:52
O bien con 00:07:56
Con diagrama de flujo 00:07:57
Una vez que tenemos resuelto el problema 00:08:00
Bien con esta vía, bien con esta otra vía 00:08:02
Pasaremos a codificar esto 00:08:04
En algún lenguaje de programación 00:08:06
Y haremos lo que se llama el programa 00:08:07
¿Veis la diferencia entre una cosa y la otra? 00:08:09
¿Vale? 00:08:11
Y aquí tenéis un vídeo con el DGD, que es un programa para principiantes y que nos permite crear diagramas de flujo como el que he hecho yo. 00:08:12
También nos habla de PESAIN, que es un programa que nos permite ejecutar código, vamos, realizar pseudocódigo. 00:08:29
Está muy bien porque es en castellano y es muy sencillo 00:08:38
Y nos permite meter aquí condicionales, bucles, etc. solo dándole con un botón 00:08:43
Paradigma de programación 00:08:49
¿Qué es un paradigma de programación? 00:08:54
Es un modelo básico para el diseño e implementación de programas 00:08:57
Es como si dijéramos una serie de características que va a tener ese lenguaje de programación 00:09:00
A la hora de diseñarlo 00:09:05
que las personas que han diseñado cada uno de los lenguajes de programación se basan en un paradigma. 00:09:07
Eso es lo que compete a esto que aparece aquí. 00:09:13
Es un modelo básico para el diseño e implementación de programas. 00:09:16
Hay una subdivisión en dos, que serían la programación declarativa y la imperativa. 00:09:19
La declarativa no nos importa, es muy diferente a la programación imperativa. 00:09:26
Una programación imperativa es un desarrollo de un algoritmo detallado, como lo que hemos hecho, de arriba a abajo. 00:09:32
A base de una serie de instrucciones que se van ejecutando una detrás de otra. Esto son ejemplos de lenguajes, Python, Java, C++, pero la declarativa se basa en una serie de condiciones o proposiciones y aquí ya no nos importa el resultado, sino en cómo se hace, sino en qué es lo que quiere que haga. 00:09:37
Algunos detalles de la programación declarativa que son, ahora estamos hablando de una programación lo que se llama lógica, en el que se va a solucionar, o sea, el problema que se quiere solucionar lo va a describir, pero no las instrucciones necesarias para generar esa solución. 00:09:59
No sé si me explico. En cambio, en la imperativa sí necesitamos esas instrucciones que necesitas para generar la solución. Aquí no se preocupa por eso, sino por lo que se quiere solucionar. 00:10:22
Un ejemplo de este sería el lenguaje SQL. Este es de indicar que dentro de las generaciones de lenguajes de programación, por ejemplo, la programación imperativa con Java, estos son lenguajes de tercera generación, 00:10:33
Pero en la declarativa serían ya lenguajes de cuarta generación. Dentro de la primera generación estaba el código máquina, ensamblador, etc. Pero el código máquina sería la primera generación, la segunda generación sería el ensamblador y luego la tercera generación serían todos estos lenguajes que hay aquí. 00:10:48
en cuarta generación tendríamos la programación declarativa 00:11:08
como por ejemplo ese 00:11:13
Fases de la programación, creo que esto lo hablamos 00:11:13
pero bueno, hay tres fases 00:11:18
primero, fase de resolución del problema 00:11:20
a ver, aquí te proponen un problema 00:11:22
ese problema, lo primero que vas a hacer es analizar ese problema 00:11:26
si a ti te dan un problema y no entiendes el problema 00:11:31
porque no lo has analizado, es muy difícil que lo vayas a resolver 00:11:35
Entonces esa primera fase sería la de resolución del problema. Para resolverlo lo primero que tienes que saber es entender el problema. Una vez que has entendido el problema, porque has hecho un análisis de ese problema, se encarga de que, por medio de estos métodos que hemos visto aquí arriba, o bien por pseudocódigo o bien por diagrama de flujo, resolver ese problema, resolver el algoritmo que va a resolver el problema. 00:11:39
Esto sería una fase como de diseño. Una vez que ya lo ha resuelto, vas a codificarlo, vas a pasar a la fase de implementación y a testearlo a través de pruebas. 00:12:05
Y luego una última fase sería la fase de explotación y mantenimiento. Es ya cuando el programa está en ejecución en un entorno, 00:12:18
o en un programa empresarial o donde sea, donde se está ejecutando, donde se está utilizando y donde el cliente puede encontrar algún bug 00:12:25
o encontrar algún problema, o incluso pueden sugerir algunas mejoras que puedan llevar otra vez hacia atrás en estas tres fases 00:12:32
y establecer una nueva versión de ese programa. Esa sería la fase de explotación y de mantenimiento. 00:12:44
Fijaos, aquí la fase de resolución del problema habla de un análisis y de un diseño. 00:12:51
El análisis es lo que he dicho yo, que tienes que hacer preguntas sobre ese problema. 00:12:57
Imaginaos, este problema es muy sencillo 00:13:00
Fijaos, me están diciendo que haga un algoritmo 00:13:03
Que permita saludar a un usuario 00:13:08
Escribir su nombre y que el programa le salude 00:13:11
El programa es muy sencillo 00:13:13
Pero primero, imaginaos un algoritmo que os pidan 00:13:16
Que sea muy complejo 00:13:19
A lo mejor el que os solicita que resolváis ese problema 00:13:21
Lo tiene muy claro él 00:13:27
Pero a lo mejor nosotros, que tenemos que codificar, que tenemos que diseñar previamente ese algoritmo, pues no lo tenemos tan claro. Entonces, ¿qué es lo que haríamos lo primero? Es un análisis, realizar preguntas al cliente, ver cuál es la información que tiene ese problema, qué datos son necesarios, bueno, muchas cosas que nos van a permitir entender el problema. 00:13:29
entonces esa sería la fase de análisis 00:13:47
una vez que hemos hecho la fase de análisis 00:13:49
aquí ya se supone 00:13:52
a partir de esta línea 00:13:54
se supone que ya entendemos el problema 00:13:56
como lo entendemos, podemos diseñar 00:13:57
un algoritmo, ¿cómo se diseñaba? 00:14:00
con diálogo de fujo, con tabla de decisiones 00:14:02
con pseudocódigo 00:14:04
hay más métodos, pero bueno, esos serían 00:14:05
principalmente los que os voy a poner aquí en el aula 00:14:07
se diseñaría 00:14:10
¿qué sucede cuando ya se ha diseñado? 00:14:13
pues ya pasamos a la siguiente fase 00:14:16
que es la fase de implementación. Esa fase de implementación también tiene dos subfases. 00:14:17
Una primera fase sería la de codificación. Ahora ya no estamos hablando de algoritmo, problema, diseño. 00:14:22
Estamos hablando de codificación o construcción de un programa, que es diferente con lo que hemos visto como algoritmo. 00:14:30
Y ahora tenemos que codificar ese programa y en esta fase incluso podemos elegir o llegar a un acuerdo 00:14:38
sobre qué lenguaje de programación elegir, porque luego todos los lenguajes de programación 00:14:43
nos sirven para solucionar todos los problemas. 00:14:48
Hay lenguajes de programación que son más aptos para una serie de problemas 00:14:51
y otros lenguajes de programación más aptos para otros problemas. 00:14:53
Entonces, incluso en esta fase podríamos elegir qué lenguaje de programación usar 00:14:56
y para codificar ese algoritmo que ya hemos diseñado. 00:15:00
Lo construimos, lo compilamos, bien a través de un compilador o bien a través de un intérprete. 00:15:05
¿De qué depende esto? 00:15:11
Esto dependerá del lenguaje de programación que utilicemos. Si utilizamos un compilador, serán lenguajes como C, C++, Java, en el que lo que va a hacer, Java sería más a través de un intermedio bytecoded, pero no sería a través de un intérprete. 00:15:11
Bueno, sí, sería una máquina virtual, pero bueno, pongamos C, C++. 00:15:29
Entonces, a través de un compilador que nos va a pasar a transformar el código 00:15:34
escrito en C o C++, nos va a transformar en un ejecutable en código macro. 00:15:39
Por tanto, un compilador es mucho más rápido que lo que puede ser un intérprete. 00:15:47
Bueno, y el compilador en Java estaría en Java C, en el que también nos compilaría, 00:15:53
que nos generaría el bytecode. 00:15:57
En cambio, un intérprete ¿qué hace? 00:15:58
Ya digo, esto dependerá de la elección de uno o de otro 00:16:02
Dependerá del lenguaje de la programación que hayas elegido 00:16:05
Un intérprete, por ejemplo, como puede ser en PHP 00:16:07
¿Qué es lo que hace? 00:16:10
Va leyendo línea a línea cuando está en ejecución 00:16:12
Y va a ejecutar esas líneas 00:16:15
Las va traduciendo y ejecutando línea a línea 00:16:19
Por lo tanto, será más lento que lo que puede ser a través de un compilado 00:16:21
Una vez que ya hemos elegido el lenguaje de programación, hemos elegido si va a ser un concepto de lenguaje de programación, si va a ser a través de un compilador, a través de un intérprete y hemos codificado el programa y lo hemos compilado o lo hemos ejecutado, mejor dicho, pues tenemos que pasar a otra subfase dentro de la implementación que serán las pruebas de ejecución y validación. 00:16:26
Estas pruebas son indispensables a la hora de realizar un programa porque nos va a permitir, dentro del dominio de posibilidades que puede tener ese programa, generar una serie de pruebas que, siempre que se realizan pruebas a un programa, no queda exento al 100% que no tenga un error. 00:16:47
Eso nunca es así. Lo que pasa es que cuando nosotros hacemos una serie de pruebas, esas pruebas las ejecutamos con respecto a lo que queremos probar, a lo que realmente queremos que no falle, 00:17:10
sus valores límite, un montón de pruebas que se pueden realizar y cuantas más pruebas y más vayan enfocadas a lo que nos importa del programa, pues mayor seguridad tendremos de que ese programa funcione de manera correcta y no genera errores. 00:17:23
Pero ningún tipo de pruebas nos da un 100% absoluto de que un programa no tenga error. 00:17:36
Luego ya nos pasa a la tercera fase que sería la explotación 00:17:45
que es la que he dicho antes, aquí se van viendo si hay nuevas necesidades 00:17:49
que va a requerir 00:17:53
introducir cambios en el programa 00:17:56
o si tiene algún error que se detecta a posteriori 00:18:01
que hay que modificar 00:18:04
¿Qué más? Tenemos el ciclo de vida del software 00:18:06
El ciclo de vida del software es una serie de fases 00:18:11
En las cuales pasa el software 00:18:16
Donde pasa a través del software 00:18:17
Digamos, como si 00:18:20
¿Cómo explicarlo? 00:18:24
A lo largo de toda la creación del software 00:18:26
Hay una serie de fases 00:18:29
Y eso se le llama el ciclo de vida 00:18:30
Ese ciclo de vida pasa por estas distintas fases que aparecen aquí 00:18:32
Una de las primeras y la segunda ya nos suena 00:18:38
de lo que hemos dicho antes. Una es la especificación y análisis de requisitos. 00:18:41
El análisis de requisitos sea tanto de requisitos funcionales como de requisitos no funcionales. 00:18:45
Esos análisis de requisitos se hace 00:18:51
con el cliente y se determina qué es lo que necesita 00:18:53
la aplicación, qué es lo fundamental 00:18:56
para su funcionamiento y luego, aparte, también requisitos 00:18:58
no funcionales, pero que pueden implicar 00:19:05
tenga un gran rendimiento en la aplicación 00:19:07
o que tenga una gran seguridad 00:19:13
o ya serían requisitos no funcionales. 00:19:16
Pero todo eso antes de comenzar 00:19:18
tiene que estar detallado 00:19:22
para luego pasar a la fase de diseño. 00:19:24
La fase de diseño es la que hemos visto antes. 00:19:28
Es la fase de diseño de la aplicación 00:19:30
del algoritmo que vayamos a resolver. 00:19:33
Esa fase de diseño se puede realizar tanto en pseudocódigo, se puede realizar en diagramas de flujo, lo que queráis. 00:19:37
Y ya pasa la fase de codificación, que era la fase de implementación que veíamos antes. 00:19:44
Esa fase de codificación es la codificación en lenguaje que uno quiera utilizar o que más se adapte a nuestro problema. 00:19:48
A continuación, una vez en la codificación, hay ciclos de vida donde las pruebas las ponen antes que la codificación. 00:19:58
hay veces en el que en función del problema 00:20:03
crean las pruebas previas incluso a la codificación 00:20:06
eso es en programación extrema 00:20:09
en el que se utiliza primero las pruebas 00:20:11
y luego la codificación 00:20:16
eso da una gran seguridad 00:20:17
pero que sepáis que cuando uno codifica algo 00:20:19
tiene que ir añadido con pruebas 00:20:22
pruebas que cubran el mayor margen de posibilidad 00:20:25
de errores que pueda tener nuestra aplicación 00:20:28
Luego ya pasa la instalación en el lugar donde se vaya a ejecutar y el paso a producir. 00:20:32
Luego queda el mantenimiento, que es lo que hablaba antes de si necesita mejoras, si hay algún error que a posteriori pueda salir, etc. 00:20:38
Con lo cual, si hubiera que realizar alguna mejora o algo, tendríamos que ir otra vez hacia atrás en ese ciclo de vida para poder sacar la nueva versión de la vida. 00:20:45
Pasamos a los lenguajes de programación. Un lenguaje de programación es como un idioma, tiene una serie de reglas léxicas, sintácticas y semánticas. 00:20:57
Es igual, va a estar definido con unas reglas léxicas, o sea, va a tener una serie de palabras reservadas, es el lenguaje, eso se llama la regla léxica, también sintácticas, como uno de esas palabras para formar una frase, esto es igual, podría ser por nuestro idioma. 00:21:11
Y semántica, una vez que ya he unido ese conjunto de palabras en una frase, saber si realmente tiene sentido o no. 00:21:29
Entonces, un compilador que pasa a través de estas tres reglas. 00:21:38
Primero comprueba léxicas, comprueba si esas palabras que aparecen en ese lenguaje son las correctas o no. 00:21:42
Luego, sintácticas, si se han construido bien las frases. 00:21:50
Y semánticas, si luego realmente eso tiene sentido. 00:21:53
Una regla semántica podría ser si un tipo, por ejemplo, una variable tiene el tipo adecuado a la inicialización de la misma. 00:21:56
Bien, ya sabemos lo que es un lenguaje de programación. La gramática del lenguaje serán todas las reglas aplicadas a ese conjunto de símbolos y parábolas especiales de ese lenguaje. 00:22:07
Y aquí tenemos la gramática, está definida por un léxico, una sintaxis y una sema. 00:22:16
El primer lenguaje que surgió fue el lenguaje máquina 00:22:20
que es un lenguaje de primera generación 00:22:24
en el que era un lenguaje lo que se llama de bajo nivel 00:22:27
No sé si lo dije otra vez, pero los lenguajes de bajo nivel 00:22:31
son aquellos que están muy cercanos a la máquina 00:22:34
Los lenguajes de alto nivel son los que están más cercanos a la persona 00:22:37
¿Cómo distingo yo eso? 00:22:41
Un lenguaje muy cercano a la máquina es el que está en un lenguaje que solo entiende el ordenador 00:22:43
Un ordenador solo entiende de ceros y unos 00:22:49
Tensión, no tensión 00:22:52
Un uno, un cero 00:22:54
No entiendo otra cosa 00:22:56
Entonces, lógicamente, si tú le pones un programa 00:22:57
Con ceros y unos 00:23:00
El lenguaje es de bajo nivel 00:23:01
Está muy cercano a la máquina 00:23:04
La máquina lo entiende 00:23:05
Ponte tú a programar 00:23:07
Lenguaje a máquina 00:23:10
Para programas muy sencillos 00:23:11
Pues vale, pero 00:23:14
La cantidad de ceros y unos que se te puede convertir 00:23:15
Es inviable. Entonces, con ello surgieron nuevos lenguajes a partir del lenguaje máquina, que se alejaban un poquito de la máquina y se acercaban un poquito hacia nosotros. ¿Para qué? Para que tuviéramos una mayor facilidad de poderlos programar. 00:23:18
Entonces, los lenguajes de programación vienen de inglés. ¿Por qué? Porque fueron creados por personas americanas o inglesas, entonces por eso aparecen los lenguajes de programación en inglés. 00:23:32
El lenguaje asamblador fue el primero en el que utilizaba reglas memotécnicas, ya introducía estas palabras que aparecen aquí para dividir, para multiplicar, para mover y ya lo que hacía es que se alejaba un poquito del lenguaje de programación, exactamente código máquina y se acercaba un poquito a nosotros, a las personas. 00:23:48
Ya teníamos alguna palabra que podíamos entender para poder programar. 00:24:08
Aún así, el código máquina también es un lenguaje en el que es difícil de programar, 00:24:12
pero siempre es mucho más sencillo que programar, por ejemplo, un código máquina. 00:24:19
Después surgieron ya los lenguajes compilados, que son ya los lenguajes de alto nivel. 00:24:25
Pascal, Fortran, CET y demás lenguajes que se parecen mucho más, 00:24:31
O sea, que el ser humano es capaz de interpretar mucho mejor que una máquina. 00:24:36
¿Por qué? Porque ya parece como lo que hablábamos arriba, 00:24:42
con una serie de palabras, unas reglas léxicas, unas sintácticas y semánticas, 00:24:44
que es como nuestro idioma en castellano. 00:24:50
Tiene un léxico, una serie de palabras, una sintaxis, 00:24:53
y es muy parecido a lo que es un lenguaje humano. 00:24:56
De ahí que sean los llamados lenguajes de Aldo. 00:24:59
aquí viene como lo que es un compilador 00:25:02
como genera el código fuente 00:25:05
no me voy a meter mucho en eso 00:25:07
y luego los lenguajes interpretados 00:25:09
ya lo he dicho 00:25:12
Perl, Python, PHP, Javascript 00:25:13
todos estos son lenguajes en el que en vez de 00:25:16
compilar, establecer 00:25:17
y generar el código objeto 00:25:20
con un código 00:25:21
que sería el código fuente 00:25:23
y lo que va a realizar a través de 00:25:25
fijaos, aquí hay una tabla 00:25:28
aquí hay una tabla 00:25:29
en el que el compilador 00:25:31
¿qué es lo que hace? Fijaos lo que hace el compilador 00:25:34
un compilador lo que hace es 00:25:36
analiza el léxico, ve si las 00:25:37
palabras que tú has escrito 00:25:40
en ese código fuente se corresponden 00:25:41
con el lenguaje de programación 00:25:44
que está compilando 00:25:45
luego analiza 00:25:47
a nivel sintáctico si las frases 00:25:50
que has creado en el lenguaje 00:25:52
imaginaos si yo le he creado 00:25:53
fijaos aquí en 00:25:56
Java, pues lo primero que va a hacer 00:25:58
es el lenguaje léxico 00:26:00
el compilador lo primero que va a hacer es 00:26:02
primero coge la palabra public 00:26:03
bueno, empezaría por aquí 00:26:05
coge la palabra public 00:26:07
y hace un análisis léxico, mira a ver si esa palabra existe 00:26:09
mientras las palabras reservadas las dejaba 00:26:12
y ve que sí, que existe 00:26:14
luego coge class y también ve que también existe 00:26:15
a nivel léxico eso no está cumpliendo 00:26:18
luego ve que esto 00:26:20
no existe 00:26:21
pero debe ser 00:26:23
algún literal, algún nombre 00:26:25
que el propio programador ha puesto 00:26:27
A continuación, hace un análisis de esta frase, hace un análisis sintáctico. Ve si todo esto encaja o no. Si poniendo public, class y luego un nombre o un literal, esto encaja o no a nivel sintáctico. 00:26:29
llegar a la conclusión 00:26:46
que sí, está bien escrito 00:26:48
y luego a nivel semántico 00:26:50
a nivel semántico es un poco más complejo 00:26:52
pero es ver si tiene sentido 00:26:54
lo que ha escrito aquí 00:26:56
si este método está dentro de esta clase 00:26:58
pues eso es lo que hace 00:26:59
lo que haría 00:27:01
tanto en C, C++ 00:27:03
como lo haría en Java cuando compila 00:27:05
para formar el bytecode 00:27:07
una vez que ha pasado por esas tres 00:27:08
genera un código intermedio 00:27:11
hay un optimizador de código 00:27:13
aquí, lo optimiza 00:27:15
y a continuación genera el código objeto 00:27:17
y aquí ya tenemos que esto ya es el código 00:27:19
máquina, o sea, los ceros y unos 00:27:21
que va a entender ordenar 00:27:23
eso sería en cuanto a un compilado 00:27:24
en cambio el intérprete que lo pone 00:27:27
aquí, que serían estos lenguajes 00:27:31
de programación, ahora lo que está haciendo 00:27:32
él se pone en ejecución y coge la primera línea 00:27:34
y hace todo eso, pero lo va interpretando 00:27:36
una a una 00:27:39
la intérprete también que es correcto 00:27:40
sigue con la siguiente 00:27:42
no genera un programa ejecutable 00:27:43
como pasaba con el compilado 00:27:46
lógicamente, estos lenguajes de programación 00:27:48
van a ser más lentos 00:27:51
que lo que puede ser un lenguaje en C11 00:27:53
por eso, por ejemplo 00:27:54
cuando tú quieres hacer lo que hablaba antes 00:27:57
en función del problema 00:27:59
¿qué lenguaje de programación 00:28:01
voy a utilizar? 00:28:03
pues fijaos, si yo tengo que hacer 00:28:05
una aplicación que va a 00:28:07
funcionar en tiempo real 00:28:09
¿qué elegiríais? ¿un intérprete o elegiríais un compilado? 00:28:10
yo elegiría C o C++ 00:28:13
¿Por qué? Porque es muy rápido y necesitamos que las respuestas sean en tiempo real. 00:28:15
Entonces, lo realizaría con C o con C++, pero no lo realizaría con Javascript o con Perl. 00:28:21
Y pasamos ya al lenguaje de programación Java. 00:28:31
El lenguaje de programación Java es un lenguaje que tiene una sintaxis muy parecida a C++. 00:28:34
Bueno, en teoría, C++ es un lenguaje de programación que tiene la posibilidad de los punteros. 00:28:43
Cosa que los punteros, un puntero es un acceso directo a memoria. 00:28:50
C y C++ tenían un problema. 00:28:54
Primero, para programar es más complejo debido a los punteros. 00:28:57
Y además, la puedes generar una muy buena accediendo a accesos a memoria y provocando problemas. 00:29:01
¿Qué sucede? Que Java los punteros los tiene camuflados, son de esos dividendos a memoria y veremos cómo los tiene camuflados Java con respecto a hace marcas, pero que sepáis que en Java no hay punteros. 00:29:11
Acordaos que 00:29:26
Necesita Java, que era independiente de la plataforma 00:29:30
Y necesitaba una 00:29:32
Una máquina virtual de Java 00:29:33
Esa máquina virtual de Java lo que hacía era 00:29:36
Ejecutar el bytecode 00:29:39
Que generabas al compilar 00:29:41
Por eso se le llama el byte once 00:29:42
O runner 00:29:45
Se puede hacer 00:29:46
En cualquier lugar, independiente de la plataforma 00:29:49
Si allí tiene una 00:29:51
Máquina virtual, se va a poder ejecutar 00:29:53
También está basado, aparte de, acordaos, en cuanto a los paradigmas, habíamos visto que había dos tipos de paradigmas en declarativo imperativo. 00:29:55
Java es un lenguaje imperativo, pero además también es un lenguaje orientado a objetos. 00:30:12
hay lenguajes en el que tienen varios paradigmas 00:30:18
no solo uno, entonces Java 00:30:21
es un lenguaje orientado a objetos 00:30:23
¿qué quiere decir? que interpreta 00:30:25
tú puedes utilizar también Java 00:30:27
como vamos a hacer aquí 00:30:29
luego lo veremos en un ejemplo de lo de las tres 00:30:30
notas, puedes utilizarlo a través de esta aplicación 00:30:33
como un lenguaje imperativo 00:30:35
sin necesidad de crear, de utilizar 00:30:37
herencia, ni polimorfismo 00:30:39
ni encasulación, etc. 00:30:41
pero Java está 00:30:43
diseñado ¿para qué? para 00:30:45
ser un programa orientado a objetos 00:30:46
para interpretar el mundo real 00:30:50
que tiene a su alrededor todo como un objeto 00:30:52
con una serie de atributos y una serie de 00:30:54
métodos que ya veremos más adelante 00:30:56
esta es una breve historia de 00:30:57
Java, leerlo 00:31:01
no lo voy a repasar, que sepáis 00:31:03
que en Java necesitamos un JDK 00:31:05
que es donde está el compilado y luego 00:31:07
un JRE donde teníamos la 00:31:09
máquina virtual, acordaos que con 00:31:11
el 25 LTS 00:31:13
he utilizado solo JDK 00:31:15
y hemos obviado el JR porque ya viene introducida la máquina virtual dentro de la JDK. 00:31:17
Estas son las distintas plataformas de Java. 00:31:23
Java 2.0, esto de entorno SAN, antiguamente Java pertenecía a SAN Microsystems, que era la empresa. 00:31:27
Luego, posteriormente, la compró Oracle y es Oracle el que habla de esta. 00:31:37
Aquí hablo también de los applets, de lo metido, pero bueno, los applets ya no se utilizan. 00:31:42
Luego, el J2C es pensado para crear aplicaciones, esto sería para aplicaciones de escritorio, el J2C, pero el J2C sería para aplicaciones web empresariales, 00:31:48
tanto en el lado servidor, a través del lado servidor, donde podemos crear una aplicación a nivel de con los servlets, los javabins, bueno. 00:31:58
El JavaFX, que lo veremos, es para generar aplicaciones de Internet enriquecidas. Podríamos crear botones, menús, etc. 00:32:11
Luego tenemos el Java embebido, para entremedio de las cosas, y el JavaCard, que es tecnología que permite la producción de pequeñas aplicaciones Java en tarjetas inteligentes. 00:32:19
con respecto a la 00:32:28
programación orientada 00:32:35
a objetos y Java 00:32:37
ya he dicho que todo se entiende 00:32:38
como un objeto 00:32:41
lo único que vamos a hacer 00:32:45
es que 00:32:48
Java, la programación orientada a objetos 00:32:49
se basa en la abstracción 00:32:52
¿qué significa? 00:32:53
que se generan clases 00:32:55
que es como una abstracción 00:32:57
por el mundo real, en el que en esas clases podemos instanciar objetos. 00:32:59
Instanciar objetos de esa clase en el que cada uno tendrá una serie de propiedades 00:33:03
y una serie de métodos diferentes. 00:33:08
Aquí entran tres palabras fundamentales dentro de la promoción ambiental de objetos. 00:33:11
Esto pasa igual tanto en Java, en C++, en Python, que son encapsulación, herencia y polivorcia. 00:33:14
No me meto con encapsulaciones, tener resultados encapsulados de tal manera 00:33:21
que accede a tus clases no tiene necesidad de verla, de ver esa información. Esas variables 00:33:28
de miembro que tienes ocultas solo las pueden utilizar a través de métodos. En cuanto a 00:33:36
la herencia es permitir utilizar una clase que hereda de otra, en la que puede ser utilizar 00:33:42
sus métodos, etc. El polimorfismo lo veremos más adelante. Tampoco quiero que os metáis 00:33:46
mucho con el polimorfismo porque tenemos que verlo como un ejemplo para que sepáis, pero 00:33:53
que sepáis que polimorfismo, la misma palabra lo indica, son muchas formas. Aquí habla 00:33:57
de la independencia de la plataforma y que además permite un trabajo en red. Independencia 00:34:06
de la plataforma porque genera un bytecode que luego se puede ejecutar en cualquier lugar 00:34:13
donde lo lleves donde haya una máquina virtual. Y que trabaja en red, sí, Java ofrece múltiples 00:34:17
posibilidades con la comunicación vía TCP y IP. 00:34:23
Aquí ya se mete con seguridad y simplicidad, 00:34:31
que son dos características del lenguaje Java. 00:34:35
Esto está relacionado tanto con la independencia como con el trabajo en red. 00:34:37
Seguridad, ¿por qué? Porque los posibles accesos a zonas de memoria 00:34:42
sensibles no suceden como sucedían C y C++. 00:34:45
Acordaos, C y C++ utilizan los punteros. Aquí los accesos a memoria 00:34:49
están camuflados, hay acceso a memoria 00:34:53
pero tú no tienes un acceso 00:34:55
directo a memoria 00:34:58
esa es la gran diferencia con C++ 00:34:59
entonces en Java se ha eliminado 00:35:02
esto pasa también en CESAR 00:35:03
CESAR es un lenguaje que es muy parecido 00:35:05
a Java, Microsoft, en el que 00:35:08
también ha camuflado los punteros 00:35:10
porque permite 00:35:11
generar una gran seguridad, imaginaos 00:35:13
en C++, si uno 00:35:16
programa y ejecuta un programa que 00:35:17
permite con punteros acceder directo 00:35:19
a memoria y accede 00:35:22
a lugares de memoria 00:35:23
por ejemplo, los expertos en sistema operativo 00:35:25
o un método a saber 00:35:27
eso provocaba a veces 00:35:28
muchos problemas cuando el que programaba 00:35:31
en C++ no tenía una idea 00:35:33
bien clara 00:35:35
y entonces 00:35:36
puedes producir 00:35:36
grandes problemas de seguridad 00:35:40
en cambio Java o César 00:35:42
son lenguajes en el que 00:35:44
tienen la misma propiedad desde la 00:35:45
programación orientada a objetos pero 00:35:47
al no tener un acceso directo 00:35:49
a memoria pues le da una gran seguridad y luego la simplicidad java es tan potente como ceo temas 00:35:52
más y además es bastante sencillo bueno al principio para poder hacer un poco complejo 00:35:59
pero luego una vez como lo vas viendo ya veis como no es así además está relacionado fijaos 00:36:04
aquí habla del recolector de basura el garbage colector en el que este es el que se va a encargar 00:36:11
descargar de todos los pseudopunteros, que no son punteros, tenemos todos los accesos 00:36:17
a determinados objetos, pues todo ese tipo que son accesos a memoria, va a haber un reconector 00:36:24
de basura que cuando alguna referencia, que aquí lo llama, referencias a un determinado 00:36:31
objeto, deja existir el objeto, pues el reconector de basura elimina esa memoria. Antes eso se 00:36:36
tenía que hacer a través de los punteros por medio de enzimarlas. 00:36:42
aquí tenemos el Java y los bytecodes 00:36:47
y yo creo que voy a parar aquí 00:36:51
y no voy a hablar mucho más 00:36:54
lo único que quiero que veáis 00:36:56
que una vez que implementas el código fuente 00:36:57
lo que tenemos aquí, una vez que implementas este código fuente 00:37:00
a continuación con Java C se produce la compilación 00:37:04
y genera un bytecode 00:37:08
un bytecode que es como un código intermedio 00:37:10
Ese bytecode es el que luego tú puedes llevar a cualquier plataforma, con cualquier sistema operativo y con cualquiera que tenga la máquina virtual de Java, se puede ejecutar dicho bytecode. 00:37:14
Y así funciona Java y en eso consiste el bytecode. 00:37:27
Como dice aquí, es un conjunto de instrucciones en lenguaje de máquina que no son específicas a ningún procesador o sistema de cómputo. 00:37:31
de código de bytes o bytecodes 00:37:37
para una plataforma específica 00:37:40
sería quien los ejecute 00:37:42
independientemente 00:37:43
de la plataforma 00:37:46
todo depende de que tenga 00:37:47
el intérprete de Java o lo que es la máquina 00:37:49
virtual de Java 00:37:52
¿hasta aquí alguna duda? 00:37:54
a ver, separación 00:38:06
ah, lo de separación después de las comillas 00:38:07
es un efecto visual 00:38:12
¿por qué? porque fijaos, yo cuando 00:38:13
hago esto aquí, si le quito la separación 00:38:15
me va a aparecer el nombre Paco pegado a llamas 00:38:18
a los dos puntos y queda feo 00:38:21
¿vale? yo siempre pongo 00:38:22
¿esto qué pasa? 00:38:23
que cuando lo hago aquí 00:38:27
aquí se ha bloqueado 00:38:33
pero bueno, básicamente es eso 00:38:37
y cuando yo le pongo 00:38:39
a ver aquí 00:38:42
cerrar la ventana del editor 00:38:43
ah, que cierre 00:38:45
que cierre esto 00:38:51
vale, si yo le quito el espacio 00:38:53
es visual 00:38:55
cuando le deje agotar 00:38:57
no sé por qué 00:38:58
como me ha quedado esto 00:39:03
como así 00:39:03
si yo le deje agotar 00:39:05
veis 00:39:16
te queda pegado esta 00:39:39
a Paco 00:39:41
le dejo ahí un espacio 00:39:42
para que quede visualmente mejor 00:39:44
nada más que eso 00:39:46
no hay mucha más 00:39:48
opaco 00:39:49
aquí queda el espacio y la frase queda bien 00:39:51
una tontería 00:39:54
bueno, pues 00:39:55
nos vamos a meter ahora con Java 00:39:57
y vamos a ver un ejemplo 00:40:06
aquí tengo lo que vamos a ver 00:40:07
primero, tipos de datos 00:40:10
vamos a poner aquí el 1 00:40:12
y que vamos a ver, el único tipo de datos 00:40:13
acordar de lo que era una variable 00:40:16
Una variable que era un nombre que nosotros le damos donde algo, vamos a guardar algo. 00:40:17
Y además, esa variable, ya que su nombre lo indica, es posible que pueda modificarse, 00:40:26
pueda tener un diferente valor. 00:40:33
La puedes modificar a lo largo de la ejecución del programa. 00:40:35
Y si yo pongo esto, int nota igual a 10, aquí estoy definiendo una variable que se llama nota, la estoy declarando con un tipo entero, así es en Java, int, y con un valor de día. 00:40:38
Lógicamente esto no tendría mucho sentido 00:40:57
¿Por qué? Porque las notas pueden ser decimales 00:41:00
Puedes tener un 4 con 3 o un 8 con 5 00:41:04
Entonces yo no crearía una variable nota con un tipo entero 00:41:07
Veis que aquí el formato es 00:41:15
Entonces yo puedo poner por un double 00:41:17
Que esto sería un tipo decimal 00:41:18
También estaría float 00:41:23
Doble sería para números de mayor tamaño que lo que es un float, pero bueno, en principio lo llamamos como un doble. 00:41:25
Esto nos permite poner valores decimales. 00:41:31
Con int nos daría error. 00:41:35
Entonces, ¿qué partes tiene una variable? 00:41:38
Si la ponemos aquí, tendría... 00:41:41
Primero tienes que definir el tipo. 00:41:45
Después, el nombre de la variable. 00:41:55
y luego le asignamos un valor. 00:41:57
El valor sería el valor que tiene aquí. 00:42:04
Y esto sería para definir y declarar una variable. 00:42:07
Vamos a utilizar el double, que sería para números decimales. 00:42:11
Esto sería la primera parte y que sepáis cómo se define una variable 00:42:16
y cómo se pone el tipo en Java. 00:42:19
Este sería el ejemplo de cómo definir la variable nota con el tipo double. 00:42:22
¿Qué tenemos en cuanto al punto 2? 00:42:29
¿Qué vamos a ver aquí en el punto 2? 00:42:39
Vamos a ver cómo crear un objeto. 00:42:41
Cuando nosotros creamos un objeto, 00:42:42
imaginamos que tenemos una clase que se llama clase perro. 00:42:44
Si yo quiero generar un objeto de la clase perro, 00:42:55
desde otra clase o incluyendo solo la misma clase, 00:42:57
¿cómo se generaría un objeto para generar un objeto dentro de la... 00:43:00
Para generar un objeto de tipo, o una estancia de un objeto perro, tendríamos que poner primero el nombre de la clase. 00:43:06
Después, cómo vamos a llamar a ese objeto. Vamos a llamarle, por ejemplo, Tor. 00:43:28
A continuación hay un operador que es el operador new, que nos está generando un objeto. 00:43:34
Este new perro nos generaría el objeto. 00:43:41
el objeto. Aquí estamos generando un objeto. Lo primero que tienes que poner 00:43:46
es el nombre de la clase, el objeto y luego 00:43:50
el operador name. El poner de nuevo el nombre de la clase 00:43:54
con estos dos paréntesis, lo que nos está indicando es que estamos creando un objeto 00:43:58
y estamos llamando a su constructor, que ya lo veremos, constructor sin parámetros. 00:44:02
Pero que sepáis que este es el formato de cómo 00:44:06
crear un objeto de una clase. 00:44:09
Una vez que ya hemos generado ese objeto, ya con su nombre, con el propio objeto en sí, puedo llamar a métodos y a atributos de esa clase. 00:44:13
Yo puedo decir, llamar al método ladrar, por ejemplo, de esa clase. 00:44:29
Veis aquí, este objeto Tobi, hemos creado un objeto Tobi de la clase perro y a continuación con el cuadrado punto hemos llamado al método ladrar. 00:44:37
¿Cómo sé que estoy llamando a un método? Por los paréntesis, es un método que no tiene parámetros en su interior. 00:44:48
También puedo llamar si no tienen un nivel de restricción privado 00:44:55
Podría llamar a su atributo 00:45:06
Esto sería cómo crear una clase 00:45:13
¿Por qué pongo aquí lo de la clase y lo adelanto? 00:45:17
Más que nada lo adelanto porque cuando hagamos un ejemplo sencillo 00:45:21
vamos a necesitar de la clase 00:45:24
Scanner. Entonces, para 00:45:27
utilizar la clase Scanner 00:45:29
vamos a crear 00:45:31
un objeto de la clase Scanner. ¿Por qué quiero 00:45:33
la clase Scanner? Porque nos va a permitir escribir 00:45:35
de una manera 00:45:37
no muy compleja, 00:45:39
permitir escribir, solicitar 00:45:40
datos por el teclado. 00:45:43
Vamos a hacer un programa en el que nos va a solicitar 00:45:45
tres notas por el teclado y luego nos va a calcular 00:45:47
la línea. Entonces, solo los he 00:45:49
introducido. Ya os digo, todo esto 00:45:51
lo vamos a ver mucho más adelante, pero mucho más adelante, entonces tampoco tenemos mucha 00:45:53
prisa, pero que os vaya ya sonando, ¿vale? 00:45:57
Lo que me interesa es que podamos hacer un programa sencillo. 00:46:01
¿Qué más quiero ver? ¿Cómo crear un método? Un método en cualquier lengua de 00:46:05
programación se va a crear. Aquí en Java, concretamente, 00:46:09
primero se va a crear con un nivel de acceso a ese método. 00:46:18
Que sepáis que existe el método de acceso público, 00:46:22
el método privado 00:46:25
y Protective 00:46:28
el Protective ya lo veremos más adelante 00:46:34
no quiero meter más de eso 00:46:40
pero cuando creamos un método 00:46:42
o un atributo 00:46:43
veis aquí 00:46:45
el método, esto es un método 00:46:49
un método que tiene 00:46:51
un nivel de acceso 00:46:54
tiene 00:46:54
un valor devuelto o void 00:46:57
el nombre del método y luego una serie de parámetros 00:46:59
que van entre paréntesis, esto sería un método 00:47:01
un método por ejemplo 00:47:03
vamos a 00:47:04
definir por ejemplo el método 00:47:07
ladrar 00:47:09
vamos a hacer que sea público 00:47:10
para que cuando alguien cree 00:47:13
un objeto perro 00:47:15
pueda acceder al método 00:47:17
a continuación 00:47:20
vamos a hacer que no devuelva 00:47:21
nada a ese método 00:47:23
y le ponemos siempre que no devuelve nada si le ponemos un point 00:47:24
si devolviera algo pues tendríamos que 00:47:27
poner el tipo que devolvió, si devuelve un entero 00:47:29
pues tendríamos que poner un entero, si se le devuelve un double 00:47:32
pues tendríamos que poner un double, lo que sea 00:47:34
entonces vamos a ponerle void 00:47:36
porque es un método que no va a devolver nada 00:47:38
y le ponemos el nombre 00:47:39
vamos a ponerle el nombre ladrar 00:47:42
¿necesita 00:47:43
parámetros este método? pues 00:47:46
voy a ponerlo como que no necesita 00:47:47
ningún parámetro, entonces se deja vacío 00:47:49
pero lo que nos indica ya 00:47:52
este 00:47:54
este método es que 00:47:55
no va a requerir parámetros ni va a devolver 00:47:58
ningún parámetro, y que va a ser público 00:48:00
¿vale? y a continuación 00:48:02
cuando defines un método, le abres llave 00:48:04
y le cierras llave 00:48:06
y esto sería 00:48:07
un método 00:48:12
esto que aparece aquí 00:48:13
sería un método 00:48:18
lo que pasa es que este método no tiene ninguna línea 00:48:20
adentro, habría que 00:48:22
introducir aquí las líneas para ver 00:48:23
que realiza ese método, entonces cada vez que yo 00:48:30
cree un objeto Tobi, que pertenece 00:48:32
a la clase perro, 00:48:34
y le llame a ladrar, ejecutará 00:48:36
las líneas que aparezcan aquí dentro de este 00:48:38
método llamado ladrar. Esto es igual que aparece 00:48:40
aquí. ¿Veis? Aquí 00:48:42
para poder yo ejecutar una aplicación 00:48:44
necesito de un método. Es 00:48:46
estrictamente necesario. Y ese 00:48:48
método se llama 00:48:50
mail. Mail principal. 00:48:51
O sea, cada vez que yo lo ejecute, va a ir 00:48:54
directamente a ese mail y va a 00:48:56
ejecutar lo que tenga dentro del mail. 00:48:58
Es así. 00:49:00
para las aplicaciones 00:49:01
entonces, veis, es un método 00:49:03
que se ha definido aquí, como público 00:49:05
luego como estático, que veremos 00:49:07
qué es eso, como void, que no devuelve ningún 00:49:09
valor, que se llama main y que 00:49:11
tiene dentro un array de 00:49:13
objetos string, ¿vale? 00:49:15
un array que indica con estos dos corchetes 00:49:17
que ya veremos lo que es, no tenéis que saberlo 00:49:19
aunque os aprendéis por ahora esto de memoria 00:49:21
o sea, de memoria, que sepáis 00:49:23
que es suficiente 00:49:25
cuando yo ejecute de aquí, él directamente 00:49:27
va a ir al main, va a buscar 00:49:29
donde está el método main y va a ejecutar lo que esté dentro del main, ¿vale? 00:49:31
Es lo único que va a hacer. 00:49:35
Si os fijáis, esto, además, necesito siempre, para poder utilizar, 00:49:35
para poder generar cualquier programa en Java, una publicación, 00:49:43
necesito de una clase. 00:49:46
Esta clase está definida aquí como pública, que puede hacer cualquiera, 00:49:48
luego la palabra reservada class y el nombre de la clase. 00:49:52
Y siempre sigue con una llave de apertura y una llave de cierre. 00:49:56
y dentro, veis que está ahí indentado 00:49:59
está el método main 00:50:01
entonces cuando yo lo ejecute, irá a la clase 00:50:02
project1 y ejecutará 00:50:05
el método main y las líneas 00:50:07
que hay adentro las ejecutará 00:50:09
aquí hay un system.out.println que lo que hace es 00:50:10
que llama al objeto out 00:50:13
de la clase system y llama a su método 00:50:15
println, veis que todo está separado por puntos 00:50:17
llama al println para que? 00:50:19
para escribir en pantalla, lo que ponga es 00:50:21
entre comillas dobles, que es esto de aquí 00:50:23
y luego el ln es para que haga un retorno 00:50:24
de cargo y pase a la siguiente línea 00:50:27
Cuando le doy a ejecutar 00:50:29
¿Puedo hacer una pregunta? 00:50:31
Sí, sí 00:50:33
Estás diciendo que el void 00:50:34
Se pone para que no devuelva nada 00:50:37
Pero luego se mete dentro y devuelve 00:50:39
Lo que esté dentro 00:50:41
No, no es ese 00:50:42
Te voy a poner un ejemplo 00:50:45
Este, por ejemplo, no devuelve nada 00:50:46
Pero se mete dentro y ejecuta sus líneas 00:50:52
¿Vale? 00:50:55
Las líneas que sea 00:50:57
Instrucción 00:50:58
Instrucción 2 00:50:59
¿vale? cuando yo llamo 00:51:14
genero el objeto Toby y le llamo 00:51:17
a ladrar, ejecuta estas dos instrucciones 00:51:19
y termina, ¿vale? 00:51:21
ahora vamos a hacer un método 00:51:23
que sea 00:51:25
un método que devuelva 00:51:27
algo, ¿vale? 00:51:30
vamos a poner 00:51:32
obtener 00:51:32
nombre 00:51:39
del perro 00:51:40
¿vale? y aquí ponemos 00:51:42
ahora este sí nos va a devolver 00:51:44
¿el qué? nos va a devolver un string 00:51:46
¿vale? este ejecutará 00:51:47
las instrucciones que tiene dentro 00:51:50
y a continuación tendrá una línea 00:51:51
que ponga un return 00:51:53
¿no? un return 00:51:58
y el 00:51:59
lo que sea ¿vale? 00:52:01
¿veis? la diferencia entre este 00:52:05
método que no devuelve nada y este 00:52:06
método que es, esto es como 00:52:08
los antiguos procedimientos y funciones 00:52:10
el procedimiento no devolvía nada 00:52:12
la función siempre devolvía un valor 00:52:14
Pues aquí este método 00:52:16
No devuelve nada 00:52:18
¿Veis? Ejecuta las instrucciones que hay dentro y ya está 00:52:20
O sea, entra en el método 00:52:22
Primero, genera el objeto Toby 00:52:24
Llama a ladrar, en cuanto lo lleva a ladrar 00:52:26
Se va a este método 00:52:28
Ejecuta la instrucción 1, ejecuta la instrucción 2 00:52:29
Sale y vuelve aquí a esta línea 00:52:32
Y sigue ejecutando las líneas que reviviera 00:52:34
¿Vale? En cambio, si ahora 00:52:36
Aquí en Toby 00:52:38
Después le pongo 00:52:39
Obtener 00:52:41
nombre 00:52:44
esto lógicamente 00:52:46
habrá que ponerlo igualado a algo 00:52:50
string 00:52:52
nombre 00:52:53
igual a todo 00:52:56
¿qué estoy haciendo aquí? 00:52:58
estoy llamando 00:53:00
con el objeto toby al método obtenerNombre 00:53:01
y lo tengo que 00:53:05
igualar a un string, ¿por qué? 00:53:06
porque me va a doblegar un string 00:53:08
¿qué hace? llama al obtenerNombre 00:53:09
ejecuta la sustitución 1, ejecuta la sustitución 2 00:53:12
y luego nos retorna el nombre del perro 00:53:14
y lo mete dentro de la base 00:53:17
de la variable 00:53:18
¿Vale? 00:53:20
Se entiende más o menos 00:53:23
la diferencia entre lo que es 00:53:24
una función, un método con 00:53:26
void y con, dependerá de lo que tú 00:53:28
quieras hacer, si quieres devolver 00:53:30
algo o no lo quieres devolver 00:53:32
¿Hasta aquí bien? 00:53:34
Más o menos 00:53:38
¿Qué más quiero 00:53:38
que veamos? 00:53:40
Diferencia entre estático y no estático 00:53:42
Aquí ya vienen curvas, ¿vale? Entonces, primero voy a hablar de la clase Scanner, ¿vale? 00:53:44
La clase Scanner, solo vamos a saber cómo la clase Scanner, el 5. 00:53:51
Para generar un objeto de la clase Scanner, pues que sepáis que es así, ¿vale? 00:53:59
Vamos a llamarle sc igual a Scanner, a new, ¿recordaos? Estoy generando un objeto de la clase Scanner, ¿vale? 00:54:04
La clase scanner tendrá sus métodos, utilizamos de la misma y requiere de un parámetro cuando crea su objeto, que es system.in, ¿vale? Esto es la clase system y dentro de la clase system el objeto in, in es el objeto que vamos a necesitar para poder pedir un dato y poderlo introducir por tecla, ¿vale? 00:54:11
pero que sepáis que esto es lo que vamos a ver 00:54:34
y esto es lo que va a aparecer en el programa 00:54:36
¿vale? pero aquí 00:54:39
sencillamente estamos llamando a un objeto 00:54:40
de la clase Scanner que le llamamos ST 00:54:42
y que le pasamos un parámetro que es el Systeming 00:54:44
que por ahora, aunque sepáis que 00:54:46
esto es para que podamos escribir en teclado, me vale 00:54:48
¿vale? y luego nos quedaría 00:54:50
la diferencia entre 00:54:52
llamar a un método estático y a uno 00:54:54
no estático, ¿qué significa eso? 00:54:56
aquí 00:54:59
vamos a ponerlo 00:54:59
4, vamos a poner aquí static 00:55:02
y no static. ¿Por qué 00:55:14
quiero hablar un poquito sobre 00:55:21
esto? Porque lo básico para poder empezar 00:55:26
un programa, veis, está utilizando un método, el main es un método estático. 00:55:29
Le pone una palabra reservada que se llama static. 00:55:34
Es un método estático. ¿Eso qué quiere decir? Quiere decir que 00:55:37
Una cosa es cuando yo creo un objeto y llamo a un método del objeto 00:55:40
O un variable miembro del objeto 00:55:46
Y otra cosa es cuando quiero llamar a un método estático 00:55:48
La diferencia entre un método estático es que el método es general para toda la clase 00:55:52
Entonces yo no le voy a llamar instanciando un objeto 00:55:56
Le llamo con el nombre de la clase 00:56:00
Esa es la diferencia 00:56:02
Llamar a un método estático es que le voy a llamar con el nombre de la clase genérico 00:56:03
No va a haber instancias de objetos 00:56:08
es como crear como algo constante 00:56:10
entonces yo cada vez que llame al método main 00:56:13
lo voy a hacer a través del nombre de la clase 00:56:16
no lo voy a hacer a través de la creación de un determinado objeto 00:56:21
si esa palabra no existiera 00:56:24
por ejemplo, imaginaos aquí en el ejemplo que os he puesto 00:56:25
imaginaos que ahora ladrar es estático 00:56:28
pues este método yo no le puedo llamar 00:56:33
con Tobio, creando un objeto y luego llamar 00:56:38
al método ladrar. No, habría que llamarle con el 00:56:43
nombre de la clase. ¿Por qué? Porque va a haber 00:56:47
uno solo para toda la clase. No es como los otros métodos 00:56:53
en los que cada objeto que yo genero es una instancia de esa clase 00:56:57
y esa instancia tendrá un 00:57:01
método, una llamada al método diferente. 00:57:04
No sé si me he explicado más o menos. Bueno, tampoco quiero que por ahora nos metamos mucho, pero que ya os vaya sonando todas estas cosas. Entonces, vamos a hacer un ejercicio que sería para calcular la nota media de tres notas. 00:57:08
Entonces, lo primero que tenemos que hacer aquí sería definir, veis, lo primero que he hecho aquí es archivo, le he dicho nuevo proyecto 00:57:25
Y dentro de nuevo proyecto he generado, mira, si le doy otro nuevo proyecto, he generado una Java with main, que sería una Java aplicación 00:57:37
que es lo que tendría. Yo si le doy a siguiente 00:57:46
me va a generar el nombre, le ponemos el nombre 00:57:48
y veis que aquí ya nos va a 00:57:50
generar una main aplicación con el 00:57:52
propio public 00:57:54
startup de main, ¿vale? 00:57:56
Si le diera a finish nos generaría otro 00:57:58
proyecto. Nos genera una clase 00:58:00
automáticamente que sería con el 00:58:02
nombre del proyecto 00:58:04
y esta Java 00:58:06
pues le llama además con el mismo nombre 00:58:08
que le he puesto, ¿vale? Podríamos 00:58:10
cambiar el nombre de la 00:58:12
clase Java si luego 00:58:13
Pues sí, ¿cómo se puede hacer? 00:58:16
Tú le das al botón derecho y le dices que aquí en refactorizar le puedo renombrar y llamarle de otra manera, ¿vale? 00:58:18
Él automáticamente te va a cambiar todo lo que sea necesario. 00:58:29
Eso también sucede, ¿con qué? Pues con el proyecto. 00:58:32
Yo puedo siempre lo meter en una carpeta .com en My Company Project, que sería el nombre que tiene el proyecto, 00:58:35
pero veis, lo mete en un paquete .com y luego su paquete My Company y luego Project. 00:58:41
Pero esto también lo podemos cambiar, ¿vale? 00:58:45
esto lo podría formar como 00:58:47
refactorizándole y llamándole con otro nombre 00:58:49
vale, aquí sería 00:58:52
vale, yo puedo llamarle y que 00:58:57
venga la carpeta com, por ejemplo 00:59:06
vamos a ver, de 00:59:08
constanza 00:59:09
y luego pues el proyecto 00:59:11
pues lo voy a llamar proyecto 00:59:14
vale 00:59:15
todo esto lo refactoriza 00:59:17
y te lo cambia todo completamente, vale 00:59:20
pero él por defecto te va a generar todo esto 00:59:22
vale, vamos a dejarlo igual 00:59:24
y si veis 00:59:26
aquí no tiene más que una clase 00:59:28
como he dicho antes y tiene 00:59:30
un System.OpenL 00:59:32
le he dado a ejecutar y veis que aparece 00:59:34
aquí el Hello World, que es que 00:59:36
lo saca por pantalla y sale el Hello World 00:59:38
nada más 00:59:40
¿qué es lo que tenemos que hacer en lo primero? 00:59:40
vamos a hacer, sin la clase Scanner, vamos a generar 00:59:44
tres notas, entonces yo tengo que poner 00:59:46
¿el qué? pues un 00:59:48
puedo poner un double 00:59:49
nota1 00:59:51
igual a 5 00:59:54
y a continuación les voy a poner 00:59:58
veis, estoy creando la primera variable que he creado 01:00:00
además son variables que están dentro del método 01:00:04
fuera del método estas variables ya no existirán 01:00:06
una vez que se salga de esta llave 01:00:09
estas variables no existirán 01:00:11
estarán dentro de este método 01:00:13
su ámbito es este método, no están fuera 01:00:14
no son variables miembros de la clase 01:00:16
vamos a meterle una nota 2 y una nota 3 01:00:18
aquí le ponemos un 10 01:00:22
y aquí le ponemos flojero y saco un 1,5 01:00:25
entonces, una vez que tenemos las tres notas 01:00:28
a continuación, lo que queremos hacer 01:00:31
esto nos sirve para escribir en pantalla 01:00:34
le vamos a poner aquí el system 01:00:38
para que primero nos diga 01:00:42
voy a calcular la nota media 01:00:46
de tres notas 01:00:54
vale 01:01:00
a continuación tendremos que hacer la operación 01:01:02
de cálculo, vale, entonces 01:01:05
¿cómo le voy a llamar? si tengo tres 01:01:06
notas que son de tipo double 01:01:09
pues y quiero calcular la media tengo que crear 01:01:11
otra variable que se llame media 01:01:13
que tendrá que ser lógicamente 01:01:14
también de tipo double 01:01:17
entonces le vamos a poner media 01:01:18
y a esta ¿qué le vamos a hacer? 01:01:20
le vamos a decir que es nota 01:01:23
uno más 01:01:25
nota2 más 01:01:26
nota3 01:01:29
y dividido entre 3 01:01:30
¿Veis lo que he hecho aquí? Estoy utilizando 01:01:32
ya operadores. Los operadores los veremos 01:01:35
en el tema 2 01:01:36
pero bueno, para que podamos hacer 01:01:39
un pequeño programita tenemos que introducir 01:01:41
pequeñas cosas. Tenemos el operador más 01:01:43
que lo que hace es que suma esta variable 01:01:45
a esta otra variable y a esta otra variable 01:01:47
y luego lo que hace es una división 01:01:49
en la que luego la divide entre 3 01:01:51
y con eso obtiene el ángulo 01:01:53
A continuación, la sacaríamos por pantalla. Necesitaríamos otra vez el System.out.println. Acordaos, esta es la clase System que tiene un objeto que se llama out y que dicho objeto cuando lo he estanciado, si veis aquí además es una clase estática. O sea, es un objeto estático porque se le llama por el nombre. ¿Veis lo que habíamos visto anteriormente? 01:01:54
el objeto out 01:02:14
se le llama 01:02:16
a través de system 01:02:19
y luego se llama 01:02:21
a su método que se llama println 01:02:23
lo que hace es imprimir esto en pantalla y 01:02:24
hace un retorno de cargo posteriormente 01:02:26
si pusiéramos solo print en vez de ln 01:02:28
lo que haría es 01:02:31
aparecería esto en 01:02:32
la pantalla pero no habría retorno de cargo 01:02:33
si tuviera dos system 01:02:37
out print 01:02:38
escribiría esto y el siguiente system lo escribiría 01:02:39
al lado. Al poner el n nos permite que haga un retorno de carro 01:02:42
y que la siguiente línea aparezca abajo. Entonces le ponemos el n 01:02:46
y le voy a calcular la nota media 01:02:50
de las cerditas. Entonces, ¿a qué nos quedaría? 01:02:54
Nos quedaría imprimir la media. 01:02:57
La media es... y aquí tenemos 01:03:09
que imprimir la media es, pero a continuación de la media es 01:03:14
Tiene que aparecer la media real 01:03:18
Entonces, ¿cómo se concatenan cadenas en Java? 01:03:19
Se concatenan con el operador más 01:03:23
Yo al poner aquí media 01:03:25
¿Qué es lo que hace? 01:03:26
Él coge media 01:03:28
Y como es un double 01:03:29
Lo pasa a cadena 01:03:31
Y concatena esta cadena 01:03:33
Con esta otra cadena 01:03:35
Al darle a ejecutar 01:03:36
Nos sale que la media es 5,5 01:03:38
¿Lo veis? 01:03:46
Este sería un programa sencillo 01:03:48
¿Alguien no ha entendido este programa? 01:03:50
veis, necesitamos tanto el 01:03:52
main y una clase para poder ejecutar 01:03:57
un programa, aquí estamos 01:03:59
ejecutando un programa 01:04:00
o realizando un programa de manera imperativa, no estamos 01:04:03
utilizando, aunque necesitamos una clase para poderlo ejecutar 01:04:04
no estamos realizando 01:04:07
programación orientada a objetos 01:04:09
¿alguien tiene una 01:04:11
duda sobre esto? 01:04:13
bien, pues pasamos a 01:04:19
los decimales con punto siempre 01:04:20
¿no? 01:04:23
sí, vale 01:04:24
pero cuidado, ahora con la clase 01:04:26
escáner, que lo veremos 01:04:29
la clase escáner cuando nos lo pida por pantalla 01:04:30
si se lo pones con punto te da error 01:04:33
él solo lo lee con coma 01:04:35
y ahora lo veremos 01:04:37
entonces vamos a 01:04:38
convertir ahora este 01:04:41
este programa 01:04:42
bueno, no lo he dicho antes pero 01:04:46
yo si quiero escribir un system 01:04:48
cuando le doy al punto 01:04:51
él automáticamente te saca 01:04:53
aquí la línea 01:04:55
para que tú puedas encontrar 01:04:58
lo que tú deseas, ¿ves? 01:04:59
Un objeto out de la clase de printString, ¿vale? 01:05:01
Le das al out y el 01:05:04
automáticamente te lo genera, ¿vale? 01:05:05
Tú le puedes buscar aquí, buscas el método que quieres 01:05:07
utilizar, ¿veis? La cantidad de métodos que 01:05:10
tiene out, print con 01:05:12
un parámetro, printf, 01:05:13
println, ¿veis? 01:05:16
Etcétera. No sólo 01:05:18
estar println con un string, que es lo que 01:05:19
estamos haciendo nosotros todo el rato. 01:05:22
donde puede estar un char, un float, un entero, un log 01:05:23
vale, vamos a ver ahora 01:05:26
vamos a crear un objeto de la clase Scanner 01:05:32
si yo le pongo ScannerSC, le vamos a llamar SC 01:05:35
y le vamos a poner un new Scanner 01:05:39
esta clase es de objeto, necesita un parámetro 01:05:42
cuando su constructor necesita un parámetro para generar ese objeto 01:05:48
Y es system.it. Por ahora, que sepáis que es así y poco más. ¿Vale? Pero ¿qué sucede? Que no hemos importado el paquete que tiene Scanner. Aquí nos está diciendo que no puedo localizarlo. ¿Vale? ¿Por qué no lo puedo localizar? Porque no hemos importado el paquete donde está Scanner. ¿Vale? 01:05:51
Entonces habrá que importar, para importar paquetes se hace con import java.utscanner, lo veis, el mismo ya me lo va poniendo. 01:06:11
Yo, todas las librerías de Java no están por defecto, salvo javaland, pero el resto tienes que importarla. 01:06:28
Si yo quiero utilizar la clase escáner me tengo que ir a donde esté esa clase escáner. ¿Dónde la tengo? 01:06:37
en el paquete java.paqueteUtil 01:06:41
y dentro del paquete útil está la clase 01:06:46
escala, que la veis aquí 01:06:48
siempre se pone 01:06:49
el import, para importar una librería se pone 01:06:52
fuera de la clase 01:06:54
una vez que ya lo hemos importado 01:06:55
se nos ha quitado el 01:06:58
símbolo, y si yo le dejo voltar 01:06:59
no va a hacer nada, porque todavía 01:07:02
no hemos utilizado la clase escala 01:07:04
hará lo mismo que hemos hecho hasta ahora 01:07:05
no va a hacer nada 01:07:07
Entonces, ¿para qué quiero este objeto SC de la clase Scanner? 01:07:09
Pues lo quiero para que el programa nos solicite las notas 01:07:14
y yo las pueda teclear a través del teclado, ¿vale? 01:07:21
Entonces, aquí hemos utilizado Scanner, 01:07:24
voy a calcular la nota media de las tres 01:07:32
Y ahora le ponemos el System.out 01:07:34
Y nos va a solicitar la primera nota 01:07:38
¿Vale? 01:07:52
Para solicitar la primera nota 01:07:53
¿Qué es lo que hacemos? 01:07:55
Que ahora la primera nota 01:07:57
Que acordaos que era un doble 01:07:58
Y se llamaba nota 1 01:07:59
En vez de ponerle yo el valor 01:08:01
Solo va a poner el usuario que esté con el programa 01:08:03
Lo va a escribir en el teclado 01:08:07
Entonces para ello tenemos que utilizar la clase Scanner 01:08:09
que sería sc, que es el objeto que hemos utilizado 01:08:11
y vamos a utilizar un método sui 01:08:14
y vamos a decirle que nos proporcione 01:08:15
el próximo double 01:08:18
porque lo que queremos 01:08:19
es un valor 01:08:22
de tipo double, ¿qué va a hacer aquí? 01:08:24
la clase scanner tiene un método 01:08:26
que se llama next double, que lo que hace es que 01:08:28
permite a través del teclado 01:08:30
reintroducir un double 01:08:32
y a continuación lo captura 01:08:33
y lo mete dentro de la variable 01:08:36
nota1 que hemos creado de tipo double 01:08:38
¿vale? 01:08:40
Todo esto será exactamente igual en todas las líneas, igual en todas las líneas. 01:08:41
¿Veis? He cogido, vamos a comentarlo, creamos objeto de la clase escala. 01:08:55
A continuación, solicitamos la primera nota o teclado a través del objeto llamado sc. 01:09:14
Aquí le estamos diciendo que una vez obtenido el dato por teclado, lo almacena en la variable de tipo double llamada nota1. 01:09:48
Esto ya no lo pongo para estas dos líneas porque realmente es lo mismo. 01:10:22
Esto sería igual, lo voy a hacer para la segunda nota y para la tercera. 01:10:26
A continuación aquí, que es lo que hace, expresión que calcula la nota media de las tres notas introducidas en el teclado, 01:10:31
cuyo valor 01:10:53
introduce 01:11:00
en la 01:11:01
variable 01:11:04
llamada 01:11:06
media 01:11:08
¿vale? 01:11:10
vale 01:11:25
a ver aquí 01:11:29
estoy comentando 01:11:31
incluso demasiado ¿no? pero 01:11:34
es para que lo veáis ¿vale? 01:11:35
este sería 01:11:38
método main 01:11:39
de la clase 01:11:45
project1 01:11:46
y aquí tendríamos 01:11:51
clase 01:11:54
project1 01:11:59
con 01:12:02
acceso público 01:12:04
vale, pues ya tenemos 01:12:07
claro que es todo lo que tenemos aquí 01:12:17
a través de la clase 01:12:19
project1, a través de su 01:12:22
public extractivo y main, que va a ser el método 01:12:24
principal que ha de ejecutar 01:12:26
va a ir hacia él 01:12:28
un método con un parámetro 01:12:29
que es este de aquí, lo que hace es que 01:12:32
primero genera un objeto scanner 01:12:34
para generar un objeto scanner necesitamos 01:12:35
el objeto in de la clase system 01:12:38
como parámetro 01:12:40
a continuación imprime 01:12:41
voy a calcular una nota media de 3 notas 01:12:44
a través del println 01:12:46
del objeto out, luego pone 01:12:47
primera nota, dos puntos y a continuación nos pedirá 01:12:51
la primera nota, luego nos pedirá la segunda y luego la tercera 01:12:56
¿vale? primera nota, segunda nota 01:12:59
y tercera nota, ¿vale? ¿cómo lo hace esto? 01:13:04
coge el objeto scanner que hemos creado y llama a su método next double 01:13:13
está diciendo, oye, dame el próximo número 01:13:17
de tipo decimal. ¿Y cómo lo hace? Pues a través del cursor, nos sale un cursor parpadeante 01:13:21
que nos va a indicar que nos pide que nosotros escribamos con el teclado la nota. Una vez 01:13:27
que escribimos la nota, él la va a introducir dentro de la variable nota1, que es de tipo 01:13:33
doble. Aquí la introduce dentro de la variable 2 y la de la nota 3. Después llega a la expresión 01:13:41
media que lo único que hace es 01:13:48
que calcula la suma de las tres notas 01:13:50
la divide entre tres 01:13:52
y todo eso lo introduce dentro de la variable 01:13:53
media 01:13:56
después con este sistema out.ln 01:13:57
lo que va a hacer es que va a imprimir 01:14:00
el valor de la nota 01:14:01
entonces yo cuando ahora lo voy a ejecutar 01:14:03
vamos a ver si está todo bien 01:14:06
fijaos 01:14:07
cuando lo voy a ejecutar 01:14:13
me ha puesto voy a calcular la nota media de tres notas 01:14:16
y aquí nos permite 01:14:19
escribir 01:14:21
Si yo le pongo la nota con un punto, me lo va a dar como error. 01:14:22
¿Por qué? Porque él lo coge como con coma. 01:14:27
Entonces le voy a poner un valor de 4,5. 01:14:31
Cuando le doy a Enter, nos pide la segunda nota. 01:14:33
Le voy a poner un 5,6. 01:14:35
Y cuando le doy a Enter, nos pide la tercera nota. 01:14:38
Le voy a poner un 9, lo voy mejorando. 01:14:41
Vamos a poner un 9,2. 01:14:43
Una vez que nos saca el decimal, la nota media, que sería de un 6,43. 01:14:45
periodo, ¿vale? Y este sería 01:14:51
el programa con 01:14:53
la clase Scanner. 01:14:55
Ya sé que he introducido 01:15:00
muchas cosas, muchos, pero 01:15:01
si queremos hacer algún programa 01:15:02
sencillito, necesito 01:15:05
introducir, y es que Java necesita de toda esta 01:15:07
parafernalia para poder hacer 01:15:09
una suma, una media de tres notas. 01:15:10
¿Alguna duda sobre esto? 01:15:14
¿Queréis que... 01:15:16
Vale, no sé... 01:15:17
Vale, lo pillo. 01:15:22
queréis que lo repase otra vez 01:15:24
el programa 01:15:26
pero si, a ver 01:15:28
el valor de una variable entera y de una variable double 01:15:33
se puede sumar 01:15:35
porque son números 01:15:37
claro, él lo que hace 01:15:39
si yo le pusiera una variable 01:15:40
le pusiera una variable, por ejemplo 01:15:42
a esta nota 01:15:44
y se la pusiera 01:15:46
a ver, no lo podemos hacer aquí 01:15:47
porque le estoy pidiendo, pero imaginaos 01:15:50
que en vez de pedirle a la nota 2 01:15:52
un next double 01:15:54
le voy a pedir un entero 01:15:56
¿vale? vamos a probarlo 01:15:58
entonces en vez de pedirle 01:15:59
un entero, le voy a pedir 01:16:02
un entero con el nextIn 01:16:03
¿vale? de la clase 01:16:06
del objeto de la clase Scanner 01:16:07
entonces claro, esto estaría mal porque como 01:16:09
va a recibir un entero, tendría que poner aquí 01:16:12
un tipo del tipo entero 01:16:14
¿creéis que funcionaría esto? 01:16:15
¿sí o no? sí, funcionaría 01:16:18
¿por qué? porque él lo va 01:16:26
en esta expresión 01:16:28
aquí va a tener un double 01:16:30
aquí va a tener un decimal, aquí tiene un entero 01:16:31
y aquí tiene un decimal 01:16:34
él automáticamente va a convertir las tres notas 01:16:35
y nos va a dar un resultado en decimal 01:16:38
si yo le meto 01:16:39
lo que pasa es que, cuidado 01:16:40
si ahora yo 01:16:43
fijaos 01:16:46
si hay un problema, si yo ahora 01:16:47
no me doy cuenta 01:16:49
y en vez de poner, aquí le vamos a poner un 2.3 01:16:51
pero la segunda nota, ¿qué pasa aquí? 01:16:53
¿qué sucede si le pongo un valor decimal? 01:16:56
¿funcionará o no funcionará? 01:16:59
no le puedo meter porque el objeto 01:17:00
sc de la clase scanner está utilizando el método 01:17:09
está utilizando el método 01:17:13
next in, te está pidiendo el próximo entero 01:17:15
no, te está pidiendo un valor decimal, si yo pusiera aquí un valor decimal 01:17:21
nos daría error, aquí tendría que ponerle un valor entero 01:17:25
para que me lo coja, yo tendría que ponerle por ejemplo 9 y no nos daría 01:17:29
ningún tipo de error, entonces ya nos pediría la tercera nota 01:17:33
y pondríamos un 4.2, también podríamos poner 01:17:37
un 4, él como es un double automáticamente lo va a convertir en un 4.0 01:17:41
¿vale? y nos sacaría la media, ¿qué sucede si yo le doy 01:17:46
a ejecutar y en vez de en la segunda le meto 01:17:49
2.3 y aquí le metemos un 01:17:53
4.5, ¿veis? nos da error 01:17:57
nos da esta excepción que falla 01:18:04
en el que nos dice pues que 01:18:06
fijaos la pila 01:18:08
de métodos 01:18:10
en el que va recorriendo, si lo fijáis 01:18:12
primero under the project 01:18:14
va al main, lo veis aquí 01:18:16
va al main, luego va al next 01:18:18
in y ahí es donde se produce 01:18:20
el error, el next in 01:18:21
es el que ha provocado pues que se genere 01:18:24
toda esta pila de errores 01:18:26
entonces, que necesito 01:18:28
darle a 01:18:30
necesito darle, esto sucede 01:18:31
también lo he dicho antes, si yo le meto la primera nota, le pongo un 3.4 01:18:34
también me da el error, ¿por qué? 01:18:39
porque los coge, como ya lo comentaba anteriormente, para tú poderle 01:18:42
introducir con la clase Scanner un valor decimal, tiene que ser con la coma 01:18:46
por teclado, si tú le metes un valor punto, nos va a generar también 01:18:50
el error, entonces sabemos por tanto que 01:18:53
vamos a cortarlo, sabemos por tanto que la primera nota 01:18:57
lógicamente tiene que ser un decimal 01:19:02
que la segunda tiene que ser un entero 01:19:05
y que la tercera tiene que ser un decimal 01:19:08
automáticamente ¿qué hará? 01:19:11
él automáticamente al hacer la expresión 01:19:13
esta expresión de suma y división 01:19:15
automáticamente convierte a nota 2 01:19:18
implícitamente la convierte en un double 01:19:21
suma tres doubles y lo divide entre tres 01:19:23
y realiza la A 01:19:26
aunque nosotros le hayamos metido un valor decimal 01:19:28
y calcula la media 01:19:30
que es 5.3 01:19:33
¿Algo que no 01:19:35
queráis que aclare sobre el programa? 01:19:46
¿Más o menos se entiende? 01:19:52
No es necesario que lo entendáis 01:19:54
entero, ¿vale? 01:19:55
Sí que vayamos viendo un poquito 01:19:57
cómo es Java 01:19:59
Básicamente quería que estas sesiones 01:19:59
nos sirvan un poquito para ir introduciendo 01:20:03
un poquito de Java 01:20:05
y que ya pues empecéis a tener 01:20:09
pues ligeras nociones 01:20:11
de qué va esto, ¿vale? 01:20:13
no quiero que esto, no es necesario 01:20:14
que lo sepáis, hacer 01:20:16
100% porque todavía no 01:20:18
hemos visto la mayoría de todo lo que hay 01:20:20
aquí, ¿vale? pero 01:20:22
que vayamos, fijaos 01:20:24
hemos hecho ya un programa 01:20:27
en el que hemos podido meter tres valores 01:20:28
un tipo doble por teclado y nos ha 01:20:30
calculado una mail, o sea que ya 01:20:32
hemos hecho alguna cosita 01:20:34
sin tener mucha idea de 01:20:35
de qué rango, ¿vale? 01:20:38
¿verdad? ¿alguna duda? ¿algo? 01:20:40
todavía, ¿no? 01:20:42
Vamos a introducir una mejora al programa y vamos a hacer ahora que el programa en vez de que lo calcule aquí directamente, fijaos, esta operación está aquí metida en el método y no os molesta un poco que podamos delegar esa operación a un método fuera y que cada vez que queramos utilizarla la podamos llamar. 01:20:46
Pues eso es lo que voy a hacer ahora. Ahora lo que voy a hacer es generar un método, para generar un método, acordaos de aquí, cómo se ha generado un método, fijaos, la sintaxis era el acceso al dicho método, public, private o protected, y luego el valor devuelto, vamos a olvidarnos del static, si tiene un valor devuelto o si no, void, 01:21:11
y luego el nombre del método y entre paréntesis si necesita algún parámetro dentro, ¿vale? 01:21:38
Luego se abre una llave y se cierra. Eso es lo que vamos a hacer aquí. 01:21:45
Vamos a crear un método aquí, ¿veis? Pero tiene que estar indentado. 01:21:47
Este método va a estar dentro de esta clase. 01:21:50
Acordaos que esta clase se abre aquí y se cierra aquí. 01:21:52
Y aquí tenemos el método main que se abre aquí y se cierra aquí, 01:21:55
pero que está a su vez dentro e indentado dentro de la clase. 01:21:57
Y aquí vamos a generar otro método dentro de la clase. 01:22:00
le vamos a decir que es un método público 01:22:03
y le vamos a decir que 01:22:04
nos va a devolver un valor de qué tipo 01:22:07
¿quién me puede decir de qué tipo 01:22:09
me va a devolver el valor? este método 01:22:11
¿es necesario que me devuelva algo? 01:22:13
un doble, muy bien 01:22:18
vamos a meterle un doble 01:22:19
y le vamos a llamar 01:22:21
obtener media 01:22:25
tenemos que abrir la llave 01:22:29
y cerrarla, ¿veis? ya está metido 01:22:33
la primera llave, aquí ¿por qué nos sale 01:22:34
este error? nos sale este error porque como devuelve 01:22:37
un doble y no le he puesto un retro pues me va a dar el error hasta que ponga el retro es lo 01:22:38
que lo único que me está indicando que quiero que quiero que tenga parámetros sí o no cuántos 01:22:45
parámetros y tiene la nota pues vamos a ponerle tres parámetros esos parámetros serán de tipo 01:22:54
doble también, ¿no? Entonces, doble 01:23:03
aquí 01:23:05
vamos a llamarle 01:23:08
no 1 01:23:13
no 2 01:23:14
y doble 01:23:19
3, ¿vale? 01:23:20
Y ahora, ¿qué es lo que quiero? 01:23:24
Que en vez de... 01:23:26
El cuidado que 01:23:33
la nota 2 la pusimos como 01:23:33
entera. ¿Cómo? ¿La pusimos 01:23:36
como? Ah, sí, como entera, vale. 01:23:38
Como entera. Aquí, es verdad. 01:23:40
No pasaría 01:23:42
nada porque él automáticamente si la llamamos 01:23:43
con el entero, él automáticamente 01:23:45
le pasaría un doble 01:23:47
si quieres luego lo probamos 01:23:48
porque él siempre 01:23:51
el cajón lo adapta 01:23:54
al cajón más grande, el cajón más grande 01:23:56
sea el doble, entonces lo adaptaría 01:23:58
cogería el entero y al ver 01:24:00
que esto es un 01:24:02
un doble, pues lo transformaría en un doble 01:24:03
entonces 01:24:07
tendríamos las tres notas, aquí tendríamos 01:24:07
que hacer esto, porque ahora 01:24:10
estamos delegando 01:24:15
esa expresión 01:24:16
a este método. Cada vez que le llamemos nos hará esto. 01:24:23
¿Y ahora qué va a retornar? ¿Qué es lo que retornará? Media. Muy bien. 01:24:26
Entonces le metemos media aquí. Media que sería la variable 01:24:37
que nos hace el cálculo y que es de tipo doble y que coincide 01:24:41
con el doble. Aquí nos está diciendo 01:24:45
el error. ¿Por qué? Porque aquí no se llama nota, se llama not. 01:24:49
que son los tres parámetros que hemos recibido 01:24:56
bien, tenemos nuestro método 01:24:59
¿qué es lo que hace este método? va a devolver un double 01:25:12
se llama obtenerMedia y recibe tres parámetros, uno de tipo double 01:25:14
otro y otro, entonces tres los coge, los suma 01:25:18
los divide entre tres y lo mete dentro de la variable media 01:25:21
y luego retorna la variable media que si vemos 01:25:23
el retorno coincide porque media es double 01:25:26
y el valor de retorno de la función es doble 01:25:29
además el método es público, o sea que puedo acceder a él 01:25:33
bien, ya tenemos 01:25:37
esto sería exactamente igual, por el teclado nos pediría 01:25:41
las tres notas y luego ahora lo que habría que hacer es 01:25:45
llamar, aquí llamaríamos 01:25:49
esto, este comentario 01:25:53
y aquí lo que haríamos que es 01:25:55
llamaríamos aquí al método 01:26:09
obtenerMedia 01:26:13
aquí si veis no hay 01:26:14
yo puedo generar aquí un robo 01:26:20
media y no habría problema porque esta variable 01:26:25
media, aunque tengan el mismo nombre 01:26:28
está dentro de un método 01:26:31
entonces fuera de ese método 01:26:33
media no aparecería, no había conflicto 01:26:35
entonces aquí podríamos poner igual 01:26:37
aquí 01:26:39
entonces tendríamos que llamar al propio 01:26:41
entonces aquí se puede 01:26:43
hacer de dos maneras 01:26:45
yo le puedo poner 01:26:46
y llamaríamos a obtener media 01:26:48
o incluso 01:26:58
vale, yo puedo hacerlo de dos maneras 01:27:00
como esto es un método estático 01:27:25
y estoy llamando a un método que no es estático 01:27:27
lo veis, aquí me está dando un error 01:27:31
nos está diciendo, este método es estático 01:27:32
y estoy llamando a un método estático 01:27:36
entonces, ¿cómo podemos resolver esto? 01:27:40
se puede hacer de varias maneras 01:27:42
una manera para poder llamar al método 01:27:44
tener media de esta misma 01:27:47
yo no puedo generar en un método estático 01:27:50
tendría que crear lo primero, se podría hacer de dos maneras 01:27:55
una, yo podría hacer un objeto de la propia clase 01:27:58
y llamar a obtener media 01:28:02
como aparece aquí, la otra manera 01:28:07
es, puedo llamar a este método estático y llamarle desde el nombre de la clase 01:28:11
si yo le puse aquí static, sé que esto 01:28:15
es más complejo de entender 01:28:18
si yo le puse a static 01:28:20
ya se me ha quitado el error 01:28:22
¿por qué? porque yo no puedo llamar 01:28:24
desde un método estático 01:28:26
a un método 01:28:27
yo no puedo llamar 01:28:30
a mi método obtenerMedia 01:28:32
con un dis por ejemplo 01:28:34
que ya veremos lo que es 01:28:36
yo no puedo llamar a mi propio método 01:28:37
de mi primera clase 01:28:40
porque estoy dentro de un método estático 01:28:41
que es un método 01:28:45
de clase, no es un método 01:28:46
de objeto, ¿vale? Esto es difícil de ver, pero 01:28:48
lo veremos bastante más adelante, ¿vale? Pero yo no puedo llamar desde un método 01:28:52
estático, no puedo llamar a otro método que no sea estático 01:28:56
a no ser que cree un objeto de esta misma clase, ¿vale? 01:29:00
Al poner static yo puedo llamar directamente a obtener 01:29:04
media sin tener que crear un objeto, ¿vale? Si yo quitara esto 01:29:08
vamos a poner, vamos a ver si funciona o no 01:29:12
nos dice 01:29:15
algo he puesto mal 01:29:31
a ver 01:29:32
4.3 01:29:33
segunda nota 01:29:34
nos dice que 01:29:38
javascan 01:29:39
ah que es un entero 01:29:40
vale 01:29:41
no ha quitado lo del entero 01:29:41
vale 01:29:42
es aquí 01:29:43
vamos a ajustarlo 01:29:47
bien 01:29:53
yo pongo 4.3 01:29:58
le ponemos 3.4 01:30:00
y le ponemos 01:30:02
5.4 01:30:03
y nos calcula 01:30:04
la media 01:30:05
¿la veis? 01:30:06
ahora está calculando la media 01:30:06
pero lo está haciendo llamando al método, ¿vale? 01:30:08
Está, cuando llega aquí, llama al método, le pasa las tres notas que hemos obtenido por teclado 01:30:12
y llama aquí, o sea, esta línea va aquí, recibe como parámetro nota 1 y lo mete dentro de no 1, 01:30:18
recibe nota 2 y lo mete dentro de no 2 y recibe nota 3 y lo mete dentro de no 3. 01:30:26
¿Qué hace luego? Esas tres notas, las suma y las divide entre 3, lo mete dentro de media 01:30:33
y retorna el valor de media 01:30:38
que era doble 01:30:39
ese valor aparecerá aquí 01:30:41
ese 5,33 01:30:43
en vez de todo esto, aparecerá un 5,33 01:30:45
lo mete dentro de esta onMedia 01:30:48
y a continuación 01:30:49
para que no se os haga lío 01:30:51
yo pongo 01:30:53
media total 01:30:54
y así diferenciamos de la otra variable 01:30:56
¿vale? 01:31:00
se entiende más o menos, esto me preocupa menos 01:31:04
que sepamos cómo llamar este método 01:31:07
me preocupa menos, pero se entiende que 01:31:08
hemos delegado 01:31:10
un algoritmo o una 01:31:12
expresión, la hemos delegado en un método 01:31:14
aparte, para que 01:31:16
la podemos llamar el número de veces que queramos 01:31:18
con el número de valores que 01:31:21
queramos, sin necesidad de que esté aquí dentro del 01:31:22
mail. ¿Se entiende eso? 01:31:24
Yo sí lo entiendo, 01:31:28
lo único que no entiendo es 01:31:29
por qué puedes llamar una cosa que 01:31:30
has declarado posteriormente. 01:31:32
Puedes llamar a una cosa que has 01:31:37
declarado posteriormente. 01:31:40
Claro, a ver 01:31:41
esto es como 01:31:46
una clase, dentro de una clase 01:31:48
hay una serie de métodos 01:31:50
y tú puedes llamar a cualquiera de esos 01:31:52
métodos, ¿vale? 01:31:54
da igual desde donde le llames 01:31:55
como una especie de 01:31:57
de... fijaos 01:32:03
de la indentación, yo puedo llamar 01:32:04
a cualquier método 01:32:06
aquí es que lo estamos haciendo desde esta clase 01:32:08
pero imagínate que lo estamos haciendo desde otra clase 01:32:11
Yo puedo llamar desde otro programa, puedo generar un objeto de Project 1 y llamar al método obtener media. No tiene por qué estar ese método delante, arriba. Yo sí cojo este método, si es lo que te preocupa, y yo le cojo aquí y le pongo aquí. Es lo mismo, ¿vale? Es lo mismo. No sé si es lo que te refieres. 01:32:12
que si no has leído 01:32:40
si lo hubiera visto así no te hubiera hecho la pregunta 01:32:41
porque como está declarado antes 01:32:44
y luego se llama después 01:32:46
como estaba 01:32:47
claro, pero la clase 01:32:49
una vez declarada la clase, cuando lo coge 01:32:51
el compilador para generar el bytecode 01:32:54
él ve cada uno 01:32:56
de los métodos 01:32:58
los ve, cada uno de los métodos, los lee 01:33:00
y es independiente 01:33:02
realmente la ejecución del programa 01:33:05
es esta, desde aquí 01:33:07
y él está ejecutando el programa desde aquí 01:33:09
Pero él, el programa, el compilador, ya ha leído todos los métodos que hay. 01:33:11
Da igual donde los ponga, ¿vale? 01:33:15
Sí, da igual donde estén. 01:33:17
Si está delante, si está detrás. 01:33:24
Él ya, el compilador, lo ha leído. 01:33:25
Sabe que tiene un método main y tiene un método obtenerMedia. 01:33:27
Que el método obtenerMedia tiene tres parámetros de tipo double 01:33:30
y que el método main tiene un parámetro... 01:33:32
Él ya lo sabe. 01:33:37
Pero luego la ejecución es esta. 01:33:38
Empieza aquí, ¿vale? 01:33:39
va directamente al Estatic Web Main 01:33:40
que es una aplicación 01:33:43
y empieza a leer esta línea 01:33:45
y luego esta otra, y luego esta otra 01:33:47
y luego esta otra, pero ya es 01:33:49
conocedor de los métodos que 01:33:51
tiene la clase, ¿vale? 01:33:53
Entonces, ¿qué pasa? Que cuando llama a obtener media 01:33:54
él sabe que tiene 01:33:57
que la clase Project 1 tiene 01:33:58
un método que se llama obtener media y que requiere 01:34:01
de tres parámetros de tipo doble 01:34:03
entonces, lo llama con esos tres 01:34:04
parámetros que coinciden además 01:34:06
con los de i 01:34:08
calcula la media total, se la devuelve 01:34:10
una vez que se la devuelve, pues la puedes imprimir 01:34:13
¿vale? ¿alguna duda más? 01:34:15
a ver, que me he metido en harina 01:34:19
¿sabéis que todo esto 01:34:21
no lo hemos dado? ¿vale? pero es porque 01:34:23
os vaya ya sonando 01:34:25
no tenéis por qué entenderlo todo 01:34:26
¿vale? no hemos dado todavía ni operadores, no hemos dado 01:34:28
ni tipos de datos, no hemos dado 01:34:31
ni variables, no hemos dado 01:34:32
y mucho menos lo que es un objeto 01:34:35
y mucho menos lo que es estático 01:34:37
¿vale? pero bueno que 01:34:38
es lo que tiene Java. 01:34:40
Para poder hacer un programa sencillito 01:34:42
necesitas toda esta 01:34:44
infraestructura. Quizás esto me lo puede 01:34:45
haber ahorrado, ¿vale? La función. 01:34:48
Pero me ha parecido oportuno que 01:34:50
veáis la operación matemática 01:34:52
que la podemos delegar en un método. 01:34:54
¿Vale? ¿Vale? ¿Alguna 01:34:56
duda? 01:35:05
¿Todo ok? 01:35:09
Pues yo, si queréis, 01:35:11
lo dejamos de aquí, ¿vale? 01:35:12
El próximo día, si queréis, 01:35:14
seguimos haciendo programas sencillitos 01:35:16
así tipo como este 01:35:18
y que ya os vaya sonando 01:35:21
el palo estético de InMain 01:35:22
que ya os vaya quedando 01:35:24
que veamos como generar 01:35:27
un método o una función 01:35:29
que utilicemos otro tipo 01:35:30
de valores de datos 01:35:32
y no nos vamos a meter 01:35:34
ni con estructura de control ni condicional 01:35:36
ni nada de eso, eso ya cuando lleguemos al tema 3 01:35:38
pero que hagamos 01:35:41
programas de estos 01:35:42
estos son los tipos de programas que se hacen 01:35:44
para cualquier lenguaje 01:35:46
de programación 01:35:48
procedimental, lo que parece que Java 01:35:50
es orientado a objetos, entonces requiere 01:35:52
como mínimo una clase, es que no podemos 01:35:54
ejecutar algo sin tener una clase 01:35:56
y un método main, es que eso 01:35:58
es impepinable, es así 01:36:00
no podemos ejecutar nada si no tenemos las dos cosas 01:36:02
entonces tenemos que saber de dónde viene 01:36:04
pero para hacer cualquier, si veis 01:36:06
aquí no estamos aplicando 01:36:08
programación orientada a objetos 01:36:09
La única es la extracción de este objeto 01:36:11
pero son programas sencillos, procedimentales 01:36:14
como se haría en cualquier lenguaje de programación que no sea orientado a objetos. 01:36:18
¿Alguna duda? Si queréis lo dejamos aquí. 01:36:27
Si se os ocurren dudas más adelante, no me escribís, lo podéis hacer en el foro o lo que sea. 01:36:31
Os colgaré esta videoconferencia grabada 01:36:37
pero más o menos bien. 01:36:43
no se metió mucha caña 01:36:47
pero es así 01:36:49
estas dos cosas las necesitamos 01:36:51
la clase 01:36:53
y el value statement 01:36:55
lo necesitamos para empezar 01:36:56
entonces que vayamos poco a poco metiendo cosas 01:36:58
y haciendo programas sencillos 01:37:00
por ejemplo el próximo día a lo mejor 01:37:03
hacemos uno, el calcular 01:37:04
una ecuación de 01:37:06
para calcular una ecuación de segundo grado 01:37:07
necesitaríamos un 01:37:11
bueno, lo podemos hacer 01:37:12
haremos otros ejercicios 01:37:13
pues nada, voy a dejar de grabar 01:37:16
y nos vemos el jueves 01:37:25
en cuanto a temas que debemos tener leídos hasta el momento 01:37:32
lo que tenéis que ir en cuanto a temas más que leeros el primero 01:37:39
que es lo único que me preocupa, hemos llegado casi a la mitad 01:37:42
en varias sesiones que las que quedan pues terminaré 01:37:45
que nos acordemos la próxima vez que estamos en Java y los bytecodes 01:37:48
veremos 01:37:52
y lo que quiero es que os miréis este tema 01:37:53
que es lo que me importa 01:37:56
el hacer ejercicios de Java es para 01:37:57
que la sesión sea un poquito más 01:37:59
más llevadera 01:38:02
y para ir adelantando 01:38:04
cosas de Java, aunque todavía no las hemos visto 01:38:06
¿vale? pero que os vaya sonando 01:38:08
nada más 01:38:09
pues nada 01:38:10
nos vemos el jueves que viene 01:38:21
¿vale? 01:38:23
Idioma/s:
es
Materias:
Informática
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Autor/es:
Francisco José González Constanza
Subido por:
Francisco J. G.
Licencia:
Todos los derechos reservados
Visualizaciones:
7
Fecha:
13 de octubre de 2026 - 17:55
Visibilidad:
Público
Centro:
IES CIFP a Distancia Ignacio Ellacuría
Duración:
1h′ 38′ 26″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
364.60 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid