Crearemos un gestor de tareas personal en Java que ayudará a los usuarios a organizar su día a día al registrar, listar y marcar tareas como completadas. Este software es útil y, además, cubre conceptos fundamentales del lenguaje Java, como la creación de clases, sobrecarga de métodos, herencia y otras características del lenguaje.
A continuación, te presento el código con explicaciones detalladas.
Desarrollo de un gestor de tareas personal escrito en Java
Paso 1: Crear las Clases Base
Clase Tarea
La clase Tarea
representa una tarea básica.
public class Tarea {
private String titulo; // Título de la tarea
private String descripcion; // Descripción de la tarea
private boolean completada; // Estado de la tarea
// Constructor básico
public Tarea(String titulo) {
this.titulo = titulo;
this.descripcion = ""; // Sin descripción por defecto
this.completada = false; // Por defecto, la tarea no está completada
}
// Constructor sobrecargado con descripción
public Tarea(String titulo, String descripcion) {
this.titulo = titulo;
this.descripcion = descripcion;
this.completada = false;
}
// Método para marcar la tarea como completada
public void completar() {
this.completada = true;
}
// Método para mostrar detalles de la tarea
public void mostrarDetalles() {
System.out.println("Título: " + titulo);
System.out.println("Descripción: " + descripcion);
System.out.println("Estado: " + (completada ? "Completada" : "Pendiente"));
}
// Métodos getter y setter (opcional si se quieren atributos modificables desde fuera)
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
Paso 2: Extender la Funcionalidad con Herencia
Clase TareaPrioritaria
Creamos una subclase para tareas que tienen prioridad.
public class TareaPrioritaria extends Tarea {
private int prioridad; // Prioridad de la tarea (1-5)
// Constructor que extiende la funcionalidad del padre
public TareaPrioritaria(String titulo, String descripcion, int prioridad) {
super(titulo, descripcion); // Llamamos al constructor de la clase padre
this.prioridad = prioridad;
}
// Sobrecarga del método para mostrar detalles
@Override
public void mostrarDetalles() {
super.mostrarDetalles(); // Mostramos los detalles básicos
System.out.println("Prioridad: " + prioridad);
}
}
Paso 3: Crear la Lógica Principal
Clase GestorDeTareas
Esta clase gestionará la lista de tareas.
import java.util.ArrayList;
public class GestorDeTareas {
private ArrayList<Tarea> listaDeTareas; // Lista para almacenar las tareas
// Constructor
public GestorDeTareas() {
listaDeTareas = new ArrayList<>();
}
// Método para añadir una nueva tarea
public void agregarTarea(Tarea tarea) {
listaDeTareas.add(tarea);
System.out.println("Tarea añadida: " + tarea.getTitulo());
}
// Método para mostrar todas las tareas
public void mostrarTareas() {
if (listaDeTareas.isEmpty()) {
System.out.println("No hay tareas en la lista.");
} else {
for (int i = 0; i < listaDeTareas.size(); i++) {
System.out.println("\nTarea #" + (i + 1));
listaDeTareas.get(i).mostrarDetalles();
}
}
}
// Método para completar una tarea
public void completarTarea(int indice) {
if (indice >= 0 && indice < listaDeTareas.size()) {
listaDeTareas.get(indice).completar();
System.out.println("Tarea completada: " + listaDeTareas.get(indice).getTitulo());
} else {
System.out.println("Índice inválido.");
}
}
}
Paso 4: Crear la Interfaz Principal
Clase Main
Es la entrada principal de nuestro programa.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
GestorDeTareas gestor = new GestorDeTareas(); // Creamos el gestor
Scanner scanner = new Scanner(System.in);
System.out.println("Bienvenido al Gestor de Tareas en Java");
while (true) {
System.out.println("\nOpciones:");
System.out.println("1. Añadir tarea");
System.out.println("2. Listar tareas");
System.out.println("3. Completar tarea");
System.out.println("4. Salir");
System.out.print("Seleccione una opción: ");
int opcion = scanner.nextInt();
scanner.nextLine(); // Limpiar buffer
switch (opcion) {
case 1:
System.out.print("Ingrese el título de la tarea: ");
String titulo = scanner.nextLine();
System.out.print("Ingrese una descripción (opcional): ");
String descripcion = scanner.nextLine();
System.out.print("¿Es una tarea prioritaria? (S/N): ");
String esPrioritaria = scanner.nextLine();
if (esPrioritaria.equalsIgnoreCase("S")) {
System.out.print("Ingrese la prioridad (1-5): ");
int prioridad = scanner.nextInt();
scanner.nextLine(); // Limpiar buffer
gestor.agregarTarea(new TareaPrioritaria(titulo, descripcion, prioridad));
} else {
gestor.agregarTarea(new Tarea(titulo, descripcion));
}
break;
case 2:
gestor.mostrarTareas();
break;
case 3:
System.out.print("Ingrese el número de la tarea a completar: ");
int indice = scanner.nextInt();
gestor.completarTarea(indice - 1); // Ajuste para índice 0
break;
case 4:
System.out.println("Saliendo del Gestor de Tareas en Java...");
scanner.close();
return;
default:
System.out.println("Opción no válida.");
}
}
}
}
Explicación del Proyecto de gestor de tareas personal
Clases y Objetos:
La clase Tarea
muestra cómo se crean objetos con atributos y métodos específicos.
La clase TareaPrioritaria
ejemplifica herencia y polimorfismo.
Sobrecarga de Métodos:
Se utilizan varios constructores en Tarea
para mostrar sobrecarga.
Gestión de Datos:
El uso de ArrayList
en GestorDeTareas
facilita la manipulación de una colección dinámica de tareas.
Interfaz Básica:
El menú en la clase Main
permite a los usuarios interactuar con el programa.
El Gestor de Tareas en Java es un proyecto ideal para iniciarse en la programación orientada a objetos. Además de ser útil, enseña cómo estructurar código de manera modular y reutilizable. Con este ejmplo mostramos el potencial tan grande que tiene este lenguaje para crear software de escritorio que puede ser aplicado en la vida real. Utilizando JavaFX podremos, además, crear una interfaz de usuario amigable con la que complementar este programa.