1
00:00:00,150 --> 00:00:00,760
Bienvenidos.

2
00:00:00,780 --> 00:00:02,880
Continuamos con las clases abstractas.

3
00:00:02,970 --> 00:00:09,390
Vamos a ver un ejemplo, pero un poco distinto la idea implementar un API librerías para formulario,

4
00:00:09,510 --> 00:00:14,760
elementos formulario y acá vamos a tener una clase abstracta elemento form que hace completamente abstracto

5
00:00:14,850 --> 00:00:20,160
y va a tener elementos hijos y cada uno va a tener su propia implementación, como por ejemplo un input

6
00:00:20,190 --> 00:00:21,660
form que tiene varios tipos.

7
00:00:21,720 --> 00:00:26,790
Puede ser, por ejemplo, una caja de texto, un input del tipo text, pero también puede ser un radio

8
00:00:26,790 --> 00:00:29,340
button o puede ser un check boxes.

9
00:00:29,460 --> 00:00:29,860
En fin.

10
00:00:29,910 --> 00:00:33,930
Pero también un email o del tipo number, incluso del tipo button.

11
00:00:34,080 --> 00:00:35,160
Del tipo submit.

12
00:00:35,310 --> 00:00:35,820
Un botón.

13
00:00:35,910 --> 00:00:38,940
Todos son del tipo input, pero además tex area.

14
00:00:39,030 --> 00:00:42,030
Otro elemento formulario distinto y otro más.

15
00:00:42,150 --> 00:00:43,350
El select form.

16
00:00:43,440 --> 00:00:46,530
Una lista desplegable para seleccionar un elemento.

17
00:00:46,620 --> 00:00:48,180
Cada uno tiene su propia implementación.

18
00:00:48,240 --> 00:00:51,540
Por ejemplo, de cómo se dibuja en el HTML.

19
00:00:51,660 --> 00:00:52,950
Cuál es el código HTML?

20
00:00:53,040 --> 00:00:59,550
Por ejemplo, el select, el input y el text area tienen etiquetas y atributos completamente diferente.

21
00:00:59,730 --> 00:01:05,820
Entonces son implementaciones distinta y la clase padre elemento del formulario va a tener el método

22
00:01:05,820 --> 00:01:07,530
abstracto dibujar html.

23
00:01:07,680 --> 00:01:08,250
Y esa es la idea.

24
00:01:08,340 --> 00:01:13,530
Y también que se puedan validar validar cada campo, porque cada campo va a tener un valor que vamos

25
00:01:13,530 --> 00:01:16,140
a llenar, por ejemplo con el teclado y lo tenemos que validar.

26
00:01:16,260 --> 00:01:22,380
Entonces la idea e implementar también en esta misma nappy un sistema de validación, una clase validador

27
00:01:22,410 --> 00:01:23,550
que también va a ser abstracta.

28
00:01:23,610 --> 00:01:29,580
Por lo tanto, vamos a tener dos clases abstracta, un ejemplo completo y acá va a tener el método validar

29
00:01:29,670 --> 00:01:35,970
o es válido, por ejemplo, con diferentes implementaciones, diferentes clases hija y cada una tener

30
00:01:36,060 --> 00:01:41,940
una regla de validación diferente, por ejemplo y mail validador por validar un correo electrónico su

31
00:01:41,940 --> 00:01:44,760
formato no nulo que no sea nulo.

32
00:01:44,820 --> 00:01:47,400
Por ejemplo, otro validador requerido.

33
00:01:47,490 --> 00:01:49,560
Otro validador número Valinor.

34
00:01:49,650 --> 00:01:55,530
Que la información que ingresemos en este input o en este tex área o lista desplegable o lo que sea,

35
00:01:55,620 --> 00:01:58,500
sea del tipo number, del tipo números, por ejemplo.

36
00:01:58,620 --> 00:02:05,670
Y así también podríamos tener un validador de tamaño tenga entre tantos caracteres como mínimo y como

37
00:02:05,670 --> 00:02:07,740
máximo tantos caracteres un rango.

38
00:02:07,770 --> 00:02:13,260
Por ejemplo, el Yussef Beim que esté entre 4 y 12 caracteres se fijan diferente.

39
00:02:13,260 --> 00:02:18,990
Vale, ahora son todos parte de la misma jerarquía de clases, una clase abstracta validador con métodos

40
00:02:18,990 --> 00:02:24,720
abstracto validar, por ejemplo, o es válido y cada una implementa de forma distinta, porque la lógica

41
00:02:24,720 --> 00:02:27,000
de programación el algoritmo es diferente.

42
00:02:27,120 --> 00:02:32,760
Es distinto validar un correo electrónico que validar un número que validar si es requerido, validar

43
00:02:32,760 --> 00:02:34,530
por rango de caracteres.

44
00:02:34,620 --> 00:02:38,520
En fin, y por eso mismo vamos a comenzar con el diagrama de clases o M.L.

