Jva Excepciones: Fin

This commit is contained in:
devfzn 2023-07-06 16:04:04 -04:00
parent 0f1c8e3e18
commit c7776a9137
Signed by: devfzn
GPG Key ID: E070ECF4A754FDB1
21 changed files with 627 additions and 0 deletions

View File

@ -0,0 +1,26 @@
package bytebank_excep;
public class Administrador extends Funcionario implements Autenticable {
private AutenticacionUtil util;
public Administrador() {
this.util = new AutenticacionUtil();
}
@Override
public double getBonificacion() {
return this.getSalario();
}
@Override
public void setClave(String clave) {
this.util.setClave(clave);
}
@Override
public boolean inicioSesion(String clave) {
return this.util.inicioSesion(clave);
}
}

View File

@ -0,0 +1,9 @@
package bytebank_excep;
public interface Autenticable {
public void setClave(String clave);
public boolean inicioSesion(String clave);
}

View File

@ -0,0 +1,14 @@
package bytebank_excep;
public class AutenticacionUtil {
private String clave;
public boolean inicioSesion(String clave) {
return this.clave == clave;
}
public void setClave(String clave) {
this.clave = clave;
}
}

View File

@ -0,0 +1,46 @@
package bytebank_excep;
public class Cliente implements Autenticable {
private String nombre;
private String documento;
private String telefono;
private AutenticacionUtil util;
public Cliente() {
this.util = new AutenticacionUtil();
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDocumento() {
return documento;
}
public void setDocumento(String documento) {
this.documento = documento;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
@Override
public void setClave(String clave) {
this.util.setClave(clave);
}
@Override
public boolean inicioSesion(String clave) {
return this.util.inicioSesion(clave);
}
}

View File

@ -0,0 +1,10 @@
package bytebank_excep;
public class Contador extends Funcionario {
@Override
public double getBonificacion() {
return 200.0;
}
}

View File

@ -0,0 +1,10 @@
package bytebank_excep;
public class ControlBonificacion {
private double suma_bonific;
public double registrarSalario(Funcionario funcionario) {
System.out.println(this.suma_bonific);
return this.suma_bonific += funcionario.getBonificacion();
}
}

View File

@ -0,0 +1,73 @@
package bytebank_excep;
public abstract class Cuenta {
protected double saldo;
private int agencia;
private int numero;
private Cliente titular = new Cliente();
private static int contador = 0;
public Cuenta(int agencia, int numero) {
if (agencia <= 0) {
System.out.println("No se permiten valores negativos");
this.agencia = 1;
} else {
this.agencia = agencia;
}
this.numero = numero;
contador++;
System.out.println("Cuentas creadas: "+contador);
}
public abstract void depositar(double valorDeposito);
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
if (this.saldo < valorRetiro) {
throw new SaldoInsuficienteExcepction("Saldo insuficiente");
}
this.saldo -= valorRetiro;
}
public boolean transferir(double montoTransferencia, Cuenta cuenta) throws SaldoInsuficienteExcepction{
if (this.saldo >= montoTransferencia) {
try {
this.retirar(montoTransferencia);
} catch (SaldoInsuficienteExcepction e) {
e.printStackTrace();
}
cuenta.depositar(montoTransferencia);
return true;
} else {
throw new SaldoInsuficienteExcepction("Saldo insuficiente\nSaldo : $ "+
this.saldo+"\nRetiro: $ "+montoTransferencia);
}
}
public double getSaldo() {
return this.saldo;
}
public int getAgencia(){
return this.agencia;
}
public void setNumero(int numero){
this.numero = numero;
}
public int getNumero(){
return this.numero;
}
public void setTitular(Cliente titular){
this.titular = titular;
}
public Cliente getTitular(){
return titular;
}
public static int getContador(){
return Cuenta.contador;
}
}

View File

@ -0,0 +1,12 @@
package bytebank_excep;
public class CuentaAhorro extends Cuenta {
public CuentaAhorro(int agencia, int numero) {
super(agencia, numero);
}
@Override
public void depositar(double valorDeposito) {
this.saldo += valorDeposito;
}
}

View File

@ -0,0 +1,19 @@
package bytebank_excep;
public class CuentaCorriente extends Cuenta {
public CuentaCorriente(int agencia, int numero) {
super(agencia, numero);
}
@Override
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
double comision = 0.2;
System.out.println("Ejecutando retiro sobreescrito");
super.retirar( valorRetiro + comision );
}
@Override
public void depositar(double valorDeposito) {
this.saldo += valorDeposito;
}
}

View File

