Skip to content

Ejercicios de programación funcional y orientada a objetos

📘 Programación funcional y orientada a objetos

Ejercicio 1: Filtrar y transformar estudiantes

  • Objetivo: Practicar filter() y map() con arrays de objetos.
  • Enunciado: Dado un array de objetos {nombre, edad, nota}, crea una función que devuelva los nombres de los estudiantes mayores de 18 años con nota ≥ 5, transformados a mayúsculas.
  • Conceptos clave: filter, map, funciones flecha, acceso a propiedades.
  • Nivel: ★☆☆
  • Resultado: const estudiantesValidos = transformarEstudiantes(data);

Ejercicio 2: Calcular medias con reduce

  • Objetivo: Usar reduce para agregar datos numéricos.
  • Enunciado: Dado un array {nombre: string, nota: number}, calcula la media por módulo, la nota total global y la mayor nota registrada.
  • Conceptos clave: reduce, acumuladores, objeto de retorno, funciones puras.
  • Nivel: ★★☆
  • Resultado:
  • Global: un objeto {total: number, max: number}
  • Por módulo: un array de objetos {nombre: string, media: number, max: number}

Ejercicio 3: Clase Estudiante con métodos

  • Objetivo: Introducir clases, constructor y métodos de instancia.
  • Enunciado: Crea una clase Estudiante con propiedades nombre y notas[]. Añade métodos: agregarNota(), getMedia(), estaAprobado().
  • Conceptos clave: class, constructor, this, métodos, validación básica.
  • Nivel: ★☆☆
  • Resultado: Instancias funcionales con new Estudiante(...) y llamadas a métodos.

Ejercicio 4: Encadenamiento funcional con objetos

  • Objetivo: Combinar clases y métodos funcionales.
  • Enunciado: Dado un array de Producto {id, nombre, precio, stock}, usa .map(), .filter() y .reduce() para:
  • Obtener productos > 100€
  • Calcular stock total
  • Encontrar el producto más barato
  • Conceptos clave: pipelines funcionales, encadenamiento, inmutabilidad implícita.
  • Nivel: ★★☆
  • Resultado: Tres resultados independientes generados con un solo array original.

Ejercicio 5: Colección de instancias + reducción funcional

  • Objetivo: Gestionar una lista de objetos de clase con herramientas funcionales.
  • Enunciado: Dado un array de Pelicula {titulo, ano, director}, usa .filter(), .map() y .reduce() para:
  • Filtrar películas después de 2000
  • Convertir a string "Título (Año)"
  • Encontrar el director con más películas en la lista
  • Conceptos clave: reduce con objetos, composición de funciones, groupById.
  • Nivel: ★★★
  • Resultado: {directoresCount: {}, ultimasPeliculas: string[]}

Ejercicio 6: Agrupación y estadísticas con reduce

  • Objetivo: Dominar reduce para agrupar y transformar.
  • Enunciado: Dado {categoria: string, articulos: [{nombre, precio}]}, usa .reduce() para agrupar por categoría, luego .map() para obtener el precio medio por categoría y .filter() para quedarte solo con las categorías cuya media supere 50€.
  • Conceptos clave: agrupación funcional, reducción anidada, inmutabilidad.
  • Nivel: ★★★★
  • Entregable: Array de objetos {categoria, media} cumpliendo el filtro.

Ejercicio 7: Proyecto integrador: Tienda virtual

  • Objetivo: Unir todo en un flujo realista.
  • Enunciado:
  • Crea la clase Producto y la clase Tienda que gestiona un array de productos.
  • La tienda debe tener métodos funcionales: aplicarDescuento(cantidad, porcentaje), obtenerVendidosFiltrados(), generarInforme().
  • El informe debe devolver: lista de productos con descuento aplicado, total de stock, y nombre del producto más vendido (simulado con un campo vendidos).
  • Conceptos clave: diseño orientado a objetos, funciones puras vs. efecto lateral, pipelines, documentación mínima.
  • Nivel: ★★★★
  • Resultado: Código modular + ejemplos de uso + salida por consola documentada.