{"id":1145,"date":"2016-08-16T11:57:05","date_gmt":"2016-08-16T17:57:05","guid":{"rendered":"http:\/\/agiltools.com\/blogsp\/?p=1145"},"modified":"2016-08-16T13:38:45","modified_gmt":"2016-08-16T19:38:45","slug":"class_vs_agent","status":"publish","type":"post","link":"http:\/\/agiltools.com\/blogsp\/class_vs_agent\/","title":{"rendered":"Cu\u00e1ndo usar Java Class y cu\u00e1ndo Agentes en AnyLogic"},"content":{"rendered":"<div id=\"dslc-theme-content\"><div id=\"dslc-theme-content-inner\"><p><img loading=\"lazy\" class=\"aligncenter  wp-image-1163\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/07\/class-vs-agent.png\" alt=\"class vs agent\" width=\"381\" height=\"180\" srcset=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/07\/class-vs-agent.png 516w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/07\/class-vs-agent-300x142.png 300w\" sizes=\"(max-width: 381px) 100vw, 381px\" \/><\/p>\n<p>Para aquellos familizarizados con la programaci\u00f3n, es com\u00fan la utilizaci\u00f3n de clases en la manipulaci\u00f3n de objetos. Una clase en t\u00e9rminos generales es una plantilla de c\u00f3digo donde se crean los objetos del programa. Los objetos son entidades personalizadas con atributos y operaciones espec\u00edficas (para entender con mayor detalle el concepto de clases y objetos sugiero leer los siguientes\u00a0art\u00edculos: <a href=\"http:\/\/aprenderaprogramar.com\/index.php?option=com_content&amp;view=article&amp;id=411:conceptos-de-objetos-y-clases-en-java-definicion-de-instancia-ejemplos-basicos-y-practicos-cu00619b&amp;catid=68:curso-aprender-programacion-java-desde-cero&amp;Itemid=188\">conceptos<\/a>\u00a0y\u00a0<a href=\"http:\/\/codehero.co\/java-desde-cero-clases-y-objectos\/\">ejemplo sencillo<\/a>\u00a0).<\/p>\n<p>Un concepto similar a una clase\u00a0es un agente. Los agentes son plantillas gen\u00e9ricas que\u00a0permiten capturar atributos (par\u00e1metros, variables, colecciones, etc.),\u00a0realizar calculos, gr\u00e1ficos, animaciones e incluso incrustar grupos de agentes adicionales. Todas estas funcionalidades son igualmente posibles en una clase Java, as\u00ed que porqu\u00e9 utilizar una u otra figura?<\/p>\n<p>Desde el punto de vista de complejidad y curva de aprendizaje, el agente es mejor opci\u00f3n ya que todas sus propiedades son creadas\u00a0con solo arrastrar el \u00edcono del elemento requerido. Por ejemplo, si se quiere agregar una variable, se arrastra el \u00edcono correspondiente, se cambia el tipo de valor (doble, string, etc.) y se re-nombra. Igual con colecciones, poblaciones, estad\u00edsticas, etc. (ver animaci\u00f3n).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1169\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/agent-ex.gif\" alt=\"agent ex\" width=\"720\" height=\"331\" \/><\/p>\n<p>La misma operaci\u00f3n en una clase requiere de\u00a0cierto conocimiento de programaci\u00f3n para poder definir correctamente las variables, tipo de acceso, funciones, etc. En otras palabras, todo debe hacerse mediante\u00a0c\u00f3digo (ver animaci\u00f3n).<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1168\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/class-ex.gif\" alt=\"class ex\" width=\"720\" height=\"320\" \/><\/p>\n<p>Una clase puede volverse confusa para un usuario si desde su dise\u00f1o\u00a0no ha sido bien estructurada. Una pr\u00e1ctica recomendada por muchos usuarios es utilizar agentes de manera general, incluso\u00a0convertir las clases Java en agentes (AnyLogic ofrece esa posibilidad como se observa en la imagen siguiente)<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-1165\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/convert_class.png\" alt=\"convert_class\" width=\"245\" height=\"241\" srcset=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/convert_class.png 1354w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/convert_class-300x295.png 300w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/convert_class-768x754.png 768w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/convert_class-1024x1006.png 1024w\" sizes=\"(max-width: 245px) 100vw, 245px\" \/><\/p>\n<p>Otro beneficio relacionado con el uso de agentes es las poblaciones. Grupos de agentes pueden ser almacenados y manipulados en poblaciones, las cuales tienen incluso funciones pre-definidas que permiten organizar, filtrar, etc. Las clases Java no pueden almacenarse igual y deben ser (si se requiere) a\u00f1adidas a\u00a0colecciones.<\/p>\n<h2>Cuando usar clases?<\/h2>\n<p>A\u00a0pesar de ser recomendados los agentes, dado que se pueden realizar las mismas actividades existen casos en los que es mejor utilizar clases, a continuaci\u00f3n algunos ejemplos:<\/p>\n<ol>\n<li><strong>Almacenamiento de informaci\u00f3n:<\/strong> En muchos modelos se requiere almacenar informaci\u00f3n\u00a0(local o global) que no requiere ser manipulada, solo creada y consultada. Un ejemplo muy com\u00fan es la creaci\u00f3n de \u00f3rdenes o pedidos, o la lista de pasajeros de un vuelo, o los registros de mediciones de un evento. La clase Java Pedido puede ser la lista de \u00edtems requeridos con cantidad. Se crea peri\u00f3dicamente y se env\u00eda a una gente para que aliste los productos en una bodega cuyo contenido es una lista con objetos (agentes o simplemente n\u00fameros).<\/li>\n<li><strong>C\u00e1lculos o Elementos que requieren ser transportados entre diferentes softwares:<\/strong> Cuando se trabaja en equipos de desarrollo, es com\u00fan que partes del mismo programa sean desarrollados por diferentes personas o equipos. Los c\u00e1lculos \u00a0son generalmente desarrollados por especialistas en el mismo o diferente software y luego enviados a los modeladores para ser incorporados. Las clases son ideales para esto pues son transportables y pueden ser validadas\u00a0en otros ambientes (tests funcionales y control de cambios).<\/li>\n<li><strong>Limitaci\u00f3n de agentes:<\/strong> Ciertas versiones de AnyLogic como la PLE tienen limitaciones\u00a0en cuanto al n\u00famero de agentes a utilizar y por ende si el modelo es complejo se requiere combinar clases con agentes (ver <a href=\"http:\/\/www.anylogic.com\/editions-comparison\">comparaci\u00f3n de ediciones<\/a>, secci\u00f3n tama\u00f1o del modelo).<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1166\" src=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/Editions.png\" alt=\"Editions\" width=\"1098\" height=\"727\" srcset=\"http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/Editions.png 1098w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/Editions-300x199.png 300w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/Editions-768x509.png 768w, http:\/\/agiltools.com\/blogsp\/wp-content\/uploads\/2016\/08\/Editions-1024x678.png 1024w\" sizes=\"(max-width: 1098px) 100vw, 1098px\" \/><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-1145\" class=\"share-twitter sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/class_vs_agent\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1145\" class=\"share-facebook sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/class_vs_agent\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Para aquellos familizarizados con la programaci\u00f3n, es com\u00fan la utilizaci\u00f3n de clases en la manipulaci\u00f3n de objetos. Una clase en t\u00e9rminos generales es una plantilla de c\u00f3digo donde se crean los objetos del programa. Los objetos son entidades personalizadas con atributos y operaciones espec\u00edficas (para entender con mayor detalle el concepto de clases y objetos [&hellip;]<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-1145\" class=\"share-twitter sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/class_vs_agent\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1145\" class=\"share-facebook sd-button share-icon\" href=\"http:\/\/agiltools.com\/blogsp\/class_vs_agent\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"spay_email":""},"categories":[2,7],"tags":[170,108,169],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1145"}],"collection":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/comments?post=1145"}],"version-history":[{"count":4,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1145\/revisions"}],"predecessor-version":[{"id":1172,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/posts\/1145\/revisions\/1172"}],"wp:attachment":[{"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/media?parent=1145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/categories?post=1145"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/agiltools.com\/blogsp\/wp-json\/wp\/v2\/tags?post=1145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}