[{"data":1,"prerenderedAt":1479},["ShallowReactive",2],{"navigation_docs":3,"-actividades-act-08":298,"-actividades-act-08-surround":1475},[4,18,70,105,149,178,212,257],{"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,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":291,"body":300,"description":311,"extension":1469,"links":1470,"meta":1471,"navigation":1472,"path":292,"seo":1473,"stem":293,"__hash__":1474},"docs\u002F8.actividades\u002F08.act-08.md",{"type":301,"value":302,"toc":1460},"minimark",[303,308,312,316,362,366,548,694,845,1083,1261,1265,1295,1299,1314,1318,1357,1361,1444,1447,1450,1456],[304,305,307],"h2",{"id":306},"descripción-de-la-actividad","Descripción de la Actividad",[309,310,311],"p",{},"En esta actividad se implementará una simulación de un sistema de planificación Round Robin utilizando hilos en Java. Además, se creará una interfaz gráfica para visualizar el estado de los procesos en ejecución, los procesos en espera y el proceso actual. Esta actividad permitirá comprender mejor cómo funciona el algoritmo de planificación Round Robin y cómo se pueden utilizar hilos e interfaces gráficas para simular sistemas operativos.",[304,313,315],{"id":314},"requisitos","Requisitos",[317,318,319,328,334,337,340,343,346,349,352,359],"ol",{},[320,321,322,323,327],"li",{},"Implementar una clase ",[324,325,326],"code",{},"Process"," que represente un proceso con atributos como ID, tiempo de ejecución total, tiempo restante y estado (en ejecución, en espera, terminado).",[320,329,322,330,333],{},[324,331,332],{},"RoundRobinScheduler"," que gestione la planificación de los procesos utilizando el algoritmo Round Robin. Esta clase debe tener métodos para agregar procesos, ejecutar el scheduler y actualizar el estado de los procesos.",[320,335,336],{},"Crear una interfaz gráfica utilizando Java Swing para mostrar el estado de los procesos en ejecución, los procesos en espera y el proceso actual. La interfaz debe actualizarse en tiempo real a medida que los procesos cambian de estado.",[320,338,339],{},"Implementar la lógica para que el scheduler ejecute los procesos de acuerdo con el algoritmo Round Robin, asignando un tiempo de ejecución fijo (quantum) a cada proceso y cambiando su estado según corresponda.",[320,341,342],{},"Asegurarse de que la interfaz gráfica muestre claramente el proceso actual, los procesos en espera y los procesos terminados, y que se actualice correctamente a medida que el scheduler ejecuta los procesos.",[320,344,345],{},"Manejar adecuadamente las excepciones y asegurarse de que el programa no termine abruptamente.",[320,347,348],{},"Agregar la funcionalidad para que el usuario pueda agregar nuevos procesos a través de la interfaz gráfica, especificando el tiempo de ejecución total para cada proceso.",[320,350,351],{},"Implementar un botón para iniciar la simulación del scheduler y otro para detenerla, permitiendo al usuario controlar la ejecución de los procesos y por ende agregar nuevos procesos mientras la simulación está en ejecución.",[320,353,354,355,358],{},"Utilizar un ",[324,356,357],{},"Timer"," para actualizar la interfaz gráfica en tiempo real, mostrando el estado de los procesos a medida que se ejecutan y cambian de estado.",[320,360,361],{},"Asegurarse de que el programa sea modular y bien organizado, utilizando clases y métodos para separar la lógica del scheduler, la representación de los procesos y la interfaz gráfica.",[304,363,365],{"id":364},"código-base-de-ejemplo","Código base de ejemplo",[367,368,373],"pre",{"className":369,"code":370,"language":371,"meta":372,"style":372},"language-java shiki shiki-themes github-dark","public enum ProcessState {\n    RUNNING,\n    WAITING,\n    TERMINATED;\n\n    final String name;\n\n    ProcessState(String name) {\n       this.name = name;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public String toString() {\n        return name;\n    }\n}\n","java","",[324,374,375,395,405,413,422,429,438,443,459,474,480,485,500,508,513,518,530,537,542],{"__ignoreMap":372},[376,377,380,384,387,391],"span",{"class":378,"line":379},"line",1,[376,381,383],{"class":382},"snl16","public",[376,385,386],{"class":382}," enum",[376,388,390],{"class":389},"svObZ"," ProcessState",[376,392,394],{"class":393},"s95oV"," {\n",[376,396,398,402],{"class":378,"line":397},2,[376,399,401],{"class":400},"sDLfK","    RUNNING",[376,403,404],{"class":393},",\n",[376,406,408,411],{"class":378,"line":407},3,[376,409,410],{"class":400},"    WAITING",[376,412,404],{"class":393},[376,414,416,419],{"class":378,"line":415},4,[376,417,418],{"class":400},"    TERMINATED",[376,420,421],{"class":393},";\n",[376,423,425],{"class":378,"line":424},5,[376,426,428],{"emptyLinePlaceholder":427},true,"\n",[376,430,432,435],{"class":378,"line":431},6,[376,433,434],{"class":382},"    final",[376,436,437],{"class":393}," String name;\n",[376,439,441],{"class":378,"line":440},7,[376,442,428],{"emptyLinePlaceholder":427},[376,444,446,449,452,456],{"class":378,"line":445},8,[376,447,448],{"class":389},"    ProcessState",[376,450,451],{"class":393},"(String ",[376,453,455],{"class":454},"s9osk","name",[376,457,458],{"class":393},") {\n",[376,460,462,465,468,471],{"class":378,"line":461},9,[376,463,464],{"class":400},"       this",[376,466,467],{"class":393},".name ",[376,469,470],{"class":382},"=",[376,472,473],{"class":393}," name;\n",[376,475,477],{"class":378,"line":476},10,[376,478,479],{"class":393},"    }\n",[376,481,483],{"class":378,"line":482},11,[376,484,428],{"emptyLinePlaceholder":427},[376,486,488,491,494,497],{"class":378,"line":487},12,[376,489,490],{"class":382},"    public",[376,492,493],{"class":393}," String ",[376,495,496],{"class":389},"getName",[376,498,499],{"class":393},"() {\n",[376,501,503,506],{"class":378,"line":502},13,[376,504,505],{"class":382},"        return",[376,507,473],{"class":393},[376,509,511],{"class":378,"line":510},14,[376,512,479],{"class":393},[376,514,516],{"class":378,"line":515},15,[376,517,428],{"emptyLinePlaceholder":427},[376,519,521,523,525,528],{"class":378,"line":520},16,[376,522,490],{"class":382},[376,524,493],{"class":393},[376,526,527],{"class":389},"toString",[376,529,499],{"class":393},[376,531,533,535],{"class":378,"line":532},17,[376,534,505],{"class":382},[376,536,473],{"class":393},[376,538,540],{"class":378,"line":539},18,[376,541,479],{"class":393},[376,543,545],{"class":378,"line":544},19,[376,546,547],{"class":393},"}\n",[367,549,551],{"className":369,"code":550,"language":371,"meta":372,"style":372},"public class Process {\n    private int id;\n    private int totalExecutionTime;\n    private int remainingTime;\n    private ProcessState state;\n\n    public Process(int id, int totalExecutionTime) {\n        this.id = id;\n        this.totalExecutionTime = totalExecutionTime;\n        this.remainingTime = totalExecutionTime;\n        this.state = ProcessState.WAITING;\n    }\n\n    \u002F\u002F Getters y setters para los atributos\n}\n",[324,552,553,565,576,585,594,601,605,630,642,653,664,676,680,684,690],{"__ignoreMap":372},[376,554,555,557,560,563],{"class":378,"line":379},[376,556,383],{"class":382},[376,558,559],{"class":382}," class",[376,561,562],{"class":389}," Process",[376,564,394],{"class":393},[376,566,567,570,573],{"class":378,"line":397},[376,568,569],{"class":382},"    private",[376,571,572],{"class":382}," int",[376,574,575],{"class":393}," id;\n",[376,577,578,580,582],{"class":378,"line":407},[376,579,569],{"class":382},[376,581,572],{"class":382},[376,583,584],{"class":393}," totalExecutionTime;\n",[376,586,587,589,591],{"class":378,"line":415},[376,588,569],{"class":382},[376,590,572],{"class":382},[376,592,593],{"class":393}," remainingTime;\n",[376,595,596,598],{"class":378,"line":424},[376,597,569],{"class":382},[376,599,600],{"class":393}," ProcessState state;\n",[376,602,603],{"class":378,"line":431},[376,604,428],{"emptyLinePlaceholder":427},[376,606,607,609,611,614,617,620,623,625,628],{"class":378,"line":440},[376,608,490],{"class":382},[376,610,562],{"class":389},[376,612,613],{"class":393},"(",[376,615,616],{"class":382},"int",[376,618,619],{"class":454}," id",[376,621,622],{"class":393},", ",[376,624,616],{"class":382},[376,626,627],{"class":454}," totalExecutionTime",[376,629,458],{"class":393},[376,631,632,635,638,640],{"class":378,"line":445},[376,633,634],{"class":400},"        this",[376,636,637],{"class":393},".id ",[376,639,470],{"class":382},[376,641,575],{"class":393},[376,643,644,646,649,651],{"class":378,"line":461},[376,645,634],{"class":400},[376,647,648],{"class":393},".totalExecutionTime ",[376,650,470],{"class":382},[376,652,584],{"class":393},[376,654,655,657,660,662],{"class":378,"line":476},[376,656,634],{"class":400},[376,658,659],{"class":393},".remainingTime ",[376,661,470],{"class":382},[376,663,584],{"class":393},[376,665,666,668,671,673],{"class":378,"line":482},[376,667,634],{"class":400},[376,669,670],{"class":393},".state ",[376,672,470],{"class":382},[376,674,675],{"class":393}," ProcessState.WAITING;\n",[376,677,678],{"class":378,"line":487},[376,679,479],{"class":393},[376,681,682],{"class":378,"line":502},[376,683,428],{"emptyLinePlaceholder":427},[376,685,686],{"class":378,"line":510},[376,687,689],{"class":688},"sAwPA","    \u002F\u002F Getters y setters para los atributos\n",[376,691,692],{"class":378,"line":515},[376,693,547],{"class":393},[367,695,697],{"className":369,"code":696,"language":371,"meta":372,"style":372},"public class RoundRobinScheduler {\n    private List\u003CProcess> FCFSProcesses;\n    private int quantum;\n\n    public RoundRobinScheduler(int quantum) {\n        this.FCFSProcesses = new ArrayList\u003C>();\n        this.quantum = quantum;\n    }\n\n    public void addProcess(Process FCFSProcess) {\n        FCFSProcesses.add(FCFSProcess);\n    }\n\n    public void execute() {\n        \u002F\u002F Lógica para ejecutar los procesos utilizando el algoritmo Round Robin\n    }\n}\n",[324,698,699,710,722,731,735,750,765,776,780,784,802,813,817,821,832,837,841],{"__ignoreMap":372},[376,700,701,703,705,708],{"class":378,"line":379},[376,702,383],{"class":382},[376,704,559],{"class":382},[376,706,707],{"class":389}," RoundRobinScheduler",[376,709,394],{"class":393},[376,711,712,714,717,719],{"class":378,"line":397},[376,713,569],{"class":382},[376,715,716],{"class":393}," List\u003C",[376,718,326],{"class":382},[376,720,721],{"class":393},"> FCFSProcesses;\n",[376,723,724,726,728],{"class":378,"line":407},[376,725,569],{"class":382},[376,727,572],{"class":382},[376,729,730],{"class":393}," quantum;\n",[376,732,733],{"class":378,"line":415},[376,734,428],{"emptyLinePlaceholder":427},[376,736,737,739,741,743,745,748],{"class":378,"line":424},[376,738,490],{"class":382},[376,740,707],{"class":389},[376,742,613],{"class":393},[376,744,616],{"class":382},[376,746,747],{"class":454}," quantum",[376,749,458],{"class":393},[376,751,752,754,757,759,762],{"class":378,"line":431},[376,753,634],{"class":400},[376,755,756],{"class":393},".FCFSProcesses ",[376,758,470],{"class":382},[376,760,761],{"class":382}," new",[376,763,764],{"class":393}," ArrayList\u003C>();\n",[376,766,767,769,772,774],{"class":378,"line":440},[376,768,634],{"class":400},[376,770,771],{"class":393},".quantum ",[376,773,470],{"class":382},[376,775,730],{"class":393},[376,777,778],{"class":378,"line":445},[376,779,479],{"class":393},[376,781,782],{"class":378,"line":461},[376,783,428],{"emptyLinePlaceholder":427},[376,785,786,788,791,794,797,800],{"class":378,"line":476},[376,787,490],{"class":382},[376,789,790],{"class":382}," void",[376,792,793],{"class":389}," addProcess",[376,795,796],{"class":393},"(Process ",[376,798,799],{"class":454},"FCFSProcess",[376,801,458],{"class":393},[376,803,804,807,810],{"class":378,"line":482},[376,805,806],{"class":393},"        FCFSProcesses.",[376,808,809],{"class":389},"add",[376,811,812],{"class":393},"(FCFSProcess);\n",[376,814,815],{"class":378,"line":487},[376,816,479],{"class":393},[376,818,819],{"class":378,"line":502},[376,820,428],{"emptyLinePlaceholder":427},[376,822,823,825,827,830],{"class":378,"line":510},[376,824,490],{"class":382},[376,826,790],{"class":382},[376,828,829],{"class":389}," execute",[376,831,499],{"class":393},[376,833,834],{"class":378,"line":515},[376,835,836],{"class":688},"        \u002F\u002F Lógica para ejecutar los procesos utilizando el algoritmo Round Robin\n",[376,838,839],{"class":378,"line":520},[376,840,479],{"class":393},[376,842,843],{"class":378,"line":532},[376,844,547],{"class":393},[367,846,848],{"className":369,"code":847,"language":371,"meta":372,"style":372},"import javax.swing.*;\nimport java.awt.*;\n\npublic class SchedulerGUI extends JFrame {\n    private RoundRobinScheduler scheduler;\n\n    public SchedulerGUI(RoundRobinScheduler scheduler) {\n        this.scheduler = scheduler;\n        initUI();\n    }\n\n    private void initUI() {\n        setTitle(\"Round Robin Scheduler Simulation\");\n        setSize(400, 300);\n        setDefaultCloseOperation(EXIT_ON_CLOSE);\n        setLocationRelativeTo(null);\n        setResizable(false);\n        setVisible(true);\n    }\n\n    public void updateProcessStatus() {\n        \u002F\u002F Lógica para actualizar la interfaz gráfica con el estado de los procesos\n    }\n    \n    \u002F\u002F Métodos para personalizar componentes gráficos y manejar eventos de usuario\n}\n",[324,849,850,863,874,878,895,902,906,920,932,940,944,948,959,973,990,998,1010,1022,1034,1038,1043,1055,1061,1066,1072,1078],{"__ignoreMap":372},[376,851,852,855,858,861],{"class":378,"line":379},[376,853,854],{"class":382},"import",[376,856,857],{"class":393}," javax.swing.",[376,859,860],{"class":400},"*",[376,862,421],{"class":393},[376,864,865,867,870,872],{"class":378,"line":397},[376,866,854],{"class":382},[376,868,869],{"class":393}," java.awt.",[376,871,860],{"class":400},[376,873,421],{"class":393},[376,875,876],{"class":378,"line":407},[376,877,428],{"emptyLinePlaceholder":427},[376,879,880,882,884,887,890,893],{"class":378,"line":415},[376,881,383],{"class":382},[376,883,559],{"class":382},[376,885,886],{"class":389}," SchedulerGUI",[376,888,889],{"class":382}," extends",[376,891,892],{"class":389}," JFrame",[376,894,394],{"class":393},[376,896,897,899],{"class":378,"line":424},[376,898,569],{"class":382},[376,900,901],{"class":393}," RoundRobinScheduler scheduler;\n",[376,903,904],{"class":378,"line":431},[376,905,428],{"emptyLinePlaceholder":427},[376,907,908,910,912,915,918],{"class":378,"line":440},[376,909,490],{"class":382},[376,911,886],{"class":389},[376,913,914],{"class":393},"(RoundRobinScheduler ",[376,916,917],{"class":454},"scheduler",[376,919,458],{"class":393},[376,921,922,924,927,929],{"class":378,"line":445},[376,923,634],{"class":400},[376,925,926],{"class":393},".scheduler ",[376,928,470],{"class":382},[376,930,931],{"class":393}," scheduler;\n",[376,933,934,937],{"class":378,"line":461},[376,935,936],{"class":389},"        initUI",[376,938,939],{"class":393},"();\n",[376,941,942],{"class":378,"line":476},[376,943,479],{"class":393},[376,945,946],{"class":378,"line":482},[376,947,428],{"emptyLinePlaceholder":427},[376,949,950,952,954,957],{"class":378,"line":487},[376,951,569],{"class":382},[376,953,790],{"class":382},[376,955,956],{"class":389}," initUI",[376,958,499],{"class":393},[376,960,961,964,966,970],{"class":378,"line":502},[376,962,963],{"class":389},"        setTitle",[376,965,613],{"class":393},[376,967,969],{"class":968},"sU2Wk","\"Round Robin Scheduler Simulation\"",[376,971,972],{"class":393},");\n",[376,974,975,978,980,983,985,988],{"class":378,"line":510},[376,976,977],{"class":389},"        setSize",[376,979,613],{"class":393},[376,981,982],{"class":400},"400",[376,984,622],{"class":393},[376,986,987],{"class":400},"300",[376,989,972],{"class":393},[376,991,992,995],{"class":378,"line":515},[376,993,994],{"class":389},"        setDefaultCloseOperation",[376,996,997],{"class":393},"(EXIT_ON_CLOSE);\n",[376,999,1000,1003,1005,1008],{"class":378,"line":520},[376,1001,1002],{"class":389},"        setLocationRelativeTo",[376,1004,613],{"class":393},[376,1006,1007],{"class":400},"null",[376,1009,972],{"class":393},[376,1011,1012,1015,1017,1020],{"class":378,"line":532},[376,1013,1014],{"class":389},"        setResizable",[376,1016,613],{"class":393},[376,1018,1019],{"class":400},"false",[376,1021,972],{"class":393},[376,1023,1024,1027,1029,1032],{"class":378,"line":539},[376,1025,1026],{"class":389},"        setVisible",[376,1028,613],{"class":393},[376,1030,1031],{"class":400},"true",[376,1033,972],{"class":393},[376,1035,1036],{"class":378,"line":544},[376,1037,479],{"class":393},[376,1039,1041],{"class":378,"line":1040},20,[376,1042,428],{"emptyLinePlaceholder":427},[376,1044,1046,1048,1050,1053],{"class":378,"line":1045},21,[376,1047,490],{"class":382},[376,1049,790],{"class":382},[376,1051,1052],{"class":389}," updateProcessStatus",[376,1054,499],{"class":393},[376,1056,1058],{"class":378,"line":1057},22,[376,1059,1060],{"class":688},"        \u002F\u002F Lógica para actualizar la interfaz gráfica con el estado de los procesos\n",[376,1062,1064],{"class":378,"line":1063},23,[376,1065,479],{"class":393},[376,1067,1069],{"class":378,"line":1068},24,[376,1070,1071],{"class":393},"    \n",[376,1073,1075],{"class":378,"line":1074},25,[376,1076,1077],{"class":688},"    \u002F\u002F Métodos para personalizar componentes gráficos y manejar eventos de usuario\n",[376,1079,1081],{"class":378,"line":1080},26,[376,1082,547],{"class":393},[367,1084,1086],{"className":369,"code":1085,"language":371,"meta":372,"style":372},"void main() {\n    int quantum = 1000; \u002F\u002F Tiempo de ejecución fijo para cada proceso (en milisegundos)\n    RoundRobinScheduler scheduler = new RoundRobinScheduler(quantum);\n    SchedulerGUI gui = new SchedulerGUI(scheduler);\n\n    \u002F\u002F Agregar algunos procesos de ejemplo\n    scheduler.addProcess(new Process(1, 5000)); \u002F\u002F Proceso 1 con tiempo de ejecución total de 5 segundos\n    scheduler.addProcess(new Process(2, 3000)); \u002F\u002F Proceso 2 con tiempo de ejecución total de 3 segundos\n    scheduler.addProcess(new Process(3, 7000)); \u002F\u002F Proceso 3 con tiempo de ejecución total de 7 segundos\n\n    \u002F\u002F Iniciar la simulación del scheduler\n    scheduler.execute();\n}\n",[324,1087,1088,1098,1117,1131,1145,1149,1154,1185,1212,1239,1243,1248,1257],{"__ignoreMap":372},[376,1089,1090,1093,1096],{"class":378,"line":379},[376,1091,1092],{"class":382},"void",[376,1094,1095],{"class":389}," main",[376,1097,499],{"class":393},[376,1099,1100,1103,1106,1108,1111,1114],{"class":378,"line":397},[376,1101,1102],{"class":382},"    int",[376,1104,1105],{"class":393}," quantum ",[376,1107,470],{"class":382},[376,1109,1110],{"class":400}," 1000",[376,1112,1113],{"class":393},"; ",[376,1115,1116],{"class":688},"\u002F\u002F Tiempo de ejecución fijo para cada proceso (en milisegundos)\n",[376,1118,1119,1122,1124,1126,1128],{"class":378,"line":407},[376,1120,1121],{"class":393},"    RoundRobinScheduler scheduler ",[376,1123,470],{"class":382},[376,1125,761],{"class":382},[376,1127,707],{"class":389},[376,1129,1130],{"class":393},"(quantum);\n",[376,1132,1133,1136,1138,1140,1142],{"class":378,"line":415},[376,1134,1135],{"class":393},"    SchedulerGUI gui ",[376,1137,470],{"class":382},[376,1139,761],{"class":382},[376,1141,886],{"class":389},[376,1143,1144],{"class":393},"(scheduler);\n",[376,1146,1147],{"class":378,"line":424},[376,1148,428],{"emptyLinePlaceholder":427},[376,1150,1151],{"class":378,"line":431},[376,1152,1153],{"class":688},"    \u002F\u002F Agregar algunos procesos de ejemplo\n",[376,1155,1156,1159,1162,1164,1167,1169,1171,1174,1176,1179,1182],{"class":378,"line":440},[376,1157,1158],{"class":393},"    scheduler.",[376,1160,1161],{"class":389},"addProcess",[376,1163,613],{"class":393},[376,1165,1166],{"class":382},"new",[376,1168,562],{"class":389},[376,1170,613],{"class":393},[376,1172,1173],{"class":400},"1",[376,1175,622],{"class":393},[376,1177,1178],{"class":400},"5000",[376,1180,1181],{"class":393},")); ",[376,1183,1184],{"class":688},"\u002F\u002F Proceso 1 con tiempo de ejecución total de 5 segundos\n",[376,1186,1187,1189,1191,1193,1195,1197,1199,1202,1204,1207,1209],{"class":378,"line":445},[376,1188,1158],{"class":393},[376,1190,1161],{"class":389},[376,1192,613],{"class":393},[376,1194,1166],{"class":382},[376,1196,562],{"class":389},[376,1198,613],{"class":393},[376,1200,1201],{"class":400},"2",[376,1203,622],{"class":393},[376,1205,1206],{"class":400},"3000",[376,1208,1181],{"class":393},[376,1210,1211],{"class":688},"\u002F\u002F Proceso 2 con tiempo de ejecución total de 3 segundos\n",[376,1213,1214,1216,1218,1220,1222,1224,1226,1229,1231,1234,1236],{"class":378,"line":461},[376,1215,1158],{"class":393},[376,1217,1161],{"class":389},[376,1219,613],{"class":393},[376,1221,1166],{"class":382},[376,1223,562],{"class":389},[376,1225,613],{"class":393},[376,1227,1228],{"class":400},"3",[376,1230,622],{"class":393},[376,1232,1233],{"class":400},"7000",[376,1235,1181],{"class":393},[376,1237,1238],{"class":688},"\u002F\u002F Proceso 3 con tiempo de ejecución total de 7 segundos\n",[376,1240,1241],{"class":378,"line":476},[376,1242,428],{"emptyLinePlaceholder":427},[376,1244,1245],{"class":378,"line":482},[376,1246,1247],{"class":688},"    \u002F\u002F Iniciar la simulación del scheduler\n",[376,1249,1250,1252,1255],{"class":378,"line":487},[376,1251,1158],{"class":393},[376,1253,1254],{"class":389},"execute",[376,1256,939],{"class":393},[376,1258,1259],{"class":378,"line":502},[376,1260,547],{"class":393},[304,1262,1264],{"id":1263},"tareas-a-realizar","Tareas a Realizar",[317,1266,1267,1273,1280,1282,1285,1288,1292],{},[320,1268,1269,1270,1272],{},"Completar la implementación de la clase ",[324,1271,332],{}," para que ejecute los procesos de acuerdo con el algoritmo Round Robin, actualizando el estado de los procesos y manejando el tiempo de ejecución.",[320,1274,1275,1276,1279],{},"Implementar la lógica en la clase ",[324,1277,1278],{},"SchedulerGUI"," para mostrar el estado de los procesos en ejecución, los procesos en espera y el proceso actual, actualizando la interfaz gráfica en tiempo real a medida que el scheduler ejecuta los procesos.",[320,1281,348],{},[320,1283,1284],{},"Implementar los botones para iniciar y detener la simulación del scheduler, permitiendo al usuario controlar la ejecución de los procesos y agregar nuevos procesos mientras la simulación está en ejecución.",[320,1286,1287],{},"Asegurarse de que el programa maneje adecuadamente las excepciones y no termine abruptamente, especialmente al agregar nuevos procesos o al iniciar\u002Fdetener la simulación.",[320,1289,354,1290,358],{},[324,1291,357],{},[320,1293,1294],{},"Asegurarse de que el programa sea modular y bien organizado, utilizando clases y métodos para separar la lógica del scheduler, la representación de los procesos y la interfaz gráfica. Comentar cada parte del código para explicar su funcionamiento, especialmente la parte relacionada con la ejecución de los procesos y la actualización de la interfaz gráfica.",[304,1296,1298],{"id":1297},"recomendaciones","Recomendaciones",[1300,1301,1302,1305,1308,1311],"ul",{},[320,1303,1304],{},"Asegúrate de probar el programa con diferentes escenarios, agregando procesos con distintos tiempos de ejecución y observando cómo el scheduler maneja la planificación de los procesos.",[320,1306,1307],{},"Considera agregar funcionalidades adicionales, como la posibilidad de eliminar procesos o modificar el tiempo de ejecución de los procesos existentes a través de la interfaz gráfica.",[320,1309,1310],{},"Documenta tu código utilizando JavaDoc para proporcionar una descripción clara de cada clase, método y atributo, explicando su propósito y funcionamiento. Esto facilitará la comprensión del código y su mantenimiento a largo plazo.",[320,1312,1313],{},"Recuerda que la clave para una buena simulación es la claridad en la representación de los procesos y su estado, así como la correcta implementación del algoritmo de planificación Round Robin. Asegúrate de que la interfaz gráfica sea intuitiva y fácil de usar para que los usuarios puedan interactuar con ella sin dificultades.",[304,1315,1317],{"id":1316},"entrega","Entrega",[1300,1319,1320,1323],{},[320,1321,1322],{},"El código fuente completo de la simulación, incluyendo todas las clases y la interfaz gráfica.",[320,1324,1325,1326],{},"Un documento PDF que contenga:\n",[1300,1327,1328,1331,1334,1337],{},[320,1329,1330],{},"Portada con el nombre de los integrantes del equipo, nombre de la actividad y fecha de entrega.",[320,1332,1333],{},"Descripción detallada de la implementación, explicando cómo se ha implementado el algoritmo Round Robin, cómo se ha diseñado la interfaz gráfica y cómo se han manejado las interacciones del usuario.",[320,1335,1336],{},"Capturas de pantalla de la interfaz gráfica en diferentes estados (procesos en ejecución, procesos en espera, proceso actual) para evidenciar la correcta ejecución del programa.",[320,1338,1339,1340],{},"Respuestas a las siguientes preguntas:\n",[1300,1341,1342,1348,1351,1354],{},[320,1343,1344,1345,1347],{},"¿Cómo se implementó el algoritmo de planificación Round Robin en la clase ",[324,1346,332],{},"?",[320,1349,1350],{},"¿Cómo se actualiza la interfaz gráfica en tiempo real para reflejar el estado de los procesos?",[320,1352,1353],{},"¿Qué desafíos se enfrentaron al implementar la simulación y cómo se resolvieron?",[320,1355,1356],{},"¿Qué funcionalidades adicionales se podrían agregar a la simulación para mejorarla?",[304,1358,1360],{"id":1359},"lista-de-cotejo-para-evaluación","Lista de cotejo para evaluación",[1362,1363,1364,1377],"table",{},[1365,1366,1367],"thead",{},[1368,1369,1370,1374],"tr",{},[1371,1372,1373],"th",{},"Criterio",[1371,1375,1376],{},"Puntos",[1378,1379,1380,1391,1398,1406,1413,1420,1430,1437],"tbody",{},[1368,1381,1382,1388],{},[1383,1384,1385,1386],"td",{},"Implementación correcta del algoritmo Round Robin en la clase ",[324,1387,332],{},[1383,1389,1390],{},"20",[1368,1392,1393,1396],{},[1383,1394,1395],{},"Diseño y funcionalidad de la interfaz gráfica para mostrar el estado de los procesos",[1383,1397,1390],{},[1368,1399,1400,1403],{},[1383,1401,1402],{},"Funcionalidad para agregar nuevos procesos a través de la interfaz gráfica",[1383,1404,1405],{},"10",[1368,1407,1408,1411],{},[1383,1409,1410],{},"Funcionalidad para iniciar y detener la simulación del scheduler",[1383,1412,1405],{},[1368,1414,1415,1418],{},[1383,1416,1417],{},"Manejo adecuado de excepciones y estabilidad del programa",[1383,1419,1405],{},[1368,1421,1422,1428],{},[1383,1423,1424,1425,1427],{},"Uso de ",[324,1426,357],{}," para actualizar la interfaz gráfica en tiempo real",[1383,1429,1405],{},[1368,1431,1432,1435],{},[1383,1433,1434],{},"Documentación clara y detallada del código utilizando JavaDoc",[1383,1436,1405],{},[1368,1438,1439,1442],{},[1383,1440,1441],{},"Presentación en clase explicando la implementación y resultados obtenidos",[1383,1443,1405],{},[309,1445,1446],{},"Para efectos de la entrega, se realizará una presentación en clase donde cada equipo explicará su implementación, las decisiones tomadas y los resultados obtenidos. Se evaluará la claridad de la explicación, la calidad del código y la capacidad de cada uno de los miembros del equipo para responder preguntas relacionadas con la actividad.",[309,1448,1449],{},"Recuerda que la presentación debe ser clara y concisa, enfocándose en los aspectos más relevantes de la implementación y los resultados obtenidos.",[309,1451,1452],{},[1453,1454,1455],"strong",{},"Es importante recalcar que la presentación es una parte fundamental de la evaluación y requisito para la entrega de la actividad, ya que en caso de no presentarse, el equipo no podrá ser evaluado y, por lo tanto, se considerará como no entregada la actividad, independientemente de la calidad del código o la documentación presentada.",[1457,1458,1459],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}",{"title":372,"searchDepth":397,"depth":397,"links":1461},[1462,1463,1464,1465,1466,1467,1468],{"id":306,"depth":397,"text":307},{"id":314,"depth":397,"text":315},{"id":364,"depth":397,"text":365},{"id":1263,"depth":397,"text":1264},{"id":1297,"depth":397,"text":1298},{"id":1316,"depth":397,"text":1317},{"id":1359,"depth":397,"text":1360},"md",null,{"editButton":104},{"icon":83},{"title":291,"description":311},"a4j6pmtvVoO8xgVcXhdvtqzr6ORYXSi_HMAL1aIAwEk",[1476,1478],{"title":287,"path":288,"stem":289,"description":1477,"icon":83,"children":-1},"En esta actividad, simularás un sistema de retiro bancario donde múltiples clientes (hilos) intentan retirar dinero de una cuenta compartida. Deberás implementar la sincronización adecuada para evitar condiciones de carrera y garantizar que el saldo de la cuenta se actualice correctamente.",{"title":295,"path":296,"stem":297,"description":372,"icon":83,"children":-1},1775101377683]