45
00:02:38,670 --> 00:02:44,340
Para poder visualizar cuáles son todas las clases que interactúan en nuestro sistema, en nuestra API

46
00:02:44,490 --> 00:02:46,260
y cómo se relacionan unas con otra.

47
00:02:46,350 --> 00:02:49,260
Por ejemplo, elemento formulario con sus clases hijas.

48
00:02:49,410 --> 00:02:52,800
El validador también está relacionado con los elementos.

49
00:02:52,890 --> 00:02:57,720
En fin, ahí vamos a ver que cada elemento de formulario se le pueden agregar más de un valedor, una

50
00:02:57,720 --> 00:03:00,780
lista, por ejemplo, pero que son cosas que vamos a ver en el ejemplo.

51
00:03:00,930 --> 00:03:05,670
Entonces vamos a comenzar con las clases, vamos a crear primero elemento Form

52
00:03:08,970 --> 00:03:14,100
Bean, voy a ampliar un poco y vamos a crear también la clase hija input form.

53
00:03:16,860 --> 00:03:17,550
Perfecto.

54
00:03:17,640 --> 00:03:19,740
Vamos a tener también Text Area Form

55
00:03:23,160 --> 00:03:24,660
y por acá selecta

56
00:03:27,390 --> 00:03:28,770
una lista desplegable.

57
00:03:29,160 --> 00:03:33,450
Lo importante que cada uno se va a renderizar de forma distinta y va a tener sus propios atributos,

58
00:03:33,480 --> 00:03:35,280
pero también va a tener atributos en común.

59
00:03:35,400 --> 00:03:39,480
Y la clase padre un método abstracto, como por ejemplo el input form.

60
00:03:39,540 --> 00:03:46,500
Vamos a ver que tiene el atributo tipo o type y así poder crear un input del tipo text o del tipo number

61
00:03:46,590 --> 00:03:50,880
o del tipo password del tipo button del tipo submit.

62
00:03:50,940 --> 00:03:57,180
En fin, diferente forma ven ahora la relación clase padre y clases hijas implementaciones concreta

63
00:03:57,360 --> 00:04:02,790
entonces con la relación de herencia generalización flecha continua que termina en triángulo.

64
00:04:02,850 --> 00:04:05,820
Hacemos un clic y creamos la relación.

65
00:04:06,850 --> 00:04:07,480
Lo mismo acá.

66
00:04:08,670 --> 00:04:09,450
Y lo mismo acá.

67
00:04:10,560 --> 00:04:13,650
Vamos a ordenar un poco con la flecha.

68
00:04:15,500 --> 00:04:16,430
Te alojamos acá?

69
00:04:17,420 --> 00:04:20,030
Esto lo dejamos acá y este acá.

70
00:04:21,390 --> 00:04:28,080
Bien, completemos entonces con clic derecho, elemento formulario, elemento for propiedades properties

71
00:04:28,350 --> 00:04:30,120
y acá una clase abstracta.

72
00:04:30,240 --> 00:04:34,830
Entonces marcamos esta casilla, este check box lo marcamos.

73
00:04:34,980 --> 00:04:42,750
Si se fijan, cuando coloquemos aplicar ok, se marca en cursiva, queda en cursiva el nombre y eso

74
00:04:42,750 --> 00:04:44,910
indica que es una clase abstracta númenes.

75
00:04:45,840 --> 00:04:47,970
Se fijan solamente por la fuente cursiva.

76
00:04:48,340 --> 00:04:56,760
Además, normalmente Properties vamos a colocar un estereotipo y acá vamos a indicar que es tipo abstracto.

77
00:04:58,410 --> 00:05:05,750
Entonces escribimos la palabra abstracta y coloca entre los símbolos menor y mayor la palabra abstracto.

78
00:05:06,140 --> 00:05:06,780
Aplicar.

79
00:05:07,850 --> 00:05:14,810
Ok, se fijan sobre el nombre de la clase coloca, coloca como entre paréntesis triangular o menor y

80
00:05:14,810 --> 00:05:17,750
mayor dos veces y la palabra, el estereotipo.

81
00:05:17,990 --> 00:05:21,110
Esa sería la forma, pero siempre sobre el nombre, la clase.

82
00:05:21,530 --> 00:05:24,710
Primero comencemos con lo más importante un método abstracto.

83
00:05:24,890 --> 00:05:29,210
Por lo tanto, click derecho new operación va a tener una operación.

84
00:05:29,300 --> 00:05:31,010
Un método abstracto.

85
00:05:31,280 --> 00:05:34,900
Dibujar html bien.

86
00:05:35,180 --> 00:05:41,410
Va a retornar un tipo string y tenemos que colocar que es una operación, un método abstracto acá.

87
00:05:42,450 --> 00:05:48,580
Entonces también se va a colocar en cursiva del tipo públic y sin parámetros, sin argumento, solamente

