Skip to content

Commit 49d7374

Browse files
authored
Merge pull request mouredev#6507 from eulogioep/main
#19 - java, javascript, php y typescript
2 parents 7b048ab + 13a525c commit 49d7374

File tree

4 files changed

+448
-0
lines changed

4 files changed

+448
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*
2+
* TEORÍA SOBRE ENUMERACIONES EN JAVA
3+
*
4+
* Las enumeraciones en Java son un tipo especial de clase que representa un grupo
5+
* de constantes (variables inmutables). Se definen usando la palabra clave 'enum'.
6+
*
7+
* Características principales:
8+
* 1. Son implícitamente final y estáticas
9+
* 2. Pueden tener constructores, métodos y campos
10+
* 3. Implementan implícitamente java.lang.Comparable y java.io.Serializable
11+
* 4. Se utilizan comúnmente para representar un conjunto fijo de opciones
12+
*/
13+
14+
public class eulogioep {
15+
// Enumeración para los días de la semana
16+
enum DiaSemana {
17+
LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO
18+
}
19+
20+
// Enumeración para los estados de un pedido
21+
enum EstadoPedido {
22+
PENDIENTE, ENVIADO, ENTREGADO, CANCELADO
23+
}
24+
25+
// Clase para gestionar pedidos
26+
static class Pedido {
27+
private final int id;
28+
private EstadoPedido estado;
29+
30+
// Constructor
31+
public Pedido(int id) {
32+
this.id = id;
33+
this.estado = EstadoPedido.PENDIENTE;
34+
}
35+
36+
// Método para enviar el pedido
37+
public boolean enviarPedido() {
38+
if (estado == EstadoPedido.PENDIENTE) {
39+
estado = EstadoPedido.ENVIADO;
40+
return true;
41+
}
42+
return false;
43+
}
44+
45+
// Método para cancelar el pedido
46+
public boolean cancelarPedido() {
47+
if (estado == EstadoPedido.PENDIENTE || estado == EstadoPedido.ENVIADO) {
48+
estado = EstadoPedido.CANCELADO;
49+
return true;
50+
}
51+
return false;
52+
}
53+
54+
// Método para entregar el pedido
55+
public boolean entregarPedido() {
56+
if (estado == EstadoPedido.ENVIADO) {
57+
estado = EstadoPedido.ENTREGADO;
58+
return true;
59+
}
60+
return false;
61+
}
62+
63+
// Método para obtener descripción del estado
64+
public String obtenerDescripcionEstado() {
65+
return switch (estado) {
66+
case PENDIENTE -> "El pedido " + id + " está pendiente de envío.";
67+
case ENVIADO -> "El pedido " + id + " ha sido enviado y está en camino.";
68+
case ENTREGADO -> "El pedido " + id + " ha sido entregado con éxito.";
69+
case CANCELADO -> "El pedido " + id + " ha sido cancelado.";
70+
};
71+
}
72+
73+
// Getter para el estado
74+
public EstadoPedido getEstado() {
75+
return estado;
76+
}
77+
}
78+
79+
// Método para obtener el día de la semana según un número
80+
public static String obtenerDiaSemana(int numero) {
81+
if (numero < 1 || numero > 7) {
82+
return "Número inválido. Debe estar entre 1 y 7.";
83+
}
84+
return DiaSemana.values()[numero - 1].toString();
85+
}
86+
87+
public static void main(String[] args) {
88+
// Prueba de días de la semana
89+
System.out.println("=== PRUEBA DE DÍAS DE LA SEMANA ===");
90+
for (int i = 1; i <= 7; i++) {
91+
System.out.println("Día " + i + ": " + obtenerDiaSemana(i));
92+
}
93+
94+
// Prueba del sistema de gestión de pedidos
95+
System.out.println("\n=== PRUEBA DE GESTIÓN DE PEDIDOS ===");
96+
97+
Pedido pedido1 = new Pedido(1);
98+
Pedido pedido2 = new Pedido(2);
99+
100+
// Mostrar estado inicial
101+
System.out.println(pedido1.obtenerDescripcionEstado());
102+
103+
// Enviar pedido1
104+
pedido1.enviarPedido();
105+
System.out.println(pedido1.obtenerDescripcionEstado());
106+
107+
// Intentar entregar pedido2 (debería fallar)
108+
if (!pedido2.entregarPedido()) {
109+
System.out.println("No se puede entregar el pedido 2 porque no ha sido enviado.");
110+
}
111+
112+
// Entregar pedido1
113+
pedido1.entregarPedido();
114+
System.out.println(pedido1.obtenerDescripcionEstado());
115+
116+
// Cancelar pedido2
117+
pedido2.cancelarPedido();
118+
System.out.println(pedido2.obtenerDescripcionEstado());
119+
}
120+
}
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
/**
2+
* TEORÍA SOBRE ENUMERACIONES EN JAVASCRIPT
3+
*
4+
* JavaScript no tiene un tipo de dato nativo para enumeraciones como Java,
5+
* pero hay varias formas de implementarlas:
6+
*
7+
* 1. Usando Object.freeze() para crear objetos inmutables
8+
* 2. Utilizando símbolos (Symbol)
9+
* 3. Creando clases con getters
10+
*
11+
* En este ejercicio, usaremos Object.freeze() para crear enumeraciones
12+
* similares a las que encontraríamos en otros lenguajes.
13+
*/
14+
15+
// Enumeración para los días de la semana
16+
const DiaSemana = Object.freeze({
17+
LUNES: 1,
18+
MARTES: 2,
19+
MIERCOLES: 3,
20+
JUEVES: 4,
21+
VIERNES: 5,
22+
SABADO: 6,
23+
DOMINGO: 7,
24+
25+
// Método para obtener el nombre del día por número
26+
obtenerNombre(numero) {
27+
const dias = Object.entries(this).find(([_, value]) => value === numero);
28+
return dias ? dias[0] : "Número inválido. Debe estar entre 1 y 7.";
29+
},
30+
});
31+
32+
// Enumeración para los estados de un pedido
33+
const EstadoPedido = Object.freeze({
34+
PENDIENTE: "PENDIENTE",
35+
ENVIADO: "ENVIADO",
36+
ENTREGADO: "ENTREGADO",
37+
CANCELADO: "CANCELADO",
38+
});
39+
40+
// Clase para gestionar pedidos
41+
class Pedido {
42+
constructor(id) {
43+
this.id = id;
44+
this.estado = EstadoPedido.PENDIENTE;
45+
}
46+
47+
// Método para enviar el pedido
48+
enviarPedido() {
49+
if (this.estado === EstadoPedido.PENDIENTE) {
50+
this.estado = EstadoPedido.ENVIADO;
51+
return true;
52+
}
53+
return false;
54+
}
55+
56+
// Método para cancelar el pedido
57+
cancelarPedido() {
58+
if (
59+
this.estado === EstadoPedido.PENDIENTE ||
60+
this.estado === EstadoPedido.ENVIADO
61+
) {
62+
this.estado = EstadoPedido.CANCELADO;
63+
return true;
64+
}
65+
return false;
66+
}
67+
68+
// Método para entregar el pedido
69+
entregarPedido() {
70+
if (this.estado === EstadoPedido.ENVIADO) {
71+
this.estado = EstadoPedido.ENTREGADO;
72+
return true;
73+
}
74+
return false;
75+
}
76+
77+
// Método para obtener descripción del estado
78+
obtenerDescripcionEstado() {
79+
switch (this.estado) {
80+
case EstadoPedido.PENDIENTE:
81+
return `El pedido ${this.id} está pendiente de envío.`;
82+
case EstadoPedido.ENVIADO:
83+
return `El pedido ${this.id} ha sido enviado y está en camino.`;
84+
case EstadoPedido.ENTREGADO:
85+
return `El pedido ${this.id} ha sido entregado con éxito.`;
86+
case EstadoPedido.CANCELADO:
87+
return `El pedido ${this.id} ha sido cancelado.`;
88+
}
89+
}
90+
}
91+
92+
// Función principal para probar la funcionalidad
93+
function main() {
94+
console.log("=== PRUEBA DE DÍAS DE LA SEMANA ===");
95+
for (let i = 1; i <= 7; i++) {
96+
console.log(`Día ${i}: ${DiaSemana.obtenerNombre(i)}`);
97+
}
98+
99+
console.log("\n=== PRUEBA DE GESTIÓN DE PEDIDOS ===");
100+
101+
const pedido1 = new Pedido(1);
102+
const pedido2 = new Pedido(2);
103+
104+
// Mostrar estado inicial
105+
console.log(pedido1.obtenerDescripcionEstado());
106+
107+
// Enviar pedido1
108+
pedido1.enviarPedido();
109+
console.log(pedido1.obtenerDescripcionEstado());
110+
111+
// Intentar entregar pedido2 (debería fallar)
112+
if (!pedido2.entregarPedido()) {
113+
console.log("No se puede entregar el pedido 2 porque no ha sido enviado.");
114+
}
115+
116+
// Entregar pedido1
117+
pedido1.entregarPedido();
118+
console.log(pedido1.obtenerDescripcionEstado());
119+
120+
// Cancelar pedido2
121+
pedido2.cancelarPedido();
122+
console.log(pedido2.obtenerDescripcionEstado());
123+
}
124+
125+
// Ejecutar el programa
126+
main();
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
// Resumen sobre Enumeraciones
3+
// Las enumeraciones (Enums) en PHP 8.1 permiten definir un tipo de dato con un conjunto finito de valores posibles.
4+
// Son útiles para representar datos categóricos que tienen un número limitado de valores, como los días de la semana o el estado de un pedido.
5+
6+
enum DiasSemana: int
7+
{
8+
case Lunes = 1;
9+
case Martes = 2;
10+
case Miercoles = 3;
11+
case Jueves = 4;
12+
case Viernes = 5;
13+
case Sabado = 6;
14+
case Domingo = 7;
15+
}
16+
17+
// Función para obtener el nombre del día a partir de un número entero
18+
function obtenerNombreDia(int $numeroDia): string
19+
{
20+
return DiasSemana::from($numeroDia)->name;
21+
}
22+
23+
// Ejemplo de uso de la función obtenerNombreDia
24+
echo obtenerNombreDia(1); // Salida: Lunes
25+
echo "\n";
26+
echo obtenerNombreDia(7); // Salida: Domingo
27+
28+
// Dificultad Extra: Sistema de gestión del estado de pedidos
29+
enum EstadoPedido: string
30+
{
31+
case Pendiente = 'Pendiente';
32+
case Enviado = 'Enviado';
33+
case Entregado = 'Entregado';
34+
case Cancelado = 'Cancelado';
35+
}
36+
37+
class Pedido
38+
{
39+
private int $id;
40+
private EstadoPedido $estado;
41+
42+
public function __construct(int $id, EstadoPedido $estado = EstadoPedido::Pendiente)
43+
{
44+
$this->id = $id;
45+
$this->estado = $estado;
46+
}
47+
48+
public function enviar(): void
49+
{
50+
if ($this->estado === EstadoPedido::Pendiente) {
51+
$this->estado = EstadoPedido::Enviado;
52+
} else {
53+
echo "El pedido no se puede enviar.\n";
54+
}
55+
}
56+
57+
public function entregar(): void
58+
{
59+
if ($this->estado === EstadoPedido::Enviado) {
60+
$this->estado = EstadoPedido::Entregado;
61+
} else {
62+
echo "El pedido no se puede entregar.\n";
63+
}
64+
}
65+
66+
public function cancelar(): void
67+
{
68+
if ($this->estado !== EstadoPedido::Entregado) {
69+
$this->estado = EstadoPedido::Cancelado;
70+
} else {
71+
echo "El pedido no se puede cancelar.\n";
72+
}
73+
}
74+
75+
public function obtenerDescripcionEstado(): string
76+
{
77+
return "El estado actual del pedido {$this->id} es {$this->estado->value}.\n";
78+
}
79+
}
80+
81+
// Ejemplo de interacción con diferentes pedidos
82+
$pedido1 = new Pedido(1);
83+
$pedido2 = new Pedido(2);
84+
85+
$pedido1->enviar();
86+
echo $pedido1->obtenerDescripcionEstado(); // Salida: El estado actual del pedido 1 es Enviado.
87+
88+
$pedido1->entregar();
89+
echo $pedido1->obtenerDescripcionEstado(); // Salida: El estado actual del pedido 1 es Entregado.
90+
91+
$pedido2->cancelar();
92+
echo $pedido2->obtenerDescripcionEstado(); // Salida: El estado actual del pedido 2 es Cancelado.
93+
94+
$pedido3 = new Pedido(3);
95+
$pedido3->enviar();
96+
$pedido3->cancelar(); // Esto no debería ser posible, y se verá reflejado en el mensaje.
97+
98+
echo $pedido3->obtenerDescripcionEstado(); // Salida: El estado actual del pedido 3 es Enviado.

0 commit comments

Comments
 (0)