Skip to content

Commit a6a4d9a

Browse files
committed
JAVA - Abstracción, Clases internas, Conjunto Hash, Entrada usuario, Enumeraciones, Fecha y hora, Lista arrays, Lista enlazada, Mapa hash, Polimorfismo
Signed-off-by: diwes-gh <alejandro@alejandroalsa.es>
1 parent f8f9f14 commit a6a4d9a

11 files changed

+1091
-0
lines changed

_posts/2024-01-04-java-abstraccion.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
title: Abstracción
3+
date: 2024-01-04 10:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Clases y métodos abstractos
9+
10+
La abstracción de datos es el proceso de ocultar ciertos detalles y mostrar solo información esencial al usuario. La abstracción se puede lograr con **clases abstractas** o **interfaces de usuario** (más adelante las trataremos).
11+
12+
La palabra clave `abstract` es un modificador sin acceso, utilizado para clases y métodos:
13+
14+
* **Clase abstracta** Es una clase restringida que no se puede utilizar para crear objetos.
15+
* **Clase abstracto** Solo se puede utilizar en una clase abstracta y no tiene cuerpo. El cuerpo lo proporciona la subclase heradada de él.
16+
17+
Una clase abstracta puede tener métodos tanto abstractos como regulares:
18+
19+
```java
20+
abstract class animal{
21+
public abstract void sonidoAnimal();
22+
public void dormir(){
23+
System.out.println("Zzz");
24+
}
25+
}
26+
```
27+
28+
Segun el ejemplo anterior, no es posible crear un objeto de la clase `animal`.
29+
30+
```java
31+
animal miObjeto = new animal(); // Error
32+
```
33+
34+
Para acceder a la clase abstracta, tendremos que heredar de otra clase. En el siguiente ejemplo convertiremos la clase `animal` del post anterior en una clase abstracta.
35+
36+
```java
37+
// Clase abstracta
38+
abstract class animal{
39+
// El método abstracto no tiene cuerpo
40+
public abstract void sonidoAnimal();
41+
// Método regular
42+
public void dormir(){
43+
System.out.println("Zzz");
44+
}
45+
}
46+
47+
// Subclase
48+
class gato extends animal {
49+
public void sonidoAnimal(){
50+
// El cuerpo de sonidoAnimal() es privado
51+
System.out.println("El gato maulla: miau miau");
52+
}
53+
}
54+
55+
class main{
56+
public static void main(String[] args){
57+
gato miGato = new gato(); // Creamos el objeto gato
58+
miGato.sonidoAnimal();
59+
miGato.dormir();
60+
}
61+
}
62+
```
63+
64+
## ¿Por qué y cuándo utilizar clases y métodos abstractos?
65+
66+
Para lograr seguridad: Ocultar ciertos detalles y mostrar solo los detalles importantes de un objeto.
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
---
2+
title: Clases internas
3+
date: 2024-01-04 9:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Clases internas
9+
10+
En Java, también es posible anidar clases (una clase dentro de una clase). El propósito de clases anidadas es agrupar clases que pertenecen juntas, lo que hace que nuestro código se más legible y fácil de mantener.
11+
12+
Para acceder a la clase internar, crearemos un objeto de la clase externa y luego crearemos un objeto de la clase interna:
13+
14+
```java
15+
class claseExterna{
16+
int x = 10;
17+
18+
class claseInterna{
19+
int y = 20;
20+
}
21+
}
22+
23+
public class main{
24+
public static void main(String[] args){
25+
claseExterna miExterna = new claseExterna();
26+
claseExterna.claseInterna miInterior = miExterna.new claseInterna();
27+
System.out.println(miExterna.x + miInterior.y);
28+
}
29+
}
30+
```
31+
32+
## Clase privada
33+
34+
A diferencia de una clase normal, una clase interna puede ser `private` o `protected`. Si queremos que los objetos externos no accedan a la clase interna, esta tendremos que declararla como `private`.
35+
36+
```java
37+
class claseExterna{
38+
int x = 10;
39+
40+
private class claseInterna{
41+
int y = 20;
42+
}
43+
}
44+
45+
46+
public class main{
47+
public static void main(String[] args){
48+
claseExterna miExterna = new claseExterna();
49+
claseExterna.claseInterna miInterior = miExterna.new claseInterna(); // Error
50+
System.out.println(miExterna.x + miInterior.y); // Error
51+
}
52+
}
53+
```
54+
55+
Si intentamos compilar, no dará un error indicándonos que se intenta acceder a una clase interna privada desde una clase externa.
56+
57+
## Clase interna estática
58+
59+
Una clase interna también puede ser `static`, lo que significa que podemos acceder a ella creando simplemente un objeto de la clase externa
60+
61+
```java
62+
class claseExterna{
63+
int x = 10;
64+
65+
static class claseInterna{
66+
int y = 20;
67+
}
68+
}
69+
70+
public class main{
71+
public static void main(String[] args){
72+
claseExterna.claseInterna miInterior = new claseExterna.claseInterna();
73+
System.out.println(miInterior.y);
74+
}
75+
}
76+
```
77+
78+
Salida:
79+
80+
```txt
81+
20
82+
```
83+
84+
> NOTA: Al igual que los atributos y métodos estáticos, una clase interna estática no tiene acceso a los miembros de la clase externa.
85+
86+
## Acceder a la clase exterior desde la clase interior
87+
88+
Una ventaja de las clases internas es que pueden acceder a atributos y métodos de la clase externa.
89+
90+
```java
91+
class claseExterna{
92+
int x = 10;
93+
94+
class claseInterna{
95+
public int miMetodoInterno(){
96+
return x;
97+
}
98+
}
99+
}
100+
101+
public class main{
102+
public static void main(String[] args){
103+
claseExterna miExterna = new claseExterna();
104+
claseExterna.claseInterna miInterior = miExterna.new claseInterna();
105+
System.out.println(miInterior.miMetodoInterno());
106+
}
107+
}
108+
```
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
---
2+
title: Conjunto de Hash
3+
date: 2024-01-04 17:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Conjunto de hash
9+
10+
Un HashSet es una colección de elementos donde cada elemento es único y se encuentra en el paquete `java.util`
11+
12+
```java
13+
// Crear un HashSet objeto llamado coches que almacenará cadenas
14+
15+
import java.util.HashSet;
16+
17+
HashSet<String> coches = new HashSet<String>();
18+
```
19+
20+
## Agregar elementos
21+
22+
La clase `HashSet` tiene muchos métodos útiles. Por ejemplo, el método `add()`
23+
24+
```java
25+
import java.util.HashSet;
26+
27+
public class main {
28+
public static void main(String[] args) {
29+
HashSet<String> coches = new HashSet<String>();
30+
coches.add("Jaguar");
31+
coches.add("Ford");
32+
coches.add("BMW");
33+
coches.add("BMW");
34+
coches.add("Ferrari");
35+
36+
System.out.println(coches);
37+
}
38+
}
39+
```
40+
41+
> NOTA: En el ejemplo anterior, aunque BMW se agrega dos veces, solo aparece una vez en el conjunto, porque cada elemento de un conjunto tiene que ser único.
42+
43+
## Comprobar si existe un elementos
44+
45+
Para verificar si un elemento existe en un HashSet, utiliza el método `contains()`
46+
47+
```java
48+
import java.util.HashSet;
49+
50+
public class main {
51+
public static void main(String[] args) {
52+
HashSet<String> coches = new HashSet<String>();
53+
coches.add("Jaguar");
54+
coches.add("Ford");
55+
coches.add("BMW");
56+
coches.add("BMW");
57+
coches.add("Ferrari");
58+
59+
coches.contains("Porche");
60+
}
61+
}
62+
```
63+
64+
## Eliminar un artículo
65+
66+
Para eliminar un elemento, utiliza el método `remove()`
67+
68+
```java
69+
coches.remove("Ferrari");
70+
```
71+
72+
Para eliminar todos los elementos, utiliza el método `clear()`
73+
74+
```java
75+
coches.clear();
76+
```
77+
78+
## Tamaño del conjunto de hash
79+
80+
Para saber cuántos elementos hay, utiliza el método `size()`:
81+
82+
```java
83+
coches.size();
84+
```
85+
86+
## Recorrer un HashSet
87+
88+
Recorre los elementos de un HashSet con un bucle para cada
89+
90+
```java
91+
for (String i : coches){
92+
System.out.println(i)
93+
}
94+
```
95+
96+
## Otros tipos
97+
98+
Los elementos de un `HashSet` son en realidad objetos. En los ejemplos anteriores, hemos creado elementos (objetos) de tipo `String`. Recuerda que un `String` en Java es un objeto (no un tipo primitivo). Para utilizar otros tipos, como `int`, debes especificar una clase envolvente equivalente: `Integer`. Para otros tipos primitivos, utiliza: `Boolean` para booleanos, `Character` para caracteres, etc
99+
100+
```java
101+
// Usar una HashSet que almacena Integer objetos
102+
103+
import java.util.HashSet;
104+
105+
public class Main {
106+
public static void main(String[] args) {
107+
108+
HashSet<Integer> numeros = new HashSet<Integer>();
109+
110+
numeros.add(4);
111+
numeros.add(7);
112+
numeros.add(8);
113+
114+
for (int i = 0; i <= 10; i ++ ){
115+
if (numeros.contains(i)) {
116+
System.out.println(i + " en el conjunto.");
117+
} else {
118+
System.out.println(i + " no se encontró en el conjunto.");
119+
}
120+
}
121+
}
122+
}
123+
```
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: Entrada de usuario (Scanner)
3+
date: 2024-01-04 14:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Entrada de usuario (Scanner)
9+
10+
La clase `scanner`, se utiliza para obtener datos de entrada de usuario y se encuentra en el paquete `java.util`
11+
12+
En el siguiente ejemplos creare un objeto de la clase `Scanner` y utilizare el método `nextLine()` disponibles en `Scanner` para leer toda una linea.
13+
14+
```java
15+
import java.util.Scanner;
16+
17+
public class main{
18+
public static void main(String[] args){
19+
Scanner miObjeto = new Scanner(System.in);
20+
System.out.println("Nombre de usuario: ");
21+
22+
String nombreUsuario = miObjeto.nextLine();
23+
System.out.println("Nombre de usuario tecleado: " + nombreUsuario);
24+
}
25+
}
26+
```
27+
28+
## Tipos de entrada
29+
30+
En el ejemplo anterior, utilizamos `nextLine()` método, que se utiliza para leer cadenas. Para leer otros tipos, consulta la siguiente tabla:
31+
32+
| Método | Descripción |
33+
|--------------------|-------------------------------------------|
34+
| `nextBoolean()` | Lee un valor booleano del usuario |
35+
| `nextByte()` | Lee un valor byte del usuario |
36+
| `nextDouble()` | Lee un valor double del usuario |
37+
| `nextFloat()` | Lee un valor float del usuario |
38+
| `nextInt()` | Lee un valor int del usuario |
39+
| `nextLine()` | Lee un valor String del usuario |
40+
| `nextLong()` | Lee un valor long del usuario |
41+
| `nextShort()` | Lee un valor short del usuario |
42+
43+
En el siguiente ejemplo, utilizamos diferentes métodos para leer datos de varios tipos:
44+
45+
```java
46+
import java.util.Scanner;
47+
48+
class main{
49+
public static void main(String[] args){
50+
Scanner miObjeto = new Scanner(System.in);
51+
System.out.println("Introduce tu nombre, apellidos y edad: ");
52+
53+
String nombre = miObjeto.nextLine();
54+
String apellidos = miObjeto.nextLine();
55+
int edad = miObjeto.nextInt();
56+
57+
System.out.println("Nombre: " + nombre);
58+
System.out.println("Apellidos: " + apellidos);
59+
System.out.println("Edad: " + edad);
60+
}
61+
}
62+
```
63+
64+
> NOTA: Si introduces un tipo de dato que no corresponde con el establecido, por ejemplo en edad pones "veinte", recibirás una mensaje de excepción/error (como "InputMismatchException").

0 commit comments

Comments
 (0)