Fecha y hora actual: Jueves 17 Ene 2019 05:08
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.30 - Enumeraciones, Java.

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.30 - Enumeraciones, Java.

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Martes 16 Jun 2009 09:33

Título del mensaje: Curso VB .NET - Tema 1.30 - Enumeraciones, Java.

Responder citando

Curso de programación en .NET - Tema 1.30 - Enumeraciones, Java.


1. Enumeraciones, Java.
1.1 Objetivos del tema.

Ilustrar el uso de las enumeraciones en Java.

1.2 Introducción.
El uso de las enumeraciones en Java es algo rustico, pero no por eso dejan de ser necesarias, prácticas o como se desee calificar.
Su utilización ahorrará un sin fin de posibles errores de esos tontos en programación y que sin embargo localizarlos a veces lleva su tiempo.

1.3 Creación.
La sintaxis es la que sigue:
Código:
public enum OtraMoneda { Euro, Dolar, Libra, Yen};


Otra forma de crear en Java una enumeración está basada en el uso de una clase.
Dispone de la ventaja de poder asignar los valores que deseemos.
Código:
class EnumMonedas
{
   // constructor privado, así la clase no puede ser instanciable
   private EnumMonedas()
  {
  }
   
  public static final int Euro = 1;
   public static final int Dolar = 2;
   public static final int Libra = 3;
   public static final int Yen = 4;
}

"Static" porque su valor no cambia a lo largo del programa, es una descripción no una variable o una estructura de datos.
Final" porque solo debe de existir una instancia de la misma.

1.4 Utilización.
Para el primer sistema podemos implementar de esta forma su uso.
Código:
package tema_28;
public class Main
{
  public enum UnidadMedida { Kilometros, MillasTerrestres, MillasMarinas};
  private static double Conversion(double Distancia, UnidadMedida Nueva)
  {
     double result = 0;
     if (Nueva == UnidadMedida.MillasMarinas)
     {
        result = Distancia / 1.8;
     }
     else if (Nueva == UnidadMedida.MillasTerrestres)
     {
        result = Distancia / 1.6;
     }
     return result;
   }
  public static void main(String args[])
  {
     System.out.println(Conversion(1234.0,UnidadMedida.MillasMarinas ));
  }
}


La utilización para el segundo formato se puede apreciar en este procedimiento:
Código:
package tema_28;
public class Main
{
  // imprimir la moneda elegida
  private static void VisualMoneda(int cual)
  {
     if (cual == EnumMonedas.Dolar)
     {
        System.out.println("Dolar");
     }
        else if (cual == EnumMonedas.Euro)
        {
           System.out.println("Euro");
        }
           else if (cual == EnumMonedas.Libra)
           {
              System.out.println("Libra");
           }
              else if (cual == EnumMonedas.Yen)
              {
                 System.out.println("Yen");
              }
                 else
                 {
                    System.out.println("Valor incorrecto");
                 }
  }
  public static void main(String args[])
  {
     VisualMoneda(EnumMonedas.Dolar);
     VisualMoneda(23);
  }
}


En un uso adecuado de las enumeraciones, está parte de código es innecesaria,
Código:
else
{
   System.out.println("Valor incorrecto");
}


y su utilización solo dependerá del tipo de código escrito, ya que si la llamada siempre es del formato
Código:
VisualMoneda(EnumMonedas.Dolar);


Es imposible que se cometa un error, pero sin embargo si es del estilo:
Código:
VisualMoneda(25);


Entonces se convierte en imprescindible.
Si comparamos los dos sistemas veremos que la diferencia está en el tipo de dato que se recibe en el procedimiento.
Código:
private static double Conversion(double Distancia, UnidadMedida Nueva)


En el primero el dato recibido es del tipo de la enumeración.
Código:
private static void VisualMoneda(int cual)


Entero para el segundo.
En el interior del código, no hay diferencia en el tratamiento, pero sin embargo es vital el uso que se hace en el primer caso, que impide recibir valores erróneos.

Otra utilización es en la descripción de datos para una clase.
Veamos el ejemplo.
Código:
package tema_28;
public class Main
{
  public enum Cursos { Primero, Segundo, Tercero, Cuarto};
  public enum Sexo { Femenino, Masculino };
  private static class Alumnos
  {
     private Cursos curso;
     private Sexo sexo;
     public Alumnos(Cursos curso, Sexo sexo)
     {
        this.curso = curso;
        this.sexo = sexo;
     }
  }
 
  public static void main(String args[])
  {
     Alumnos Alumno = new Alumnos(Cursos.Primero, Sexo.Femenino);
     System.out.println (Alumno.curso);
     System.out.println (Alumno.sexo);
  }
}


El resultado de la ejecución sería:
Código:
init:
deps-jar:
Compiling 1 source file to
compile:
run:
Primero
Femenino
BUILD SUCCESSFUL (total time: 2 seconds)


1.5 Recorrido.
Para recorrer la enumeración Cursos podemos ejecutar lo siguiente.
Código:
for(Cursos curso: Cursos.values())
{
   System.out.println("Código " + curso.ordinal());
   System.out.println("Denominación " + curso.toString() );
}


