1
00:00:00,560 --> 00:00:06,050
Bien vamos a continuar con nuestro ejercicio de ejemplo estático ya tenemos nuestra clase de persona

2
00:00:06,920 --> 00:00:13,310
con los atributos no estáticos es decir los que se asocian con nuestros objetos y su método estático

3
00:00:13,400 --> 00:00:16,440
es decir los que se asocian con la clase.

4
00:00:16,580 --> 00:00:17,600
Ahora vamos a nuestra clase.

5
00:00:17,630 --> 00:00:20,050
Ejemplo estático agregamos un método main

6
00:00:22,810 --> 00:00:30,030
damos formato y vamos a hacer lo siguiente Vamos a crear un primer objeto de tipo persona así que creamos

7
00:00:30,090 --> 00:00:37,080
una primer variable llamada Persona 1 y creamos un primer objeto de tipo Persona y debido a que ya hemos

8
00:00:37,080 --> 00:00:44,180
declarado un constructor diferente de evasión entonces tenemos que proporcionar un valor en este caso

9
00:00:44,960 --> 00:00:50,030
el valor de nombre el valor de Juan ya que el compilador ya no nos va a agregar el constructor vació

10
00:00:50,600 --> 00:00:56,150
Podemos será que nos está marcando un error ya que no encuentra el constructor sin argumentos y requiere

11
00:00:56,300 --> 00:01:05,000
de un tipo string así que eso ya lo debemos de tener claro el uso de constructores bien ahora como siguiente

12
00:01:05,000 --> 00:01:13,520
paso vamos a imprimir el objeto persona lo podemos mandar a imprimir directamente ya que hemos definido

13
00:01:13,550 --> 00:01:19,880
el método string en nuestra clase persona podemos ver que ya se ha definido este método y por lo tanto

14
00:01:19,880 --> 00:01:26,170
cada vez que mandamos a imprimir un objeto persona en método Elene en automático va a mandar a llamar.

15
00:01:26,180 --> 00:01:29,520
El método Tsering para saber el estado del objeto.

16
00:01:29,570 --> 00:01:36,080
Esto quiere decir cada uno de los valores de cada atributo estático o no estático de nuestra clase así

17
00:01:36,080 --> 00:01:37,940
que guardamos cambios y ejecutamos

18
00:01:44,990 --> 00:01:51,110
y podemos observar que en este caso el Eugui persona se le asignó el valor de 1 debido a que podemos

19
00:01:51,110 --> 00:01:55,340
observar que el contador de personas se inicia el hizó con 1.

20
00:01:55,340 --> 00:02:00,230
Esto es debido a que utilizamos primero más más y posteriormente la variable.

21
00:02:00,260 --> 00:02:04,600
Esto quiere decir que es un pre incremento así que primero se incrementa la variable.

22
00:02:04,940 --> 00:02:10,850
Recordemos que su valor por default a ser un tipo entero su valor por default es cero y entonces al

23
00:02:10,850 --> 00:02:18,410
agregar un incremento se incrementa el valor de esta variable pasa a ser 1 así que este valor de 1 se

24
00:02:18,410 --> 00:02:21,110
le asigna al primer objeto que estamos creando.

25
00:02:21,110 --> 00:02:25,270
Por lo tanto Airy persona la primera vez vale 1.

26
00:02:25,290 --> 00:02:30,320
Posteriormente vemos el valor de Juan y finalmente el valor de Contador personas la variable Contador

27
00:02:30,350 --> 00:02:37,460
personas estatica contiene el valor de 1 pero vamos a crear un segundo objeto para saber exactamente

28
00:02:37,460 --> 00:02:41,970
como funciona el contexto estático así que vamos a crear una segunda variable.

29
00:02:42,050 --> 00:02:50,030
Persona 2 creamos un nuevo objeto le pasamos el valor de Carla

30
00:02:52,810 --> 00:02:58,930
y mandamos a imprimir la variable Persona 2 guardamos cambios y ejecutamos

31
00:03:02,560 --> 00:03:09,150
y Podemos se va que en este caso la variable Contador personas ya contiene el valor de 2.

32
00:03:09,310 --> 00:03:16,390
Por lo tanto el Heydi persona del siguiente objeto que se ha creado se le asignó el valor de 2 y podemos

33
00:03:16,390 --> 00:03:23,320
observar entonces que cada uno de los objetos está accediendo al valor Contador persona y este valor

34
00:03:23,380 --> 00:03:25,790
no se está compartiendo por cada objeto.

35
00:03:25,840 --> 00:03:29,650
De lo contario esta variable se estaría reiniciando.

36
00:03:29,650 --> 00:03:31,150
Cómo podemos comprobar esto.

37
00:03:32,610 --> 00:03:40,130
Si en lugar de que esta variable sea estática le quitamos el modificador de acceso estático por lo tanto