88
00:05:48,600 --> 00:05:51,600
va a renderizar el HTML correspondiente.

89
00:05:51,750 --> 00:05:52,140
Ok.

90
00:05:53,200 --> 00:05:54,460
Tipifican que iba en cursiva.

91
00:05:54,580 --> 00:05:59,030
Dibujar HTML es un método sin implementación que lo tienen que implementar las clases, hija.

92
00:05:59,160 --> 00:06:02,740
Entonces cada clase hija, vamos a crear este método.

93
00:06:03,040 --> 00:06:08,620
Entonces es lo mismo dibujar HTML dentro de copiar.

94
00:06:11,840 --> 00:06:20,150
Abstracto va a retornar un string perfecto o de Right, porquelos sobre Clive y lo implementa.

95
00:06:20,660 --> 00:06:21,120
Ok.

96
00:06:22,540 --> 00:06:23,610
Acá yo en cursiva.

97
00:06:23,910 --> 00:06:24,480
Vamos a ver.

98
00:06:24,810 --> 00:06:26,610
No debería estar en cursiva?

99
00:06:27,120 --> 00:06:28,170
Nos vamos a operación.

100
00:06:31,170 --> 00:06:36,620
No, acá no se coloca abstracto porque en la clase hija, okey, ahí se.

101
00:06:38,800 --> 00:06:44,350
Un método que se escribe acá es abstracto y acá new operación.

102
00:06:46,710 --> 00:06:53,920
Voy a pegar porque lo copié o right y retorna un string ok.

103
00:06:54,680 --> 00:06:55,410
Y acá también.

104
00:06:57,170 --> 00:06:58,010
Operación.

105
00:07:01,970 --> 00:07:02,540
Oh, right.

106
00:07:03,470 --> 00:07:03,740
Okay.

107
00:07:05,970 --> 00:07:07,110
Ordenamos un poco.

108
00:07:10,070 --> 00:07:12,200
Bien, sigamos con los atributos.

109
00:07:12,500 --> 00:07:17,780
Por acá va a tener algunos atributos la clase padre en común a sus clases hijas.

110
00:07:17,900 --> 00:07:26,200
Entonces atributo, por ejemplo, toda clase hija va a tener un nombre, un nombre campo del tipo String.

111
00:07:28,070 --> 00:07:32,060
Lo dejamos en protected para que lo podamos obtener y utilizar en la clase hija.

112
00:07:32,510 --> 00:07:32,890
Ok.

113
00:07:34,180 --> 00:07:36,800
Queda como gato, es el símbolo de protector.

114
00:07:38,070 --> 00:07:39,480
New Atributo.

115
00:07:39,750 --> 00:07:40,380
Otro más.

116
00:07:40,800 --> 00:07:41,850
Todos tienen un valor.

117
00:07:42,690 --> 00:07:44,310
Entonces un nombre y un valor.

118
00:07:45,780 --> 00:07:48,360
Del tipo String y.

119
00:07:49,740 --> 00:07:50,110
Ok.

120
00:07:50,880 --> 00:07:54,600
Y también va a tener validador, es un atributo.

121
00:07:54,870 --> 00:08:01,740
Recuerden que cada elemento, cada campo de formulario se le puede agregar variadores, que iba a ser

122
00:08:01,740 --> 00:08:07,230
del tipo validador, pero en realidad una lista de validar o un arreglo.

123
00:08:07,440 --> 00:08:12,660
Pero en este ejemplo lo vamos a trabajar con el API list de Java, con el API de colección de Java,

124
00:08:12,840 --> 00:08:14,250
pero lo vamos a ver por ahora.

125
00:08:14,950 --> 00:08:16,560
List del tipo list.

126
00:08:16,950 --> 00:08:23,520
Pero hacer una lista del tipo validador de la clase abstracta que después vamos a crear lo dejamos en

127
00:08:23,520 --> 00:08:25,300
protected, ok?

128
00:08:26,130 --> 00:08:27,690
Y también puede tener errores.

129
00:08:27,750 --> 00:08:33,240
Claro, si se valida mal algún campo con algún validador podemos agregar mensajes de error para que

130
00:08:33,240 --> 00:08:34,050
el usuario lo corrija.

131
00:08:34,080 --> 00:08:37,950
Por ejemplo, el Yussef Name no puede ser vacío.

132
00:08:38,100 --> 00:08:41,690
El correo tiene un formato incorrecto, no corresponde a un número.

133
00:08:41,700 --> 00:08:44,940
Se fijan a atributo errores.

134
00:08:46,290 --> 00:08:49,350
Va a ser del tipo string, pero también una lista o arreglo.

135
00:08:50,430 --> 00:08:54,570
Lo dejamos como list del tipo list herrores protected.

136
00:08:55,110 --> 00:08:56,460
Ok, ya.

137
00:08:56,580 --> 00:08:58,890
Y también métodos va a tener un método.

