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();
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