INSTRUCCIONES PARA EL ESTUDIANTE:
• Lea detenidamente todas las instrucciones y el enunciado del problema antes de comenzar a codificar.
• Este examen es individual. Cualquier intento de copia o plagio resultará en la anulación inmediata de la evaluación, de acuerdo con el reglamento de la
universidad.
• Tiene permitido el uso de su entorno de desarrollo Java (IDE) y la documentación oficial de Java. Está prohibido el uso de internet para buscar soluciones
directas al problema o comunicarse con otras personas.
• Se evaluará la correcta implementación de cada funcionalidad solicitada, la eficiencia y lógica de su código, la aplicación de los conceptos de programación
vistos en clase (uso de funciones, manejo de colecciones), la claridad, el estilo y la legibilidad del código (nombres de variables, indentación, comentarios
si son necesarios).
• Asegúrese de que su código compile y se ejecute sin errores en un entorno estándar de Java.
• La entrega se realizará a través de la plataforma virtual en el plazo establecido al finalizar el examen.
EJERCICIO PRÁCTICO: ANÁLISIS Y GESTIÓN BÁSICA DE PROYECTOS DE INVESTIGACIÓN UTILIZANDO FUNCIONES EN JAVA
Puntaje Total: 20 puntos
Contexto:
El Centro de Investigación de la universidad requiere un sistema básico para analizar y gestionar la información de los proyectos de investigación que se están
llevando a cabo. Cada proyecto se representa mediante sus atributos: identificador único, nombre, área de investigación, presupuesto asignado y estado actual.
Su tarea es desarrollar un módulo en Java que, utilizando funciones, permita realizar diversas operaciones sobre un conjunto de datos de proyectos.
Se le proporciona la siguiente clase base para representar a un Proyecto. NO DEBE MODIFICAR ESTA CLASE:
Java
public class Proyecto {
private String idProyecto;
private String nombreProyecto;
private String areaInvestigacion;
private double presupuestoAsignado;
private String estado;
public Proyecto(String idProyecto, String nombreProyecto, String areaInvestigacion, double presupuestoAsignado, String estado)
{
[Link] = idProyecto;
[Link] = nombreProyecto;
[Link] = areaInvestigacion;
[Link] = presupuestoAsignado;
[Link] = estado;
}
public String getIdProyecto() {
return idProyecto;
}
public String getNombreProyecto() {
return nombreProyecto;
}
public String getAreaInvestigacion() {
return areaInvestigacion;
}
public double getPresupuestoAsignado() {
return presupuestoAsignado;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
[Link] = estado;
}
@Override
public String toString() {
return "Proyecto{" +
"idProyecto='" + idProyecto + '\'' +
", nombreProyecto='" + nombreProyecto + '\'' +
", areaInvestigacion='" + areaInvestigacion + '\'' +
", presupuestoAsignado=" + presupuestoAsignado +
", estado='" + estado + '\'' +
'}';
}
}
Deberá implementar la lógica solicitada dentro de la clase GestionProyectos utilizando la siguiente estructura inicial. COMPLETE ÚNICAMENTE
LOS CUERPOS DE LAS FUNCIONES INDICADAS:
Java
import [Link];
import [Link];
import [Link]; // Importar Objects para usar [Link]
public class GestionProyectos {
// 1. Implementar función para calcular el presupuesto total de un área específica.
// Debe recibir el nombre del área (String) y una lista de proyectos (List<Proyecto>),
// retornando la suma de los presupuestos (double) de todos los proyectos en esa área.
public static double calcularPresupuestoPorArea(String area, List<Proyecto> proyectos) {
// Escriba su código aquí
return 0.0;
}
// 2. Implementar función para obtener una lista de proyectos según su estado.
// Debe recibir el estado deseado (String) y una lista de proyectos (List<Proyecto>),
// retornando una NUEVA lista (List<Proyecto>) con los proyectos que se encuentran en ese estado.
public static List<Proyecto> obtenerProyectosPorEstado(String estado, List<Proyecto> proyectos) {
// Escriba su código aquí
return new ArrayList<>();
}
// 3. Implementar función para actualizar el estado de un proyecto específico.
// Debe recibir el ID del proyecto (String), el nuevo estado (String) y la lista de proyectos (List<Proyecto>).
// Debe buscar el proyecto dentro de la lista por su ID y modificar su atributo 'estado'.
// Si el proyecto con el ID dado no existe en la lista, la función no debe realizar ninguna acción.
// Esta función NO retorna ningún valor (void).
public static void actualizarEstadoProyecto(String idProyecto, String nuevoEstado, List<Proyecto> proyectos) {
// Escriba su código aquí
}
// 4. Implementar función para listar los nombres de proyectos con un presupuesto igual o superior a un monto dado.
// Debe recibir el monto mínimo de presupuesto (double) y una lista de proyectos (List<Proyecto>),
// retornando una NUEVA lista (List<String>) que contenga únicamente los nombres de los proyectos que cumplan la condición.
public static List<String> listarProyectosPresupuestoElevado(double montoMinimo, List<Proyecto> proyectos) {
// Escriba su código aquí
return new ArrayList<>();
}
public static void main(String[] args) {
// Este método contiene datos de ejemplo y llamadas de prueba.
// Puede utilizarlo para verificar la funcionalidad de sus funciones, pero NO LO MODIFIQUE.
List<Proyecto> listaProyectos = new ArrayList<>();
[Link](new Proyecto("INV-001", "Análisis predictivo IA", "Inteligencia Artificial", 50000.00, "Activo"));
[Link](new Proyecto("BIO-002", "Cultivos resistentes a sequía", "Biotecnología", 75000.00, "Activo"));
[Link](new Proyecto("ENE-003", "Panel solar de alta eficiencia", "Energías Renovables", 90000.00,
"Finalizado"));
[Link](new Proyecto("IA-004", "Procesamiento Lenguaje Natural", "Inteligencia Artificial", 60000.00, "En
Pausa"));
[Link](new Proyecto("BIO-005", "Edición genética avanzada", "Biotecnología", 120000.00, "Activo"));
[Link](new Proyecto("IA-006", "Visión por Computadora Aplicada", "Inteligencia Artificial", 85000.00,
"Activo")); // Nuevo dato
// --- Pruebas Automáticas (No Modificar) ---
[Link]("--- Iniciando Pruebas Automáticas ---");
// Las pruebas específicas serán ejecutadas por el evaluador.
// Asegúrese de que sus funciones trabajen correctamente con los datos de ejemplo proporcionados y con otros posibles
datos.
[Link]("--- Pruebas Automáticas Finalizadas ---");
}
}
Tareas a Realizar:
Implemente el cuerpo de las cuatro funciones calcularPresupuestoPorArea, obtenerProyectosPorEstado, actualizarEstadoProyecto, y
listarProyectosPresupuestoElevado en la clase [Link] según las descripciones y firmas proporcionadas.
Entrega:
Deberá entregar únicamente el archivo [Link] a través de la plataforma virtual. El nombre del archivo no debe ser modificado.
Rúbrica de Evaluación:
Nivel No
Nivel Sobresaliente (4 Nivel Bueno (3 Nivel Deficiente (1
Criterio Nivel Regular (2 puntos) Cumple (0
puntos) puntos) punto)
puntos)
Implementa correctamente la La función no
Implementa La función intenta calcular el
lógica para sumar los La función no calcula está
correctamente la presupuesto, pero presenta
Función presupuestos de los proyectos correctamente el implementada o
lógica principal para errores lógicos en la iteración
calcularPresupuestoPorArea en un área específica, presupuesto por área o su no presenta
sumar presupuestos o suma condicional para
manejando casos límite (listas lógica es incorrecta. ningún intento
por área. algunos casos.
vacías, área no encontrada). válido.
Implementa correctamente el
Implementa
filtrado, retornando una nueva La función no
correctamente el
lista inmutable (si es posible con La función intenta filtrar, pero está
filtrado, devolviendo La función no filtra
Función los conocimientos vistos) con no incluye todos los proyectos implementada o
una nueva lista con la correctamente los proyectos
obtenerProyectosPorEstado todos y solo los proyectos del correctos, incluye incorrectos, no presenta
mayoría de los por estado.
estado dado, demostrando un o modifica la lista original. ningún intento
proyectos del estado
manejo adecuado de válido.
especificado.
colecciones.
Implementa
correctamente la La función intenta buscar y
Implementa correctamente la La función no
búsqueda y actualizar, pero presenta
búsqueda por ID y la La función no actualiza está
actualización del errores en la lógica de
actualización del estado del correctamente el estado del implementada o
Función actualizarEstadoProyecto proyecto correspondiente en la
estado para IDs búsqueda, en la asignación
proyecto, no busca por ID, o no presenta
existentes, con del nuevo estado, o no
lista, manejando el caso de ID no su lógica es incorrecta. ningún intento
posible manejo modifica el objeto correcto en
encontrado de forma robusta. válido.
incompleto del caso la lista.
no encontrado.
Implementa
Implementa correctamente el correctamente el La función no
La función intenta filtrar y listar La función no lista
filtrado por presupuesto y la filtrado por está
nombres, pero presenta correctamente los nombres
Función extracción/colección de los presupuesto y extrae implementada o
errores en la condición, en la de proyectos con
listarProyectosPresupuestoElevado nombres de los proyectos que los nombres en la no presenta
extracción de nombres, o presupuesto elevado o su
cumplen la condición en una lista mayoría de los casos ningún intento
incluye nombres incorrectos. lógica es incorrecta.
de Strings. que cumplen la válido.
condición.
El código es fácil de leer y El código presenta problemas
El código es legible, El código es difícil de
entender, con nombres de legibilidad (formato, El código no es
compila y ejecuta, con entender, presenta errores
descriptivos, indentación nombres), estilo inconsistente, entregado o no
Claridad, Estilo y Compilación correcta, y compila/ejecuta sin
posibles mejoras
o errores menores de
significativos de
se puede evaluar
menores en estilo, compilación/ejecución, o
errores. Demuestra una buena compilación/ejecución que no en absoluto.
nombres o formato. carece de estructura básica.
organización y modularización. impiden la evaluación.