138
00:08:59,100 --> 00:08:59,910
La clase padre.

139
00:08:59,970 --> 00:09:04,950
Pero va a ser un método que no es abstracto, va a ser un método concreto implementado que van a heredar

140
00:09:04,980 --> 00:09:05,850
todas estas clases.

141
00:09:07,010 --> 00:09:11,970
Entonces New Operación es válido.

142
00:09:12,170 --> 00:09:15,230
Entonces por qué acampo se va a poder validar con este método?

143
00:09:15,380 --> 00:09:18,800
Y por supuesto que retorna un tipo boolean truo fols.

144
00:09:19,010 --> 00:09:21,080
Entonces bullían del tipo público.

145
00:09:21,170 --> 00:09:23,210
No es abstracto, es común y corriente.

146
00:09:23,300 --> 00:09:27,920
Y después vamos a ver en el código que internamente este método lo que hace es recorrer la lista de

147
00:09:27,920 --> 00:09:30,770
los valedores con un for y por cada uno lo va a invocar.

148
00:09:30,860 --> 00:09:32,780
El método es válido.

149
00:09:32,870 --> 00:09:33,830
Década validador.

150
00:09:34,010 --> 00:09:37,640
Y así validar el campo con sus distintas reglas de validación.

151
00:09:37,820 --> 00:09:38,900
Y si alguno falla.

152
00:09:38,990 --> 00:09:39,330
Bueno.

153
00:09:39,470 --> 00:09:43,910
Se asigna el mensaje error en la lista de los errores y se retorna un fols.

154
00:09:43,970 --> 00:09:46,500
Porque contiene errores, pero avienta esos detalles.

155
00:09:46,500 --> 00:09:50,330
Después lo vamos a ver en el código y ok, ahí tenemos.

156
00:09:50,420 --> 00:09:55,880
Es válido y en las clases cija no lo vamos a sobrescribir, simplemente lo vamos a heredar tal cual

157
00:09:55,910 --> 00:09:57,890
como está implementado en la clase padre.

158
00:09:57,980 --> 00:10:03,050
Por lo tanto, como no hay sobre escritura, no es necesario que lo implemente temás acá o que lo coloquemos,

159
00:10:03,110 --> 00:10:04,400
simplemente se hereda.

160
00:10:04,460 --> 00:10:05,750
Que otro método puede tener?

161
00:10:05,870 --> 00:10:17,750
Bueno para agregar valedores entonces acá elemento form lo mismo new operación add validador agregar

162
00:10:17,750 --> 00:10:20,040
validador va a retornar un tipo void.

163
00:10:20,360 --> 00:10:25,640
Simplemente agrega un validador a la lista al elemento va a ser público.

164
00:10:25,700 --> 00:10:28,490
Por lo tanto lo van a heredar las demás clases.

165
00:10:28,580 --> 00:10:39,200
Iba a tener un parámetro, un argumento que del tipo validador nombre el tipo vamos a escribir acá validador

166
00:10:39,380 --> 00:10:45,220
tal cual validador y a colocar este tipo se va a crear una clase del tipo validador ok.

167
00:10:46,320 --> 00:10:47,640
Se fijan, ahí se creó la clase.

168
00:10:48,150 --> 00:10:48,810
Ahí aparece.

169
00:10:49,140 --> 00:10:51,610
Después vamos a utilizar porque iba a ser una clase abstracta.

170
00:10:52,500 --> 00:10:52,980
Ok.

171
00:10:54,250 --> 00:10:58,180
Se fijan, agrega un validador del tipo validador.

172
00:10:58,420 --> 00:11:00,830
Ahora continuemos con los atributos propios de cada uno.

173
00:11:01,000 --> 00:11:04,120
Porque ya tenemos los atributos en común con los métodos en común.

174
00:11:04,210 --> 00:11:10,090
El método abstracto que Cesor escribe se implementa y acá atributos propios de cada implementación.

175
00:11:10,120 --> 00:11:20,620
Por ejemplo, partamos acá input form new atributo type tipo del tipo string del tipo string.

176
00:11:20,770 --> 00:11:21,640
Perfecto.

177
00:11:21,790 --> 00:11:22,720
Valor inicial.

178
00:11:22,780 --> 00:11:29,950
Vamos a colocar un valor por defecto del tipo text y private, porque solamente de la clase nada más

179
00:11:30,190 --> 00:11:30,760
y listo.

180
00:11:31,010 --> 00:11:31,360
Ok.

181
00:11:32,680 --> 00:11:37,810
El tipo del tipo String y un valor por defecto texto, pero podría ser distinto, podría ser el tipo

182
00:11:37,810 --> 00:11:42,940
tex, podría ser el tipo, pero bueno, como había explicado Radio Button o lo que sea y listo, nada

183
00:11:42,940 --> 00:11:43,270
más.

