[{"data":1,"prerenderedAt":846},["ShallowReactive",2],{"navigation_docs":3,"-actividades-act-06":412,"-actividades-act-06-surround":841},[4,18,43,118,160,200,231,320,346],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":42},"Entorno de desarrollo","i-codicon-edit-code","\u002Fide","2.ide",[24,28,33,37],{"title":25,"path":26,"stem":27,"icon":20},"¿Qué es un IDE?","\u002Fide\u002Fentorno","2.ide\u002F1.entorno",{"title":29,"path":30,"stem":31,"icon":32},"Estructura de un Proyecto","\u002Fide\u002Festructura","2.ide\u002F2.estructura","i-clarity-tree-view-line",{"title":34,"path":35,"stem":36,"icon":20},"La compilación en un IDE","\u002Fide\u002Fcompilacion","2.ide\u002F3.compilacion",{"title":38,"path":39,"stem":40,"icon":41},"Depuración de Código","\u002Fide\u002Fdepurar","2.ide\u002F4.depurar","i-lucide-bug",false,{"title":44,"icon":45,"path":46,"stem":47,"children":48,"page":42},"Clases y Objetos","i-catppuccin-java-class","\u002Fclases-objetos","3.clases-objetos",[49,53,57,62,66,70,74,78,83,88,92,96,101,106,110,114],{"title":50,"path":51,"stem":52},"Repaso previo a Clases y Objetos","\u002Fclases-objetos\u002Fpreview","3.clases-objetos\u002F00.preview",{"title":54,"path":55,"stem":56,"icon":45},"¿Qué es la Programación Orientada a Objetos (POO)?","\u002Fclases-objetos\u002Fpoo","3.clases-objetos\u002F01.poo",{"title":58,"path":59,"stem":60,"icon":61},"Diagramas de Clases y Objetos","\u002Fclases-objetos\u002Fdiagramas","3.clases-objetos\u002F02.diagramas","i-devicon-uml",{"title":63,"path":64,"stem":65,"icon":45},"Las Clases","\u002Fclases-objetos\u002Fclases","3.clases-objetos\u002F03.clases",{"title":67,"path":68,"stem":69,"icon":45},"Ámbito y Visibilidad","\u002Fclases-objetos\u002Fambito","3.clases-objetos\u002F04.ambito",{"title":71,"path":72,"stem":73,"icon":45},"Declaración e Instanciación de Objetos","\u002Fclases-objetos\u002Fobjetos","3.clases-objetos\u002F05.objetos",{"title":75,"path":76,"stem":77,"icon":45},"Clases Predefinidas en Java","\u002Fclases-objetos\u002Fpredefinidas","3.clases-objetos\u002F06.predefinidas",{"title":79,"path":80,"stem":81,"icon":82},"Paquetes en Java","\u002Fclases-objetos\u002Fpaquetes","3.clases-objetos\u002F07.paquetes","i-material-icon-theme-folder-java-open",{"title":84,"path":85,"stem":86,"icon":87},"Las Excepciones","\u002Fclases-objetos\u002Fexcepciones","3.clases-objetos\u002F08.excepciones","i-catppuccin-java-exception",{"title":89,"path":90,"stem":91,"icon":45},"La clase JOptionPane","\u002Fclases-objetos\u002Fjoptionpane","3.clases-objetos\u002F09.joptionpane",{"title":93,"path":94,"stem":95,"icon":45},"Constructores y Accesores","\u002Fclases-objetos\u002Fconstructores","3.clases-objetos\u002F10.constructores",{"title":97,"path":98,"stem":99,"icon":100},"Tipos Enumerados (Enums)","\u002Fclases-objetos\u002Fenumerados","3.clases-objetos\u002F11.enumerados","i-catppuccin-java-enum",{"title":102,"path":103,"stem":104,"icon":105},"Modificadores de acceso static y final","\u002Fclases-objetos\u002Fmodificadores","3.clases-objetos\u002F12.modificadores","i-mdi-chart-box",{"title":107,"path":108,"stem":109,"icon":105},"El casting en Java","\u002Fclases-objetos\u002Fcasting","3.clases-objetos\u002F13.casting",{"title":111,"path":112,"stem":113},"Las Expresiones Regulares","\u002Fclases-objetos\u002Fexpresiones-regulares","3.clases-objetos\u002F14.expresiones-regulares",{"title":115,"path":116,"stem":117,"icon":105},"Clases Genéricas en Java","\u002Fclases-objetos\u002Fclases-genericas","3.clases-objetos\u002F15.clases-genericas",{"title":119,"icon":120,"path":121,"stem":122,"children":123,"page":42},"Funciones (Métodos)","i-material-symbols-function","\u002Fmetodos","4.metodos",[124,128,132,136,140,144,148,152,156],{"title":125,"path":126,"stem":127},"Funciones Genéricas","\u002Fmetodos\u002Ffuncion-generica","4.metodos\u002F01.funcion-generica",{"title":129,"path":130,"stem":131},"Métodos de Instancia y de Clase","\u002Fmetodos\u002Finstancia-clase","4.metodos\u002F02.instancia-clase",{"title":133,"path":134,"stem":135},"Sobrecarga de Funciones","\u002Fmetodos\u002Fsobrecarga","4.metodos\u002F03.sobrecarga",{"title":137,"path":138,"stem":139},"Alcance de Variables y Métodos","\u002Fmetodos\u002Falcance","4.metodos\u002F04.alcance",{"title":141,"path":142,"stem":143},"Recursividad","\u002Fmetodos\u002Frecursividad","4.metodos\u002F05.recursividad",{"title":145,"path":146,"stem":147},"Puntero this","\u002Fmetodos\u002Fthis","4.metodos\u002F06.this",{"title":149,"path":150,"stem":151},"Los argumentos variables (varargs)","\u002Fmetodos\u002Fvarargs","4.metodos\u002F07.varargs",{"title":153,"path":154,"stem":155},"La clase Arrays","\u002Fmetodos\u002Farrays","4.metodos\u002F08.arrays",{"title":157,"path":158,"stem":159},"Predicados Simples y Compuestos en Java","\u002Fmetodos\u002Fpredicados","4.metodos\u002F09.predicados",{"title":161,"path":162,"stem":163,"children":164,"icon":199},"Herencia","\u002Fherencia","5.herencia\u002F01.index",[165,167,171,175,179,183,187,191,195],{"title":166,"path":162,"stem":163},"¿Qué es la herencia?",{"title":168,"path":169,"stem":170},"Sobreescritura de métodos y uso de `super`","\u002Fherencia\u002Fsobeescritura","5.herencia\u002F02.sobeescritura",{"title":172,"path":173,"stem":174},"Tipos de herencia","\u002Fherencia\u002Ftipos-herencia","5.herencia\u002F03.tipos-herencia",{"title":176,"path":177,"stem":178},"La clase Object en Java","\u002Fherencia\u002Fobject","5.herencia\u002F04.object",{"title":180,"path":181,"stem":182},"Polimorfismo","\u002Fherencia\u002Fpolimorfismo","5.herencia\u002F05.polimorfismo",{"title":184,"path":185,"stem":186},"Clases y Funciones Abstractas","\u002Fherencia\u002Fabstract","5.herencia\u002F06.abstract",{"title":188,"path":189,"stem":190},"Interfaces","\u002Fherencia\u002Finterfaces","5.herencia\u002F07.interfaces",{"title":192,"path":193,"stem":194},"Funciones e Interfaces","\u002Fherencia\u002Ffunciones-interfaces","5.herencia\u002F08.funciones-interfaces",{"title":196,"path":197,"stem":198},"Interfaces y Funciones Lambda","\u002Fherencia\u002Flambda-interface","5.herencia\u002F09.lambda-interface","i-material-symbols-heritage",{"title":201,"path":202,"stem":203,"children":204,"icon":199},"Arreglos","\u002Farreglos","6.arreglos\u002F01.index",[205,207,211,215,219,223,227],{"title":206,"path":202,"stem":203},"Los arreglos en Java",{"title":208,"path":209,"stem":210},"Los arreglos","\u002Farreglos\u002Farray","6.arreglos\u002F02.array",{"title":212,"path":213,"stem":214},"Matrices","\u002Farreglos\u002Fmatrices","6.arreglos\u002F03.matrices",{"title":216,"path":217,"stem":218},"Comparadores","\u002Farreglos\u002Fcomparator","6.arreglos\u002F04.comparator",{"title":220,"path":221,"stem":222},"Arreglos dinámicos: ArrayList","\u002Farreglos\u002Farraylist","6.arreglos\u002F05.arraylist",{"title":224,"path":225,"stem":226},"Arreglos Relacionales: HashMap","\u002Farreglos\u002Fhashmap","6.arreglos\u002F06.hashmap",{"title":228,"path":229,"stem":230},"La clase Stream en Java","\u002Farreglos\u002Fstream","6.arreglos\u002F07.stream",{"title":232,"icon":199,"path":233,"stem":234,"children":235,"page":42},"Archivos e Interfaz de Usuario","\u002Farchivos-ui","7.archivos-ui",[236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316],{"title":237,"path":238,"stem":239},"El paquete Swing","\u002Farchivos-ui\u002Fswing","7.archivos-ui\u002F01.swing",{"title":241,"path":242,"stem":243},"La clase JFrame y el JPanel","\u002Farchivos-ui\u002Fjpanel","7.archivos-ui\u002F02.jpanel",{"title":245,"path":246,"stem":247},"Los Layouts en Swing","\u002Farchivos-ui\u002Flayout","7.archivos-ui\u002F03.layout",{"title":249,"path":250,"stem":251},"Iniciando con Swing","\u002Farchivos-ui\u002Finiciando","7.archivos-ui\u002F04.iniciando",{"title":253,"path":254,"stem":255},"Las clases Color y Font en Swing","\u002Farchivos-ui\u002Fcolor-font","7.archivos-ui\u002F05.color-font",{"title":257,"path":258,"stem":259},"Etiquetas en Swing","\u002Farchivos-ui\u002Fetiquetas","7.archivos-ui\u002F06.etiquetas",{"title":261,"path":262,"stem":263},"Personalizando la apariencia de los componentes en Swing","\u002Farchivos-ui\u002Fpersonalizando","7.archivos-ui\u002F07.personalizando",{"title":265,"path":266,"stem":267},"Sobrescribiendo el método drawComponent() en Swing","\u002Farchivos-ui\u002Fdraw","7.archivos-ui\u002F08.draw",{"title":269,"path":270,"stem":271},"Manejando eventos en Swing","\u002Farchivos-ui\u002Feventos","7.archivos-ui\u002F09.eventos",{"title":273,"path":274,"stem":275},"Personalización de Componentes mediante la Extensión de Clases en Swing","\u002Farchivos-ui\u002Fextends-component","7.archivos-ui\u002F10.extends-component",{"title":277,"path":278,"stem":279},"Gradientes","\u002Farchivos-ui\u002Fgradientes","7.archivos-ui\u002F11.gradientes",{"title":281,"path":282,"stem":283},"Botones en Swing","\u002Farchivos-ui\u002Fbotones","7.archivos-ui\u002F12.botones",{"title":285,"path":286,"stem":287},"Los delegadores en Swing","\u002Farchivos-ui\u002Fdelegadores","7.archivos-ui\u002F13.delegadores",{"title":289,"path":290,"stem":291},"UI para nuestro RPG: Parte 1","\u002Farchivos-ui\u002Frpg-ui-1","7.archivos-ui\u002F14.rpg-ui-1",{"title":293,"path":294,"stem":295},"UI para nuestro RPG: Parte 2","\u002Farchivos-ui\u002Frpg-ui-2","7.archivos-ui\u002F15.rpg-ui-2",{"title":297,"path":298,"stem":299},"Los Streams Entrada y Salida","\u002Farchivos-ui\u002Fstreams","7.archivos-ui\u002F16.streams",{"title":301,"path":302,"stem":303},"Archivo tipo Objeto","\u002Farchivos-ui\u002Farchivo-objeto","7.archivos-ui\u002F17.archivo-objeto",{"title":305,"path":306,"stem":307},"UI para nuestro RPG: Parte 3","\u002Farchivos-ui\u002Frpg-ui-3","7.archivos-ui\u002F18.rpg-ui-3",{"title":309,"path":310,"stem":311},"UI para nuestro RPG: Parte 4","\u002Farchivos-ui\u002Frpg-ui-4","7.archivos-ui\u002F19.rpg-ui-4",{"title":313,"path":314,"stem":315},"UI para nuestro RPG: Parte 5","\u002Farchivos-ui\u002Frpg-ui-5","7.archivos-ui\u002F20.rpg-ui-5",{"title":317,"path":318,"stem":319},"UI para nuestro RPG: Parte 6","\u002Farchivos-ui\u002Frpg-ui-6","7.archivos-ui\u002F21.rpg-ui-6",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":42},"Ejemplos","i-check-circle","\u002Fejemplos","8.ejemplos",[326,330,334,338,342],{"title":327,"path":328,"stem":329,"icon":105},"Ejemplo 1: Validando entradas con JOptionPane","\u002Fejemplos\u002Fejemplo-01","8.ejemplos\u002F01.ejemplo-01",{"title":331,"path":332,"stem":333},"Ejemplo 02: Uso de clases genéricas en Java","\u002Fejemplos\u002Fejemplo-02","8.ejemplos\u002F02.ejemplo-02",{"title":335,"path":336,"stem":337},"Ejemplo 03: Uso de Enum, Excepciones en Java","\u002Fejemplos\u002Fejemplo-03","8.ejemplos\u002F03.ejemplo-03",{"title":339,"path":340,"stem":341},"Ejemplo 4: Clase con funciones genéricas de validación","\u002Fejemplos\u002Fejemplo-04","8.ejemplos\u002F04.ejemplo-04",{"title":343,"path":344,"stem":345},"Ejemplo 5: Sistema de Gestión de Empleados","\u002Fejemplos\u002Fejemplo-05","8.ejemplos\u002F05.ejemplo-05",{"title":347,"icon":322,"path":348,"stem":349,"children":350,"page":42},"Actividades","\u002Factividades","9.actividades",[351,355,360,364,368,372,376,380,384,388,392,396,400,404,408],{"title":352,"path":353,"stem":354,"icon":105},"Actividad 1: Infografía sobre el proceso de compilación","\u002Factividades\u002Fact-01","9.actividades\u002F01.act-01",{"title":356,"path":357,"stem":358,"icon":359},"Actividad 2: Modelando Diagramas de Clases UML","\u002Factividades\u002Fact-02","9.actividades\u002F02.act-02","i-material-icon-theme-uml",{"title":361,"path":362,"stem":363,"icon":45},"Actividad 3: Creando Clases y Objetos en Java","\u002Factividades\u002Fact-03","9.actividades\u002F03.act-03",{"title":365,"path":366,"stem":367},"Actividad 4: Validando entradas de datos","\u002Factividades\u002Fact-04","9.actividades\u002F04.act-04",{"title":369,"path":370,"stem":371,"icon":105},"Actividad 5: Implementando una clase genérica","\u002Factividades\u002Fact-05","9.actividades\u002F05.act-05",{"title":373,"path":374,"stem":375,"icon":105},"Actividad 6: Expandiendo InputValidator con Predicados y Function","\u002Factividades\u002Fact-06","9.actividades\u002F06.act-06",{"title":377,"path":378,"stem":379,"icon":105},"Actividad 7: Gestor de Biblioteca con InputValidator","\u002Factividades\u002Fact-07","9.actividades\u002F07.act-07",{"title":381,"path":382,"stem":383,"icon":105},"Actividad 8: Calculadora de Figuras Geométricas","\u002Factividades\u002Fact-08","9.actividades\u002F08.act-08",{"title":385,"path":386,"stem":387,"icon":105},"Actividad 9: gestión de una empresa agroalimentaria","\u002Factividades\u002Fact-09","9.actividades\u002F09.act-09",{"title":389,"path":390,"stem":391,"icon":105},"Actividad 10: Sistema de gestión de clínicas veterinarias","\u002Factividades\u002Fact-10","9.actividades\u002F10.act-10",{"title":393,"path":394,"stem":395},"Definición de Proyecto Evolutivo","\u002Factividades\u002Frpg","9.actividades\u002F11.rpg",{"title":397,"path":398,"stem":399},"Actividad 11: Creación de Personajes","\u002Factividades\u002Fact-11","9.actividades\u002F12.act-11",{"title":401,"path":402,"stem":403},"Actividad 12: El Inventario y los Objetos","\u002Factividades\u002Fact-12","9.actividades\u002F13.act-12",{"title":405,"path":406,"stem":407},"Actividad 13: El combate por turnos","\u002Factividades\u002Fact-13","9.actividades\u002F14.act-13",{"title":409,"path":410,"stem":411},"Actividad 14: Guardando y Cargando","\u002Factividades\u002Fact-14","9.actividades\u002F15.act-14",{"id":413,"title":373,"body":414,"description":834,"extension":835,"links":836,"meta":837,"navigation":838,"path":374,"seo":839,"stem":375,"__hash__":840},"docs\u002F9.actividades\u002F06.act-06.md",{"type":415,"value":416,"toc":828},"minimark",[417,422,431,435,441,445,780,790,794,797,824],[418,419,421],"h2",{"id":420},"objetivo","Objetivo",[423,424,425,426,430],"p",{},"El objetivo de esta actividad es expandir la clase ",[427,428,429],"code",{},"InputValidator"," para incluir funciones genéricas que utilicen predicados y funciones para validar entradas de usuario de manera más flexible. Aprenderás a combinar predicados y funciones para crear validaciones personalizadas y reutilizables.",[418,432,434],{"id":433},"descripción-del-problema","Descripción del Problema",[423,436,437,438,440],{},"Eres un desarrollador de software que ha creado una clase ",[427,439,429],{}," para validar diferentes tipos de entradas de usuario. Ahora, deseas expandir esta clase para incluir funciones genéricas que utilicen predicados y funciones para validar entradas de manera más flexible. Quieres que estas funciones permitan a los usuarios definir sus propias reglas de validación utilizando predicados y funciones, lo que hará que la clase sea más versátil y reutilizable.",[418,442,444],{"id":443},"instrucciones","Instrucciones",[446,447,448,518,556,563,758,767,774,777],"ol",{},[449,450,451,452,454,455,458,459],"li",{},"Abre la clase ",[427,453,429],{}," del ejemplo 4 y sobrecarga el método ",[427,456,457],{},"validateInput"," para aceptar un predicado adicional que se utilizará para validar la entrada del usuario. El nuevo método debe tener la siguiente firma:",[460,461,466],"pre",{"className":462,"code":463,"language":464,"meta":465,"style":465},"language-java shiki shiki-themes github-dark","public static \u003CT> T validateInput(String message, Class\u003CT> type, Predicate\u003CT> validator)\n","java","",[427,467,468],{"__ignoreMap":465},[469,470,473,477,480,483,487,490,493,496,499,502,504,506,509,511,513,515],"span",{"class":471,"line":472},"line",1,[469,474,476],{"class":475},"snl16","public",[469,478,479],{"class":475}," static",[469,481,482],{"class":475}," \u003C",[469,484,486],{"class":485},"s95oV","T",[469,488,489],{"class":475},">",[469,491,492],{"class":485}," T ",[469,494,457],{"class":495},"svObZ",[469,497,498],{"class":485},"(String message, Class",[469,500,501],{"class":475},"\u003C",[469,503,486],{"class":485},[469,505,489],{"class":475},[469,507,508],{"class":485}," type, Predicate",[469,510,501],{"class":475},[469,512,486],{"class":485},[469,514,489],{"class":475},[469,516,517],{"class":485}," validator)\n",[449,519,520,521,523,524,526,527],{},"Sobrecarga el método ",[427,522,457],{}," para aceptar ahora el mensaje y un arreglo de objetos de tipo ",[427,525,486],{}," que representen opciones válidas para la entrada del usuario. El nuevo método debe tener la siguiente firma:",[460,528,530],{"className":462,"code":529,"language":464,"meta":465,"style":465},"public static \u003CT> T validateInput(String message, T[] validOptions)\n",[427,531,532],{"__ignoreMap":465},[469,533,534,536,538,540,542,544,546,548,551,553],{"class":471,"line":472},[469,535,476],{"class":475},[469,537,479],{"class":475},[469,539,482],{"class":475},[469,541,486],{"class":485},[469,543,489],{"class":475},[469,545,492],{"class":485},[469,547,457],{"class":495},[469,549,550],{"class":485},"(String message, ",[469,552,486],{"class":475},[469,554,555],{"class":485},"[] validOptions)\n",[449,557,558,559,562],{},"Maneja adecuadamente las excepciones que puedan surgir durante la validación, asegurándote de mostrar mensajes de error claros y específicos utilizando los mensajes definidos en el ",[427,560,561],{},"Enum"," que crearás en el siguiente paso.",[449,564,565,566,568,569,572,573,575,576],{},"Crea un ",[427,567,561],{}," llamado ",[427,570,571],{},"Messages"," que contenga mensajes empleados en la clase ",[427,574,429],{}," para mejorar la legibilidad y mantenibilidad del código. Por ejemplo:",[460,577,579],{"className":462,"code":578,"language":464,"meta":465,"style":465},"public enum Messages {\n      \n   INVALID_INPUT(\"Entrada no válida. Por favor, ingrese un valor válido.\"),\n   EMPTY_FIELD(\"El campo no puede estar vacío. Por favor, ingrese un valor válido.\"),\n   UNSUPPORTED_TYPE(\"Tipo de dato no soportado: \"),\n   VALIDATION_ERROR_TITLE(\"Error de Validación\");\n\n   private final String message;\n\n   Messages(String message) {\n      this.message = message;\n   }\n          \n    public String getMessage() {\n       return message;\n   }\n}\n",[427,580,581,594,600,617,630,643,657,664,676,681,697,712,718,724,739,747,752],{"__ignoreMap":465},[469,582,583,585,588,591],{"class":471,"line":472},[469,584,476],{"class":475},[469,586,587],{"class":475}," enum",[469,589,590],{"class":495}," Messages",[469,592,593],{"class":485}," {\n",[469,595,597],{"class":471,"line":596},2,[469,598,599],{"class":485},"      \n",[469,601,603,607,610,614],{"class":471,"line":602},3,[469,604,606],{"class":605},"sDLfK","   INVALID_INPUT",[469,608,609],{"class":485},"(",[469,611,613],{"class":612},"sU2Wk","\"Entrada no válida. Por favor, ingrese un valor válido.\"",[469,615,616],{"class":485},"),\n",[469,618,620,623,625,628],{"class":471,"line":619},4,[469,621,622],{"class":605},"   EMPTY_FIELD",[469,624,609],{"class":485},[469,626,627],{"class":612},"\"El campo no puede estar vacío. Por favor, ingrese un valor válido.\"",[469,629,616],{"class":485},[469,631,633,636,638,641],{"class":471,"line":632},5,[469,634,635],{"class":605},"   UNSUPPORTED_TYPE",[469,637,609],{"class":485},[469,639,640],{"class":612},"\"Tipo de dato no soportado: \"",[469,642,616],{"class":485},[469,644,646,649,651,654],{"class":471,"line":645},6,[469,647,648],{"class":605},"   VALIDATION_ERROR_TITLE",[469,650,609],{"class":485},[469,652,653],{"class":612},"\"Error de Validación\"",[469,655,656],{"class":485},");\n",[469,658,660],{"class":471,"line":659},7,[469,661,663],{"emptyLinePlaceholder":662},true,"\n",[469,665,667,670,673],{"class":471,"line":666},8,[469,668,669],{"class":475},"   private",[469,671,672],{"class":475}," final",[469,674,675],{"class":485}," String message;\n",[469,677,679],{"class":471,"line":678},9,[469,680,663],{"emptyLinePlaceholder":662},[469,682,684,687,690,694],{"class":471,"line":683},10,[469,685,686],{"class":495},"   Messages",[469,688,689],{"class":485},"(String ",[469,691,693],{"class":692},"s9osk","message",[469,695,696],{"class":485},") {\n",[469,698,700,703,706,709],{"class":471,"line":699},11,[469,701,702],{"class":605},"      this",[469,704,705],{"class":485},".message ",[469,707,708],{"class":475},"=",[469,710,711],{"class":485}," message;\n",[469,713,715],{"class":471,"line":714},12,[469,716,717],{"class":485},"   }\n",[469,719,721],{"class":471,"line":720},13,[469,722,723],{"class":485},"          \n",[469,725,727,730,733,736],{"class":471,"line":726},14,[469,728,729],{"class":475},"    public",[469,731,732],{"class":485}," String ",[469,734,735],{"class":495},"getMessage",[469,737,738],{"class":485},"() {\n",[469,740,742,745],{"class":471,"line":741},15,[469,743,744],{"class":475},"       return",[469,746,711],{"class":485},[469,748,750],{"class":471,"line":749},16,[469,751,717],{"class":485},[469,753,755],{"class":471,"line":754},17,[469,756,757],{"class":485},"}\n",[449,759,760,761,763,764,766],{},"Modifica el método ",[427,762,457],{}," para utilizar los mensajes del ",[427,765,561],{}," en lugar de cadenas de texto hardcodeadas.",[449,768,769,770,773],{},"En el método ",[427,771,772],{},"main",", prueba las nuevas funciones de validación utilizando predicados personalizados y opciones válidas para diferentes tipos de datos. Asegúrate de tomar capturas de pantalla de la ejecución del programa mostrando el uso de las nuevas funciones de validación y los mensajes de error personalizados.",[449,775,776],{},"Agrega comentarios en el código para explicar la funcionalidad de cada parte y cómo se combinan los predicados y funciones para crear validaciones personalizadas.",[449,778,779],{},"Compila y ejecuta tu programa para asegurarte de que todas las funcionalidades funcionen correctamente.",[781,782,783,784,786,787,789],"note",{},"Al expandir la clase ",[427,785,429],{}," para incluir funciones genéricas que utilicen predicados y funciones, estarás mejorando significativamente la flexibilidad y reutilización de tu código. Los predicados permiten definir reglas de validación personalizadas de manera clara y concisa, mientras que el uso de un ",[427,788,561],{}," para los mensajes mejora la mantenibilidad del código al centralizar los mensajes de error en un solo lugar. Esta actividad te ayudará a comprender cómo combinar diferentes conceptos de programación funcional en Java para crear soluciones más robustas y adaptables.",[418,791,793],{"id":792},"entrega","Entrega",[423,795,796],{},"En un solo documento PDF, incluye:",[798,799,800,803,812,815],"ul",{},[449,801,802],{},"Portada con el título de la actividad, la lista de integrantes del equipo y el nombre del curso.",[449,804,805,806,808,809,811],{},"Código fuente de la clase ",[427,807,429],{}," con las funciones genéricas implementadas y el ",[427,810,561],{}," de mensajes debidamente documentados.",[449,813,814],{},"Capturas de pantalla de la ejecución del programa mostrando el uso de las nuevas funciones de validación con predicados personalizados y opciones válidas, así como los mensajes de error personalizados.",[449,816,817,818,820,821,823],{},"Una breve explicación de cómo el uso de predicados y funciones genéricas mejora la flexibilidad y reutilización del código en la clase ",[427,819,429],{},", y cómo el ",[427,822,561],{}," de mensajes contribuye a la mantenibilidad del código.",[825,826,827],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":465,"searchDepth":596,"depth":596,"links":829},[830,831,832,833],{"id":420,"depth":596,"text":421},{"id":433,"depth":596,"text":434},{"id":443,"depth":596,"text":444},{"id":792,"depth":596,"text":793},"En esta actividad, expandirás la clase `InputValidator` para incluir funciones genéricas que utilicen predicados y funciones para validar entradas de usuario de manera más flexible. Aprenderás a combinar predicados y funciones para crear validaciones personalizadas y reutilizables.","md",null,{"editButton":42},{"icon":105},{"title":373,"description":834},"7cT3JIty6vW7wfdSfm8K7CF2KmT9ZD0yjNsrr4l-eTQ",[842,844],{"title":369,"path":370,"stem":371,"description":843,"icon":105,"children":-1},"En esta actividad, aprenderás a implementar una clase genérica en Java. Las clases genéricas permiten crear clases que pueden trabajar con diferentes tipos de datos de manera flexible y segura, lo que es fundamental para escribir código reutilizable y mantenible.",{"title":377,"path":378,"stem":379,"description":845,"icon":105,"children":-1},"Desarrolla un gestor de biblioteca que permita a los usuarios agregar, eliminar y buscar libros utilizando la clase InputValidator para validar las entradas.",1779479577732]