Skip to content

Instantly share code, notes, and snippets.

@Danielusuario
Last active May 27, 2024 06:49
Show Gist options
  • Save Danielusuario/ad30bc3ec6c222b2c3c827ae00f97ad0 to your computer and use it in GitHub Desktop.
Save Danielusuario/ad30bc3ec6c222b2c3c827ae00f97ad0 to your computer and use it in GitHub Desktop.

image

Combo 1: Interfaz y Extensión

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.

Codigo

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


Capturas del programa en consola

image

image

image

@IoTeacher
Copy link

revisado

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment