Paradigmas de programación


2026 semestre 1

Cronograma de actividades

  • (5%) Quiz #1 [Semana 3 Feb 5 | 6]
  • (15%) Evaluación #1 [Semana 5 Feb 19 | 20]
  • (20%) Taller #1 [Semana 9 Marzo 17 | 18]
  • (15%) Taller #2 [Semana 12 Abril 8 | 9]
  • (20%) Evaluación #2 [Semana 14 Abril 23 | 24]
  • (25%) Proyecto Final [Semana 17 Mayo 12 | 13]

Taller 1

En parejas o equipos de tres personas

Deben escoger un tema de su preferencia y realizar:
1. Enunciado del sistema: Descripción clara del problema a resolver
2. Diagrama de clases UML completo: Con todos los atributos, métodos, relaciones, multiplicidad, etc.
3. Implementación en C#: Aplicación de consola que materializa el diseño, con persistencia de datos usando CsvHelper.

Requisitos de POO

El sistema debe incluir por lo menos:

  • Una (1) relación de Herencia
  • Una (1) relación de Asociación
  • Una (1) relación de Agregación
  • Una (1) relación de Composición
  • Una (1) Interfaz implementada

Requisitos de Funcionalidad

El sistema debe implementar mínimo 3 CRUDs:

  • Create: Crear registros en las entidades principales
  • Read: Consultar y listar registros
  • Update: Actualizar registros existentes
  • Delete: Eliminar registros

Ejemplo: Para un sistema de biblioteca → CRUD de libros, usuarios y préstamos

Entregables

  • Repositorio de GitHub público que contenga:
    • Enunciado del sistema (README.md)
    • Diagrama de clases UML en archivo Draw.io
    • Proyecto de C#
    • Commits que refleje el trabajo de cada integrante
  • Demostración en clase de los 3 CRUDs funcionales

Criterios de evaluación

  • (15%) Enunciado y descripción del sistema
  • (20%) Diagrama de clases (Relaciones, Cohesión, Acoplamiento...)
  • (20%) Implementación de los 3 CRUDs
  • (10%) Persistencia de datos
  • (25%) Presentación y demostración en clase
  • (10%) Repositorio de GitHub (estructura y documentación)

Recomendaciones

  • Escojan un tema que les apasione (videojuegos, tienda, hospital, universidad, etc.)
  • Documenten claramente cuál es cuál relación POO implementada
  • Usen buenas prácticas: nombres significativos, métodos cohesivos, bajo acoplamiento
  • Prueben los CRUDs antes de la presentación

Taller 2


Implementar por completo en Godot con C# el funcionamiento de los personajes del juego (movimientos y ataques), aplicando herencia.

Taller 2

Requerimientos mínimos:

  1. Implementar la clase base Character que derive de CharacterBody2D.
  2. Implementar la clase Heroe y Enemy que derivan de Character.
  3. Implementar por lo menos un Héroe y 2 tipos de Enemigo diferentes.

Taller 2

Requerimientos mínimos:

  1. Implementar por completo la lógica (atributos y métodos) para movimientos y ataques de los personajes.
  2. Implementar un nivel o escenario completo donde el héroe y los enemigos combaten.

Taller 2

Plus:

  • Implementar una barra visual para la salud de los enemigos que se actualice al recibir daño.

Taller 2

Entregables:

  1. Proyecto de Godot en C#.
  2. Diagrama de clases final completo (Draw.io).

Tips

  • Recuerden apoyarse del videotutorial que les compartí por el equipo de Microsoft Teams.
  • Asegúrense de comprender cómo funciona la herencia en C# para esta jerarquía.

Criterios de evaluación

  • (20%) Sustentación / Argumentación individual
  • (10%) Diagrama de clases final completo (Draw.io)
  • (20%) Implementación de clase base Character y sus mecánicas
  • (25%) Especialización de clases (1 Héroe y 2 Enemigos distintos operando)
  • (25%) Nivel interactivo completo donde todo el ecosistema interactúa / combate

Proyecto Final


Desarrollar una aplicación de consola en .NET C# que integre cuatro paradigmas de programación, partiendo del template ConsoleApp sin código adicional generado.

Pueden reutilizar y extender el dominio del Taller 1.

Paradigma Orientado a Objetos

El sistema debe demostrar POO completa:

  • Mínimo 5 clases con relaciones: herencia, composición, agregación y asociación
  • Al menos 1 interfaz implementada
  • Polimorfismo demostrable en tiempo de ejecución
  • Diagrama de clases UML actualizado

Paradigma de Aspectos

Funciones transversales con Castle DynamicProxy:

  • Configurar Castle Windsor como contenedor de Inyección de Dependencias
  • Los interceptores deben aplicarse por configuración, no manualmente por método
  • Los servicios deben resolverse a través de interfaces — Castle intercepta la interfaz, no la clase concreta

Paradigma de Aspectos

  • Implementar mínimo 2 interceptores para inquietudes transversales:
    • Logging automático — registrar entrada/salida de métodos
    • Validación o manejo de errores — captura centralizada

Programación Funcional

Aplicar estilo funcional sobre el dominio del sistema:

  • LINQ para consultas de datos: mínimo Where, Select y Aggregate
  • Funciones puras sin efectos secundarios
  • Uso de Func<> / Action<> como parámetros de alto orden
  • Al menos un tipo inmutable (record)

Programación Orientada a Eventos

Reactividad mediante eventos de C#:

  • Definir mínimo 2 eventos personalizados con EventArgs propios
  • Los eventos deben reflejar cambios de estado significativos del dominio
    Ejemplo: PedidoCreado, StockActualizado, PagoAprobado

Entregables

  • Repositorio GitHub público que contenga:
    • README con descripción del sistema y decisiones de diseño por paradigma
    • Diagrama de clases UML (Draw.io)
    • Proyecto .NET C# (con .gitignore para evitar archivos de build)
    • Commits que reflejen el trabajo de cada integrante
  • Demostración en clase de cada paradigma en funcionamiento

Criterios de evaluación

  • (15%) POO — Diseño de clases, relaciones y UML
  • (20%) Paradigma Orientado a Aspectos
  • (20%) Programación Funcional
  • (20%) Programación Orientado a Eventos
  • (15%) Principios SOLID
  • (10%) Repositorio de GitHub (estructura y documentación)

Recomendaciones

  • Elijan un dominio con comportamiento rico: pedidos, reservas, inventario, turnos médicos, etc.
  • El dominio de POO es la base — los otros paradigmas se aplican sobre él
  • Castle intercepta a través de interfaces — no necesitan métodos virtual; registren los servicios como su interfaz en el contenedor
  • Los eventos deben ser semánticamente significativos, no solo técnicos
  • Documenten claramente qué parte del código corresponde a cada paradigma

⚠️ Importante


El proyecto no será evaluado si:


  • No se entrega mediante un repositorio de GitHub público
  • El integrante no sustenta la entrega

No hay excepciones.