@ -0,0 +1,42 @@
package bytebank_excep;
public abstract class Funcionario {
private String nombre;
private String documento;
private Double salario;
private int tipo;
public Funcionario() {
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDocumento() {
return documento;
}
public void setDocumento(String documento) {
this.documento = documento;
}
public Double getSalario() {
return salario;
}
public void setSalario(Double salario) {
this.salario = salario;
}
public int getTipo() {
return tipo;
}
public void setTipo(int tipo) {
this.tipo = tipo;
}
public abstract double getBonificacion();
}

View File

@ -0,0 +1,29 @@
package bytebank_excep;
public class Gerente extends Funcionario implements Autenticable {
private AutenticacionUtil util;
public Gerente() {
this.util = new AutenticacionUtil();
}
//public void setNombre(String nombre){
// super.setNombre(nombre);
//}
public double getBonificacion() {
return super.getSalario() + (this.getSalario() * 0.5);
}
@Override
public void setClave(String clave) {
this.util.setClave(clave);
}
@Override
public boolean inicioSesion(String clave) {
return this.util.inicioSesion(clave);
}
}

View File

@ -0,0 +1,7 @@
package bytebank_excep;
public class SaldoInsuficienteExcepction extends Exception {
public SaldoInsuficienteExcepction(String mensaje) {
super(mensaje);
}
}

View File

@ -0,0 +1,19 @@
package bytebank_excep;
public class SistemaInterno {
private String clave = "12345";
public boolean autentica(Autenticable autenticable) {
boolean autorizado = autenticable.inicioSesion(clave);
if (autorizado) {
System.out.println("Sesion iniciada");
return true;
} else {
System.out.println("No autorizado");
return false;
}
}
}

View File

@ -0,0 +1,33 @@
package bytebank_excep;
public class TestCuentaExceptionSaldo {
public static void main(String[] args) {
Cuenta ca = new CuentaAhorro(11, 22);
System.out.println("Deposito 1000");
ca.depositar(1000);
try {
System.out.println("Retirando 1000");
ca.retirar(1000);
System.out.println("Retiro OK");
//System.out.println("Retirando 1");
//ca.retirar(1);
//System.out.println("Retiro OK");
Cuenta cc = new CuentaCorriente(11, 33);
cc.depositar(1000);
cc.transferir(500, ca);
cc.transferir(5000, ca);
System.out.println(ca.getSaldo());
System.out.println(cc.getSaldo());
} catch (SaldoInsuficienteExcepction e) {
e.printStackTrace();
}
System.out.println("Fin Programa");
}
}

View File

@ -0,0 +1,2 @@
module bytebank_excep {
}

View File

@ -0,0 +1,23 @@
package pila_ejecucion;
public class Conexion implements AutoCloseable {
public Conexion() {
System.out.println("Abriendo conexion");
//throw new IllegalStateException();
}
public void leerDatos() {
System.out.println("Recibiendo datos");
throw new IllegalStateException();
}
public void cerrar() {
System.out.println("Cerrando conexion");
}
@Override
public void close() throws Exception {
cerrar();
}
}

View File

@ -0,0 +1,7 @@
package pila_ejecucion;
public class Cuenta {
void deposita() throws MiExcepcion2 {
throw new MiExcepcion2();
}
}

View File

@ -0,0 +1,27 @@
package pila_ejecucion;
public class TestConexion {
public static void main(String[] args) throws Exception {
try (Conexion con = new Conexion()){
con.leerDatos();
} catch (IllegalStateException e) {
System.out.println("Ejecutando catch");
e.printStackTrace();
}
/*
Conexion con = null;
try {
con = new Conexion();
con.leerDatos();
} catch (IllegalStateException e) {
System.out.println("Ejecutando catch");
e.printStackTrace();
} finally {
System.out.println("Ejecutando finally");
if (con != null) {
con.cerrar();
}
}
*/
}
}

View File

@ -0,0 +1,16 @@
package pila_ejecucion;
public class TestCuentaExceptionChecked {
public static void main(String[] args) {
Cuenta cuenta = new Cuenta();
try {
System.out.println("en try");
cuenta.deposita();
} catch (MiExcepcion2 ex) {
System.out.println("en catch");
ex.printStackTrace();
}
}
}

View File

@ -253,3 +253,203 @@ comprueba obligatoriamente y las que no.
- Los segundos están **unchecked** y se crean como descendientes de - Los segundos están **unchecked** y se crean como descendientes de
**RuntimeException**. **RuntimeException**.
## Ejemplo de manejo de checked exception
Clase
[SaldoInsuficienteExcepction.java](./eclipse/bytebank_excep/src/bytebank_excep/SaldoInsuficienteExcepction.java)
, proyecto [bytebank](./eclipse/bytebank_excep/src/bytebank_excep/)
```java
public class SaldoInsuficienteExcepction extends Exception {
public SaldoInsuficienteExcepction(String mensaje) {
super(mensaje);
}
}
```
Clase [Cuenta.java](./eclipse/bytebank_excep/src/bytebank_excep/Cuenta.java)
```java
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
if (this.saldo < valorRetiro) {
throw new SaldoInsuficienteExcepction("Saldo insuficiente");
}
this.saldo -= valorRetiro;
}
public boolean transferir(double montoTransferencia, Cuenta cuenta) throws SaldoInsuficienteExcepction{
if (this.saldo >= montoTransferencia) {
try {
this.retirar(montoTransferencia);
} catch (SaldoInsuficienteExcepction e) {
e.printStackTrace();
}
cuenta.depositar(montoTransferencia);
return true;
} else {
throw new SaldoInsuficienteExcepction("Saldo insuficiente\nSaldo : $ "+
this.saldo+"\nRetiro: $ "+montoTransferencia);
}
}
}
```
Clase [CuentaCorriente.java](./eclipse/bytebank_excep/src/bytebank_excep/CuentaCorriente.java)
```java
@Override
public void retirar(double valorRetiro) throws SaldoInsuficienteExcepction {
double comision = 0.2;
System.out.println("Ejecutando retiro sobreescrito");
super.retirar( valorRetiro + comision );
}
@Override
public void depositar(double valorDeposito) {
this.saldo += valorDeposito;
}
}
```
Test
[TestCuentaExceptionSaldo.java](./eclipse/bytebank_excep/src/bytebank_excep/TestCuentaExceptionSaldo.java)
```java
public class TestCuentaExceptionSaldo {
public static void main(String[] args) {
Cuenta ca = new CuentaAhorro(11, 22);
System.out.println("Deposito 1000");
ca.depositar(1000);
try {
System.out.println("Retirando 1000");
ca.retirar(1000);
System.out.println("Retiro OK");
//System.out.println("Retirando 1");
//ca.retirar(1);
//System.out.println("Retiro OK");
Cuenta cc = new CuentaCorriente(11, 33);
cc.depositar(1000);
cc.transferir(500, ca);
cc.transferir(5000, ca);
System.out.println(ca.getSaldo());
System.out.println(cc.getSaldo());
} catch (SaldoInsuficienteExcepction e) {
e.printStackTrace();
}
System.out.println("Fin Programa");
}
}
```
Salida del programa con mensaje personalizado del error `Saldo: $499.8` y
`Retiro: $5000.0`, incluyendo valores de variables
```java
Deposito 1000
Retirando 1000
Retiro OK
Cuentas creadas: 2
Ejecutando retiro sobreescrito
bytebank_excep.SaldoInsuficienteExcepction: Saldo insuficiente
Saldo : $ 499.8
Retiro: $ 5000.0
at bytebank_excep/bytebank_excep.Cuenta.transferir(Cuenta.java:41)
at bytebank_excep/bytebank_excep.TestCuentaExceptionSaldo.main(TestCuentaExceptionSaldo.java:20)
Fin Programa
```
### finally
[Conexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Conexion.java)
```java
public class Conexion {
public Conexion() {
System.out.println("Abriendo conexion");
//throw new IllegalStateException();
}
public void leerDatos() {
System.out.println("Recibiendo datos");
throw new IllegalStateException();
}
public void cerrar() {
System.out.println("Cerrando conexion");
}
}
```
[TestConexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/TestConexion.java)
```java
public class TestConexion {
public static void main(String[] args) {
Conexion con = null;
try {
con = new Conexion();
con.leerDatos();
} catch (IllegalStateException e) {
System.out.println("Ejecutando catch");
e.printStackTrace();
} finally {
System.out.println("Ejecutando finally");
if (con != null) {
con.cerrar();
}
}
}
}
```
## try with resources
Similar a los ***context managers*** de Python. Se usan con **recursos**, donde
la clase instanciada implementa la interfáz `AutoCloseable`, que requiere
implementar un método `close()`.
[Conexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/Conexion.java)
```java
public class Conexion implements AutoCloseable {
public Conexion() {
System.out.println("Abriendo conexion");
//throw new IllegalStateException();
}
public void leerDatos() {
System.out.println("Recibiendo datos");
throw new IllegalStateException();
}
public void cerrar() {
System.out.println("Cerrando conexion");
}
@Override
public void close() throws Exception {
cerrar();
}
}
```
[TestConexion.java](./eclipse/pila_ejecucion/src/pila_ejecucion/TestConexion.java)
```java
public class TestConexion {
public static void main(String[] args) throws Exception {
try (Conexion con = new Conexion()){
con.leerDatos();
} catch (IllegalStateException e) {
System.out.println("Ejecutando catch");
e.printStackTrace();
}
}
}
```

View File

@ -31,3 +31,6 @@ primoridiales en programación con Javascript.
- [Java](./008_java_oo/README.md) Orientado a Objetos - [Java](./008_java_oo/README.md) Orientado a Objetos
- [Primeros pasos](./008_java_oo/primeros_pasos.md) - [Primeros pasos](./008_java_oo/primeros_pasos.md)
- [Orientación a objetos](./008_java_oo/orientacion_obj.md) - [Orientación a objetos](./008_java_oo/orientacion_obj.md)
- [Herencia e Interfaces](./008_java_oo/herencia_interfaces.md)
- Un poco sobre [Enums y Annotations](./008_java_oo/enums_anotaciones_java.md)
- [Excepciones](./008_java_oo/excepciones.md)