Bienvenidos.
Vamos a ver otro ejemplo de manejo exepciones, pero utilizando el proyecto que ya tenemos de repositorio.
Entonces bueno, vamos a cerrar este de acá y vamos a abrir el otro.
serГa proyecto perfecto y nos vamos a interfases repositorio.
Hacemos un clic y lo abrimos.
Bien, hay alternativa.
Lo pueden copiar, lo pueden respaldar y mantenemos el anterior tal como lo teníamos con una copia y
modificamos este como quiera.
Pero también es bueno que tengan una copia.
Entonces la idea es crear un par de clases decepciones, una genericas, otras concretas para el manejo
de error, tanto para leer, consulta, lectura y escritura.
Cuando queremos, por ejemplo, agregar un cliente o un nuevo producto, como por ejemplo qué pasa si
queremos agregar un producto con Heidy que ya existen las Ayato ya está registrado.
Bueno, en este caso en el ArrayList.
Pero qué pasa si existe?
O qué pasa si agrego un objeto nulo?
También lo puedo manejar o si quieren consultar por un Heidy, pero el producto no existe.
Puedo hacer una excepción.
Se fijan el producto no existe o el Heidy en menor o igual a cero también son cosas que podemos manejar
usando cepciones.
Entonces un repositorio acá vamos a tener un package solamente para organizar acá exepciones y vamos
a tener un par.
Bueno, primero una genérica que básicamente la vamos a ocupar, la vamos a utilizar en la interfaz
y después en cada implementación de esa interfaz.
Por ejemplo en el por Heidy o en el crear o editar se fijan la podemos utilizar en la firma el método,
pero ya sea la genérica es la excepción genérica padre o la clases decepciones más concreta.
Bien, entonces vamos a crear una clase primero la genérica le podríamos llamar acceso dato exception.
Bien, entonces por acá stents excepto bien, como siempre el constructor.
No vamos a Generad Constructor.
Messages.
OCC Del padre íbamos a tener dos hijas.
Entonces clase, por ejemplo, lectura, acceso dato excepción bien pero variedad de nuestra genérica
tent acceso dato excepto estar acá listo estamos obligados excepto a implementar el constructor entonces
generate.
Constructor.
Listo.
Ahí lo tenemos.
Otro más.
Escritura.
Acceso auto ecepto perfecto.
Lo mismo stents de la clase padre.
Acceso a auto excepto el conductor.
Con el mensaje le estoy trema la jerarquía decepciones.
Ven, vámonos a la clase abstracta.
Repositorio.
Entonces podría ocurrir por Heidy, acá podríamos lanzar una sanción porque claro, qué pasa si Leidy
este de acá en Nul podría ser perfectamente nul y no tiene sentido comparar o ir a buscar a nuestra
lista un Heidy que sea acío.
Previamente en asistir.
Entonces que puedo manejar entonces si IFF?
Y también podremos comprobar que sea mayor que cero.
Entonces claro, por acá también un ohr.
Entonces si el Heidy sea nulo o si menor o igual a cero.
Bien, entonces claro, lanzamos una excepción con Trou.
Pero cual tenemos que lanzar la de lectura entonces?
Lectura, acceso a datos excepto con un mensaje de inválido.
Tiene que ser mayor que cero.
Perfecto.
Bueno y por supuesto, distinto.
Nulo.
Pero con eso está bien.
Ahora, bueno, acá marca un error porque nos dice que tenemos que manejar esta sección.
Por supuesto, lanzarla en el método acá, porque obviamente acá no lo vamos a manejar con el TREC,
si la estamos lanzando en la clase o método que invoque el por ahí.
Ahí la tenemos que manejar con el trait catch.
Acá simplemente la lanzamos, pero acá vamos a tener otro problema.
Otro error que también lo vamos a ver y lo voy a explicar.
Entonces frus lectura Axe4.
Perfecto.
Se fijan?
Claro.
Marca error.
Por qué?
Es por la interfaz.
Recuerden que estamos implementando la interfaz.
Ordenarle páginas l cruz repositorio se fijan.
Nos vamos acá y acá.
Heredamos de Cruchot repositorio y acá tenemos el método por ahí.
Pero en esta firma o signatura no tenemos ninguna definición.
Decepción.
No estamos lanzando alguna excepción.
Entonces las firmas son distinta.
Entonces básicamente que nos dice que en la interfaz crup repositorio justamente no tiene exactamente
la misma firma y nos está lanzando esta acepción.
Entonces la tenemos que definir acá en la interfaz con frute también.
Entonces es el detalle que quiere explicar.
Entonces acá frus Pero como es una interfaz es mejor, claro, podríamos colocar lectura, no sea ningún
problema.
Y funciona bien.
Y acá aparece el error, pero cómodo es una interfaz.
Es mucho mejor indicar el tipo más genérico posible, porque así no solamente utilizamos lectura, acceso
a datos, sino también podría ser una implementación de lectura o una implementación también de acceso
a datos.
Es decir, a lo que me refiero es que no solamente acá podremos implementar lectura, acceso, dato
o lanzar esta acepción, sino también podría ser otra, pero siempre y cuando sea hija de la genérica.
Entonces, por eso acá es mejor simplemente acceso a Dato.
Voy a quitar acá.
Lectura.
Y acá también en el importa para importar de esto, y como casi define acceso a datos exception.
Y lectura acceso a auto.
Es hija de acceso a datos septón está perfecto, puedo lanzar al final en un método de una clase hija
o de una clase que implementa un interfaz y la clase padre o la interfaz define un evento acepcion.
Hay diferentes alternativa.
Puedo declarar acá la hija una implementación hija de la que lanza la interfaz en este caso acceso a
dato o también puede lanzar la genérica la padre acceso datos o incluso ninguna podría no implementar
ninguna zamiento interfaz.
Y también se puede.
Se fijan, entonces están esas alternativas.
Esto lo dejamos de esa forma.
Acá, por supuesto hay errores porque estamos utilizando el porahí entonces en eliminar como buca por
ahí.
Acá también tenemos que lanzar la acepción 12 sobre el error, agregar en el método.
Bueno, acá voy a poner a cancelar.
No se preocupen, lo voy a hacer a mano.
En este caso sería o lanzaría un tipo de lectura.
Lectura sensato.
Se fijan, pero acá también me alega que la interfaz Cruz Repositorio en Eliminar tampoco está definida.
Entonces también la tengo que definir, se fijan?
Ahora si ya lo estamos manejando.
Ahora, qué pasa en ejemplo repositorio?
Veamos si estamos utilizando acá, lo estamos utilizando, se fijan el porahí.
Entonces acá tengo que utilizar el try catch y manejar esta acepción igual que el eliminar.
Entonces podríamos sanidad todos estos código dentro de un trío, un cacho y empezar a manejar las distintas
excepciones.
Y que estamos creando se fijan, estamos creando, pero bien.
Por ejemplo, podríamos colocar el Trait Cat acá desde el principio.
Trae.
GATS Ya que manejamos qué rol pude lanzar acá en el eliminar y por ahí di lectura de.
Pero además, tenga que indicar el tipo más abstracto, porque recuerden que la instancia de repositorio,
en este caso acá repositorio, es del tipo genérico de las interfaces.
Y utiliza o lanza el tipo genérico de la acepción o el tipo padre GATT Acceso e perfecto.
Y hoy manejamos las dos.
Siempre tiene que ir primero a las clases hijas y después las padre.
Recuerden lectura acceso es hija de acceso dato entonces desde la más específica hasta la más generales
o genéricas.
Entonces por ejemplo.
Хотя vamos a imprimir e punto get mensajea.
Pero además e punto la traza completa print stack 3.
Y lo mismo acá.
Aunque también podemos colocar algún mensaje tinto en cada uno lo pudiera manejar distinto.
En fin.
Pero para el ejemplo da lo mismo.
Por ejemplo, qué pasa si quiero eliminar uno que no exista un Heidy 0 acá 0 diría dar Herron, cierto?
Vamos a ver.
Ejecutamos.
Acabarlas un error, por ejemplo repositorio producto también lo tengo que manejar por por Heidy y por
eliminar, recordemos que tenemos dos ejemplos.
Acá se fijan.
Entonces, claro, hay que manejar todos podríamos copiar.
Ejemplo repositorio.
Acá tenemos el trae.
Voy a cerrar acá.
Y también esto de acá.
Bien, ordenamos acá código reforma Ether, código perfecto, volvemos ejemplos, repositorio y volvemos
a probar, ejecutamos con el Herrán.
Y también otro detalle que me faltó en Produto list repositorio militar.
También estamos usando por ahí.
Entonces acá vamos a relanzar.
Hacemos un clic para agregar esta sección en la firma el método OK.
De lectura perfecto y también vámonos.
Lista.
Y cliente?
Porque acá también nos pide manejar el error, la acepción por el método.
Hacemos un clic y la lanzamos bien.
Ahora sí que si.
Entonces volvemos ejemplo repositorio.
Ejecutamos.
Ahora sé que si se fijan eliminar aydin palio de ese medio de quesero.
Y ocurre la acepción con su mensaje.
Además, en cada método de la traza.
Acá en haz trae repositorio línea 25, después línea 44 y en ejemplos repositorio donde se invoca el
método, pero se origina acá en la línea 25.
Recordemos que la línea 25 se lanza escepcion en la línea 44 se está utilizando en el eliminar acá y
acá estamos invocando el método Eliminar.
Con el método Main se fijan el recorrido completo.
Acá se invoca el eliminar.
Luego dentro de él eliminar.
Se invoca el por Heidy y acá tenemos el porahí en la línea 25, con todo el detalle, con toda la traza
y así podremos lanzar otra sección.
Qué pasa si el resultado nos encuentra if resultado en nulo.
También lanzamos otra entonces fru new lectura
con el Leydi de Bejan.
Vamos a probar.
Vamos a ejemplo repositorio.
Bien, quiero eliminar, por ejemplo, el 50.
No, el registro con el 50 te dejan.
No te registro y así podemos manejar errores.
Si colocamos 2.
No hay ningún problema, lo elimina.
Ahora, si quiere buscar por ejemplo a Bea acá por Heidy, pero coloco 10.
No existe registro con heridas tipifican.
Estamos manejando.
Ahora, para finalizar, tenemos que utilizar el de escritura.
Vámonos a la clase abstracta por acá.
Voy a cerrar acá.
Acá en crear.
Qué pasa si el objeto es nulo?
Entonces If t igual Anul debería manejar esto, no es cierto, porque no podemos crear un nuevo registro
nulo.
No tiene sentido agregar un NULL.
Entonces constru new en este caso sería escritura, escritura, acceso perfecto,
algo simple perfecto.
Acá nos pide manejar la sección, entonces se define en el método.
Acá la lanzamos, con lo cual lanzamos la concreta escritura.
Pero también otro error porque tenemos que ir a la interfaz CRUD repositorio.
Entonces nos vamos al club repositorio.
Yen crear por acá en crear
acceso dato except perfecto a aca en editar de forma automática nos puso lectura en Hayter, pero vamos
a colocar acceso a datos porque recuérdense que este import lo de quitar porque recordemos que nos pidió
entrante en list cliente repositorio acá en editar lanzar lectura access dato porque estamos utilizando
el por Heidy y lo mismo un producto acá también.
Pero la interfaz siempre tiene que ir el tipo más genérico, porque la presentación que podríamos utilizar
no solamente lectura, acceso, dato, sino cualquier otra que queremos implementar.
Bien, regresemos.
Cruz Repositorio.
Y así hoy estamos manejando todas las excepciones genérica en los métodos y no se cree que estamos listos.
Entonces volvamos ejemplo repositorio, pero no producto, sino el otro ejemplo repositorio.
Acá, acá tenemos crear dentro del TROI, así que también podría ocurrir un error repo punto crear.
Nul el origen lo permite.
Pero no importa.
Lo estamos manejando con el troi catch.
Ahora, si lo ejecutamos va a caer en el tipo genérico.
Acá incluso podríamos dar una marca para distinguir en el mensaje.
Entonces acá lectura, acá
escritura, perdón, acá no genérica, genérica escritura.
No la tenemos acá genérica o padre.
Entonces ejecutamos.
Va a caer en genética.
Por qué no tenemos escritura?
Pero recuerden, escritura es tipo genérica.
Así que acá se da capturas.
Entonces, error al insertar un objeto nulo y en genérica se fijan.
Pero podríamos ser un poco más específico.
Entonces acá bajamos catch escritura, acceso, dato e listo.
Voy a copiar esto porque es muy parecido.
Lo pegamos escritura bien.
Ahora, si ejecutamos va a caer acá, porque todo américano exactamente esa excepción, ya que la clase
abstracta.
Estamos lanzando escritura esta implementación concreta.
Escritura asexuada, es cierto, pero también es tipo de acceso, dato es hecho.
Entonces recuerden siempre de lo particular a lo general, de clase cija a clase padre.
Escritura.
Error al insertar un objeto nulo se fijan y así podríamos empezar a manejar los errores en nuestro repositorio.
También podrían manejar o antes de insertar, ver si el Heidy de tu objeto ya está registrado en la
lista en el data shop también y si existe, lanzar una excepción.
Pero bueno, hay varias cosas que podemos validar manejar errores, pero acá lo importante ver un manejo
error típico base auto con clase es padre genérica, una clase exepción genérica y también implementaciones
hijas también recuerden que no te clase abstracta list repositorio es solamente del list que maneja
una lista, una red list, pero podríamos tener un repositorio con JS con bases de datos.
En fin.
Y ese repositorio también.
Una clase abstracta podría implementar otras implementaciones, clases de acceso, dato que sean hija
de la que tenemos definida en la interfaz acceso datos septón.
No necesariamente tiene que ser escritura o lectura que tenemos acá.
Podría ser, por ejemplo lectura, JDBC, acceso, dato, pero siendo hija de acceso dato exception
no hay ningún problema.
Nuestro código queda bastante genérico, nada más.
Continuamos en la siguiente clase.