Java Orientado a Objetos: Fin - orientacion a objs

This commit is contained in:
devfzn 2023-06-13 01:38:32 -04:00
parent f9e231a45d
commit 0f56c54d51
Signed by: devfzn
GPG Key ID: E070ECF4A754FDB1
14 changed files with 419 additions and 11 deletions

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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");
}
}
}

View File

@ -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");
}
}
}

View File

@ -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
}
}

View File

@ -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());
}
}

View File

@ -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
<br/>
- 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)

View File

@ -191,9 +191,9 @@ flowchart LR
subgraph <b>JDK</b>
subgraph <b>JRE</b>
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();