38
00:03:40,130 --> 00:03:49,120
también en el método de Contador personas hacemos estos cambios guardamos cambios y ejecutamos.

39
00:03:49,320 --> 00:03:55,200
Entonces podemos observar que esta variable Contador personas se asocia con cada objeto ya que no es

40
00:03:55,200 --> 00:04:01,530
de tipo estático y esto es lo que provoca es que ya no funciona como una variable de tipo Contador sino

41
00:04:01,530 --> 00:04:07,350
que por cada objeto se reinicia el valor de esta variable contador de personas ya que al no ser de tipo

42
00:04:07,350 --> 00:04:14,280
estático entonces su valor inicial siempre va a ser cero y cuando se utiliza más más Contador entonces

43
00:04:14,280 --> 00:04:20,730
simplemente se incrementa en 1 así que todos los objetos que creemos se van a inicializar sus valores

44
00:04:21,060 --> 00:04:27,180
no va a funcionar como esperamos ya no va a contabilizar cuántos objetos se han creado de tipo persona

45
00:04:27,660 --> 00:04:33,390
así que con esto ya nos empieza a quedar más claro el uso de contexto estático ya que estos atributos

46
00:04:33,450 --> 00:04:41,250
o métodos se asocian con la clase y no con los objetos no con las instancias y así si creamos más objetos

47
00:04:41,250 --> 00:04:42,140
de tipo persona

48
00:04:44,830 --> 00:04:48,820
entonces el contador de personas se va a ir incrementando en 1

49
00:04:55,290 --> 00:05:03,000
así que imprimimos el valor del objeto persona 3 y podemos observar que el valor del contador personas

50
00:05:03,090 --> 00:05:08,660
ya va en 3 y por lo tanto el Heydi persona ya contiene el valor de 3.

51
00:05:08,820 --> 00:05:14,020
Y si mandamos a imprimir únicamente el valor del contador personas podemos hacer lo siguiente.

52
00:05:17,370 --> 00:05:22,820
Contador personas pero recordemos que este atributo es estático.

53
00:05:23,030 --> 00:05:28,970
Por lo tanto para acceder no vamos a utilizar alguna de las instancias alguno de los objetos como puede

54
00:05:28,970 --> 00:05:35,660
ser persona 1 2 o 3 sino que vamos a utilizar el nombre de la clase ya que así es como se utilizan los

55
00:05:35,660 --> 00:05:37,890
atributos o métodos estáticos.

56
00:05:38,060 --> 00:05:41,400
Así que vamos a poner el nombre de la clase.

57
00:05:41,490 --> 00:05:42,400
Punto.

58
00:05:42,420 --> 00:05:48,570
El método estático en este caso el único método estático que tenemos es el método GET Contador personas

59
00:05:49,410 --> 00:05:52,510
así que mandamos a llamar el método estático.

60
00:05:52,620 --> 00:06:01,480
Ejecutamos y podemos ver que en este caso el valor de la variable Contador personas va en 3 así que

61
00:06:01,480 --> 00:06:07,680
no se ha reiniciado en ningún momento ya que este valor se asocia con la clase y aunque podemos mandar

62
00:06:07,680 --> 00:06:14,230
a llamar este método utilizando alguna de las variables que apunte alguno de los objetos que hemos creado

63
00:06:14,700 --> 00:06:16,440
esto no es recomendable.

64
00:06:16,510 --> 00:06:23,920
Incluso el IDE nos marca este warning que reemplazamos con la referencia de la clase y si damos clic

65
00:06:24,100 --> 00:06:30,970
nos cambia el nombre de la variable por el nombre de la clase ya que no es recomendable acceder a los

66
00:06:30,970 --> 00:06:35,070
atributos estáticos a través de las instancias de una clase.

67
00:06:35,230 --> 00:06:39,610
En este caso a través de una variable que apunta a una instancia de una clase.

68
00:06:39,610 --> 00:06:45,610
Sin embargo funciona debido a que hemos comentado que el contexto dinámico puede acceder al contexto

69
00:06:45,610 --> 00:06:53,140
estático pero no al revés el contexto estático no puede acceder al contexto dinámico eso también lo

70
00:06:53,140 --> 00:07:00,010
podemos comprobar de la manera siguiente por ejemplo si ponemos el nombre de la clase únicamente podemos

71
00:07:00,010 --> 00:07:02,320
observar todo lo que sea estático.

72
00:07:02,320 --> 00:07:08,380
En este caso lo que es público el método GET Contador personas que es de tipo estático pero no podemos

73
00:07:08,380 --> 00:07:16,000
acceder a los atributos como puede ser G.T nombre en este caso no podemos acceder ya que nos manda el

74
00:07:16,000 --> 00:07:23,680
mensaje que el método nombre es no estático y lo estamos queriendo referenciar desde un contexto estático

