1
00:00:10,660 --> 00:00:13,580
Hola te saluda nuevamente Ubaldo Acosta.

2
00:00:13,660 --> 00:00:16,440
Espero que estén listos para comenzar con esta elección.

3
00:00:16,630 --> 00:00:23,080
Vamos a estudiar a continuación el tema de paso de valor y referencia en IAVA están listos.

4
00:00:23,140 --> 00:00:23,620
Vamos

5
00:00:26,350 --> 00:00:27,510
paso por valor.

6
00:00:27,670 --> 00:00:32,680
Hasta ahora hemos utilizado tipos primitivos para enviar valores a nuestros métodos.

7
00:00:32,680 --> 00:00:38,650
Esto se conoce como paso por valor ya que como vimos en elecciones anteriores solo estamos copiando

8
00:00:38,680 --> 00:00:43,550
el valor del tipo primitivo pero cada variable contiene su propia copia.

9
00:00:43,600 --> 00:00:50,800
Por ejemplo en el código mostrado podemos observar un ejemplo de paso por valor también conocido como

10
00:00:50,800 --> 00:00:57,480
valores de tipo primitivo lo que observamos en el Código es que al crear una variable en este caso la

11
00:00:57,480 --> 00:01:04,350
variable X y al asignarle un valor por ejemplo el valor de 10 esta variable al ser modificada en otro

12
00:01:04,350 --> 00:01:13,000
método su valor original no se ve modificado ya que solamente pasó una copia de su valor original la

13
00:01:13,000 --> 00:01:18,440
manera de cambiar el valor de la variable X sería cambiándolo dentro del mismo método.

14
00:01:18,520 --> 00:01:26,300
En este caso el método main sin embargo en este ejemplo el método llamado Cambiar valor intenta realizar

15
00:01:26,330 --> 00:01:32,630
un cambio a la variable X pero como está fuera del alcance de este método acceder a esta variable x

16
00:01:32,690 --> 00:01:37,760
no es posible únicamente puede cambiar el valor de su propia variable local.

17
00:01:37,760 --> 00:01:45,110
En este caso la variable y al cambiar este valor en la variable y no afecta el valor de la variable

18
00:01:45,200 --> 00:01:53,120
X así que como podemos observar el valor de la variable y si cambió el valor de la variable x no cambia.

19
00:01:53,120 --> 00:02:00,530
De esta manera podemos observar que el valor de x únicamente manda una copia a la variable y al modificarse

20
00:02:00,560 --> 00:02:06,830
el valor de la variable y solamente se modifica la variable el valor de la variable pero no se afecta

21
00:02:06,920 --> 00:02:11,480
el valor de la variable X ya que únicamente se mandó una copia.

22
00:02:11,480 --> 00:02:21,420
A esto se le conoce como paso por valor o copia del valor de la variable paso por referencia además

23
00:02:21,420 --> 00:02:22,640
del paso por valores.

24
00:02:22,740 --> 00:02:25,190
En Java tenemos el paso por referencia.

25
00:02:25,380 --> 00:02:31,950
Esto básicamente lo utilizaremos o lo aplicaremos cuando mandemos objetos como parámetros a los métodos

26
00:02:32,220 --> 00:02:34,590
en lugar de utilizar tipos primitivos.

27
00:02:34,830 --> 00:02:40,560
Al utilizar un objeto como parámetro y enviarlo a un argumento de un método lo que estamos haciendo

28
00:02:40,620 --> 00:02:44,670
es enviando la referencia del objeto que se está deseando utilizar.

29
00:02:45,370 --> 00:02:51,020
Y en lugar de utilizar una copia del valor del objeto lo que realmente estamos haciendo es pasar la

30
00:02:51,020 --> 00:02:57,830
referencia del objeto mismo con la finalidad de modificarlo directamente en el método que recibe este

31
00:02:57,830 --> 00:02:58,610
argumento.

32
00:02:58,610 --> 00:03:07,790
Esta referencia sin necesidad de crear una copia del objeto veamos como es esto definimos por ejemplo

