Procedimientos y Funciones - 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:
Estoy grabando, por lo tanto, me autorizáis en el caso en que digáis algo a grabar vuestra voz, ¿vale?
00:00:00
Entonces, hoy lo que vamos a ver es completar la parte de estas instrucciones de control,
00:00:06
sentencias de control, o... ¿cómo se llaman? estructuras de control.
00:00:13
Si os acordáis, la idea era que, antes de empezar esta parte de la programación,
00:00:18
nosotros sabíamos hacer operaciones secuenciales,
00:00:23
esto detrás de esto, luego esto, luego esto, luego esto, ¿vale?
00:00:27
Lo hemos utilizado para algunos ejemplos, como calcular la red en cuadrado.
00:00:29
Pues pillas un lado, pillas... no, solo el lado, lo multiplicas por sí mismo,
00:00:33
y luego lo escribes en pantalla. Pues secuencial.
00:00:37
A un cierto momento hemos dicho que, en determinados algoritmos,
00:00:40
eso de hacer solo las cosas una tras otra, pues no nos sirve.
00:00:43
Entonces hemos encontrado algunos mecanismos, algunas estructuras,
00:00:47
que me permiten modificar el flujo secuencial de ejecución de un algoritmo, ¿vale?
00:00:53
Y hemos introducido tanto el if, que me permite hacer un bloque o no hacerlo,
00:01:00
en base a una condición, ¿vale? El if else, que me dice si la condición es verdadera,
00:01:06
haz este bloque de información, y si no es verdadera, haz otra, ¿vale?
00:01:11
Y estos son los condicionales.
00:01:16
Tenemos también el switch, pero, al fin y al cabo, el switch es un if cómodo,
00:01:18
es un if cómodo para determinadas circunstancias.
00:01:22
Todo lo que se hace con el switch se puede hacer con un if,
00:01:25
pero te sale un if dentro de un if dentro de un if, y a veces es un poco engorroso hacer, ¿vale?
00:01:27
Y luego hemos visto el comando iterativo, ¿vale? Tanto en formato while como en formato for.
00:01:34
Os recuerdo que existe también el do while, pero, sustancialmente,
00:01:39
tanto do while como for como do while son intercambiables.
00:01:43
Yo puedo cambiar algunas cosas, y en algunos lados es más cómodo uno,
00:01:46
en algunos casos es más cómodo el otro.
00:01:50
Os recuerdo que se usa while o do while cuando no sé el número de iteraciones que voy a hacer,
00:01:53
y uso el for cuando sí sé el número de iteraciones que voy a hacer.
00:01:58
Eso no quiere decir que tengo que tener un número claro mientras estoy programando.
00:02:01
El número podría ser n, donde n es la longitud de una palabra,
00:02:05
o el número que me ha puesto el usuario al principio.
00:02:09
Pues eso puede ser una variable, pero yo sé que cuando estará fijado a tiempo de ejecución
00:02:14
el número n, yo tengo que hacer n iteraciones de este programa.
00:02:19
Pues entonces uso un for.
00:02:23
Si en vez de no sé, porque es dame números hasta que pongas un cero,
00:02:25
y no sé cuántos números dará el usuario que no sean cero,
00:02:29
pues entonces el while es más cómodo normalmente, ¿vale?
00:02:32
Como idea general sobre la que trabajar.
00:02:35
Luego, vosotros que sabéis los dos, y habéis practicado ya bastante for y while,
00:02:38
deberíais ser capaces ahora, frente a un posible programa que entendéis
00:02:44
que tiene que reutilizar un programa iterativo, pensar,
00:02:48
oye mira, ¿esto me conviene hacerlo con un while o con un for?
00:02:52
Vamos a ver, y pensar, ¿necesito un índice que va incrementándose
00:02:54
dentro de cada uno de los ciclos?
00:02:58
Pues posiblemente el for es una opción buena.
00:03:01
¿No lo necesito? Pues posiblemente un while, ¿vale?
00:03:04
La tercera forma de modificar el flujo secuencial de ejecución de un programa
00:03:08
es lo que se llama, llamada función o procedimiento.
00:03:19
En realidad, y lo repetiré al final de esta clase,
00:03:23
en Java esto se llama métodos, ¿vale?
00:03:28
Y no son exactamente ni funciones ni procedimientos.
00:03:33
Pero nosotros todavía no estamos en programación orientada a objetos.
00:03:37
Nosotros todo lo que estamos haciendo ahora es como si estuviéramos en el pasado
00:03:41
y estuviéramos en el momento en que se programaba con programación estructurada.
00:03:46
¿Vale? Y en programación estructurada existen funciones y procedimientos.
00:03:51
¿Vale? Y ahora vamos a ver qué son, para qué sirven,
00:03:56
y cuál es la diferencia entre los dos.
00:03:59
Cuando veremos los objetos, pues cambiaremos esta cosa.
00:04:01
Ah, vale, no son más funciones o procedimientos, son métodos.
00:04:06
Y veremos cómo hay métodos estáticos, métodos no estáticos,
00:04:09
métodos para objetos, etcétera, etcétera, etcétera.
00:04:12
Como todavía ahora estos conceptos no los tenemos, no los podemos utilizar.
00:04:15
Vale. Si un programa repite muchas veces el mismo código,
00:04:19
a lo mejor pero con parámetros distintos,
00:04:24
ahora aquí os lo hago más grande y veis un ejemplo,
00:04:27
pues lo que se puede hacer es, en vez de escribir muchas veces el mismo código,
00:04:30
sacar este código en algún lado, darle un nombre,
00:04:36
y decir que cada vez que yo llamo ese nombre,
00:04:41
en realidad quiero ejecutar ese bloque de código.
00:04:44
Esa es la idea de la función y del procedimiento.
00:04:47
Por ejemplo, veamos este programito de ejemplo aquí.
00:04:50
No sé si se lee.
00:04:54
Esto es un programa que calcula área del rectángulo.
00:04:56
Entonces lo que hace es pillar un lado, pillar otro lado,
00:05:02
podría pillar escrito por teclado, me da igual.
00:05:06
Calcula la área del rectángulo, el perímetro, y luego lo escribe.
00:05:10
El rectángulo de lado no sé qué, no sé qué, tiene área no sé qué,
00:05:16
perímetro no sé qué.
00:05:20
Y yo lo que quiero hacer es hacer esta misma cosa para varios rectángulos distintos.
00:05:22
Este es el rectángulo 3x4, este es el rectángulo 5x10, este es el rectángulo 2x7.
00:05:27
La verdad es que el código es el mismo,
00:05:32
lo que cambia son los parámetros que le estoy dando.
00:05:36
Una opción que podemos tener nosotros es esa de poner aquí dentro de un while,
00:05:39
hacer que esto se repita las veces o de un for las veces que haga falta,
00:05:45
y sustancialmente me vale.
00:05:50
Otro método que puedo hacer es darme cuenta que esto es código repetido,
00:05:53
e intentar sacar este código fuera y darle un nombre.
00:05:57
Algo parecido a esto, creo, ahora luego vemos cómo se hace.
00:06:04
En algún lado, una cosa nueva que se llama calcular el perímetro,
00:06:10
le he dado este nombre, public, static, void, no suena de algo,
00:06:16
¿de qué no suena? del main, porque el main es un método en Java,
00:06:22
es el método principal por donde empieza el programa,
00:06:28
es la función principal que el programa empieza aquí.
00:06:32
Entonces, ¿qué quieren decir estas palabras?
00:06:36
¿Qué quiere decir public? No tengo ni idea.
00:06:39
¿Qué quiere decir static? No tengo ni idea.
00:06:41
¿Qué quiere decir void? Lo sabré dentro de un rato.
00:06:43
Este es el nombre, y ahora vemos los parámetros.
00:06:47
Por ahora quedan así, ¿por qué?
00:06:50
Porque estas son palabras que van muy entrelazadas con los conceptos de clase,
00:06:52
de objeto, de otras cosas más avanzadas como herencia, etc.,
00:06:57
que por ahora no nos interesan porque no los conocemos.
00:07:03
Por lo tanto, por ahora nosotros son palabras mágicas que ponemos allí,
00:07:07
y son siempre así, public, static, void, para hacer un procedimiento.
00:07:10
Además de esto, yo aquí, entre paréntesis, puedo poner lo que se llaman los parámetros.
00:07:16
Son como variables, pero no están instanciadas en este momento.
00:07:24
La instanciaré cuando quiera utilizar el método, la función o el procedimiento,
00:07:30
estos son procedimientos, que se llama calcular el perímetro.
00:07:39
Cuando yo voy a llamar a este trozo de código, le digo,
00:07:43
mira, vas a hacer calcular el perímetro, pero vas a utilizar en particular
00:07:46
este dato como lado 1 y este dato como lado 2.
00:07:51
Entonces, estos se llaman parámetros formales.
00:07:56
Los lados 1 y 2 es como si para ti existieran ya,
00:08:04
cuando llamaran este método de aquí, te tienen que haber pasado estos valores.
00:08:09
Ahora veremos cómo.
00:08:14
Te habrán dicho que el lado 1 vale 3 y el lado 2 vale 7.
00:08:16
Entonces, aquí dentro, cuando tú usas lado 1, estás usando el valor que te han pasado, el 3.
00:08:21
Y cuando usas lado 2 aquí dentro, estás usando el 7.
00:08:27
¿Sabes cuáles son? No, son genéricos.
00:08:30
A mí me habrán metido en estos dos espacios de memoria un determinado valor.
00:08:33
Y aquí dentro usaré esos determinados valores de alguna forma.
00:08:41
Pilla el primer espacio de memoria, va a mirar qué hay dentro,
00:08:45
no sé qué hay dentro, pero pillarás eso, lado 1,
00:08:48
y lo multiplicas, ves el espacio de memoria llamado lado 2,
00:08:51
y lo que hay ahí dentro, que todavía no lo sé, pero lo tendrás que pillar y multiplicar.
00:08:55
Y el resultado lo encontrarás dentro de esta variable de aquí.
00:09:00
Y luego calculas el perímetro, lo mismo, usando lado 1 y lado 2,
00:09:04
que son los parámetros formales que te han dado, y a este punto escribes lo que sea.
00:09:07
Esto es el mismo código de antes.
00:09:12
Es el código ese que se repetía mucho.
00:09:15
¿Recordáis?
00:09:18
Pues ahora lo he sacado fuera y le he dado un nombre.
00:09:20
Tú te llamas cálcula área y perímetro de rectángulo.
00:09:23
Lo podría haber llamado cocodrilo, me da igual, es un nombre.
00:09:27
Claramente el nombre normalmente de una función o de un procedimiento
00:09:30
tiene que tener sentido, para que cuando tú lo uses,
00:09:34
si se llama calcular el perímetro, te esperes que calcule área y perímetro,
00:09:38
no que calcule el volumen, que no tiene porque un rectángulo no tiene volumen.
00:09:42
¿Dudas?
00:09:48
¿Sí? Vale.
00:09:51
Entonces, más o menos esto es la idea.
00:09:53
Yo tenía un código que se repetía mucho, lo he sacado fuera del main.
00:09:56
Ten en cuenta que este es fuera del main, ahora lo veremos con más detalle.
00:10:00
Le he dado un nombre, he escrito este código y le he dicho que tiene dos parámetros formales,
00:10:04
o sea que cuando llamaré este método, este procedimiento,
00:10:09
siempre le tendré que dar ¿cuántos valores aquí?
00:10:14
Dos. Uno que se asociará con lado 1 y uno que se asociará con lado 2.
00:10:19
¿Puede ser que le des uno o que le des tres?
00:10:25
No.
00:10:28
No, lo digo para esta pauta.
00:10:29
Digo que cuando tú creas otro, aquí puede haber uno, puede haber cero, puede haber tres.
00:10:31
¿Conoces otro método que tiene un solo parámetro?
00:10:35
Public static void main, y entre paréntesis está string carácteres demoníaco args.
00:10:41
Eso es que solo quiero un parámetro.
00:10:49
Que será un string corchete.
00:10:52
¿Qué es un string corchete? No tengo ni idea.
00:10:55
Porque todavía no he hecho los arrays.
00:10:57
Si hubiese hecho los arrays, sabría que es un array de strings.
00:10:59
Los parámetros pueden ser cuantos les da gana.
00:11:04
Ahora lo veremos. Uno, dos, tres, cuatro, cero.
00:11:07
Este método es sin parámetros.
00:11:10
¿Habéis visto otro método que utilizáis sin ponerle parámetros?
00:11:13
Por ejemplo, .next, .length para saber la longitud de una string,
00:11:20
el .next de scan, .next int, no pillan parámetros.
00:11:30
Pillan las paréntesis, eso son funciones, pero sin parámetros.
00:11:34
El parámetro se destila solamente a uno.
00:11:40
No, no es un parámetro. Es que ese método no pilla un parámetro.
00:11:43
Porque lo llama sobre un objeto. Eso no lo sabemos hacer todos.
00:11:46
¿Conocéis otro método que en vez de sí pilla un parámetro, por ejemplo?
00:11:49
Charat, que pilla un int, le ponéis un numerito dentro.
00:11:56
¿Conocéis otro?
00:12:00
System.out.println, que le ponéis dentro.
00:12:04
¿Un que queremos de qué tipo?
00:12:11
¿Un string?
00:12:17
Poner un int, este hace la conversión automática en string.
00:12:20
Pero lo que va allí dentro es un string.
00:12:23
Nosotros ya estamos usando esto.
00:12:27
Solo que no nos hemos parado a mirar.
00:12:29
El programa de antes, que calculaba tres rectángulos de tipos distintos,
00:12:33
ahora en el main, estos son los parámetros del main,
00:12:39
que no usamos porque no sabemos todavía que es.
00:12:43
Lo que hacemos es llamar tres veces este método externo,
00:12:48
cambiándole los parámetros que yo quiero.
00:12:54
Esto antes, ¿os acordáis?
00:12:58
Quería calcular el área del perímetro de un rectángulo
00:13:00
que tenga lado 3 y lado 4.
00:13:04
Pues ahora lo llamo así.
00:13:07
Este 3 se asociará con lado 1, con el primer parámetro.
00:13:09
Este 3 de aquí ahora se asocia con este valor.
00:13:17
Este 4 de aquí se asocia con este valor.
00:13:20
Y ahora aquí dentro, para esta ejecución de este método,
00:13:23
lado 1 vale 3 y lado 2 vale 4.
00:13:26
Hago todo como si fueran así.
00:13:29
Cuando lo vuelva a llamar la siguiente vez
00:13:31
y pongo como parámetros actuales 5 y 10,
00:13:33
actualmente los parámetros formales lado 1 y lado 2
00:13:38
valen 5 y 10, respectivamente.
00:13:43
Entonces, yo aquí pienso en abstracto.
00:13:48
¿Qué necesito para calcular el área del perímetro de un rectángulo?
00:13:52
Pues necesito un lado y el otro lado.
00:13:56
¿Y cuánto valen? No lo sé.
00:13:59
Estoy haciendo algo abstracto.
00:14:01
Estoy haciendo una función, un procedimiento
00:14:02
que valga para cualquier rectángulo posible.
00:14:05
Entonces, ¿qué hago?
00:14:08
En vez de ponerle aquí 3 y 4,
00:14:09
le digo que el lado corto se llamará lado 1
00:14:11
y el lado largo se llamará lado 2.
00:14:14
Siempre, o no sé, tanto da igual.
00:14:16
Tengo los dos lados, tengo dos medidas de lado.
00:14:19
No necesito los cuatro porque dos a dos son iguales.
00:14:21
Estos son los datos que necesito.
00:14:24
¿Y cuánto valen? No lo sé.
00:14:26
Yo voy a utilizar esta representación literal,
00:14:28
esta representación, ¿cómo decirlo?
00:14:35
No numérica, sino gráfica de estos datos.
00:14:40
Y voy a hacer lo que tengo que hacer con estos datos.
00:14:46
Esto es genérico.
00:14:49
Si yo os doy solo esto, ¿sabéis el área del rectángulo?
00:14:51
No, porque no sabéis todavía cuánto vale el lado 1.
00:14:56
¿Y dónde sé cuánto vale el lado 1?
00:15:00
Cuando llamo este método.
00:15:02
Aquí es donde fijo que en esta ejecución de esta función,
00:15:04
de este procedimiento, este señor, lado 1, vale 3.
00:15:08
Tú podrías poner aquí scan.exit, scan.exit
00:15:18
y cuando tú estás poniendo los datos te van uno aquí y uno aquí.
00:15:22
O haberlo pedido antes.
00:15:26
Dame la cosa A y ponlo en A.
00:15:27
Y luego dame otra cosa y ponlo en B.
00:15:30
Y luego aquí se llama perímetro de A, B.
00:15:32
La idea es que aquí hay dos parámetros.
00:15:38
Hay parámetros formales y parámetros actuales.
00:15:40
Los parámetros formales son los que no sé cuánto valen,
00:15:44
pero los uso de forma abstracta dentro del método.
00:15:47
Los parámetros actuales son los parámetros que uso
00:15:51
al momento de llamar y que vinculan,
00:15:55
hacen una bind entre el parámetro actual correspondiente
00:15:58
y el valor actual que le estoy dando.
00:16:04
Lo mismo, esto no cambia.
00:16:20
Es aquí, porque tú estás modificando los parámetros actuales,
00:16:22
pero esto se queda exactamente igual.
00:16:26
Cuando tú luego harás la unión dirás que el lado 1 corresponde a A,
00:16:28
pero no es que le pones A como carácter,
00:16:33
pones lo que está dentro de la memoria que se llama A.
00:16:35
O sea, irás a la variable, irás a su parte de int,
00:16:39
buscará el valor que está ahora mismo allí dentro, que es 18,
00:16:43
pues este 18 ahora está vinculado con A.
00:16:47
Fíjate que están en bloques distintos.
00:16:56
Fijaos en esto, el main acaba aquí.
00:16:58
La declaración del método, de este procedimiento,
00:17:04
no está dentro del main, es hermana al main.
00:17:08
Esto provoca algunos problemillas.
00:17:18
En plan, ¿puedo aquí utilizar una variable que está aquí?
00:17:20
Porque son bloques distintos.
00:17:26
Si yo quiero leer de teclado, o leo en el main,
00:17:29
y luego se lo paso por parámetro a esto,
00:17:32
o no leo en el main, leo directamente aquí,
00:17:35
pero el objeto scanner no lo puedo crear en el main
00:17:38
y luego usarlo en el método, porque en el método no existe.
00:17:44
¿Pero puedes crearlo en los dos?
00:17:50
Sí.
00:17:51
Normalmente lo creas donde tú quieres crearlo, no en todos lados.
00:17:54
Tú piensas en el algoritmo que quieres hacer,
00:17:59
y lo que quieres es, ¿quieres que sea el main que compruebe
00:18:02
si los datos son correctos y luego después los usa?
00:18:05
Pues pides aquí.
00:18:08
¿Quieres que el método mismo, cada vez que se lanza,
00:18:10
haga este trabajo? Pues lo haces aquí.
00:18:13
Pero es una decisión del diseño del programa tuyo.
00:18:15
Más dudas.
00:18:20
La única cosa que sí tiene que ser igual,
00:18:22
es que si yo te he dicho que este señor pilla un entero,
00:18:25
tú aquí me tendrás que poner un entero,
00:18:31
o me puedes poner la palabra gato,
00:18:35
porque te dice, este es un string, aquí quiero su int,
00:18:37
no los puedo conectar.
00:18:40
¿Puedo utilizar métodos que estén dentro de mi proyecto,
00:18:46
dentro de mi paquete?
00:18:49
Puedes usar muchas cosas.
00:18:52
Por ahora nosotros tenemos una clase, usamos esa.
00:18:53
¿Quién de vosotros ha usado paquete y se ha puesto a ver?
00:18:55
Es porque ha querido hacerlo y yo todavía no lo he explicado.
00:18:58
Nosotros por ahora, los métodos que necesitamos,
00:19:03
los metemos todos dentro de la misma clase,
00:19:06
y los usamos desde ahí.
00:19:08
Y además, los métodos actuales que nosotros creamos, son estáticos.
00:19:09
¿Qué quiere decir?
00:19:14
No lo sabemos, porque no sabemos programación orientada a los objetos.
00:19:15
Pero por ahora usamos esto.
00:19:19
Veremos que en un futuro, esto lo usamos muy poco.
00:19:21
Esto lo quitaré.
00:19:25
¿Más dudas?
00:19:27
Sigamos adelante.
00:19:33
Este es el primer ejemplito.
00:19:34
La idea que os tenéis que haber llevado con esto,
00:19:36
es que yo antes pienso,
00:19:39
que uso mi función o mi procedimiento de forma abstracta,
00:19:41
utilizando parámetros abstractos.
00:19:44
Aquí los uso como si supiera cuánto vale lado 1.
00:19:46
¿Cuánto vale lado 1?
00:19:50
Pues vale lado 1.
00:19:51
En un futuro me dirán cuánto vale.
00:19:52
Por ahora lo uso haciendo fórmulas genéricas.
00:19:54
Es como si yo os digo, ¿cómo se calcula el área?
00:19:57
Pues lado por altura.
00:20:00
No os estoy diciendo cuánto vale lado y cuánto vale altura.
00:20:03
Es una fórmula genérica.
00:20:06
Aquí, fórmula genérica.
00:20:07
Y luego, cuando os digo,
00:20:08
¿y lado vale 3 y altura vale 7?
00:20:09
Pues entonces vosotros podéis aplicar la regla
00:20:12
en base a los datos actuales que os he pasado.
00:20:15
Los parámetros actuales que os he pasado.
00:20:21
¿Entienden?
00:20:23
Esto lo estáis haciendo desde siempre.
00:20:24
Solo que de una forma un poquito más formal,
00:20:27
de hacerlo en programación.
00:20:32
¿Dudas?
00:20:36
Entonces, ¿qué es un procedimiento?
00:20:39
Un procedimiento es un conjunto de instrucciones
00:20:42
que cumple una determinada tarea.
00:20:45
¿Vale?
00:20:47
Hace algo.
00:20:48
Esta tarea puede depender de algunos valores,
00:20:49
que son los parámetros o no.
00:20:51
¿Vale?
00:20:54
Hemos dicho que, por ejemplo,
00:20:55
la length no necesita parámetros.
00:20:56
O la nextInt no necesita parámetros.
00:21:00
La print o la charAt,
00:21:04
pues sí necesita un parámetro para poder funcionar.
00:21:09
Eso lo decidís vosotros cuando creáis el procedimiento.
00:21:12
Si yo quiero hacer el procedimiento
00:21:15
que calcula la área del cuadrado
00:21:17
y no pido el lado,
00:21:19
quiero ver cómo lo hago.
00:21:21
Otra opción es que sea sin parámetros,
00:21:24
pero dentro de la propia procedura,
00:21:28
pida al usuario, dame un dato.
00:21:30
Pues eso se puede hacer.
00:21:33
Me explico mejor.
00:21:35
Si yo hago el método
00:21:37
de calcular el pedímetro de un cuadrado,
00:21:39
que es lado por 4,
00:21:42
puedo tener dos opciones.
00:21:44
Una es que cuando llamen este procedimiento
00:21:46
ya sepan el lado y me lo pasen a mí.
00:21:49
Entonces no necesito poner un parámetro.
00:21:52
O podría ser que tú puedes llamarlo sin parámetro
00:21:56
y lo que hace el procedimiento dentro
00:21:59
es crearse un objeto scan
00:22:01
y pedir al usuario, dame el lado del cuadrado.
00:22:03
Y el usuario lo pone allí,
00:22:05
entonces no necesito tener un parámetro que me pasen.
00:22:07
Lo pide el mismo método,
00:22:11
el mismo procedimiento.
00:22:13
¿Se entiende?
00:22:15
Eso lo decido yo.
00:22:17
Ejemplos de posibles procedimientos.
00:22:21
Está aquí.
00:22:27
Calcula área.
00:22:29
Recibe el lado 1 y el lado 2.
00:22:31
¿Qué hará esto?
00:22:35
Pues pillará el lado 1,
00:22:37
lo multiplicará por el lado 2
00:22:39
y lo que sea lo imprime en pantalla.
00:22:41
¿Sí?
00:22:43
Otro método, saluda.
00:22:45
¿Qué parámetros tiene este?
00:22:47
Ninguno.
00:22:49
Entonces este señor te dice hola.
00:22:51
¿Sí?
00:22:53
El método saluda,
00:22:55
¿qué hará?
00:22:57
Hola y el nombre que me ha pasado.
00:23:01
Si yo le pongo saludo entre comillas,
00:23:03
le pongo Estefano,
00:23:05
pues le dirá hola Estefano.
00:23:07
¿Dudas?
00:23:09
Vamos a verlo.
00:23:13
¿Cómo se declara un procedimiento?
00:23:17
Por ahora estamos con procedimientos.
00:23:19
En cuanto llegamos a las funciones
00:23:21
vemos la diferencia.
00:23:23
Un procedimiento se declara con
00:23:25
public, static, void, nombre del procedimiento,
00:23:27
abierta paréntesis,
00:23:29
tipo 1, parámetro 1,
00:23:31
coma tipo 2, parámetro 2,
00:23:33
coma tipo 3, parámetro 3,
00:23:35
coma...
00:23:37
¿Cuántos parámetros yo quiero?
00:23:39
¿Sí?
00:23:41
Al final,
00:23:43
abro un bloque,
00:23:45
pongo aquí el código
00:23:47
que tiene este nombre,
00:23:49
el código, el cuerpo del procedimiento
00:23:51
y cierro el bloque.
00:23:53
Esto como hermano del main.
00:23:57
No dentro del main,
00:23:59
sino fuera del main.
00:24:01
Por arriba, por abajo, me da igual.
00:24:03
Pero dentro del class.
00:24:05
¿Recordáis public class,
00:24:07
el nombre de la clase, y abro un bloque?
00:24:09
Dentro de ese bloque,
00:24:11
pero fuera del main.
00:24:13
Es hermano del main.
00:24:15
Ni dentro,
00:24:17
ni fuera de clase.
00:24:19
O sale algún error de
00:24:21
¿Qué es esto?
00:24:23
Y lo he metido mal.
00:24:25
¿Cómo se llama
00:24:27
este procedimiento?
00:24:29
Utilizando el nombre
00:24:31
que he puesto arriba,
00:24:33
abierta paréntesis,
00:24:35
el valor actual
00:24:37
del parámetro 1,
00:24:39
coma el valor actual
00:24:41
del parámetro 2,
00:24:43
coma etc, etc.
00:24:45
Estos valores tienen que estar
00:24:47
asociados con el tipo
00:24:49
que he puesto aquí.
00:24:51
Si aquí he puesto que es tipo 1,
00:24:53
que se llama nombre,
00:24:55
y es un string, pues este valor
00:24:57
de aquí tiene que ser un string.
00:24:59
No los puedo mezclar.
00:25:01
Va a decir, tú querías un string
00:25:03
e un int, he dado un int y un string.
00:25:05
Vale igual, los datos los tiene.
00:25:07
Tiene que ir con el orden que yo he fijado.
00:25:09
Ejemplos.
00:25:19
Aquí yo tengo un main.
00:25:27
Lo vamos a ver después.
00:25:29
Tengo el método saluda,
00:25:31
y el método saluda que pilla un string.
00:25:33
¿Qué hace el método saluda?
00:25:35
No pilla ningún parámetro.
00:25:37
Y lo único que hace es
00:25:39
hola a todos.
00:25:41
Si os fijáis, aquí no uso ningún parámetro.
00:25:43
Hará siempre lo mismo.
00:25:45
Porque no es paramétrico,
00:25:47
no depende de algo que le ponga aquí
00:25:49
para hacer su trabajo.
00:25:51
Siempre hará lo mismo.
00:25:53
Sin embargo,
00:25:55
saluda que recibe
00:25:57
un nombre de tipo string.
00:25:59
Aquí mi parámetro
00:26:01
formal se llama
00:26:03
nombre.
00:26:05
Entonces aquí dentro puedo utilizar nombre.
00:26:07
¿Y cuál es nombre? No lo sé.
00:26:09
Lo sabré cuando me llaman.
00:26:11
Cuando llamarán al método saluda
00:26:13
con un string,
00:26:15
pues entonces sabré cuánto vale.
00:26:17
Fijaos que los dos señores
00:26:19
se llaman igual.
00:26:21
Los dos se llaman saluda.
00:26:23
Entonces, cuando llaman saluda,
00:26:25
¿cómo hago yo a saber
00:26:27
si tengo que utilizar el de arriba o el de abajo?
00:26:29
Según el parámetro.
00:26:33
Lo que se llama la firma del método.
00:26:35
¿Vale?
00:26:37
Nombre y tipos de datos
00:26:39
de los parámetros.
00:26:41
Saluda, sin nada,
00:26:43
es un método distinto,
00:26:45
es un procedimiento distinto de saluda con string.
00:26:47
Que es distinto
00:26:49
de saluda con int.
00:26:51
Que es distinto de saluda con string e int.
00:26:53
Que es distinto de int-string.
00:26:55
¿Sí? Todos se llaman saluda,
00:26:59
pero este método saluda
00:27:01
es sobrecargado, en cierto sentido,
00:27:03
con varios posibles parámetros.
00:27:05
Y cuando tú lo llamas,
00:27:07
según los parámetros que pones,
00:27:09
pues él sabrá
00:27:11
si tiene que utilizar esto o esto.
00:27:13
¿Puedo hacer dos métodos
00:27:15
o dos procedimientos
00:27:17
que se llamen saluda
00:27:19
y que tengan los dos string nombre
00:27:21
y otro string apellido
00:27:23
y hagan cosas distintas?
00:27:25
No.
00:27:27
Si yo tuviera aquí, pongamos aquí
00:27:31
string apellido.
00:27:33
Cuando yo te llamo saluda de Stefano,
00:27:35
¿cómo sabes tú
00:27:37
si tienes que ejecutar esto o esto
00:27:39
si los dos tienen un string?
00:27:41
Entonces no sería determinista.
00:27:43
El procesador llegaría allí
00:27:45
y diría, mira,
00:27:47
tengo dos opciones para poder ejecutar
00:27:49
y no sé cuál de las dos quieres tú.
00:27:51
Porque tú me has dicho Stefano
00:27:53
y yo no sé
00:27:55
si esto es un apellido o es un nombre.
00:27:57
Para mí es un string.
00:27:59
Y tengo dos procedimientos
00:28:01
que reciben un string.
00:28:03
Pues eso no me vale.
00:28:05
Puedo hacer varios procedimientos
00:28:07
que se llamen igual,
00:28:09
pero tienen que diferir
00:28:11
en los tipos, o sea,
00:28:13
tienen que ser distintos en los tipos
00:28:15
de datos que reciben.
00:28:17
¿Cuántos métodos saluda puede hacer máximo?
00:28:21
Infinitos.
00:28:27
Con que yo ponga más parámetros
00:28:29
y que no coincidan con parámetros,
00:28:31
todo lo saluda que yo quiera.
00:28:33
¿Dudas?
00:28:35
Entonces, ¿cómo llamo estos?
00:28:37
Por ejemplo, yo tengo un main
00:28:43
que llama saluda.
00:28:45
¿Cuál estoy llamando, el de arriba o el de abajo?
00:28:47
El de arriba.
00:28:49
No tiene parámetros, llamo esto.
00:28:51
Me dirá hola a todos.
00:28:53
Luego llamo saluda con dentro un string.
00:28:55
¿Cuál está llamando?
00:28:57
El de abajo.
00:28:59
Y dirá hola Stefano.
00:29:01
Luego me creo una variable
00:29:03
que se llama n,
00:29:05
que dentro tiene Paco,
00:29:07
y llamo saluda de n.
00:29:09
¿Qué hará?
00:29:11
La de abajo.
00:29:13
Y escribirá hola Paco.
00:29:15
O sea, que yo aquí
00:29:17
puedo poner un literal
00:29:19
o una variable. Variable y literal
00:29:21
son la misma cosa, al fin y al cabo,
00:29:23
en tiempo de ejecución, simplemente yo me iré a mirar
00:29:25
en la trozo de memoria
00:29:27
que se llama n, lo que hay allí dentro.
00:29:29
Y ese es el valor que utilizaré.
00:29:31
Me aparecerían tres saludos.
00:29:39
Saluda hola a todos,
00:29:41
hola Stefano,
00:29:43
hola Paco.
00:29:45
Vamos a ver
00:29:51
el prueba 4.
00:29:53
Tengo el main.
00:29:55
Tengo ahora aquí
00:29:57
un programa que se llama
00:29:59
repitesaludo,
00:30:01
que recibe dos parámetros.
00:30:03
String nombre,
00:30:05
int repeticiones.
00:30:07
Y lo que hace aquí dentro,
00:30:09
sin saber qué es nombre, qué es repeticiones,
00:30:11
hace esto.
00:30:13
¿Qué os espera ahí que abra?
00:30:15
¿Repite qué?
00:30:17
¿Repite qué?
00:30:27
¿Repite qué?
00:30:31
Imprime en pantalla qué.
00:30:33
Hola el nombre que le he pasado, ¿cuántas veces?
00:30:37
¿Cuántas veces?
00:30:41
No, aquí es nombre.
00:30:43
¿Cuántas veces?
00:30:47
¿Cuántas veces?
00:30:51
Repeticiones veces,
00:30:53
hola nombre.
00:30:55
Entonces si yo hago
00:31:01
repitesaludo de Luis,
00:31:03
coma cuatro,
00:31:05
¿qué me hace?
00:31:07
Hola Luis, hola Luis, hola Luis,
00:31:09
hola Luis, cuatro veces,
00:31:11
hola Luis.
00:31:13
¿Dudas?
00:31:17
Si yo copio esto
00:31:21
y lo pego aquí,
00:31:23
y le pongo que
00:31:25
repeticiones es igual a cuatro
00:31:27
y nombre es igual a Luis, ¿qué cambia?
00:31:29
¿Qué hace?
00:31:31
Lo mismo.
00:31:33
Esto de aquí
00:31:35
es como funciona
00:31:37
la llamada de método,
00:31:41
es como si en esta línea de aquí
00:31:43
yo la borrara
00:31:45
y copiara el código
00:31:47
que está aquí dentro,
00:31:49
aquí, ¿vale?
00:31:51
Sostituyendo donde aquí pone
00:31:53
nombre, Luis,
00:31:55
y donde aquí pone repeticiones,
00:31:57
cuatro.
00:31:59
¿Se entiende?
00:32:01
No, si hago menor o igual
00:32:09
me hace repeticiones más uno,
00:32:11
porque empieza de cero.
00:32:13
Si yo pongo cuatro,
00:32:15
cero, uno, dos y tres,
00:32:17
y a cuatro sale, son cuatro veces.
00:32:19
¿Sí?
00:32:21
Puedes hacer de i igual a uno
00:32:23
a i menor o igual a repeticiones,
00:32:25
siempre son cuatro veces.
00:32:27
Con esto podéis jugar vosotros, ¿vale?
00:32:29
Nos vendrá bien esto
00:32:31
y es porque lo veis así,
00:32:33
porque cuando tendremos los arrays
00:32:35
la primera posición de la array es la cero.
00:32:37
Entonces me vale,
00:32:39
me viene mejor que i empiece de cero.
00:32:41
¿Más dudas?
00:32:45
Vale.
00:32:53
Entonces la idea es
00:32:55
simplemente esta, yo tengo un método.
00:32:57
Hemos hecho algunos ejercicios
00:32:59
donde un cierto
00:33:01
trozo de
00:33:03
método,
00:33:05
trozo de código se repetía varias veces.
00:33:07
Pues yo allí habría podido sacarlo fuera,
00:33:09
poner allí,
00:33:11
darle un nombre y decir
00:33:13
todas las veces que yo tenía, pues repite este nombre.
00:33:15
¿Vale?
00:33:17
Ahora para luego hacemos más ejemplos después.
00:33:19
Los procedimientos
00:33:21
como tales
00:33:23
se pueden utilizar también
00:33:25
con la idea
00:33:27
de
00:33:29
organizar el código, ¿vale?
00:33:31
En vez de hacer estos programas
00:33:33
absurdos de complejos que tenéis
00:33:35
vosotros con todo metido allí,
00:33:37
yo podría decir, oye mira,
00:33:39
mi programa main
00:33:41
es esto.
00:33:43
Inicializa el sistema,
00:33:45
calcula datos, escribe el resultado.
00:33:47
Tres pasos.
00:33:49
Este es el main.
00:33:51
Y luego ahora irme en cada uno
00:33:53
de estos métodos y hacer
00:33:55
todo el código para inicializar el sistema,
00:33:57
todo el código para calcular
00:33:59
los datos, todo el código para escribir
00:34:01
el resultado.
00:34:03
Además, si yo lo hago así,
00:34:05
puedo pillar tres grupos de trabajos
00:34:07
y decirle, oye mira,
00:34:09
tú tienes que encargarte de inicializar
00:34:11
el sistema, tú de calcular
00:34:13
los datos y tú de escribir
00:34:15
los resultados. Luego
00:34:17
vosotros desarrolláis por separados
00:34:19
a lo mejor con los parámetros que te he
00:34:21
dado yo, ¿vale?
00:34:23
Los distintos programas, luego
00:34:25
los pongo todos juntos y he trabajado
00:34:27
en paralelo.
00:34:29
Entonces hago más rápido.
00:34:31
Realmente esto necesita que antes alguien
00:34:33
sepa de que va el sistema,
00:34:35
que lo haya dividido en métodos,
00:34:37
o sea, en una descomposición funcional,
00:34:39
algo parecido al que os digo que tenéis
00:34:41
que hacer vosotros cuando hacemos los ejercicios,
00:34:43
¿vale? Y luego ha asignado
00:34:45
a varios grupos de trabajos
00:34:47
trozos de este sistema.
00:34:49
¿Os acordáis cuál era el ejercicio
00:34:51
que hemos hecho el viernes? Me parece
00:34:53
que tenía como tres fases. Antes
00:34:55
ver si los números eran positivos
00:34:57
o qué era, y luego ver
00:34:59
que quedaban como tres ejercicios
00:35:01
en uno. ¿Os acordáis?
00:35:03
Pues ahora a lo mejor lo buscamos
00:35:05
después, repillamos eso
00:35:07
e intentamos traducirlo a una
00:35:09
cosa de ese estilo.
00:35:11
¿Vale?
00:35:13
¿Dudas?
00:35:15
¿Dudas sobre los procedimientos?
00:35:19
¿Para qué sirven?
00:35:21
Para no escribir varias veces el código,
00:35:23
para
00:35:25
ordenar el código
00:35:27
y también la tercera
00:35:29
cosa interesante es que
00:35:31
si yo uso la misma...
00:35:33
Pongamos el calcular el área del cuadrado,
00:35:35
¿vale? Si yo lo uso muchas veces
00:35:37
en mi programa, si yo
00:35:39
lo escribo cada vez como se
00:35:41
calcula y luego me doy cuenta que
00:35:43
quien me ha dado la fórmula se ha equivocado
00:35:45
y en vez de el por
00:35:47
tenía que utilizar otra variable,
00:35:49
otra operación, pues debería
00:35:51
ir a buscar en todo mi programa
00:35:53
las mil veces que lo he utilizado
00:35:55
y modificarlo.
00:35:57
Si yo cada vez que he utilizado
00:35:59
ese procedimiento
00:36:01
llamaba el método calcular área
00:36:03
ahora yo me voy
00:36:05
al método calcular área, lo soluciona
00:36:07
allí el problema y automáticamente
00:36:09
se ha solucionado todas las veces que se ha llamado.
00:36:11
¿Sí o no?
00:36:15
¿Dudas?
00:36:17
Vale.
00:36:19
¿Entonces qué es
00:36:21
en vez de una función? Una función lo sabéis
00:36:23
vosotros, que sois
00:36:25
la mayoría de vosotros
00:36:27
unos cuantos de vosotros habrán pasado por
00:36:29
bachillerato y sabéis perfectamente que es una función.
00:36:31
¿Qué es una función?
00:36:33
¿Recordáis?
00:36:39
f de x es igual a
00:36:41
x cuadro más tres
00:36:43
punto y coma. ¿Qué es eso?
00:36:45
Es una máquina, ¿vale?
00:36:47
Es una máquina en la que tú pones
00:36:49
un input, la x, un valor
00:36:51
de la x, y él te lo transforma
00:36:53
en otro input.
00:36:55
Pero la particularidad de la función
00:36:57
es que te devuelve algo.
00:36:59
Cuando tú
00:37:01
llamas una función, le das
00:37:03
unos parámetros de entrada
00:37:05
y él te da un
00:37:07
resultado de la función.
00:37:09
Cosa que si os fijáis
00:37:11
el procedimiento no hace.
00:37:13
El procedimiento tú le dices, haz algo
00:37:15
y él lo hace. Imprime por pantalla
00:37:17
calcula y hace así.
00:37:19
No te devuelve un valor.
00:37:21
No crea un valor, lo calcula y te dice
00:37:23
mira, aquí está el resultado
00:37:25
de tu operación, el resultado de tu
00:37:27
función. Eso no lo hace.
00:37:29
La función sí.
00:37:31
La función es parecida a un procedimiento,
00:37:33
pero sirve para obtener un determinado
00:37:35
resultado que se devolverá
00:37:37
al término de la función.
00:37:39
Es decir, algo parecido
00:37:43
a esto.
00:37:45
Antes yo hacía
00:37:47
calcularea.
00:37:49
Y era el calcularea
00:37:51
que hacía lado por lado
00:37:53
y escribía en pantalla
00:37:55
el resultado es 37.
00:37:57
Pero este 37
00:37:59
o 40, yo no lo tenía.
00:38:01
Lo tenía impreso
00:38:03
pero era en el procedimiento.
00:38:05
Y si yo lo quería utilizar
00:38:07
donde se llama
00:38:09
en el main, es decir,
00:38:11
o sea, en el main, es decir,
00:38:13
esto calcularea el perímetro
00:38:23
y me lo escribe en pantalla.
00:38:25
Y si yo quisiera en el main
00:38:27
utilizar este resultado, utilizar
00:38:29
el área, por ejemplo,
00:38:31
¿podría hacerlo o no?
00:38:35
No, porque no está allí.
00:38:37
No hay ninguna forma
00:38:39
aquí que me diga
00:38:41
oye mira, te lo doy,
00:38:43
te doy el área,
00:38:45
tú guárdatelo en una variable
00:38:47
porque esto será el área calculada.
00:38:49
No puedes. ¿Cómo lo hace?
00:39:11
Un procedimiento,
00:39:13
la diferencia de procedimiento funciona
00:39:15
es que el procedimiento no puede hacer esto,
00:39:17
el procedimiento no hace esto.
00:39:19
Y la clave está aquí.
00:39:21
Void, que en inglés
00:39:23
quiere decir
00:39:25
vacío,
00:39:27
quiere decir que esta cosa
00:39:29
de aquí no devuelve
00:39:31
nada. Tú no puedes hacer aquí
00:39:33
int x es igual a
00:39:35
calcular el perímetro,
00:39:37
este calcula del perímetro no te devuelve
00:39:39
nada.
00:39:41
La función
00:39:45
es distinta.
00:39:49
La función, cuando tú llamas
00:39:51
calcula área sobre estos dos,
00:39:53
te calculará el área
00:39:55
y al final de la función
00:39:57
pilla estos datos calculados
00:39:59
y lo puede hasta escribir en pantalla,
00:40:01
no hay que ser ese el problema, pero al final de eso
00:40:03
te lo devuelve
00:40:05
este valor calculado,
00:40:07
lo devuelve a
00:40:09
quien lo ha llamado, en este caso
00:40:11
al main
00:40:13
y entonces el main lo puede almacenar
00:40:15
en una variable.
00:40:17
La diferencia entre procedimiento
00:40:21
y función es que la función
00:40:23
devuelve algo y entonces
00:40:25
lo puedo guardar en una variable, mientras el procedimiento
00:40:27
no devuelve nada y por lo
00:40:29
tanto no puedo
00:40:31
guardar su resultado en algún lado.
00:40:33
Lo que tú dices es que
00:40:37
de hecho esto no es
00:40:39
calcular el área del perímetro,
00:40:41
o devuelvo un array
00:40:43
donde la primera posición
00:40:45
es un área
00:40:47
del segundo del perímetro,
00:40:49
pero no sabemos que es un array
00:40:51
por lo tanto no.
00:40:53
O devuelvo un string
00:40:55
donde dentro está el área,
00:40:57
punto y coma,
00:40:59
y luego eres tú
00:41:01
que te la tiene que buscar la vida.
00:41:03
¿O eres tú que te la tiene que buscar la vida
00:41:05
para dividir esta en 12
00:41:07
y usarla como número?
00:41:09
Por ahora sí.
00:41:15
¿Os veo en movimiento porque ya ha sonado
00:41:17
y es recreo?
00:41:19
No, todavía no.
00:41:21
Vale, entonces
00:41:23
la idea es esta, ¿vale?
00:41:25
Entonces ahora yo tengo creaSaludo
00:41:27
de nombre, y esto puede
00:41:29
que me escriba en pantalla o no, no lo sé,
00:41:31
pero sé que al final de esta operación
00:41:33
deberá haber creado un string
00:41:35
que es mi saludo creado,
00:41:37
y yo este saludo creado lo puedo guardar
00:41:39
dentro de saludo.
00:41:41
¿Cómo se hace esto?
00:41:45
La función se declara como antes,
00:41:53
public static,
00:41:55
solo que aquí en vez de void
00:41:57
va el tipo de dato
00:41:59
y se devuelve al final
00:42:01
public static int
00:42:03
nombre
00:42:05
public static string
00:42:07
saludo
00:42:09
¿Y cómo se llama?
00:42:13
Pues igual que antes,
00:42:15
solo que ahora
00:42:17
lo que puedo hacer es que
00:42:19
el mismo tipo que he usado aquí arriba
00:42:21
lo puedo usar aquí
00:42:25
para almacenar
00:42:27
el resultado de esta función
00:42:29
Funcionará lo que sea la gana
00:42:31
empaquetará un objeto
00:42:33
de tipo
00:42:35
devuelto, y esta cosa de aquí
00:42:37
esta variable de aquí
00:42:39
la puedo guardar en una variable del mismo tipo
00:42:41
Si una función devuelve string
00:42:43
no la puedo guardar en un int
00:42:45
¿Sí?
00:42:49
Ejemplo más concreto
00:42:51
y luego os dejo ahí
00:42:53
Por ejemplo, public static
00:42:55
string
00:42:57
¿Lo veis que aquí en vez de void esta string?
00:42:59
Quiere decir que es una función
00:43:01
Saluda string nombre
00:43:03
Entonces ahora yo me creo una variable
00:43:05
que se llama resultado
00:43:07
le digo hola más nombre
00:43:09
entonces resultado vale hola nombre
00:43:11
y lo que hago es esto
00:43:13
return resultado
00:43:15
este return quiere decir que
00:43:17
cuando acaba este procedimiento
00:43:19
lo que hay dentro del resultado
00:43:21
te lo devuelve
00:43:23
lo que quieras
00:43:25
lo puedes ignorar
00:43:27
o lo puedes guardar
00:43:29
en una variable
00:43:33
Entonces
00:43:37
dentro de la variable saludo1
00:43:39
me guardo el resultado de saludastéfano
00:43:41
o sea que esto será holastéfano
00:43:43
que se guarda aquí dentro
00:43:45
luego creo Paco
00:43:47
llamo string saludo2
00:43:49
que es una nueva variable
00:43:51
y ahora n
00:43:53
pues esto me pondrá
00:43:55
hará todo lo que hace saluda
00:43:57
que es crear la string holapaco
00:43:59
y holapaco se guarda dentro saludo2
00:44:01
y a este punto imprimo saludo1
00:44:03
y imprimo saludo2
00:44:05
esto imprimará holastéfano
00:44:07
holapaco
00:44:09
Venga
00:44:15
después del recreo seguimos
00:44:17
Entonces
00:44:19
ahora que hemos vuelto
00:44:21
de recreo
00:44:23
estamos hablando de dos cosas
00:44:25
procedimientos y funciones
00:44:27
procedimientos son trozos de
00:44:29
códigos que tienen un nombre
00:44:31
que tienen que hacer una determinada tarea
00:44:33
y que no me espero que me
00:44:35
devuelvan nada
00:44:37
funciones son trozos de código que hacen
00:44:39
una determinada tarea
00:44:41
y además me espero que al final
00:44:43
me den algo
00:44:45
que sea un
00:44:47
booleano para decirme si han podido
00:44:49
hacer la tarea o no
00:44:51
que sea el resultado de la operación
00:44:53
que han hecho
00:44:55
que sea la concatenación
00:44:57
de mil cosas que me pasan
00:44:59
para que luego yo las descomponga
00:45:01
y vaya leyendo toda la parte
00:45:03
que tengo que leer de lo que me han pasado
00:45:05
algo
00:45:07
ese algo lo decido yo como programador
00:45:09
te devuelvo un int
00:45:11
te devuelvo una serie
00:45:13
un string que es una serie de int
00:45:15
preparados por coma que te paso allí
00:45:17
66 int porque me da la gana
00:45:19
vosotros sois los programadores
00:45:21
vosotros decidís que hacer
00:45:23
entonces
00:45:25
en los procedimientos
00:45:27
y aquí tengo public static void
00:45:29
el tipo de vuelta es void
00:45:31
void quiere decir nada, vacío
00:45:33
entonces no te estoy devolviendo nada
00:45:35
en las funciones public static
00:45:37
es un tipo
00:45:39
yo quiero que al final de mi función
00:45:41
me devuelva algo de ese tipo
00:45:43
si aquí he puesto string
00:45:45
que era un string al final
00:45:47
si he puesto un int, un int
00:45:49
si un double, un double
00:45:51
por ahora nosotros aquí utilizaremos
00:45:53
solo tipos primitivos
00:45:55
y string
00:45:57
que no es un tipo primitivo
00:45:59
pero casi
00:46:01
entonces
00:46:03
antes estamos viendo esto
00:46:05
entonces
00:46:07
lo que estamos haciendo aquí es
00:46:09
llamar el método saluda
00:46:11
saluda es un método que he creado que tiene que devolver un string
00:46:13
villa como parámetro
00:46:15
otro string, entonces cuando yo llamo
00:46:17
saluda siempre le tengo que poner
00:46:19
un string como parámetro
00:46:21
que será el parámetro actual
00:46:23
lo que hace él es pegar delante
00:46:25
de lo que le he pasado yo
00:46:27
un hola espacio
00:46:29
y luego me lo devuelve
00:46:31
el return es esa cosa que me dice
00:46:33
devuelve a quien te he llamado
00:46:35
este valor
00:46:37
si yo no pongo string saludo1
00:46:39
aquí arriba
00:46:41
este método devolverá algo
00:46:43
al final me dará
00:46:45
esta información
00:46:47
pero como yo no la guardo
00:46:49
en ningún lado, esta información se perderá
00:46:51
y ya está
00:46:53
o sea que yo puedo utilizar una función
00:46:55
sin recibir nada
00:46:57
poniendo solo salud
00:46:59
pero normalmente
00:47:01
si lo he programado yo
00:47:03
segundo solo
00:47:06
entonces decíamos
00:47:08
no me acuerdo si estaba diciendo antes
00:47:12
pero el concepto es que
00:47:14
ah, si
00:47:16
la función devuelve algo
00:47:18
y yo lo puedo recoger
00:47:20
desde donde he llamado esta función
00:47:22
puedo no recogerlo, puedo no mirar
00:47:24
lo que me ha devuelto pero
00:47:26
si en mi programación cuando yo he pensado
00:47:28
que hago una función o un procedimiento
00:47:30
y me doy cuenta que lo que está
00:47:32
devolviendo esta función no lo uso nunca
00:47:34
pues posiblemente ese sea un procedimiento
00:47:36
y yo lo he enmascado
00:47:38
como función
00:47:40
teniendo en cuenta que
00:47:42
si yo pongo aquí algo que no sea void
00:47:44
o sea como string int
00:47:46
por el estilo, la función
00:47:48
en algún momento tiene que hacer un return
00:47:50
siempre
00:47:52
no puedo hacer
00:47:54
aquí dentro if
00:47:56
no sé qué, return no sé cuánto
00:47:58
else y no retornar nada
00:48:00
siempre tengo que returnar
00:48:02
como
00:48:04
idea principal y consejo
00:48:06
yo pondría un único
00:48:08
return al final
00:48:10
sabéis como cuando hacemos nosotros
00:48:12
que imprimimos solo una vez
00:48:14
en pantalla y luego preparamos
00:48:16
la string antes y luego imprimimos
00:48:18
esa string, pues mismo concepto
00:48:20
yo al final hago un return
00:48:22
de una variable, si es una string
00:48:24
nada más empezar hago string
00:48:26
resultado
00:48:28
resultado es igual a vacío
00:48:30
y al final pongo return resultado
00:48:32
y en el medio hago lo que me da la gana
00:48:34
en algunos casos concretos
00:48:36
puede ser útil
00:48:38
hacer un return antes
00:48:40
porque cuando hago el return
00:48:42
allí se para
00:48:44
el método
00:48:46
si yo tengo
00:48:48
un if
00:48:50
no sé qué, returna algo
00:48:52
else hace un montón de cosas
00:48:54
y después de este else
00:48:56
hace un montón de cosas
00:48:58
si yo pillo este if y pillo el return
00:49:00
todo el resto no lo ejecuto
00:49:02
el return devuelve
00:49:04
a donde ha sido llamado
00:49:06
pero a lo mejor esto lo veremos con más detalle
00:49:08
en el futuro con los ejemplos
00:49:10
pero la idea es como un break
00:49:12
sabéis cuando el break del switch
00:49:14
que salgo del switch, pues misma cosa
00:49:16
encuentro un return y el resto no lo ejecuto
00:49:18
allí se acabó el método
00:49:20
aquí se acabó la función
00:49:22
devuelvo el resultado y vuelvo
00:49:24
si os fijáis también
00:49:27
estas llamadas de función y procedimiento
00:49:29
son lo que decíamos al principio
00:49:31
interrumpen el normal
00:49:33
y secuencial
00:49:35
orden de ejecución
00:49:37
yo cuando estoy aquí
00:49:39
saludo, interrumpo el main
00:49:41
me voy a saludo
00:49:43
ejecuto estas dos líneas
00:49:45
y vuelvo allí donde estaba antes
00:49:47
y el resultado que me ha devuelto
00:49:49
lo pongo en saludo
00:49:51
y sigo desde aquí
00:49:53
si o no
00:49:55
dudas
00:49:57
preguntas
00:49:59
aquí
00:50:05
este es un parámetro
00:50:07
mira
00:50:11
aquí se lo he dado directamente el valor
00:50:13
aquí lo que tienes que hacer es el parámetro actual
00:50:15
o sea el valor que asociarás a esto
00:50:17
aquí dentro no
00:50:19
aquí dentro es sólo el nombre que usarás
00:50:21
el nombre variable que usarás aquí dentro
00:50:23
para referirte a lo que te van a dar
00:50:25
y tú se lo puedes dar como literal
00:50:27
o se lo puedes pasar como parámetro
00:50:29
como variable
00:50:31
o se lo puedes pasar como resultado
00:50:33
de otra función
00:50:35
tú aquí pones una función que al final te da un string
00:50:37
y lo que se da es un string
00:50:39
que uso como parámetro para saludo
00:50:41
una función dentro de una función
00:50:43
que no
00:50:45
dudas
00:50:47
vale
00:50:49
entonces
00:50:53
otro ejemplo
00:50:55
aquí tengo dos
00:50:57
funciones
00:50:59
una función y un método
00:51:01
esta función de aquí
00:51:03
pregunto
00:51:05
¿cómo se llama esta función?
00:51:07
repite saludo
00:51:11
¿por qué se crea una función?
00:51:13
porque aquí tiene
00:51:19
string y no void
00:51:21
no es un parámetro
00:51:23
como
00:51:25
este campo de aquí de la declaración
00:51:27
que me dice ¿qué devuelve al final
00:51:29
esta función? pues string
00:51:31
y no void pues es una función
00:51:33
al final tendrá que tener un return
00:51:35
si yo pongo un void pues no hace falta return
00:51:37
¿sí?
00:51:39
¿qué parámetros pilla?
00:51:41
un string
00:51:43
y un int
00:51:45
¿vale?
00:51:47
el string será el nombre
00:51:49
el int la repetición
00:51:51
de cuántas veces tengo que repetir esto
00:51:53
¿os acordáis que antes lo escribía
00:51:55
directamente en pantalla?
00:51:57
pues ahora no puedo
00:51:59
pero lo que yo quiero es que
00:52:01
el resultado de esta operación
00:52:03
de esta función se pase a quien me ha llamado
00:52:05
y luego sea quien me ha llamado
00:52:07
que lo imprima en pantalla si quiere
00:52:09
haga lo que sea con el resultado
00:52:11
entonces yo aquí hago un string
00:52:13
de resultado que no es nada
00:52:15
hago un for
00:52:17
un número de repeticiones
00:52:19
veces, si repetición vale 5
00:52:21
lo hago 5 veces, si repetición es 3 lo hago 3 veces
00:52:23
y lo que hago es que
00:52:25
concadeno al resultado
00:52:27
lo que haya en resultado
00:52:29
más hola
00:52:31
más el nombre
00:52:33
antes
00:52:35
si hacía println me salía uno por cada línea
00:52:37
¿vale?
00:52:39
ahora no me saldría por cada línea
00:52:41
¿vale? porque le he puesto un espacio
00:52:43
saldría, si yo le llamo sobre
00:52:45
estefano4 me saldría
00:52:47
hola estefano, espacio hola estefano, espacio hola estefano
00:52:49
espacio hola estefano, pero todo en la misma línea
00:52:51
si quisiera ir a una nueva línea
00:52:53
podría poner aquí un barra n
00:52:55
pero aquí no estoy imprimiendo
00:52:57
nada en pantalla, estoy creando
00:52:59
una nueva string
00:53:01
que luego al final devuelvo a quien me ha llamado
00:53:03
entonces
00:53:05
aquí arriba
00:53:07
llamo el método
00:53:11
repitesaludos, utilizando
00:53:13
Luis y 4
00:53:15
esto me creará hola Luis, espacio hola Luis
00:53:17
espacio hola Luis, espacio hola Luis
00:53:19
y me lo guarda
00:53:21
en esta variable aquí
00:53:23
del main
00:53:25
y ahora lo que puedo hacer es imprimir esa variable
00:53:27
habría podido hacer
00:53:29
system.auto.println
00:53:31
de entre paréntesis
00:53:33
repitesaludos Luis 4
00:53:35
si
00:53:37
porque el resultado de este método
00:53:39
es un string que lo pilla
00:53:41
como parámetro del println y me lo imprime
00:53:43
dudas
00:53:47
vamos a ver un ejemplo
00:53:51
un poquito más
00:53:53
complejo
00:53:55
entonces
00:53:57
vamos por parte
00:53:59
esto de aquí que son más fáciles
00:54:01
funciona el procedimiento
00:54:05
funciona, ¿qué parámetros pilla?
00:54:09
dos int, ¿cómo se llama?
00:54:13
calcular área, ¿qué devuelve?
00:54:17
tú le pasas estos dos lados
00:54:23
él te calcula el área
00:54:25
¿sí?
00:54:27
este de aquí
00:54:29
el método pintabonito
00:54:31
pintabonito
00:54:33
¿qué es?
00:54:35
¿funciona el procedimiento?
00:54:37
procedimiento
00:54:39
no espero que me devuelva nada
00:54:41
porque tiene void aquí, de hecho no tiene return
00:54:43
¿sí?
00:54:45
recibe
00:54:47
un int a
00:54:49
un int b y un int r
00:54:51
siendo posiblemente
00:54:53
un lado, otro lado
00:54:55
y el resultado
00:54:57
y lo que hace es
00:54:59
me lo pintabonito porque me hace
00:55:01
este marco
00:55:03
con los estereoscopios
00:55:05
y escribe el rectángulo de lados
00:55:07
a y b
00:55:09
tiene área r
00:55:11
a lo mejor esto
00:55:13
habría sido más bonito si aquí hubiese puesto
00:55:15
lado 1, lado 2 y área
00:55:17
en vez que a, b y r
00:55:19
que luego no se entiende que son
00:55:21
o sea que esto es un procedimiento
00:55:23
para escribir las cosas bonitas en pantalla
00:55:25
¿sí?
00:55:27
vale
00:55:29
método
00:55:31
o sea, esta otra cosa de aquí
00:55:33
esta, ¿cómo se llama?
00:55:35
¿eh?
00:55:39
legginum
00:55:41
¿es un procedimiento
00:55:45
o una
00:55:47
una función?
00:55:49
¿qué quiero que me devuelva?
00:55:51
un int
00:55:53
¿vale? el resultado de todo esto
00:55:55
me tiene que devolver un int
00:55:57
o sea que por aquí tiene que haber un return
00:55:59
y tiene que retornar algo
00:56:01
y este algo tiene que ser un int
00:56:03
si no algo no funcionaría
00:56:05
¿sí?
00:56:07
¿qué recibe como parámetros?
00:56:09
un string
00:56:13
¿y un escáner?
00:56:15
¿y un escáner?
00:56:19
¿qué es eso?
00:56:21
el string es un escáner
00:56:25
nosotros, esto quiere decir que cuando llamo
00:56:27
legginum le tengo que pasar
00:56:29
un string que se llama msg
00:56:31
que él imprime en pantalla, es el mensaje
00:56:33
¿sabéis eso que nosotros hemos siempre dicho?
00:56:35
antes de hacer una lectura
00:56:37
por teclado
00:56:39
necesitaría mandar un mensaje
00:56:41
pues, lo pongo aquí
00:56:43
y luego
00:56:45
para que funcione le estoy pasando
00:56:47
el escáner
00:56:49
el escáner que he creado en el main
00:56:51
se lo paso a este
00:56:53
metodito de aquí para que tenga acceso al teclado
00:56:55
y pueda hacer teclado.ext
00:56:57
cuidado, aquí no lo está creando
00:56:59
no está haciendo
00:57:01
escáner teclado es igual a newScanner
00:57:03
porque esta cosa ya se ha creado
00:57:05
me la están pasando como parámetro
00:57:07
vamos a ver como se pasa el problema
00:57:09
pero es como decir
00:57:11
que mi función legginum
00:57:13
se espera que alguien
00:57:15
le dé
00:57:17
un string
00:57:19
y un teclado
00:57:21
¿vale? con eso
00:57:23
ya puede escribir en pantalla
00:57:25
el mensaje, sea cual sea
00:57:27
el mensaje y pedir
00:57:29
un nuevo entero a ese teclado
00:57:31
sea cual sea ese teclado
00:57:33
¿si?
00:57:35
no lo es instancial, pues si que lo es instancial
00:57:37
al momento en que llamaré
00:57:39
legginum con sus parámetros
00:57:41
actuales, pues haré
00:57:43
un colegamiento entre
00:57:45
este teclado y el otro parámetro
00:57:47
¿dudas?
00:57:49
vamos a ver entonces como llamamos estos tres
00:57:53
métodos y como me sale el main
00:57:55
este es el main
00:57:57
¿vale?
00:57:59
el main crea un objeto escáner
00:58:01
y lo guarda en la variable s
00:58:03
lo que hemos hecho siempre
00:58:05
antes de llamarlo scan o teclado
00:58:07
lo he llamado s
00:58:09
ahora, int lado1
00:58:11
¿si? entonces
00:58:13
aquí dentro, guarda mi resultado
00:58:15
de esta
00:58:17
función, ¿que es esta función?
00:58:19
llama legginum, donde pones
00:58:21
como primer parámetro
00:58:23
dame el primer lado del rectángulo
00:58:25
y segundo parámetro
00:58:27
este s
00:58:29
estoy pasando
00:58:31
el escáner, para que luego tú allí dentro
00:58:33
puedas hacer
00:58:35
teclado.
00:58:37
¿vale?
00:58:39
teniendo en cuenta que aquí dentro
00:58:41
esto se llama s
00:58:43
pero aquí dentro
00:58:45
esto se llamará teclal
00:58:47
aquí dentro hay una variable s más s
00:58:53
¿no? porque
00:58:55
s vale solo dentro de este bloque de aquí
00:58:57
¿vale?
00:58:59
aquí no se ha declarado ninguna variable s
00:59:01
¿puedo declarar otra variable s?
00:59:03
sí, pero no sería la misma
00:59:05
variable s esta aquí, sería otra cosa
00:59:07
¿si? yo aquí he creado
00:59:11
un objeto que le he de teclado
00:59:13
un algo, una entidad que le he de teclado
00:59:15
y aquí le estoy diciendo
00:59:17
que aquí dentro
00:59:19
tú me tienes que dar una entidad que le he de teclado
00:59:21
un escáner
00:59:23
y la asociación entre esta cosa de aquí
00:59:25
y la que yo he creado
00:59:27
es aquí
00:59:29
cuando yo estoy llamándole genoom
00:59:33
te está pasando el s
00:59:35
que es la entidad
00:59:37
lectora de teclado que he creado
00:59:39
y tú aquí dentro la tratarás
00:59:41
como si se llamara teclado
00:59:43
y entonces haces teclado.nexi
00:59:45
¿pero por qué no se podría llamar s?
00:59:49
puede poner s aquí
00:59:51
entonces s, claro
00:59:53
¿pero sería lo mismo?
00:59:55
bueno, esto lo decís tú
00:59:57
si lo llama escáner gatito
00:59:59
gatito.nexi
01:00:01
es que esto es genérico
01:00:05
o sea, esto tú luego lo puedes reutilizar
01:00:07
donde te da la gana
01:00:09
entonces, no lo sé
01:00:11
vale, si tú estás haciendo un ejercicio sencillo así
01:00:13
pues sí
01:00:15
si tú estás haciendo una librería de matemática
01:00:17
donde calculas la del triángulo
01:00:19
pues tú no lo sabes
01:00:21
si la persona que va a luego usarla
01:00:23
llamará el lado 1, el lado 2
01:00:25
o lo llamará l1, l2
01:00:27
o lo llamará a, b y c
01:00:29
tú lo llamas como quieras
01:00:31
y aquí dentro lo llamas como quieras tú
01:00:33
¿vale?
01:00:35
yo habría podido llamarlo teclado aquí también
01:00:37
pero para no confundiros que estas son dos cosas distintas
01:00:39
¿vale?
01:00:41
cuando tú llamas el leyenum
01:00:45
como pilla dos parámetros
01:00:47
esto lo has llamado teclado, aquí dentro usarás teclado
01:00:49
pero el vínculo
01:00:51
entre el objeto aquí que he creado
01:00:53
escáner y este teclado
01:00:55
es el mismo que a la hora de llamar
01:00:57
esto luego
01:01:03
se complica cuanto queráis
01:01:05
¿vale?
01:01:07
esto también
01:01:09
lo hemos visto, está aquí
01:01:11
como ejemplo, echadle un vistazo
01:01:13
pero en teoría intentaremos
01:01:15
que para el examen
01:01:17
envíos
01:01:19
de objetos como pasa aquí
01:01:21
no sean necesarios, o sea que los parámetros
01:01:23
sean sólo
01:01:25
tipos primitivos o string
01:01:31
¿vale?
01:01:33
intentaremos evitar
01:01:35
teniendo en cuenta que yo esto de leer
01:01:37
lo habría podido hacer aquí fuera
01:01:39
no es necesario hacerlo aquí
01:01:41
¿vale? es más práctico porque
01:01:43
ahora ya aquí tengo mis
01:01:45
mis tres
01:01:47
¿cómo se llaman?
01:01:49
mis dos líneas de código
01:01:51
porque aquí es una línea de código única
01:01:53
si esto fueran 50 líneas de código
01:01:57
porque luego tiene que mirar que los datos
01:01:59
sean correctos, que sean entre 1
01:02:01
y 100 y cosas por el estilo
01:02:03
en vez de escribirlo aquí dos veces
01:02:05
el mismo código, pues lo escribo sólo una vez
01:02:07
y llamo dos veces mi legion
01:02:09
¿sí?
01:02:11
probamos con ejemplos
01:02:15
y lo hacemos juntos
01:02:17
¿vale? entonces este es un ejemplo de un
01:02:19
ejercicio
01:02:21
que luego al final hará esto
01:02:23
¿vale?
01:02:25
dice dame
01:02:27
esto es la primera
01:02:29
llamada de la
01:02:31
genoom
01:02:33
esta es la segunda llamada de la genoom
01:02:35
lo que han puesto se guardarán en los datos
01:02:37
y al final llamo el printabonito
01:02:39
no, bueno, llamo antes
01:02:41
el calcularia
01:02:43
y luego después el printabonito
01:02:45
dándole este número, este número
01:02:47
y el resultado
01:02:49
¿sí?
01:02:51
lo vemos aquí
01:02:53
leo los dos números
01:02:57
área
01:02:59
será, calcula área
01:03:01
del lado 1 al lado 2, que son los dos que he leído
01:03:03
y luego printabonito del lado 1 al lado 2
01:03:05
y área
01:03:07
dura
01:03:09
¿vale? y ya
01:03:17
¿como?
01:03:19
normalmente el escáner se debería
01:03:23
cerrar ¿vale?
01:03:25
pero que pasa, que como nuestros programas luego acaban
01:03:27
cuando acaban todos los recursos
01:03:29
se destruyen
01:03:31
esto es necesario si mi programa aquí no
01:03:33
acabara e empezara a hacer otras cosas
01:03:35
como he dejado abierto el escáner
01:03:37
pues eso me ocupa recursos para nada
01:03:39
¿vale? entonces
01:03:41
una buena práctica
01:03:43
que al final pues haga dosis
01:03:45
pero como estos son métodos, son objetos
01:03:47
y cosas por el estilo, yo estoy obviando
01:03:49
para eso, para que no me interese
01:03:51
¿vale? por ahora no me interese esta cosa
01:03:53
cuando veremos los objetos y veremos
01:03:55
acceso a ficheros y cosas así
01:03:57
pues entonces estas cosas
01:03:59
tomarán más importancia
01:04:01
¿sí?
01:04:03
vale, entonces
01:04:05
esto para repasar un poquito
01:04:07
el concepto de parámetros
01:04:09
formales y parámetros actuales
01:04:11
¿vale? los parámetros formales
01:04:13
son los que se usan dentro de la función
01:04:15
o del procedimiento y no tienen un valor
01:04:17
concreto hasta que se llame la función
01:04:19
o el procedimiento, son números
01:04:21
son valores abstractos
01:04:23
yo sé que aquí tendré el lado 1
01:04:25
antes o después alguien me dirá cuanto vale
01:04:27
el lado 1, pero por ahora como no lo sé
01:04:29
lo uso de forma abstracta
01:04:31
diciendo aquí va lado 1
01:04:33
¿qué tengo que hacer? lado 1 por lado 2
01:04:35
pero esto es 5 por 3, no lo sé
01:04:37
hasta que tú no me digas cuanto vale lado 1
01:04:39
y cuanto vale lado 2
01:04:41
pues no lo puedo saber, ¿cuando lo sabré?
01:04:43
cuando invocan el método, cuando lo llaman
01:04:45
cuando llaman la función
01:04:47
¿sí?
01:04:49
y los parámetros actuales son los valores
01:04:51
concretos que se asignan a los parámetros
01:04:53
formales a la hora de la llamada
01:04:55
de la función, ¿vale?
01:04:57
los parámetros actuales son los que
01:04:59
se ponen en la llamada de la función
01:05:01
los parámetros formales son los que están
01:05:03
dentro de la definición, la declaración
01:05:05
de la función
01:05:07
estos son abstractos, no sé cuanto valen
01:05:09
estos son los valores
01:05:11
actuales de esa llamada
01:05:13
en ese momento, actualmente
01:05:15
los valores valen este y este
01:05:17
en otra llamada valdrán otra cosa
01:05:19
pero aquí valen estos
01:05:21
¿estudas?
01:05:23
sustancialmente esto es
01:05:25
hago una abstracción
01:05:27
de un determinado
01:05:29
de una determinada tarea
01:05:31
parametrizable
01:05:33
y luego la reuso cuantas veces me dé la gana
01:05:35
con los parámetros que yo quiero
01:05:37
una vez con 3 y 5
01:05:39
una vez con 7 y 9, una vez con 45 y 32
01:05:41
y no tengo que reescribir ese código
01:05:43
otra vez, ese código es sustancialmente
01:05:45
me está definiendo
01:05:47
me está solucionando no una tarea sola
01:05:49
pero una clase de tareas
01:05:51
muchas tareas
01:05:53
calcular área me está solucionando
01:05:55
todos los cálculos de área posible
01:05:57
caveat
01:06:07
que en latín quiere decir, atención
01:06:09
funciones y procedimientos
01:06:11
son propios de la programación
01:06:13
estructurada
01:06:15
nosotros ahora estamos
01:06:17
utilizando y aprendiendo programación
01:06:19
estructural y con esto
01:06:21
grosso modo
01:06:23
la base de la programación estructurada
01:06:25
ya está, luego vamos a complicarla un poco
01:06:27
poniendo los arrays y poco más
01:06:29
pero la base de la programación
01:06:31
estructurada son
01:06:33
condicionales, iterativos
01:06:35
y llamadas de funciones
01:06:37
en Java
01:06:41
funciones y procedimientos
01:06:43
se suelen llamar métodos
01:06:45
en la
01:06:47
como se dice
01:06:49
las palabras que se usan
01:06:51
en Java
01:06:53
tú no dirías
01:06:55
esta es una función, este es un procedimiento
01:06:57
dirías este es un método, este es un método
01:06:59
un método estático, un método no estático
01:07:01
eso ya lo veremos
01:07:03
sin embargo
01:07:05
el concepto de método está vinculado a la programación
01:07:07
orientada a objetos
01:07:09
eso sirve cuando estamos
01:07:11
orientados a objetos
01:07:13
y nosotros todavía no estamos, estamos todavía en programación
01:07:15
estructurada, veremos cuando empezaremos
01:07:17
a ver los objetos, cual es el paso hacia
01:07:19
adelante, en realidad ya lo hemos visto desde una perspectiva
01:07:21
teórica al principio del curso
01:07:23
que nos permite hacer el salto desde
01:07:25
base de programación
01:07:27
estructurada a esta programación orientada
01:07:29
a objetos
01:07:31
y siempre que
01:07:33
hablamos de métodos, esto está vinculado
01:07:35
con los conceptos de clase objetos
01:07:37
que nosotros de vez en cuando lo oímos
01:07:39
hacemos una nueva clase
01:07:41
oye, escáner es un objeto, string
01:07:43
también es un objeto
01:07:45
algo, pero que es de verdad
01:07:47
todavía no lo sabemos, ni lo queremos saber
01:07:49
hasta dentro de un rato, ¿vale?
01:07:51
todo esto para decir
01:07:53
que lo que hemos visto hasta ahora
01:07:55
hace un uso impropio de Java
01:07:57
¿vale? es como si nosotros
01:07:59
estamos utilizando Java, que es orientada a objetos
01:08:01
ignorando la parte
01:08:03
orientada a objetos y concentrándose
01:08:05
no solo en la parte estructurada
01:08:07
por lo tanto, algunas cosillas
01:08:09
que os he dicho ahora, para que entendáis
01:08:11
la base, pues en un futuro
01:08:13
posiblemente os diré, ¿os acordáis de esa cosa allí?
01:08:15
pues ahora, miradla desde
01:08:17
esta otra forma
01:08:19
¿si? dentro de un rato, funciona
01:08:21
ese procedimiento, ya no lo llamamos función de procedimiento
01:08:23
se llamarán todos métodos
01:08:25
¿vale?
01:08:27
cuando llegará el momento
01:08:29
volveremos a retomar estos conceptos
01:08:31
que profundizamos en temas como el static
01:08:33
el paso de parámetros por valores
01:08:35
referencia, la firma de un
01:08:37
método, sobrecarga de un método
01:08:39
todas estas cosas, son cosas que
01:08:41
a lo mejor ahora alguna de estas he nombrado
01:08:43
he dado una pincelada
01:08:45
pero todavía no sabemos que es
01:08:47
nos servirá esta
01:08:49
fundamental, es cuando estaremos en la programación
01:08:51
orientada a objetos
01:08:53
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento
- Visualizaciones:
- 16
- Fecha:
- 30 de octubre de 2023 - 12:55
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 1h′ 09′ 03″
- Relación de aspecto:
- 4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
- Resolución:
- 960x720 píxeles
- Tamaño:
- 197.60 MBytes