Que da como resultado:
Código:
init:
deps-jar:
Warning: tema_28\Main.java modified in the future.
Compiling 1 source file to
compile:
run:
Código 0
Denominación Primero
Código 1
Denominación Segundo
Código 2
Denominación Tercero
Código 3
Denominación Cuarto
BUILD SUCCESSFUL (total time: 2 seconds)


1.6 Una versión distinta.
Mediante este sistema podemos asignar el valor que deseemos a cada elemento de la enumeración.
Código:
public enum Meses
{
  Ene(1,"Enero"), Feb(2,"Febrero"), Mar(3,"Marzo"),
  Abr(4,"Abril"), May(5,"Mayo"), Jun(6,"Junio"),
  Jul(7,"Julio"), Ago(8,"Agosto"), Sep(9,"Septiembre"),
  Oct(10,"Octubre"), Nov(11,"Noviembre"), Dic(12,"Diciembre");
  private int Codigo;
  private String Nombre;
 
  Meses(int Cod, String Nomb)
  {
     Codigo=Cod;
     Nombre=Nomb;
  }
}


Esta es otra versión de una enumeración.
Es algo más compleja, pero vamos a desmenuzarla.
Código:
Ene(1,"Enero"), Feb(2,"Febrero"), Mar(3,"Marzo"),
Abr(4,"Abril"), May(5,"Mayo"), Jun(6,"Junio"),
Jul(7,"Julio"), Ago(8,"Agosto"), Sep(9,"Septiembre"),
Oct(10,"Octubre"), Nov(11,"Noviembre"), Dic(12,"Diciembre");


El contenido de la enumeración, no se puede cambiar de sitio, porque la exige para conocer el contenido y así poder interpretar la redefinición, si queremos llamarlo así,
Código:
Meses(int Cod, String Nomb)
{
   Codigo = Cod;
   Nombre = Nomb;
}


que le corresponde al contenido, o subcontenido de cada elemento de la enumeración.
Código:
Ene (1,"Enero")


La definición de
Código:
Meses(int Cod, String Nomb)


Ha de coincidir con el tipo de dato que hay en la enumeración.
Código:
Ene (entero, “string”)


La enumeración en realidad es
Código:
Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic
private int Codigo;
private String Nombre;


Son dos elementos de la enumeración más, a través de los que después se puede obtener el valor desglosado de la enumeración.
Código:
1, Enero


Su utilización podría quedar así:
Código:
for (Meses Mes: Meses.values())
{
   System.out.println("Mes " + Mes.Codigo +
   " nombre " + Mes.Nombre +
   " identificador " + Mes);
}


Siendo este el resultado.
Código:
init:
deps-jar:
Warning: tema_28\Main.java modified in the future.
Compiling 1 source file to
compile:
run:
Mes 1 nombre Enero identificador Ene
Mes 2 nombre Febrero identificador Feb
.. / ..
Mes 11 nombre Noviembre identificador Nov
Mes 12 nombre Diciembre identificador Dic
BUILD SUCCESSFUL (total time: 1 second)


1.7 Conclusiones.
El uso de una enumeración se convierte en imprescindible si se desea un programa ordenado y claro.
No tiene sentido el uso de valores enteros en un programa, cuando se pueden sustituir por descripciones, que siempre reducirá el número de posibles errores.

1.8 Ejercicios propuestos.
1. Declarar una enumeración para los posibles valores del estado de un semáforo.
2. Declarar una enumeración para los posibles valores de seguridad en los accesos que pueda tener una persona las distintas zonas de un complejo con varios niveles de seguridad.
3. Realizar la carga de los valores de una de las enumeraciones anteriores y visualizarlas por pantalla.

1.9 Solución a los ejercicios propuestos.
1. Declarar una enumeración para los posibles valores del estado de un semáforo.
Código:
package tema_28;
public enum Semaforo
{
   Abierto, Cambiando, Cerrado
}


2. Declarar una enumeración para los posibles valores de seguridad en los accesos que pueda tener una persona las distintas zonas de un complejo con varios niveles de seguridad.
Código:
class NivelSeguridad
{
   // constructor privado, así la clase no puede ser instanciable
   private NivelSeguridad()
  {
  }
   
  public static final int Prohibido = 0;
   public static final int Normal = 1;
   public static final int Restringidas = 2;
   public static final int Total = 3;
}


3. Realizar la carga de los valores de una de las enumeraciones anteriores y visualizarlas por pantalla.
Código:
for(Semaforo item: Semáforo.values())
{
   System.out.println("Código " + item.ordinal());
   System.out.println("Denominación " + item.toString());
}




Autor del curso: Casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Ayuda con TestNG Parametrico en java netbeans

baltigo Java 0 Sábado 30 Jun 2018 01:37 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Publicar Aplicación web JAVA en tomcat

Irvin Java Web 1 Viernes 13 Oct 2017 17:54 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Imagen referencial De creación de jtable en apl...

Jensel S.G Java 6 Miércoles 13 Sep 2017 20:06 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

EMPLEO ANALISTA PROGRAMADOR/A BACK-END JAVA EE

GRUPOARESTORA Bolsa de trabajo 0 Viernes 23 Jun 2017 14:33 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de PHP-WordPress avanzado

wordpressadict PHP 1 Domingo 27 Nov 2016 19:59 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,