33
00:03:07,820 --> 00:03:13,820
un objeto de tipo persona con sus variables respectivas se crea en memoria en la posición indicada por

34
00:03:13,820 --> 00:03:22,880
ejemplo 0 x 3 3 3 y por otro lado tenemos las variables locales una variable que se llame P la cual

35
00:03:22,970 --> 00:03:30,640
está apuntando al objeto persona y por ello contienen la referencia del objeto pero también podemos

36
00:03:30,760 --> 00:03:37,240
crear un argumento u otra variable que reciba como parámetro esta misma referencia del objeto persona

37
00:03:37,720 --> 00:03:40,960
y por tanto también apuntarían al objeto persona

38
00:03:45,130 --> 00:03:49,370
y podemos observar a continuación un extracto de este código.

39
00:03:49,370 --> 00:03:55,430
Podemos observar que la variable P Cuando se crea apunta al objeto persona pero también el argumento

40
00:03:55,550 --> 00:04:02,970
apunta al mismo objeto persona así que de alguna manera eso también funciona como una copia.

41
00:04:02,980 --> 00:04:09,640
Sin embargo la copia del valor es la referencia donde está ubicado el objeto y por lo tanto la variable

42
00:04:09,790 --> 00:04:17,020
ya sea P o la variable ARG pueden acceder directamente a los atributos y propiedades del objeto persona

43
00:04:17,170 --> 00:04:23,570
al cual estén apuntando así que si revisamos este código podemos observar que estamos creando una variable

44
00:04:23,590 --> 00:04:30,450
persona y al momento de crear el objeto o persona se crea el objeto persona.

45
00:04:30,460 --> 00:04:37,690
Posteriormente se asigna la referencia donde se encuentra este objeto a la variable P Y en este caso

46
00:04:37,690 --> 00:04:45,690
la variable P apunta al objeto persona podemos hacer algún cambio a este objeto e imprimimos el valor

47
00:04:45,870 --> 00:04:53,320
en este caso el valor del nombre del objeto imprimiría el valor de Juan pero si mandamos a llamar el

48
00:04:53,320 --> 00:04:58,210
método modificã persona lo que estamos haciendo es pasar como argumento.

49
00:04:58,210 --> 00:05:06,760
La variable P Y quién recibiría esta dirección de memoria sería la variable.

50
00:05:07,150 --> 00:05:13,910
Así que lo que se está copiando es una referencia y por lo tanto se dice que es un paso por referencia.

51
00:05:13,930 --> 00:05:21,760
De esta manera la variable modifica persona puede acceder también directamente al objeto persona utilizando

52
00:05:21,760 --> 00:05:29,620
los atributos o métodos del objeto al cual está apuntando y por lo tanto por ejemplo modificar el nombre.

53
00:05:29,620 --> 00:05:35,650
En este caso utilizando el método cambiar nombre y de esta manera es que tanto la variable P como la

54
00:05:35,650 --> 00:05:45,110
variable AR están modificando el mismo objeto y en este caso cambiaría el nombre a Carlos como siguiente

55
00:05:45,110 --> 00:05:52,160
paso se imprimiría el nombre de la persona y en este caso imprimiría Carlos podemos observar que es

56
00:05:52,190 --> 00:05:58,100
a través de la variable P que estamos haciendo la impresión del nombre y ya no estamos utilizando la

57
00:05:58,100 --> 00:06:04,550
variable Art ya que ésta quedaría fuera del alcance de este método main ya que estamos en diferentes

58
00:06:04,550 --> 00:06:05,340
métodos.

59
00:06:05,450 --> 00:06:11,300
Por un lado la variable P está definida dentro del método main y la variable AR Está definida dentro

60
00:06:11,300 --> 00:06:18,350
del método modificar persona así que cada una de las variables son locales y pertenecen únicamente al

61
00:06:18,350 --> 00:06:23,960
método en el cual se está definiendo esto ya lo revisamos en elecciones anteriores pero debido a que

62
00:06:23,960 --> 00:06:30,980
estamos haciendo el paso de una referencia entre objetos es que podemos seguir accediendo al mismo objeto

63
00:06:31,280 --> 00:06:35,210
y ver las modificaciones que se hicieron desde otros métodos.