184
00:11:43,810 --> 00:11:52,150
En Tex Area vamos a tener un par de atributos, por ejemplo, filas y columnas, filas del tipo Integer.

185
00:11:53,050 --> 00:11:54,490
Acá tenemos Integer.

186
00:11:55,360 --> 00:11:55,850
Ok.

187
00:11:56,530 --> 00:11:57,400
Y también.

188
00:11:59,030 --> 00:12:03,200
Columnas también del tipo ínte ya.

189
00:12:04,550 --> 00:12:04,820
Qué?

190
00:12:05,930 --> 00:12:07,110
Y Select Form?

191
00:12:08,070 --> 00:12:08,940
Un atributo.

192
00:12:10,680 --> 00:12:16,680
Bueno, una lista desplegable o ComboBox es una lista, tal como dice el nombre, para seleccionar elementos

193
00:12:16,770 --> 00:12:17,940
opciones en realidad.

194
00:12:19,160 --> 00:12:23,040
Entonces a tener una lista de opciones o arreglo.

195
00:12:23,550 --> 00:12:25,740
Por lo tanto, opciones del tipo listo.

196
00:12:27,000 --> 00:12:34,620
Ok, privat bien, pero estas opciones base del tipo de una lista, pero de otra clase sería como un

197
00:12:34,620 --> 00:12:36,120
arreglo del tipo.

198
00:12:36,210 --> 00:12:36,750
Opción.

199
00:12:36,960 --> 00:12:38,970
Entonces vamos a crear otra clase acá.

200
00:12:40,460 --> 00:12:46,490
Opción Hote va a tener una relación de agregación.

201
00:12:47,670 --> 00:12:53,580
Entonces la marcamos y acá se fijan, un campo select puede tener varias opciones para seleccionar,

202
00:12:53,670 --> 00:12:58,830
por ejemplo seleccione un país y aparece una lista de países, se fijan y selecciona uno.

203
00:12:58,920 --> 00:12:59,490
Esa es la idea.

204
00:12:59,700 --> 00:13:06,290
Opción va a tener dos atributos nombre y valor del tipo String.

205
00:13:10,360 --> 00:13:11,320
Y el valor también.

206
00:13:12,770 --> 00:13:15,290
Puede ser del tipo string o del tipo Integer.

207
00:13:15,410 --> 00:13:24,470
Lo dejamos del tipo string y valor, como por ejemplo poises, nombre, el nombre país, valor, el

208
00:13:24,470 --> 00:13:26,510
código o identificador del país.

209
00:13:29,260 --> 00:13:29,920
Ahí tenemos.

210
00:13:30,520 --> 00:13:36,310
Bueno, y por supuesto acá también puede tener el método Agregar operación en Select Form.

211
00:13:37,600 --> 00:13:42,430
Agregar add opción bueno, retorna void.

212
00:13:44,080 --> 00:13:46,480
Simplemente agrega una opción a la lista.

213
00:13:46,600 --> 00:13:47,860
Iba a tener un parámetro.

214
00:13:49,480 --> 00:13:54,610
Opción del tipo opción, acá lo tenemos.

215
00:13:55,510 --> 00:13:56,080
Ok.

216
00:13:57,260 --> 00:13:58,790
Ok, estamos listos.

217
00:13:59,480 --> 00:14:01,670
Listo nuestro diagrama.

218
00:14:01,760 --> 00:14:05,300
Ahora faltaría el validador, pero acá lo tenemos, lo creamos por acá.

219
00:14:05,330 --> 00:14:09,650
Cuando creamos este método, agregar validador, acá tenemos el tipo.

220
00:14:09,680 --> 00:14:11,090
Por lo tanto, el tipo está por acá.

221
00:14:13,090 --> 00:14:14,680
Oita entonces lo arrastramos.

222
00:14:15,670 --> 00:14:16,510
Y lo dejamos acá.

223
00:14:16,660 --> 00:14:18,910
Click derecho Propiedades.

224
00:14:20,090 --> 00:14:26,180
Lo dejamos como una clase abstracta y el estereotipo también lo seleccionamos como abstracto, porque

225
00:14:26,180 --> 00:14:28,220
ya lo creamos desde la clase anterior.

226
00:14:28,310 --> 00:14:34,250
ÂQuÃ elementos forma entonces aplicar okei una clase abstracta?

227
00:14:34,790 --> 00:14:38,960
Ahora, elemento form va a tener una lista de valores.

228
00:14:39,020 --> 00:14:41,630
Por lo tanto, relación de agregación.

229
00:14:41,930 --> 00:14:42,750
Hacemos un clic.

230
00:14:44,650 --> 00:14:46,060
No se marcó de nuevo.

231
00:14:47,200 --> 00:14:48,730
A veces no funciona bien de tema.

232
00:14:49,450 --> 00:14:50,910
Ahora sí debería funcionar.

233
00:14:53,760 --> 00:14:54,780
Ahí lo puso al revés.

