{"id":22273503,"url":"https://github.com/dfleta/arnold-enum-type","last_synced_at":"2025-08-12T00:37:28.006Z","repository":{"id":94648011,"uuid":"472339759","full_name":"dfleta/arnold-enum-type","owner":"dfleta","description":"Arnold se está cociendo","archived":false,"fork":false,"pushed_at":"2024-05-03T23:30:59.000Z","size":963,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-30T14:44:39.558Z","etag":null,"topics":["assertj-assertions","enum","enumset","java","maven","tdd"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfleta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-21T13:02:44.000Z","updated_at":"2024-05-03T23:31:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"d0defadb-c37f-4b33-8c0d-b0ee66798c9a","html_url":"https://github.com/dfleta/arnold-enum-type","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2Farnold-enum-type","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2Farnold-enum-type/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2Farnold-enum-type/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfleta%2Farnold-enum-type/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfleta","download_url":"https://codeload.github.com/dfleta/arnold-enum-type/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245501802,"owners_count":20625855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assertj-assertions","enum","enumset","java","maven","tdd"],"created_at":"2024-12-03T13:12:55.301Z","updated_at":"2025-03-25T16:41:42.597Z","avatar_url":"https://github.com/dfleta.png","language":"Java","readme":"Enum Types: Arnold se está cociendo\n===================================\n\nEsta semana vamos a introducir un nuevo concepto de programación, los **tipos enumerados**. Son muy sencillos y no necesitan mucha explicación. Eso sí, son un ejemplo fantástico del **patrón singleton**, y resuelven muchos problemas en la vida real TM.\n\nRecomiendo leer el **capítulo 18 \"Enum Types\" del Libro _Beginning Java 8 Fundamentals_**. Se explican a través de un par de ejercicios que recomiendo ir codificando en vuestro editor favorito `IntelIJ throws FileNotSupportedException`\n\nAdemás, vamos a prácticar TDD:\n\n- He incluido los casos test que ha de pasar vuestro código.\n- He incluido el programa principal.\n  \nDe esta manera, nos aseguramos que aprendéis todo lo que es necesario saber sobre tipos enumerados, y aprendéis las **_fluent assertions_**, que harán vuestros casos test más optimos.\n\n## Ejercicio\n\nSe trata de calcular el peso de una persona en los distintos planetas de nuestro Sistema Solar[^1], al estilo de este sitio web:\n\nhttp://www.traducimos.cl/planet/\n\nEs importante evitar que os suceda lo de Arnold en Desafio Total[^2] cuando salió a dar un paseíto por la superficie marciana, estando de cuarentena como estábamos en marzo de 2019:\n\n[![vídeo Arnold al punto de cocción](./assets/arnold_boiling_plate.png \"video Arnold se está cociendo\")](https://www.youtube.com/watch?v=86scPKqWFvc)\n\n\nEl peso en otro planeta se lo preguntáis a vuestros compañeros que han estudiado Física en la universidad o bachiller (call @Arturo [@JoanNicolau](https://github.com/nicolaujoan) y cia). Si no se lo saben de memoria, aplicad este sencilla fórmula:\n\n$$ Peso \\ en \\ Superficie = tu \\ Masa \\times Gravedad \\ en \\ superficie $$\n\ndonde:\n\n$$ Gravedad \\ en \\ superficie = G \\times \\frac {Masa \\ del \\ planeta} {Radio \\ del \\ planeta \\ al \\ cuadrado} $$\n\ndonde: \n\n$$ G = 6.67300 \\ · e^{-11} \\frac {m^3}{kg \\ ·s }$$\n\ny \n\n$$ tu \\ masa = \\frac{tu \\ peso \\ en \\ la \\ Tierra} {gravedad \\ superficial \\ Tierra} $$\n\nLos valores de masa y radio de cada planeta (en $Kg$ y $m$ respectivamente) son:\n\n```java\nMERCURY (3.303e+23, 2.4397e6),     \nVENUS   (4.869e+24, 6.0518e6),     \nEARTH   (5.976e+24, 6.37814e6),     \nMARS    (6.421e+23, 3.3972e6),     \nJUPITER (1.9e+27,   7.1492e7),     \nSATURN  (5.688e+26, 6.0268e7),     \nURANUS  (8.686e+25, 2.5559e7),     \nNEPTUNE (1.024e+26, 2.4746e7);      \n```\n\nSi completas la función `main` para recoger argumentos desde línea de comandos, la salida del programa en consola podría ser esta, donde `175` es tu peso en la Tierra:\n\n$$ tu \\ masa = \\frac{tu \\ peso \\ en \\ la \\ Tierra}{gravedad \\ superficial \\ tierra} $$\n\n```sh\n$ java Planet 175 \nYour weight on MERCURY is 66.107583 \nYour weight on VENUS is 158.374842 \nYour weight on EARTH is 175.000000 \nYour weight on MARS is 66.279007 \nYour weight on JUPITER is 442.847567 \nYour weight on SATURN is 186.552719 \nYour weight on URANUS is 158.397260 \nYour weight on NEPTUNE is 199.207413\n```\n\n## Casos test - AssertJ Fluent Assertions\n\nEstos son los casos test que ha de satisfacer tu código: [/src/test/java/org/foobarspam/arnoldEnumType/test/ArnoldEnumTypeTest.java](./src/test/java/org/foobarspam/arnoldEnumType/test/ArnoldEnumTypeTest.java \"casos test\")\n\nUtilízalos para practicar TDD y que te guíen en el diseño del código. \n\nPara utilizar estos casos test, has de incluir en el `POM.xml` del proyecto Maven o en el fichero `build.gradle` una dependencia adecuada a la librería de **AssertJ**. Búscala en el [repo de Maven](https://mvnrepository.com/ \"maven repository\"):\n\n```xml\n\t\u003cdependency\u003e\n    \t\u003cgroupId\u003eorg.assertj\u003c/groupId\u003e\n    \t\u003cartifactId\u003eassertj-core\u003c/artifactId\u003e\n    \t\u003cversion\u003e[3.22.0,)\u003c/version\u003e\n    \t\u003cscope\u003etest\u003c/scope\u003e\n\t\u003c/dependency\u003e\n```\n\n¿Cómo funcionan las Fluent Assertions?: \n\n[AssertJ - fluent assertions java library](https://assertj.github.io/doc/)\n\n## API Enum Type\n\nEstas son las funciones de la API de los tipos enumerados. Asegúrate de que entiendes su comportamiento y el tipo de dato que devuelven.\n\n```java\n\t@Test\n\tpublic void PlanetaConstructorTest() {\n\t\t// me aseguro de que los metodos de la api\n\t\t// de los Enum Types se comportan como espero\n\t\tPlaneta planeta = Planeta.MERCURY;\n\t\tassertThat(planeta).isInstanceOf(Planeta.class);\n\t\tassertThat(planeta.ordinal()).isZero();\n\t\tassertThat(planeta.name()).isEqualToIgnoringCase(\"MERCURY\");\n\t\tassertThat(Planeta.valueOf(planeta.name())).isEqualTo(Planeta.MERCURY);\n\t\tassertThat(planeta.compareTo(Planeta.MERCURY)).isZero();\n\t\tassertThat(planeta.toString()).isEqualToIgnoringCase(\"MERCURY\");\n\t\tassertThat(planeta.equals(Planeta.MERCURY)).isTrue();\n\t\tassertThat(Planeta.values()[0]).isEqualTo(planeta);\n\t}\n```\n\n## Script principal - main\n\nPrograma la lógica para que, además de los casos test, satisfaga el script principal del programa: [ArnoldMain.java](./src/main/java/org/foobarspam/arnoldEnumType/main/ArnoldMain.java \"main App\")\n\n\n### Solución\n\nResuelto por mi: [Planeta.java](./src/main/java/org/foobarspam/arnoldEnumType/logica/Planeta.java \"Planeta.java\")\n\nResuelto por Oracle: [Enum Types, the Java Tutorials](https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html \"Enum type Java Tutorials\")\n\n\n------\n[^1]: ¿Y Plutón? ¿Dónde está Plutón?  \n\n[![_Pluto is not a planet! You can't kill the truth, father!_](./assets/pluto_is_a_planet.png)](https://www.youtube.com/watch?v=aIVOIaYxaTo \"video Rick \u0026 Morty Pluno is not a planet\")\n\n------\n[^2]: Existe una versión mucho más divertida, ingeniosa y edificante de la infame película Desafío Total en el capítulo 4 de la temporada 2 de Rick and Morty, titulado \"Total Rickall\". Eso sí, tiros y vísceras hay a partes iguales.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfleta%2Farnold-enum-type","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfleta%2Farnold-enum-type","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfleta%2Farnold-enum-type/lists"}