From 0f56c54d51b6a34d17e95b883ab032ca80a7e56f Mon Sep 17 00:00:00 2001 From: devfzn Date: Tue, 13 Jun 2023 01:38:32 -0400 Subject: [PATCH] Java Orientado a Objetos: Fin - orientacion a objs --- .../src/EjercicioMatriz.java | 4 +- .../src/TestDescuento.java | 13 +- .../proyecto_bytebank/src/Cliente.java | 29 +++ .../proyecto_bytebank/src/CrearCuenta.java | 14 ++ .../proyecto_bytebank/src/Cuenta.java | 67 +++++++ .../proyecto_bytebank/src/PruebaAcceso.java | 10 + .../src/PruebaConstructor.java | 10 + .../src/PruebaEncapsulamiento.java | 15 ++ .../proyecto_bytebank/src/PruebaMetodos.java | 16 ++ .../proyecto_bytebank/src/TestReferencia.java | 28 +++ .../src/TestReferencia2.java | 17 ++ .../src/TestReferencia3.java | 8 + 008_java_oo/orientacion_obj.md | 189 ++++++++++++++++++ 008_java_oo/primeros_pasos.md | 10 +- 14 files changed, 419 insertions(+), 11 deletions(-) create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/Cliente.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/CrearCuenta.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/Cuenta.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaAcceso.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaConstructor.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaEncapsulamiento.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaMetodos.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia2.java create mode 100644 008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia3.java diff --git a/008_java_oo/intellij_idea/java_primeros_pasos/src/EjercicioMatriz.java b/008_java_oo/intellij_idea/java_primeros_pasos/src/EjercicioMatriz.java index 607b2d2..a82141a 100644 --- a/008_java_oo/intellij_idea/java_primeros_pasos/src/EjercicioMatriz.java +++ b/008_java_oo/intellij_idea/java_primeros_pasos/src/EjercicioMatriz.java @@ -1,7 +1,7 @@ public class EjercicioMatriz { public static void main(String[] args) { - for (int col = 0; col <= 10; col++){ - for (int fila = 0; fila < col; fila++){ + for (int fila = 0; fila <= 10; fila++){ + for (int columna = 0; columna < fila; columna++){ System.out.print("* "); } System.out.println(); diff --git a/008_java_oo/intellij_idea/java_primeros_pasos/src/TestDescuento.java b/008_java_oo/intellij_idea/java_primeros_pasos/src/TestDescuento.java index c0cc9ef..06640c9 100644 --- a/008_java_oo/intellij_idea/java_primeros_pasos/src/TestDescuento.java +++ b/008_java_oo/intellij_idea/java_primeros_pasos/src/TestDescuento.java @@ -2,8 +2,10 @@ public class TestDescuento { public static void main(String[] args) { - double valorCompra = 250.0; int dscto; + double valorDescuento, valorCompra, totalCompra; + valorCompra = 250.0; + if (valorCompra >= 100.0 && valorCompra <= 199.99){ dscto = 10; } else if (valorCompra >= 200.0 && valorCompra <= 299.99) { @@ -13,10 +15,11 @@ public class TestDescuento { } else { dscto = 0; } - double valorDescuento = valorCompra * (dscto / 100.00 ); - double totalCompra = valorCompra - valorDescuento; + + valorDescuento = valorCompra * (dscto / 100.00 ); + totalCompra = valorCompra - valorDescuento; System.out.println("Total compra : $"+valorCompra+"\n"+ - "Descuento : "+dscto+"%\n"+ - " Total Final : $"+totalCompra); + "Descuento : "+dscto+"%\n"+ + " Total Final : $"+totalCompra); } } diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/Cliente.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/Cliente.java new file mode 100644 index 0000000..9314526 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/Cliente.java @@ -0,0 +1,29 @@ +public class Cliente { + private String nombre; + private String documento; + private String telefono; + + 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; + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/CrearCuenta.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/CrearCuenta.java new file mode 100644 index 0000000..f682626 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/CrearCuenta.java @@ -0,0 +1,14 @@ +public class CrearCuenta { + public static void main(String[] args) { + Cuenta primeraCuenta = new Cuenta(1); + primeraCuenta.depositar(1000); + //primeraCuenta.pais = "Zambia"; No compila, no existe el atributo + System.out.println(primeraCuenta.getSaldo()); + + Cuenta segundaCuenta = new Cuenta(1); + //segundaCuenta.saldo = 500; + System.out.println(segundaCuenta.getSaldo()); + //System.out.println(segundaCuenta.titular); null + //System.out.println(segundaCuenta.agencia); 0 + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/Cuenta.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/Cuenta.java new file mode 100644 index 0000000..9008353 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/Cuenta.java @@ -0,0 +1,67 @@ +// Entidad Cuenta +public class Cuenta { + private double saldo; + private int agencia; + private int numero; + private Cliente titular = new Cliente(); + private static int contador = 0; + public Cuenta(int agencia) { + if (agencia <= 0) { + System.out.println("No se permiten valores negativos"); + this.agencia = 1; + } else { + this.agencia = agencia; + } + contador++; + System.out.println("Cuentas creadas: "+contador); + } + public void depositar(double valorDeposito){ + this.saldo += valorDeposito; + } + + public boolean retirar(double valorRetiro) { + if (this.saldo >= valorRetiro) { + this.saldo -= valorRetiro; + return true; + } else { + return false; + } + } + + public boolean transferir(double montoTransferencia, Cuenta cuenta){ + if (montoTransferencia <= this.saldo) { + this.saldo -= montoTransferencia; + cuenta.depositar(montoTransferencia); + return true; + } else { + return false; + } + } + + 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; + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaAcceso.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaAcceso.java new file mode 100644 index 0000000..7370e61 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaAcceso.java @@ -0,0 +1,10 @@ +public class PruebaAcceso { + public static void main(String[] args) { + Cuenta cuenta = new Cuenta(1); + cuenta.retirar(300); + System.out.println(cuenta.getSaldo()); + cuenta.depositar(300); + System.out.println(cuenta.getSaldo()); + System.out.println(cuenta.getAgencia()); + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaConstructor.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaConstructor.java new file mode 100644 index 0000000..d0e4f21 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaConstructor.java @@ -0,0 +1,10 @@ +public class PruebaConstructor { + public static void main(String[] args) { + Cuenta cuenta = new Cuenta(555); + //cuenta.setAgencia(-15); + System.out.println(cuenta.getAgencia()); + Cuenta cuenta2 = new Cuenta(333); + Cuenta cuenta3 = new Cuenta(444); + System.out.println(Cuenta.getContador()); + } +} \ No newline at end of file diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaEncapsulamiento.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaEncapsulamiento.java new file mode 100644 index 0000000..a200cef --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaEncapsulamiento.java @@ -0,0 +1,15 @@ +public class PruebaEncapsulamiento { + public static void main(String[] args) { + Cuenta cuenta = new Cuenta(1); + Cliente cliente = new Cliente(); + cliente.setNombre("Zerafín"); + cliente.setDocumento("abcDEFghiJKL"); + cuenta.setTitular(cliente); + + System.out.println(cliente.getNombre()); + System.out.println(cuenta.getTitular().getNombre()); + + Cliente titular = cuenta.getTitular(); + System.out.println(titular.getNombre()); + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaMetodos.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaMetodos.java new file mode 100644 index 0000000..1c5f8d1 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/PruebaMetodos.java @@ -0,0 +1,16 @@ +public class PruebaMetodos { + public static void main(String[] args) { + Cuenta cuenta1 = new Cuenta(1); + cuenta1.depositar(300); + System.out.println(cuenta1.retirar(200)); + System.out.println(cuenta1.getSaldo()); + + Cuenta cuenta2 = new Cuenta(1); + cuenta2.depositar(2000); + + boolean puedeTransferir = cuenta2.transferir(400, cuenta1); + if (puedeTransferir) { + System.out.println("Transferencia exitosa"); + } + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia.java new file mode 100644 index 0000000..8f9ae39 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia.java @@ -0,0 +1,28 @@ +public class TestReferencia { + public static void main(String[] args) { + Cuenta primeraCuenta = new Cuenta(1); + primeraCuenta.depositar(200); + + //Cuenta segundaCuenta = new Cuenta(); + // System.out.println(primeraCuenta); // Cuenta@23fc625e + // System.out.println(segundaCuenta); // Cuenta@3f99bd52 + + Cuenta segundaCuenta = primeraCuenta; + segundaCuenta.depositar(100); + System.out.println("Saldo primera cuenta: " + primeraCuenta.getSaldo()); + System.out.println("Saldo segunda cuenta: " + segundaCuenta.getSaldo()); + + segundaCuenta.depositar(400); + System.out.println("Saldo primera cuenta: " + primeraCuenta.getSaldo()); + + // Obtener referencia del objeto + System.out.println(primeraCuenta); // Cuenta@23fc625e + System.out.println(segundaCuenta); // Cuenta@23fc625e + + if (primeraCuenta == segundaCuenta) { + System.out.println("Son el mismo objeto"); + } else { + System.out.println("Son diferentes"); + } + } +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia2.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia2.java new file mode 100644 index 0000000..fe64887 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia2.java @@ -0,0 +1,17 @@ +public class TestReferencia2 { + + public static void main(String[] args) { + Cliente diego = new Cliente(); + diego.setNombre("Diego"); + diego.setDocumento("123.123.123-1"); + + Cuenta cuentaDiego = new Cuenta(1); + cuentaDiego.setTitular(diego); + System.out.println(cuentaDiego.getTitular().getDocumento()); + + // referencia + System.out.println(cuentaDiego.getTitular()); // Cliente@2a84aee7 + System.out.println(diego); // Cliente@2a84aee7 + } + +} diff --git a/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia3.java b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia3.java new file mode 100644 index 0000000..a8a32c2 --- /dev/null +++ b/008_java_oo/intellij_idea/proyecto_bytebank/src/TestReferencia3.java @@ -0,0 +1,8 @@ +public class TestReferencia3 { + public static void main(String[] args) { + Cuenta cuentaDeDiego = new Cuenta(1); + //cuentaDeDiego.titular = new Cliente(); + cuentaDeDiego.getTitular().setNombre("Diego"); + System.out.println(cuentaDeDiego.getTitular().getNombre()); + } +} diff --git a/008_java_oo/orientacion_obj.md b/008_java_oo/orientacion_obj.md index e69de29..426c9b6 100644 --- a/008_java_oo/orientacion_obj.md +++ b/008_java_oo/orientacion_obj.md @@ -0,0 +1,189 @@ +# Java Entendiendo la [Orientación a Objetos](https://app.aluracursos.com/course/java-parte2-introduccion-orientada-objetos) + +Diferencias con el paradigma **procedural**: se utilizó como práctica de +programación antes de la introducción de lenguajes orientados a objetos. +La necesidad de validar el numeroIdentidad en un formulario se utilizó como +ejemplo para discutir los principales problemas que pueden aparecer en este paradigma. + +En particular, a medida que otros formularios y desarrolladores necesitan la misma +validación de numeroIdentidad, no fue fácil ver que ya había procedimientos y +funciones que hicieron este trabajo, ya que los datos y las funciones no tenían +un vínculo tan fuerte. Esto podría dar lugar a otra nueva función o fragmento de +código con una responsabilidad similar. + +Además, conocemos la **idea central** del paradigma **orientado a objetos**, que +es **crear unidades de código que combinen los datos asociados con cierta +información con las funcionalidades aplicadas a esos datos** (por ejemplo, +numeroIdentidad + validación). Son los atributos y métodos. + +## Introduccion a Orientación a Objetos + +[proyecto_bytebank](./intellij_idea/proyecto_bytebank/src/) + +- Se practican los conceptos de **Objeto**, **Atributos**, **Instancias**. Y se +ejemplifica un atributo de clase con valor predeterminado. +[Cuenta.java](./intellij_idea/proyecto_bytebank/src/Cuenta.java) y +[CrearCuenta.java](./intellij_idea/proyecto_bytebank/src/CrearCuenta.java) + + ```java + // Entidad Cuenta + public class Cuenta { + double saldo; + //int agencia = 33; + int agencia; + int numero; + String titular; + } + ``` + + ```java + public class CrearCuenta { + public static void main(String[] args) { + Cuenta primeraCuenta = new Cuenta(); + primeraCuenta.saldo = 1000; + //primeraCuenta.pais = "Zambia"; No compila, no existe el atributo + System.out.println(primeraCuenta.saldo); + + Cuenta segundaCuenta = new Cuenta(); + segundaCuenta.saldo = 500; + System.out.println(segundaCuenta.saldo); + //System.out.println(segundaCuenta.titular); null + //System.out.println(segundaCuenta.agencia); 0 + } + } + ``` + +- Se ejemplifica como un Objeto es una una referencia en memoria +[testReferencia](./intellij_idea/proyecto_bytebank/src/TestReferencia.java) + + ```java + public class TestReferencia { + public static void main(String[] args) { + Cuenta primeraCuenta = new Cuenta(); + primeraCuenta.saldo = 200; + + //Cuenta segundaCuenta = new Cuenta(); + // System.out.println(primeraCuenta); // Cuenta@23fc625e + // System.out.println(segundaCuenta); // Cuenta@3f99bd52 + + Cuenta segundaCuenta = primeraCuenta; + segundaCuenta.saldo = 100; + System.out.println("Saldo primera cuenta: " + primeraCuenta.saldo); + System.out.println("Saldo segunda cuenta: " + segundaCuenta.saldo); + + segundaCuenta.saldo += 400; + System.out.println("Saldo primera cuenta: " + primeraCuenta.saldo); + + // Obtener referencia del objeto + System.out.println(primeraCuenta); // Cuenta@23fc625e + System.out.println(segundaCuenta); // Cuenta@23fc625e + + if (primeraCuenta == segundaCuenta) { + System.out.println("Son el mismo objeto"); + } else { + System.out.println("Son diferentes"); + } + } + } + ``` + +- Definicion de metodos con retorno y uso de *this* para atributos de clase + + ```java + // Entidad Cuenta + public class Cuenta { + + ... + + public void depositar(double valorDeposito){ + this.saldo += valorDeposito; + } + + public boolean retirar(double valorRetiro) { + if (this.saldo >= valorRetiro) { + this.saldo -= valorRetiro; + return true; + } else { + return false; + } + } + + public boolean transferir(double montoTransferencia, Cuenta cuenta){ + if (montoTransferencia <= this.saldo) { + this.saldo -= montoTransferencia; + cuenta.depositar(montoTransferencia); + return true; + } else { + return false; + } + } + } + ``` + + ```java + public class PruebaMetodos { + public static void main(String[] args) { + Cuenta cuenta1 = new Cuenta(); + cuenta1.depositar(300); + System.out.println(cuenta1.retirar(200)); + System.out.println(cuenta1.saldo); + + Cuenta cuenta2 = new Cuenta(); + cuenta2.depositar(2000); + + boolean puedeTransferir = cuenta2.transferir(400, cuenta1); + if (puedeTransferir) { + System.out.println("Transferencia exitosa"); + } + } + } + ``` + +- Ejemplo de `NullPointerException` al intentar acceder a un atributo de clase +de una instancia, cuyo valor es una Clase no instanciada. +[TestReferencia3.java](./intellij_idea/proyecto_bytebank/src/TestReferencia3.java) + +- Encapsulamiento, modificadores de acceso +[Cuenta.java](./intellij_idea/proyecto_bytebank/src/Cuenta.java) y +[PruebaEncapsulamiento.java](./intellij_idea/proyecto_bytebank/src/PruebaEncapsulamiento.java). + Atributos privados, restringiendo el acceso a los atributos. + + Encapsulación de código: + - **getters** Métodos de lectura de atributos + - **setters** Métodos para modificar atributos + +
+ +- Variables de clase **static**. No pertenecen a la instancia. + ```java + public class Cuenta { + ... + private static int contador = 0; + + + public static int getContador(){ + return Cuenta.contador; + } + ``` + +- **Constructor** [Cuenta.java](./intellij_idea/proyecto_bytebank/src/Cuenta.java) + Permite recibir argumentos e inicializar atributos desde la creación de un objeto. + Con esto, la inicialización de los atributos recibidos en el constructor se vuelve + obligatoria. Atributos de clase, atributos estáticos. Métodos de clase, métodos + estáticos. Ausencia de referencia del **this** dentro de los métodos estáticos. + + ```java + public Cuenta(int agencia) { + if (agencia <= 0) { + System.out.println("No se permiten valores negativos"); + this.agencia = 1; + } else { + this.agencia = agencia; + } + contador++; + System.out.println("Cuentas creadas: "+contador); + } + ``` + + +Lectura: Alura blog [¿Que es POO?](https://www.aluracursos.com/blog/poo-que-es-la-programacion-orientada-a-objetos) diff --git a/008_java_oo/primeros_pasos.md b/008_java_oo/primeros_pasos.md index e45e06a..86b9b31 100644 --- a/008_java_oo/primeros_pasos.md +++ b/008_java_oo/primeros_pasos.md @@ -191,9 +191,9 @@ flowchart LR subgraph JDK subgraph JRE c(JVM) - style c fill:#f9f,stroke:#333,stroke-width:2px + style c fill:#f9f,stroke:#000,stroke-width:2px d(Librerías) - style d fill:#f9f,stroke:#333,stroke-width:2px + style d fill:#f9f,stroke:#000,stroke-width:2px end a(Tools) end @@ -441,6 +441,8 @@ Funcionamiento del cast implícito y explícito en la sgte. tabla. ### Char y String +String [format()](https://www.javatpoint.com/java-string-format) + [EjemploCaracteres.java](./intellij_idea/java_primeros_pasos/src/EjemploCaracteres.java) ```java @@ -696,8 +698,8 @@ public class TablaMultiplicacion { ```java public class EjercicioMatriz { public static void main(String[] args) { - for (int col = 0; col <= 10; col++){ - for (int fila = 0; fila < col; fila++){ + for (int fila = 0; fila <= 10; fila++){ + for (int columna = 0; columna < fila; columna++){ System.out.print("* "); } System.out.println();