234
00:15:02,130 --> 00:15:02,950
Lo voy a mover acá.

235
00:15:03,280 --> 00:15:04,620
Dablemente se pone un poco.

236
00:15:09,320 --> 00:15:10,250
Lo voy a mover acá.

237
00:15:11,460 --> 00:15:12,330
Ahí se fijan.

238
00:15:13,250 --> 00:15:18,210
De repente se pone un poco mañoso el tema de las relaciones, como que no agarra bien, pero bien,

239
00:15:18,330 --> 00:15:18,810
está bien.

240
00:15:19,020 --> 00:15:23,460
Vamos a tener clases hijas diferentes, implementaciones del validador, por ejemplo.

241
00:15:23,520 --> 00:15:24,450
Bueno, comencemos.

242
00:15:25,440 --> 00:15:27,000
No nulo validador.

243
00:15:31,250 --> 00:15:35,130
Ven acá, vamos a tener, por ejemplo, requerido

244
00:15:37,950 --> 00:15:40,770
balear, bueno, requeria validador sería como lo mismo.

245
00:15:40,890 --> 00:15:42,930
No empty o no vacío.

246
00:15:43,020 --> 00:15:48,660
Es decir, valida que el string bueno exista por supuesto, pero que no venga vacío, mientras que no

247
00:15:48,660 --> 00:15:49,050
nulo.

248
00:15:49,080 --> 00:15:53,070
Que el valor no sea un objeto, una referencia null.

249
00:15:53,740 --> 00:15:54,150
Ok.

250
00:15:55,460 --> 00:15:58,040
Entonces, las relaciones diferencia.

251
00:15:59,640 --> 00:16:00,300
Y acá también.

252
00:16:01,970 --> 00:16:03,350
Te dejan ahí, no funcionó.

253
00:16:03,800 --> 00:16:06,020
Entonces tenemos que mover esto por acá.

254
00:16:07,300 --> 00:16:08,410
Volver a intentar.

255
00:16:09,610 --> 00:16:10,990
Ahora lo movemos hacia abajo.

256
00:16:13,460 --> 00:16:15,740
Vamos a crear otra clase por acá.

257
00:16:16,070 --> 00:16:17,150
Número validador

258
00:16:20,720 --> 00:16:21,260
OK.

259
00:16:22,380 --> 00:16:23,220
Con la relación.

260
00:16:25,030 --> 00:16:25,780
Tampoco.

261
00:16:26,700 --> 00:16:28,290
Lo vamos a dejar más cerca.

262
00:16:30,560 --> 00:16:33,050
Tampoco lo dejamos acá.

263
00:16:35,490 --> 00:16:37,800
Si lo movemos al otro lado.

264
00:16:37,930 --> 00:16:38,210
Acá.

265
00:16:39,280 --> 00:16:41,470
A veces cuesta que tome bien la relación.

266
00:16:41,530 --> 00:16:42,850
Puede ser un bug de un vuelo.

267
00:16:42,950 --> 00:16:43,900
Algún problema que tenga?

268
00:16:46,780 --> 00:16:49,030
Y por último, y mai validador,

269
00:16:51,880 --> 00:16:53,380
aunque pudiera tener varios más.

270
00:16:56,070 --> 00:16:57,140
También perfecto.

271
00:16:57,180 --> 00:16:58,320
Ahí funcionó a la primera.

272
00:16:59,560 --> 00:17:05,830
Se fijan vare clases hijas y meil, validador no nulo, validador requerido, validador número validador

273
00:17:06,010 --> 00:17:07,150
y podríamos tener más todia.

274
00:17:08,190 --> 00:17:15,810
Por ejemplo, rango o tamaño validador, es decir, que un carácter este entre tanto y tanto, en fin,

275
00:17:16,470 --> 00:17:23,310
como por ejemplo bueno podría ser rango validador porque tamaño no, porque sicologo tamaño me obliga

276
00:17:23,310 --> 00:17:26,250
a colocar la Ñ y no puede tener caracteres especiales.

277
00:17:26,340 --> 00:17:31,410
Podría ser largo, eso sí, largo validador okei.

278
00:17:35,510 --> 00:17:40,250
Entonces, que un valor, un string, este entre un mínimo de caracteres y un máximo de caracteres.

279
00:17:40,700 --> 00:17:43,550
Y con eso, más que suficiente, podríamos tener muchos valedores más.

280
00:17:44,270 --> 00:17:51,020
Y la clase atractiva la tenemos acá, la clase padre, tenemos parez clase hija, se fijan nuestro diseño

281
00:17:51,020 --> 00:17:52,520
ya mucho más grande.

282
00:17:52,670 --> 00:17:53,990
Pero bien, comencemos con lo importante.

283
00:17:54,080 --> 00:17:56,420
Primero un atributo.

284
00:17:57,940 --> 00:18:01,060
Mensaje claro qué puede ocurrir, un error.

