Universidad de Chile – Departamento de Ciencias de la Computación
Note
Este repositorio reúne ejemplos progresivos usados en el curso CC3002. No necesitas experiencia previa en Scala ni Git: aquí aprenderás paso a paso conceptos de Programación Orientada a Objetos (OOP), buenas prácticas de diseño, pruebas automatizadas, genéricos e introducción a Programación Funcional (FP).
- CC3002 – Código Complementario
Aprender a diseñar y programar usando OOP clásica en Scala 3, construyendo desde tipos y clases simples hasta patrones de diseño y técnicas básicas de FP.
- Tipado estático y primeras clases.
- Encapsulación, herencia y polimorfismo.
- Pruebas automatizadas (MUnit/JUnit).
- Abstracciones (traits / clases abstractas).
- Patrones de diseño fundamentales (Observer, State, Factory, Singleton, Visitor, etc.).
- Manejo de errores con excepciones.
- Genéricos (parametrización de tipos) y reutilización.
- Introducción a FP: inmutabilidad gradual, composición,
for-comprehensions, Option/Future simplificados.
- Scala 3.7.3 sobre SBT 1.11.x (build multi-módulo).
- JDK 17+ (probado con Azul JDK 25).
- Pruebas: MUnit (todos los módulos) y JUnit 5 (módulo
03-testing). - Formateo: Scalafmt, indentación significativa (sin llaves extensivas).
- Cada carpeta numerada (
01-...,02-..., etc.) es un subproyecto independiente. - El proyecto raíz compila y prueba todos simultáneamente.
- No incluye las diapositivas oficiales; sólo código de apoyo y ejercicios.
- Clases faltantes (12, 16) viven en: dcc-cc3002/clases-2025-2.
Tip
Puedes ejecutar cada módulo sin conocer toda Scala: sigue las instrucciones de este README.
No necesitas instalar todo antes de leer el código. Para ejecutar ejemplos locales:
- Java (JDK): versión 17 o superior.
- SBT: 1.11.x.
- IDE recomendado: IntelliJ IDEA + plugin Scala (o VS Code con Metals).
Verifica tus versiones (Terminal):
java -version
sbt --versionSi alguno falla, instala:
- JDK: https://adoptium.net o Azul.
- SBT: https://www.scala-sbt.org/download.html
Note
No usamos configuraciones especiales de variables de entorno. Solo necesitas JDK y SBT visibles en tu PATH.
- Haz clic en el botón verde Code en GitHub.
- Selecciona Download ZIP.
- Descomprime y abre la carpeta en IntelliJ / VS Code.
- Abre una terminal dentro de la carpeta y ejecuta:
sbt compile.
git clone https://github.com/r8vnhill/clases-memes.git
cd clases-memes
git switch <year>/<semester> # Ej: 2025/2 (Primavera 2025)Usa la rama correspondiente al semestre (por ej.,
2025/2= Primavera 2025). Si estás en otra rama podrías ver contenido desactualizado.
Para traer cambios nuevos del semestre:
git fetch origin
git switch <year>/<semester> # Ej: git switch 2025/2
git pull --ff-only origin <year>/<semester>--ff-only evita merges accidentales y mantiene el historial limpio.
Si hiciste cambios locales y aparece un mensaje de conflicto:
- Guarda tus archivos aparte.
- Restablece:
git reset --hard origin/<year>/<semester>(⚠️ borra cambios no guardados). - Vuelve a copiar tus modificaciones si las necesitas.
Para confirmar el nombre de la rama del semestre, lista ramas remotas:
git branch -r --list "origin/*/*"Pasos generales:
sbt compile # Compila todo
sbt "project forComprehensions" run # Ejecuta el runner por defecto del móduloListar todos los entry points detectados:
sbt "project forComprehensions" "show discoveredMainClasses"Ejecutar uno específico:
sbt "project forComprehensions" "runMain cl.uchile.dcc.forcomprehensions.basics.basicsRunner"Si no aparece ningún
@main, revisa que hayas compilado (sbt compile) y estés en la rama correcta.
sbt test # Todos los módulos
sbt "project testing" test # Solo módulo de pruebas
sbt "project testing" "testOnly *Calculator*" # PatrónMUnit se usa para la mayoría de ejemplos; JUnit 5 solo aparece en 03-testing para comparar estilos.
| Nº | Carpeta | Tema principal |
|---|---|---|
| 01 | static-typing | Tipado estático básico, valores y tipos |
| 02 | intro-oop | Primera mirada a clases, objetos y métodos |
| 03 | testing | Pruebas con MUnit/JUnit, aserciones y fixtures |
| 04 | programming-to-abstractions | Programar contra abstracciones (traits / interfaces) |
| 05 | inheritance | Herencia simple y clases abstractas |
| 06 | media-player-exercise | Ejercicio aplicado OOP (modelo reproductor) |
| 07 | overriding-overloading | Diferencias entre overriding y sobrecarga |
| 08 | encapsulation-and-liskov | Encapsulación y principio de sustitución (LSP) |
| 09 | double-dispatch | Doble despacho y resolución dinámica |
| 10 | exceptions | Manejo de excepciones, propagación controlada |
| 11 | polymorphism | Polimorfismo revisitado y refinado |
| 13 | design-patterns-1 | Observer, State y otros patrones introductorios |
| 14 | tamagotchi-exercise | Integración State + Observer en ejercicio Tamagotchi |
| 15 | design-patterns-2 | Factory, Singleton, Composite, Flyweight, Null Object |
| 17 | visitor | Patrón Visitor y doble despacho avanzado |
| 18 | expression-problem | Discusión OOP vs FP, extensibilidad y genéricos |
| 19 | intro-functional | Primeros pasos en FP: colecciones, funciones como valores |
| 20 | for-comprehensions | Traducción for ↔ map/flatMap/withFilter, Option/Future simplificados |
Clases 12 y 16: ver repositorio externo ya enlazado.
Genéricos: aparecen de forma gradual (parámetros de tipo) a partir de módulos medios para mostrar reutilización segura sin duplicar código.
Intro FP: módulos 18–20 introducen patrones funcionales básicos sin abandonar el enfoque OOP (composición, manejo de efectos simples, for-comprehensions).
- OOP clásica primero: evitamos al inicio características avanzadas de Scala (pattern matching extensivo,
enum, implicits/given, for-comprehensions complejos) para no saturar. - Código en inglés, comentarios en español: esto simula entornos reales manteniendo claridad didáctica.
- Genéricos: se introducen para mostrar cómo parametrizar tipos sin sacrificar legibilidad.
- FP progresiva: partimos de colecciones y funciones simples; luego
for-comprehensionscomo azúcar sobremap/flatMap/withFilter. - Patrones de diseño: se implementan versiones simplificadas con foco en entender el rol de cada patrón antes de optimizar.
- Ejemplos intencionalmente pequeños: favorecen lectura rápida sobre eficiencia.
Warning
El build.sbt incluye configuraciones avanzadas (scalacOptions, formato, IDE). No lo tomes como plantilla de producción.
Programa histórico: transcripción 2021 (puede estar desactualizado en algunos nombres de clases).
No se reconoce sbt: Asegura que instalaste SBT y reinicia la terminal. En Windows verifica que el ejecutable esté en PATH.
No veo mains al ejecutar show discoveredMainClasses: Compila primero (sbt compile) y confirma rama 2025/2.
Error de versión Java: Usa JDK 17+. Si tienes JDK 8 aparecerán errores de sintaxis Scala 3.
IntelliJ no indexa: Abre el proyecto raíz, espera la importación SBT y sincroniza. Si falla, borra .idea y reimporta.
Conflictos al actualizar la rama: Usa git pull --ff-only. Si ya hiciste commits locales no deseados, guarda tus archivos y resetea (git reset --hard origin/2025/2).
Este material se distribuye bajo CC BY 4.0. Texto completo: creativecommons.org/licenses/by/4.0.
Uso estrictamente educativo: algunas implementaciones se simplifican para destacar conceptos sobre rendimiento o robustez extrema.
¿Comentarios o mejoras? Abre un issue o discútelo en clase.