martes, 7 de mayo de 2013

Contenedores y utilidades

Hola a todos,
esta mañana hemos estado repasando algunas de las clases e interfaces que forman parte de la jerarquía de clases para manejar contenedores que viene incluida en Java. Hemos visto que los contenedores se pueden clasificar en dos categorías: colecciones (Collection) y diccionarios (Map).

Dentro de las colecciones hemos repasado las diferentecias entre Conjuntos (Set) y Listas (List), y hemos estudiado la clase ArrayList que implementa el interface List. En lo referente a diccionarios, además de estudiar el interface Map hemos detallado cómo se utiliza la clase HashMap que implementa dicho interface. Finalmente, hemos practicado la sobrecarga con los métodos boolean equals(Object o) y int hashCode() que todos los objetos heredan desde la clase Object. Estos métodos nos han permitido escribir clases distinguibles personalizando la forma en que sus objetos son comparados entre sí. De este modo hemos podido utilizar dichas clases como claves para los diccionarios, o como elementos para conjuntos (Set).

Como ejercicio para practicar lo aprendido hemos tratado de escribir la clase Polígono. Esta clase debíamos diseñarla para modelar polígonos de cualquier grado. Los objetos de tipo Polígono se deben crear sin indicar el grado, es decir, sin indicar el número de monomios que los componen. Una vez creados, estos objetos deben permitirnos añadir monomios, eliminar monomios, y evaluar el polinomio para un valor de x dado.

En clase hemos visto cómo implementarla usando arrays tradicionales, cómo hacerlo usando la clase ArrayList y también cómo hacerlo usando la clase HashMap. Os dejo a continuación una forma de resolverlo usando HashMap y la clase Monomio que hemos escrito esta mañana.

class Monomio {
   private double coeficiente;
   private int grado;

   public Monomio(int grado, double coeficiente) {
       this.grado = grado;
       this.coeficiente = coeficiente;
   }

   public Monomio(double coeficiente) {
       this(0,coeficiente);
   }

   public int getGrado() {
       return grado;
   }

   public double getCoeficiente() {
       return coeficiente;
   }

   public double evalua(double x) {
       return Math.pow(x, grado)*coeficiente;
   }
}

class Polinomio() {
   private Map elementos;
   private int grado;
   
   public Polinomio() {
       elementos = new HashMap();
       grado = 0;
   }

   public int getGrado() {
     return grado;
   }

   public Monomio getMonomio(int grado) {
     return (Monomio)elementos.get(grado);
   }

   public bolean add(Monomio m) {
       double nuevoCoeficiente;
       if (elementos.containsKey(m.getGrado())) {
           Object valor = elementos.get(m.getGrado());
           Double valorReal = (Double) valor;
           double v = valorReal.getValue();
           nuevoCoeficiente = v + m.getCoeficiente();
       } else {
           nuevoCoeficiente = m.getCoeficiente;
       }
       elementos.put(m.getGrado(), nuevoCoeficiente);
   }

   public double evalua(double x) {
     double resultado = 0;
     Set grados = elementos.keySet();
     Iterator i = grados.iterator();
     while (i.hasNext()) {
       Monomio m = (Monomio)i.next();
       resultado += m.evalua(x);
     }
     return resultado;
   }
}

Finalmente, os dejo un ejemplo de uso de las clases Polinomio y Monomio y os recuerdo que es necesario importar java.util.HashMap, java.util.Iterator, java.util.Map, import java.util.Set.

public class Main {
  public static void main(String[] args) {
    Polinomio p = new Polinomio();
    p.add(new Monomio(3));
    p.add(new Monomio(1, 1));
    System.out.println(p.evalua(1));
  }
}

4 comentarios:

  1. Part of the reason behind the high sales of Wii Play will be the Wii Distant that's included
    with it. Nevertheless, I believe San Andreas is the greatest of the series.


    my page; gta vice city cheats [game.toofun.ir]

    ResponderEliminar
  2. Asking questions are really pleasant thing if you
    are not understanding something fully, but this paragraph gives fastidious understanding yet.


    my site :: xm radio

    ResponderEliminar
  3. I quite like reading an article that can make people think.

    Also, thanks for allowing for me to comment!


    my blog; descargar poweramp full unlocker apk

    ResponderEliminar
  4. For most up-to-date information you have to pay a visit the
    web and on the web I found this web site as a best web page for latest updates.


    My web page :: retirement investment

    ResponderEliminar