285
00:18:02,140 --> 00:18:06,370
Mensaje de error, pero simplemente le voy a colocar mensaje del tipo String.

286
00:18:07,270 --> 00:18:09,040
Iba a ser, protestÃ.

287
00:18:11,400 --> 00:18:13,770
Ya, pero cada Valledor va a tener su propio mensaje.

288
00:18:13,800 --> 00:18:19,770
Por lo tanto es un atributo que cada uno va sobrescribir con, por ejemplo, el campo tiene que ser

289
00:18:19,860 --> 00:18:20,850
del tipo número.

290
00:18:20,970 --> 00:18:22,560
El campo es requerido.

291
00:18:22,650 --> 00:18:24,660
El valor o el campo no poseen nulo.

292
00:18:24,780 --> 00:18:27,660
No corresponde a un formato de correo electrónico.

293
00:18:27,840 --> 00:18:33,900
El Yussef name o el string está fuera del rango, ya hace que tenga menos caracteres o más caracteres.

294
00:18:34,020 --> 00:18:34,600
En fin.

295
00:18:34,840 --> 00:18:34,960
Bien.

296
00:18:34,980 --> 00:18:35,470
Qué más?

297
00:18:35,760 --> 00:18:36,450
Continuemos.

298
00:18:36,570 --> 00:18:38,760
Métodos o operaciones abstracta.

299
00:18:38,850 --> 00:18:41,310
Así que la marcamos altiro como una operación abstracta.

300
00:18:41,400 --> 00:18:45,930
Abstract Operación nombre es válido?

301
00:18:46,710 --> 00:18:49,620
Puede ser es válido o validar como queramos.

302
00:18:49,770 --> 00:18:55,260
Es válido está bien del tipo boolean para retornar true o fols.

303
00:18:56,190 --> 00:18:59,250
Y en este método implementamos la validación de cada uno.

304
00:18:59,310 --> 00:19:00,960
Cada uno se implementa de forma distinta.

305
00:19:01,680 --> 00:19:03,200
Parámetros importantes.

306
00:19:03,300 --> 00:19:08,820
Vamos a agregar el parámetro que va a ser el string el valor, el valor de cada campo de formulario

307
00:19:08,850 --> 00:19:11,010
que se va a validar con este algoritmo.

308
00:19:11,040 --> 00:19:15,740
Con esta implementación tipo String OK.

309
00:19:18,540 --> 00:19:19,260
Es válido?

310
00:19:19,380 --> 00:19:25,060
Valor del tipo String y retorna en bullían y en cursiva, porque es abstracto.

311
00:19:25,650 --> 00:19:27,600
Cada uno tiene que implementar este método.

312
00:19:30,220 --> 00:19:31,300
Vamos a ordenar un poco.

313
00:19:38,920 --> 00:19:45,340
Ahí, entonces, bueno, tenemos que implementar en cada uno el mensaje y este método es válido, pero

314
00:19:45,340 --> 00:19:51,480
además la clase padre abstracta validador va a tener dos operaciones más el método GET y el método Set.

315
00:19:51,590 --> 00:19:54,010
Importante, porque después el código lo vamos a ver.

316
00:19:54,160 --> 00:19:56,200
Entonces van a ser métodos abstractos.

317
00:19:56,290 --> 00:20:01,270
Es importante que las clases hijas implementen estos métodos que eran setter del tipo abstracto.

318
00:20:01,960 --> 00:20:06,940
Después el código lo voy a explicar un poco mejor y lo vamos a visualizar, pero es abstracto.

319
00:20:08,080 --> 00:20:15,160
Get mensaje Barton nar un tipo string y sin parámetro.

320
00:20:15,280 --> 00:20:15,690
Ok.

321
00:20:18,090 --> 00:20:19,430
Y también el set.

322
00:20:24,290 --> 00:20:30,470
También un método abstracto va a retornar un tipo bait y argumento

323
00:20:32,840 --> 00:20:35,080
mensaje del tipo String.

324
00:20:36,530 --> 00:20:36,910
Ok.

325
00:20:38,750 --> 00:20:47,660
Ok, entonces 3 métodos abstracto cómo el mensaje es protected lo tienen que escribir cada clase hija

326
00:20:48,080 --> 00:20:52,540
y cómo los Ori escribe con su propio valor, con su propio texto del mensaje error.

327
00:20:52,700 --> 00:20:57,700
También tiene que sobrescribir hectómetros implementar estos métodos que tras setter para el mensaje,

328
00:20:57,800 --> 00:20:59,930
entonces al final cada clase hija.

329
00:21:00,940 --> 00:21:07,570
Va a tener estos miembros mensaje y estos dos métodos y estos tres métodos abstracto bueno, y lo tengo

330
00:21:07,570 --> 00:21:08,890
que implementar una por una.

331
00:21:09,550 --> 00:21:11,290
Entonces, por ejemplo, atributo.