64
00:06:35,210 --> 00:06:39,440
Así que esto se conoce como paso por referencia en Java.

65
00:06:39,440 --> 00:06:46,340
Imaginemos un objeto que contiene 50 atributos o más si se va a realizar una copia del objeto cada vez

66
00:06:46,340 --> 00:06:52,780
que lo asignemos a otra variable lo que estaríamos generando realmente es una copia de estos 50 valores.

67
00:06:52,820 --> 00:06:58,520
Por ello cuando trabajamos con objetos lo que estamos enviando realmente a los argumentos de un método

68
00:06:58,910 --> 00:07:05,540
solamente es la copia del valor de la referencia donde se encuentra ese objeto de tal manera que podemos

69
00:07:05,540 --> 00:07:12,380
modificar directamente el objeto dentro del método que está recibiendo esta referencia ya sea desde

70
00:07:12,380 --> 00:07:18,170
la variable original que apunta al objeto o desde la variable local que funciona como argumento en la

71
00:07:18,170 --> 00:07:19,780
llamada del método.

72
00:07:19,850 --> 00:07:27,920
En este caso la variable hará así que en el código mostrado podemos observar la variable P de tipo persona.

73
00:07:28,070 --> 00:07:33,800
Esta es la misma clase con la que hemos trabajado en ejercicios anteriores pero básicamente tienen un

74
00:07:33,800 --> 00:07:39,890
atributo llamado nombre de tipo string así que lo que podemos observar es que se modifica el valor del

75
00:07:39,890 --> 00:07:47,410
atributo nombre debido a que la variable local llamada AR apunta al mismo objeto creado en la memoria

76
00:07:47,410 --> 00:07:54,140
Agip de tipo persona y por lo tanto al modificar el atributo del mismo objeto se modifica el objeto

77
00:07:54,140 --> 00:08:00,800
creado originalmente y de esta forma podemos modificar atributos de nuestro objeto incluso desde otros

78
00:08:00,800 --> 00:08:08,140
métodos esto trae lugar a discusiones ya que se dice que Java únicamente pasa parámetros por valor y

79
00:08:08,140 --> 00:08:14,620
no por referencia y de alguna manera es cierto ya que como podemos observar en la memoria Stack el valor

80
00:08:14,620 --> 00:08:20,950
de la variable P se copia a la variable h al llamar al método modificar persona.

81
00:08:20,980 --> 00:08:27,580
Así que en este momento es cuando se copia el valor de la variable P a la variable Arak pero debido

82
00:08:27,940 --> 00:08:33,970
a que lo que recibe AR es la dirección de memoria del objeto persona creado originalmente entonces la

83
00:08:33,970 --> 00:08:41,890
variable AR puede acceder a los atributos y métodos del objeto p entonces la variable AR puede acceder

84
00:08:41,980 --> 00:08:47,630
a los atributos y métodos del objeto persona creado en la memoria AGIP.

85
00:08:47,650 --> 00:08:53,980
De esta manera es que es posible modificar el estado o contenido del objeto original y al terminar de

86
00:08:53,980 --> 00:09:00,790
ejecutar el método modificar persona regresa al método main y de esta manera es posible acceder a los

87
00:09:00,790 --> 00:09:07,090
cambios a través de la variable P que fue la variable que originalmente apuntaba al objeto persona.

88
00:09:07,090 --> 00:09:13,030
Así podemos observar cómo IAVA cuando trabajamos con objetos realmente lo que estamos proporcionando

89
00:09:13,270 --> 00:09:15,610
es el valor de la referencia de memoria.

90
00:09:15,610 --> 00:09:24,160
En este caso el valor de 0 x 3 3 3 y con esta referencia accedemos directamente al objeto y así podemos

91
00:09:24,160 --> 00:09:25,600
modificarlo.

92
00:09:25,600 --> 00:09:32,110
Finalmente estas modificaciones las podremos acceder incluso fuera del método donde fue creado originalmente

93
00:09:32,110 --> 00:09:36,330
el objeto o desde el mismo método donde se creó dichoque.
