Tipo NubePuntos


El tipo NubePuntos se define como una colección de Puntos con las funcionalidades descritas en el enunciado. Para guardar la colección de Puntos vamos a usar un atributo de tipo List de Punto (se podría hacer con un Set si supiéramos que no hay puntos repetidos). ¿Qué visibilidad externa tendrá el atributo que guarda la colección? La respuesta es sencilla ninguna. Desde fuera de la clase NubePuntosImpl no se “verá” el atributo, es decir, no habrá ni método get y mucho menos método set para el atributo. Ni siquiera el constructor a partir de List se va a hacer public, tal y como se propone  en el ejercicio 18.

De esta manera la única forma de construir NubePuntos es a partir de un fichero y no se podrá “sacar” una colección filtrada de NubePuntos que no sea otra NubePuntos. Con esto conseguimos que si se quisiera calcular el centro de gravedad de los puntos que están a una distancia menor de 7.6, puedo hacer la siguiente invocación aplicando los métodos de los ejercicios 10 y 4.

Punto cg = mispuntos.
            getPuntosMenorDistanciaOrigen(7.6).
            getCentroGravedad();

 
Por tanto, el único constructor público para NubePuntos es partir de las coordenadas leídas de un fichero. El constructor privado a partir de List será usado sólo por los métodos que hagan un filtro (devuelvan una subcolección de elementos filtrada de la original) como el ejercicio 10. Se podría relajar esta disciplina añadiendo a NubePuntos un método añadir o borrar un punto, que serían implementados en base a los métodos add y remove de List.

  public interface NubePuntos {
        // Ejercicio 1
        Long getNumPuntosAbsMayor(Double nx);   
        // Ejercicio 2
        Long getNumPuntosCuadrante(TipoCuadrante t);
        // Ejercicio 3
        Long getNumPuntosDistOrigenMenor(Double d); 
        // Ejercicio 4
        Punto getCentroGravedad(); 
        // Ejercicio 5
        Boolean existePuntoEjeAbscisas(); 
        // Ejercicio 6
        Boolean existePuntoDentroCirculo(Punto c, Double r); 
        // Ejercicio 7
        Boolean estanTodosADistMenor(Double d); 
        // Ejercicio 8
        Punto getMasLejanoOrigen(); 
        // Ejercicio 9
        Punto getPuntoMasCercano(Punto p);
        // Ejercicio 10
        NubePuntos getPuntosMenorDistanciaOrigen (Double d);
        // Ejercicio 11
        Map<TipoCuadrante, SortedSet<Punto>> getPuntosPorCuadrante();
        // Ejercicio 12
        Map<TipoCuadrante,Long> getNumPuntosPorCuadrante(); 
        // Ejercicio 13
        SortedMap<TipoDiana, Set<Punto>> getPuntosPorDiana(); 
        // Ejercicio 14
        void moverDireccion(Double vx, Double vy); 
        // Ejercicio 15
        Punto getPuntoSuma(TipoCuadrante t); 
        // Ejercicio 16
        SortedMap<TipoCuadrante, Punto> getPuntoSumaPorCuadrante();
        // Ejercicio 17
        SortedMap<TipoCuadrante, Punto> getCentroGravedadPorCuadrante();
        Boolean añadir(Punto p);
        Boolean borrar(Punto p);
}

 
Clase NubePuntoImpl en Java 7

public class NubePuntosImpl implements NubePuntos {
        List<Punto> nube;
               
        private NubePuntosImpl(List<Punto> lis){
                nube = lis;
        }
        public NubePuntosImpl(String nomFile){
                        List<String> ls = Util.LeeFicheroPorLinea(nomFile);
                        nube = new ArrayList<Punto>();
                        for (String linea:ls){
                               Punto p = new PuntoImpl(linea);
                               nube.add(p);
                        }
        }
        public Boolean añadir(Punto p){
                return nube.add(p);
        }
        public Boolean borrar(Punto p){
                return nube.remove(p);
        }
 
// … continúa

 

Clase NubePuntoImpl2 en Java 8

public class NubePuntosImpl2 implements NubePuntos {
        List<Punto> nube;
               
        private NubePuntosImpl2(List<Punto> lis){
                nube = lis;
        }
        public NubePuntosImpl2(String nomFile){
            try {
                nube= Files.lines(Paths.get(nomFile)).
                map(x->new PuntoImpl(x)).
                collect(Collectors.toList());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
// … continúa

 
 

No hay comentarios:

Publicar un comentario