C# para Unity · Sección 8

Interfaces, genéricos y contratos

Contratos por capacidad, interacción desacoplada, código reutilizable con seguridad de tipos y restricciones genéricas explícitas.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Conviene haber comprendido Colecciones para sistemas de juego.

02 / META OBSERVABLE

Al terminar deberías poder relacionar Interfaces con Genéricos y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 35 y 55 minutos para lectura, ejemplos, tres comprobaciones y cierre.

04 / PREPARA EL LABORATORIO

Instala Unity Hub, una versión LTS compatible y un IDE con integración para C#. Conserva un proyecto de laboratorio separado.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan Interfaces y Genéricos? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Diseñarás colaboraciones que dependan de capacidades y escribirás utilidades reutilizables sin renunciar a la comprobación de tipos.

Al terminar podrás
  • Una interfaz describe qué se puede hacer, no qué objeto es
  • Los genéricos conservan información que object perdería
  • Una dependencia explícita vuelve el código más verificable
01
Definir capacidades

Una interfaz describe qué se puede hacer, no qué objeto es

Una puerta, un cofre y una palanca pueden implementar IInteractuable sin compartir clase base. El jugador solo necesita el contrato. Las interfaces pequeñas evitan miembros vacíos y facilitan sustitutos en pruebas.

01

Nombra la capacidad desde el consumidor.

02

Mantén el contrato pequeño y coherente.

03

No expongas detalles que una interacción no necesita.

Comprueba lo aprendido · 01

¿Qué ventaja tiene depender de IInteractuable en lugar de Door?

Mostrar respuesta +

El consumidor acepta cualquier implementación válida, reduce condicionales por tipo y puede probarse con un sustituto sencillo.

02
Reutilizar con tipos

Los genéricos conservan información que object perdería

Un tipo o método genérico opera con distintas clases manteniendo la comprobación del compilador. Las restricciones where declaran capacidades necesarias y evitan conversiones frágiles.

01

T representa un tipo que se concreta al usar el código.

02

Una restricción documenta operaciones permitidas.

03

La generalización debe responder a usos reales, no anticipados.

Comprueba lo aprendido · 02

¿Qué impide la restricción where T : Component?

Mostrar respuesta +

Impide solicitar tipos que no pueden existir como componentes de un GameObject y permite usar operaciones definidas por Component.

03
Comprobar contratos

Una dependencia explícita vuelve el código más verificable

Si una clase recibe el contrato que necesita, no tiene que buscar globalmente una implementación. Puedes entregar una versión real en el juego y una controlada en una prueba. Esto prepara el camino para SOLID y patrones.

01

El consumidor declara su necesidad.

02

El punto de composición decide la implementación.

03

Las pruebas sustituyen detalles lentos o externos.

Comprueba lo aprendido · 03

¿Por qué GetComponent por todas partes puede ocultar dependencias?

Mostrar respuesta +

Porque la clase parece no necesitar nada hasta que se ejecuta en una escena concreta. Una referencia serializada o inyectada hace visible la colaboración y permite validarla temprano.

Resumen de la sección

Tu recorrido en tres ideas

  1. Una interfaz describe qué se puede hacer, no qué objeto es
  2. Los genéricos conservan información que object perdería
  3. Una dependencia explícita vuelve el código más verificable
CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Crear interfaces enormes con métodos que algunas clases no pueden cumplir.

ERROR 02

Generalizar antes de tener dos usos reales y terminar con parámetros de tipo sin propósito.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Crea un detector que interactúe con puerta, cofre y palanca mediante un contrato, más una utilidad genérica restringida a Component.

Mostrar pauta de corrección +
Una respuesta sólida:
  • El consumidor no pregunta por clases concretas.
  • La interfaz expresa una capacidad pequeña y coherente.
  • La restricción genérica permite solo operaciones válidas y el fallo informa contexto.