El programa es un gestor de tareas simple que permite al usuario agregar, mostrar, completar y eliminar tareas. Está estructurado utilizando varios patrones de diseño para mejorar su mantenibilidad y extensibilidad.
Interfaz ITarea: Define las operaciones comunes para todas las tareas: Mostrar, Completar y Eliminar.
1-Clase abstracta TareaBase: Implementa la interfaz ITarea y proporciona una implementación base para las operaciones de las tareas. Contiene propiedades comunes como Id, Descripcion y Completada.
2- Clase TareaSimple: Extiende TareaBase y proporciona una implementación concreta para una tarea simple. No agrega funcionalidad adicional, pero podría ser extendida para tipos de tareas más complejas en el futuro.
3- Interfaz ITareaFactory: Define un método para crear instancias de tareas. Proporciona una abstracción que permite la creación de diferentes tipos de tareas sin especificar sus clases concretas.
4- Clase TareaSimpleFactory: Implementa ITareaFactory y proporciona una fábrica concreta para crear instancias de TareaSimple.
5- Clase GestorTareas: Gestiona las tareas, utilizando una lista de tareas (tareas) y una fábrica de tareas (factory). Permite agregar, mostrar, completar y eliminar tareas.
6- Programa principal (Main): Instancia una fábrica de tareas (TareaSimpleFactory) y un gestor de tareas (GestorTareas). Utiliza un bucle while para mostrar un menú de opciones al usuario y ejecutar las operaciones correspondientes (agregar, mostrar, completar, eliminar o salir) según la entrada del usuario.
using System;
using System.Collections.Generic;
// Definición de la interfaz de tarea
public interface ITarea
{
void Mostrar();
void Completar();
void Eliminar();
}
// Implementación base de la interfaz de tarea el patrón Bridge
public abstract class TareaBase : ITarea
{
public int Id { get; set; }
protected string Descripcion { get; set; }
protected bool Completada { get; set; }
public TareaBase(int id, string descripcion)
{
Id = id;
Descripcion = descripcion;
Completada = false;
}
public virtual void Mostrar()
{
Console.WriteLine($"[{Id}] {Descripcion} - {(Completada ? "Completada" : "Pendiente")}");
}
public virtual void Completar()
{
Completada = true;
Console.WriteLine($"Tarea '{Descripcion}' marcada como completada.");
}
public virtual void Eliminar()
{
Console.WriteLine($"Tarea '{Descripcion}' eliminada correctamente.");
}
}
// Clase de tarea utilizando el patrón Bridge
public class TareaSimple : TareaBase
{
public TareaSimple(int id, string descripcion) : base(id, descripcion)
{
}
}
// Fábrica abstracta de tareas utilizando el patrón Abstract Factory
public interface ITareaFactory
{
ITarea CrearTarea(int id, string descripcion);
}
// Fábrica concreta de tareas utilizando el patrón Abstract Factory
public class TareaSimpleFactory : ITareaFactory
{
public ITarea CrearTarea(int id, string descripcion)
{
return new TareaSimple(id, descripcion);
}
}
// Gestor de tareas
public class GestorTareas
{
private List<ITarea> tareas;
private ITareaFactory factory;
public GestorTareas(ITareaFactory factory)
{
tareas = new List<ITarea>();
this.factory = factory;
}
public void AgregarTarea(string descripcion)
{
int id = tareas.Count + 1;
ITarea nuevaTarea = factory.CrearTarea(id, descripcion);
tareas.Add(nuevaTarea);
Console.WriteLine($"Tarea '{descripcion}' agregada correctamente.");
}
public void MostrarTareas()
{
Console.WriteLine("Lista de tareas:");
foreach (var tarea in tareas)
{
tarea.Mostrar();
}
}
public void CompletarTarea(int id)
{
var tarea = tareas.Find(t => (t as TareaBase)?.Id == id);
if (tarea != null)
{
tarea.Completar();
}
else
{
Console.WriteLine($"No se encontró ninguna tarea con el ID {id}.");
}
}
public void EliminarTarea(int id)
{
var tarea = tareas.Find(t => (t as TareaBase)?.Id == id);
if (tarea != null)
{
tareas.Remove(tarea);
tarea.Eliminar();
}
else
{
Console.WriteLine($"No se encontró ninguna tarea con el ID {id}.");
}
}
}
// Programa principal
class Program
{
static void Main(string[] args)
{
ITareaFactory factory = new TareaSimpleFactory();
GestorTareas gestor = new GestorTareas(factory);
while (true)
{
Console.WriteLine("\n--- Gestor de Tareas ---");
Console.WriteLine("1. Agregar Tarea");
Console.WriteLine("2. Mostrar Tareas");
Console.WriteLine("3. Completar Tarea");
Console.WriteLine("4. Eliminar Tarea");
Console.WriteLine("5. Salir");
Console.Write("Seleccione una opción: ");
int opcion;
if (int.TryParse(Console.ReadLine(), out opcion))
{
switch (opcion)
{
case 1:
Console.Write("Ingrese la descripción de la nueva tarea: ");
string descripcion = Console.ReadLine();
gestor.AgregarTarea(descripcion);
break;
case 2:
gestor.MostrarTareas();
break;
case 3:
Console.Write("Ingrese el ID de la tarea que desea marcar como completada: ");
int idCompletar;
if (int.TryParse(Console.ReadLine(), out idCompletar))
{
gestor.CompletarTarea(idCompletar);
}
else
{
Console.WriteLine("Entrada inválida.");
}
break;
case 4:
Console.Write("Ingrese el ID de la tarea que desea eliminar: ");
int idEliminar;
if (int.TryParse(Console.ReadLine(), out idEliminar))
{
gestor.EliminarTarea(idEliminar);
}
else
{
Console.WriteLine("Entrada inválida.");
}
break;
case 5:
Console.WriteLine("¡Adiós!");
return;
default:
Console.WriteLine("Opción inválida. Por favor, seleccione una opción válida.");
break;
}
}
else
{
Console.WriteLine("Opción inválida. Por favor, seleccione una opción válida.");
}
}
}
}
revisado