75
00:07:23,950 --> 00:07:29,950
es decir desde el nombre de la clase y como hemos comentado el contexto estático no puede acceder al

76
00:07:29,950 --> 00:07:36,610
contexto dinámico ya que desde el nombre de la clase no puede acceder a los objetos así que básicamente

77
00:07:36,610 --> 00:07:40,880
lo que hemos hecho hasta el momento tenemos nuestra clase persona

78
00:07:43,990 --> 00:07:46,330
y aquí estamos en el contexto estático

79
00:07:52,560 --> 00:07:59,190
ahora cuando se carga esta clase de memoria la primera vez que una línea de código y necesita de la

80
00:07:59,190 --> 00:08:05,920
clase persona en este caso la primera vez que ubica esta clase es cuando se carga en memoria.

81
00:08:06,180 --> 00:08:10,980
Así que en ese momento es cuando todo el contexto estático se inicia ya que esta clase se carga en memoria

82
00:08:11,290 --> 00:08:16,550
y todo lo que sea referente al contexto estático se empieza a ejecutar posteriormente.

83
00:08:16,560 --> 00:08:21,780
Una vez que ya empiezan las siguientes líneas de código y empezamos a ejecutar la creación de objetos

84
00:08:22,140 --> 00:08:22,860
entonces

85
00:08:28,970 --> 00:08:30,950
ya tenemos el contexto dinámico

86
00:08:37,410 --> 00:08:39,690
y es cuando estamos empezando a crear estos objetos

87
00:08:44,460 --> 00:08:47,760
y se están creando las variables que apuntan a estos objetos.

88
00:08:47,760 --> 00:08:54,660
La variable por ejemplo Persona 1 que apunta este objeto la variable personados que apunta este objeto

89
00:08:55,260 --> 00:09:02,400
y la variable Persona 3 que apunta a este objeto y cada uno de los objetos va a utilizar el contador

90
00:09:02,430 --> 00:09:05,860
personas pero recordemos que ese es un atributo estático.

91
00:09:06,030 --> 00:09:07,920
Así que la variable Contador personas

92
00:09:10,950 --> 00:09:16,560
se asocia con la clase ya que es un atributo estático y por lo tanto cada vez que modifiquemos este

93
00:09:16,560 --> 00:09:23,760
valor por ejemplo el valor de uno todos los objetos van a ver este mismo valor si se cambia a 2.

94
00:09:23,760 --> 00:09:29,880
Entonces todos los objetos van a ver ese mismo valor etcétera y como hemos visto si no fuera estático

95
00:09:30,120 --> 00:09:35,550
entonces este valor en lugar de asociarse con la clase se asociaría con cada uno de los objetos y por

96
00:09:35,550 --> 00:09:42,690
lo tanto si ponemos el valor de uno entonces este objeto ya no puede ver ese valor ya que cada uno de

97
00:09:42,690 --> 00:09:45,210
los objetos contendría sus propios valores.

98
00:09:45,210 --> 00:09:50,160
Por lo tanto esta variable ya no funcionaría como un contador de personas de objetos de tipo persona

99
00:09:50,430 --> 00:09:57,180
sino que se inicializar ya con cada creación de cada objeto y ya no cumpliría con el objetivo del ejercicio

100
00:09:57,180 --> 00:09:58,410
que estamos creando.

101
00:09:58,890 --> 00:10:04,380
Finalmente vamos a ejecutarlo paso a paso simplemente para que cualquier duda la podamos despejar así

102
00:10:04,380 --> 00:10:06,100
que ponemos un punto de ruptura.

103
00:10:06,210 --> 00:10:13,370
Damos clic derecho y posteriormente de Buffy vamos a presionar F7 para entrar al detalle de la construcción

104
00:10:13,370 --> 00:10:18,770
de la clase y podemos observar que el operador dis hace referencia al contexto dinámico.

105
00:10:18,770 --> 00:10:25,850
Por lo tanto no puede acceder directamente al atributo estático Contador personas pero podemos observar

106
00:10:25,850 --> 00:10:32,870
que tenemos además el contexto estático así que en este caso el contexto estático es el atributo Contador

107
00:10:32,870 --> 00:10:39,230
personas pero directamente no puede hacer uso del contexto estático.

108
00:10:39,290 --> 00:10:44,210
Para ello es que se debe de utilizar el nombre de la clase en este caso como estamos dentro de la clase

109
00:10:44,480 --> 00:10:50,960
simplemente vamos a omitir el uso de Viz ya que no puede acceder a los atributos que sean estáticos

110
00:10:51,170 --> 00:10:57,910
únicamente a los atributos no estáticos así que ejecutamos y observamos entonces que el contador de

111
00:10:57,910 --> 00:11:00,690
personas se va a incrementar en uno.