332
00:21:13,390 --> 00:21:16,480
Mensaje del tipo protected, del tipo String.

333
00:21:18,660 --> 00:21:19,110
Otre.

334
00:21:20,080 --> 00:21:20,890
También acá.

335
00:21:25,200 --> 00:21:27,360
Del tipo string protected.

336
00:21:41,270 --> 00:21:42,050
Y en todo vimos.

337
00:21:49,070 --> 00:21:49,850
Por último, acá.

338
00:21:58,810 --> 00:22:06,640
Luego es válido operación, un método no es abstracto porque es una clase hija.

339
00:22:06,790 --> 00:22:08,250
Acá lo vamos a sobreescribir.

340
00:22:08,320 --> 00:22:11,740
Por lo tanto, over right del tipo bullían.

341
00:22:13,040 --> 00:22:23,240
Y parámetro valor del tipo String, idéntico al padre, que es abstracto pero acá implementado, concreto,

342
00:22:23,390 --> 00:22:30,320
se fijan es válido e válido valor, valor del tipo string bullían y así cada uno implementa este método

343
00:22:30,770 --> 00:22:32,630
con su propia forma implementación.

344
00:23:26,270 --> 00:23:27,540
Bullían Brid.

345
00:23:28,220 --> 00:23:32,410
Nuevo parámetro, valor del tipo estric.

346
00:23:45,240 --> 00:23:45,900
Qué me falta?

347
00:23:46,140 --> 00:23:48,060
Get mensaje y set message.

348
00:23:48,540 --> 00:23:51,570
También por cada uno hay que implementar tu método, sobrescribir.

349
00:23:54,090 --> 00:24:01,730
Lo voy a copiar del tipo String porque retorna el mensaje over right.

350
00:24:02,430 --> 00:24:04,790
Si el parámetro get solamente ok.

351
00:24:10,020 --> 00:24:10,340
Right?

352
00:24:12,630 --> 00:24:13,600
Del tipo String.

353
00:24:15,390 --> 00:24:15,890
Ó T?

354
00:24:33,400 --> 00:24:34,080
Oh, right.

355
00:24:34,220 --> 00:24:34,600
Ok.

356
00:24:42,970 --> 00:24:44,220
Over right, ok.

357
00:24:45,980 --> 00:24:48,530
Y faltaría los último nomá por cada uno.

358
00:24:50,140 --> 00:24:57,500
Atributo set mensaje lo voy a copiar, voy.

359
00:24:59,080 --> 00:24:59,770
Oh, right?

360
00:25:00,370 --> 00:25:01,090
Parámetro.

361
00:25:03,520 --> 00:25:05,560
Mensaje del tipo String.

362
00:25:06,830 --> 00:25:07,880
Okay, okay.

363
00:25:15,110 --> 00:25:17,420
Boy o right parámetro.

364
00:25:20,510 --> 00:25:21,680
Mensaje del tipo String.

365
00:25:23,420 --> 00:25:24,980
Ok, ok.

366
00:25:55,780 --> 00:25:57,040
Y por último, el largo.

367
00:26:00,590 --> 00:26:01,990
Oh, right boy.

368
00:26:03,020 --> 00:26:03,770
Y el parámetro?

369
00:26:09,590 --> 00:26:17,420
Ok, ok, ya tenemos quizás el largo valedor pudiera tener un par de atributos propio.

370
00:26:18,740 --> 00:26:23,840
Privados, por ejemplo, el mínimo del tipo Integer.

371
00:26:25,330 --> 00:26:25,890
Ok.

372
00:26:27,660 --> 00:26:29,730
Y también podría tener el máximo.

373
00:26:31,240 --> 00:26:32,370
También del tipo Integer.

374
00:26:34,840 --> 00:26:40,780
Encanté caracteres que tener este valor, este street, ya decir que estamos listo con nuestro diseño.

375
00:26:44,790 --> 00:26:47,070
Bueno, eso lo tenemos que implementar en esta sección.

376
00:26:47,190 --> 00:26:50,370
Va a ser un ejemplo bien completo, contó clases abstracta.

377
00:26:50,490 --> 00:26:56,310
Es decir, vamos a tener dos ejemplo en uno solo para elementos formulario y para que a su vez se pueden

378
00:26:56,310 --> 00:26:58,560
paliar con variadores y elemento.

379
00:26:58,560 --> 00:27:02,880
Puede tener o se le puede agregar más de un valor, más de una regla de validación.

380
00:27:02,970 --> 00:27:08,610
Por ejemplo, que tengo formato de correo electrónico, pero que a su vez no sea vacío, sea requerido.

381
00:27:08,700 --> 00:27:14,460
Se fijan y así bien y todos los detalles lo vamos a ver, revisar e implementar en el código.

382
00:27:14,700 --> 00:27:16,290
Nos vemos en la siguiente clase.