112
00:11:00,760 --> 00:11:06,820
En este caso vale cero el Heydi persona también todavía contiene el valor de cero ya que su valor por

113
00:11:06,820 --> 00:11:07,240
Defour.

114
00:11:07,600 --> 00:11:13,840
Pero si ejecutamos esta línea entonces el contador de personas ya se incrementó en 1 y se le asignó

115
00:11:13,930 --> 00:11:20,980
este valor al de persona y posteriormente asignamos el nombre que estamos recibiendo de Juan al atributo

116
00:11:20,980 --> 00:11:27,610
de nombre de nuestra clase y podemos observar que la variable estática ya se incrementó en 1 ya vale

117
00:11:27,610 --> 00:11:35,590
1 y 10 puede acceder a los atributos dicha persona con el valor de 1 y el nombre igual a igual presionamos

118
00:11:35,610 --> 00:11:38,110
F8 y mandamos a imprimir.

119
00:11:38,260 --> 00:11:43,750
Podemos observar en consola los valores de dispersión igual a 1 nombre Juan y Contador persona igual

120
00:11:43,750 --> 00:11:50,220
a 1 y vamos a entrar a la creación del segundo objeto para que veamos cómo en la variable Contador personas

121
00:11:50,440 --> 00:11:56,790
no se está reiniciando ya que debido a que se asocia con la clase y no con los objetos entonces su valor

122
00:11:56,790 --> 00:11:58,050
sigue siendo 1.

123
00:11:58,110 --> 00:12:03,870
En cambio el la persona su valor ya se reinició a cero y de igual manera el atributo de nombre que es

124
00:12:03,870 --> 00:12:04,620
de tipo String.

125
00:12:05,070 --> 00:12:12,630
Recordemos que el valor por default es nulo es decir ausencia de valor presionamos f 8 y podemos observar

126
00:12:12,900 --> 00:12:17,640
que en esta línea se va a incrementar de nueva cuenta la variable Contador personas que se estatica

127
00:12:18,090 --> 00:12:24,300
y se le va a asignar el valor a persona así que podemos observar que en este caso ya se incrementó esta

128
00:12:24,300 --> 00:12:31,140
variable estática a 2 y se le asigna este valor a la variable Heydi persona así que de esta manera estamos

129
00:12:31,140 --> 00:12:36,990
simulando con esta variable estática cuántos objetos de tipo Persona se han creado en este momento se

130
00:12:36,990 --> 00:12:44,160
han creado dos objetos de tipo Persona y finalmente asignamos el valor que estamos mandando a este constructor

131
00:12:44,640 --> 00:12:51,060
el valor de carga lo asignamos al atributo de nombre y mandamos a imprimir y podemos observar que ahora

132
00:12:51,780 --> 00:12:53,950
el valor de Heydi persona es igual a 2.

133
00:12:54,030 --> 00:13:00,690
El nombre es Carla y nuestra variable estática Contador personas no se ha reiniciado ya que se asocia

134
00:13:00,690 --> 00:13:07,900
con la clase y contiene el valor de dos y así sucesivamente si volvemos a ejecutar ahora observamos

135
00:13:07,900 --> 00:13:14,020
que nuestra variable Contador personas se continúa incrementando y vale 3 así que ya tenemos 3 objetos

136
00:13:14,020 --> 00:13:15,560
de tipo persona creado.

137
00:13:15,700 --> 00:13:22,090
Por lo tanto también el Heydi persona que se le asigna a este atributo es el valor de 3 con el nombre

138
00:13:22,090 --> 00:13:28,340
de Carlos y finalmente mandamos a imprimir nuestra variable Contador persona vamos a presionar F7 para

139
00:13:28,340 --> 00:13:36,560
entrar al detalle y debido a que estamos dentro del método LN En este caso no nos interesa ejecutar

140
00:13:36,560 --> 00:13:43,900
paso a paso este método para salirnos de este método vamos a presionar este auto y finalmente presionamos

141
00:13:44,020 --> 00:13:51,280
de nueva cuenta F8 para ver el valor del contador persona y podemos observar que en este caso la variable

142
00:13:51,280 --> 00:13:57,430
Contador persona quedó en 3 así que con esto hemos puesto en práctica el concepto de contexto estático

143
00:13:57,760 --> 00:14:00,990
ya lo estamos combinando con el uso de nuestros objetos.

144
00:14:01,120 --> 00:14:06,820
Hemos visto varias de las restricciones que contiene el contexto estático y lo pusimos en práctica con

145
00:14:06,820 --> 00:14:11,340
un ejemplo real para que quede más claro el uso del contexto estático.

146
00:14:11,380 --> 00:14:14,330
Eso es todo por esta elección y nos vemos en el siguiente video.

147
00:14:14,410 --> 00:14:15,010
Saludos.
