-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDiagrama_de_clases.puml
312 lines (248 loc) · 7.58 KB
/
Diagrama_de_clases.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
@startuml
'https://plantuml.com/class-diagram
Usuario --> ValidadorContrasenias
Usuario --> RangoHoraio
Usuario --> MedioComunicacion
Usuario --> Localizacion
Usuario --> Servicio
Usuario --> Comunidad
ValidadorContrasenias --> ValidadorPeorContrasenia
class Usuario {
- Integer id_usuario
+ String apellido
String nombre
String email
String telefono
LocalDateTime ultimaHoraNotificacion
String nombreUsuario
String contrasenia
List<RangoHorario> horariosNotificacion
MedioComunicacion medioComunicacion
Localizacion localizacion
List<Establecimiento> establecimientosInteres
List<Servicio> serviciosInteres
ValidadorContrasenias validador
Usuario(String nombreUsuario, String contrasenia)
boolean estaEnRangoHorario()
void notificarIncidente(Incidente incidente)
void notificarIncidentes()
void agregarHorarioNotificacion(RangoHorario nuevoRango)
void notificarServiciosCercanos(List<Servicio> servicios)
}
Empresa -> TipoEmpresa
Empresa --> Servicio
class Empresa {
Integer id_empresa
String nombreEmpresa
TipoEmpresa tipo
List<String> problematicas
List<Servicio> serviciosAsociados
Empresa(String nombreEmpresa, TipoEmpresa tipo)
}
class RangoHoraio{
int horaInicio
int horaFin
RangoHorario(int inicio, int fin)
boolean laHoraPertene(int hora)
}
enum TipoEmpresa {
ENTIDAD
ORGANISMODECONTROL
}
class ValidadorContrasenias {
ValidadorPeorContrasenia validador
validarContrasenia(String nombreUsuario, String contrasenia)
validacionCaracteresRepetidos(String contrasenia)
validarConPeoresContrasenias(String contrasenia)
cambiarArchivoPeoresContrasenias(String nuevoArchivo)
validarTamanio(String contrasenia)
validarCredenciales(String nombreUsuario, String contrasenia)
}
class ValidadorPeorContrasenia {
String nombreArchivo
ValidadorPeorContrasenia INSTANCE
validarPosiblePeorContrasenia(String contrasenia)
}
MedioComunicacion <|-- MedioEmail
MedioComunicacion <|-- WhatsApp
abstract class MedioComunicacion{
Localizacion notificarIncidente(Usuario usuario, Incidente incidente)
void notificarServicioCercano(Usuario usuario, List<Servicio> servicios)
}
class MedioEmail
class WhatsApp
Localizacion --> ServicioLocalizacion
ServicioLocalizacion <|.. ServicioLocalizacionGeoRefApi
ServicioLocalizacionGeoRefApi --> GeoRefApi
interface ServicioLocalizacion {
Localizacion buscarMunicipio(String nombreProvincia, String nombreMunicipio);
Localizacion buscarDepartamento(String nombreProvincia, String nombreDepartamento);
Localizacion buscarProvincia(String nombreProvincia);
Localizacion obtenerUbicacionActual();
Localizacion obtenerUbicacion(String longitud, String latitud);
}
class ServicioLocalizacionGeoRefApi {
String apiURL
Retrofit retrofit
ServicioLocalizacionGeoRefApi()
}
interface GeoRefApi
Servicio --> TipoServicio
Servicio --> Incidente
Incidente --> EstadoIncidente
class Servicio{
Integer id_servicio
TipoServicio tipo
List<Incidente> incidentes
List<Usuario> usuariosInteresados
Servicio(TipoServicio tipo)
void aniadirIncidente(Incidente incidente)
void informarNoFuncionamiento(String observaciones)
List<Comunidad> ComunidadesInteresadasEnElServicio()
List<Incidente> incidentesDeComunidad(Comunidad comunidad)
}
class Incidente{
String observaciones
EstadoIncidente estado
LocalDateTime horarioApertura
LocalDateTime horarioCierre
Incidente(String observaciones, Comunidad comunidad)
void cerrarIncidente()
long tiempoCierre()
boolean esDeLaComunidad(Comunidad comunidad)
boolean suEstadoEs(EstadoIncidente estado)
}
enum TipoServicio{
BAÑO
ELEVACION
}
enum EstadoIncidente {
ACTIVO
RESUELTO
}
RepositorioDeUsuarios --> Usuario
RepositorioEmpresas -> Empresa
RepositorioComunidad --> Comunidad
class RepositorioComunidad {
List<Comunidad> comunidades
RepositorioComunidad repositorioComunidad
RepositorioComunidad getInstancia()
void aniadirComunidad(Comunidad comunidad)
List<Comunidad> comunidadesALasQuePertenece(Usuario usuario)
}
class RepositorioDeEntidades{
List<Entidad> entidades
RepositorioDeEntidades repositorioDeEntidades
List<Criterio> criterios
void RepositorioDeEntidades getInstancia()
void aniadirEntidad(Entidad entidad)
void aniadirCriterio(Criterio criterio)
void generarRankings()
void eliminarRankingsAntiguos()
}
class RepositorioDeUsuarios{
List<Usuario> usuariosDeLaPlataforma
RepositorioDeUsuarios INSTANCE
aniadirUsuario(Usuario usuario)
}
class RepositorioEmpresas{
List<Empresa> empresasUsuarias
List<Empresa> getEmpresasUsuarias()
String abrirArchivo(String nombreArchivo)
void registrarEmpresas(String nombreArchivo)
void registrarEmpresa(String nombreEmpresa, TipoEmpresa tipo)
}
Criterio <|.. RankingPorCantidad
Criterio <|.. RankingPorPromedioCierre
interface Criterio{
void calcularRanking(List<Entidad> entidades)
default void generarCSVConNumeracion(List<String> listaStrings, String nombreArchivo)
}
class RankingPorCantidad
class RankingPorPromedioCierre
Localizacion -> Division
Division -> TipoDivision
class Localizacion {
String provincia
Division division
Double latitud
Double longitud
Localizacion(String provincia, Division division)
boolean estaCerca(Localizacion localizacion)
}
class Division {
String nombre
TipoDivision tipo
}
enum TipoDivision {
MUNICIPIO
DEPARTAMENTO
}
Establecimiento -> TipoEstablecimiento
class Establecimiento{
String nombre
TipoEstablecimiento tipoEstablecimiento
Localizacion localizacion
List<Servicio> servicios
List<Usuario> usuariosInteresados
void darAltaServicio(Servicio servicioNuevo)
void estaCerca(Usuario usuario)
void darBajaServicio(Servicio servicioObsoleto)
}
enum TipoEstablecimiento {
ESTACION
SUCURSAL
}
Transporte -> TipoTransporte
Entidad <|-- Transporte
Entidad --> Localizacion
Entidad --> Establecimiento
RepositorioDeEntidades --> Entidad
RepositorioDeEntidades --> Criterio
Establecimiento --> Servicio
Establecimiento --> Usuario
Establecimiento --> Localizacion
class Entidad {
String nombreEntidad
List<Establecimiento> conjuntoDeEstablecimientos
Localizacion localizacion
void setearNombre(String nombreEntidad)
List<Servicio> todosLosServicios()
int cantidadServiciosEntidad()
List<Establecimiento> getEstablecimientos()
List<Incidente> incidentesDeEntidad()
int cantidadIncidentesEntidad()
List<Incidente> incidentesSemanales()
int cantidadIncidentesEnUnaSemana()
double promedioDeCierreIncidente()
void aniadirEstablecimiento(Establecimiento establecimiento)
}
class Transporte{
Establecimiento estacionOrigen;
Establecimiento estacionDestino;
TipoTransporte tipo;
}
enum TipoTransporte{
SUBTERRANEO
FERROCARRIL
}
Comunidad --> Usuario
Comunidad --> Servicio
class Comunidad {
List<Usuario> miembros
List<Usuario> administradores
List<Servicio> serviciosDeInteres
void reportarIncidente(Incidente incidente)
boolean estaInteresaEnServicio(Servicio servicio)
void darDeBajaMiembro(Usuario miembro)
void darDeAltaMiembro(Usuario miembroNuevo)
List<Incidente> consultarIncidentesPorEstado(EstadoIncidente estadoIncidente)
void solicitarServicio(Servicio servicio, Establecimiento establecimiento)
boolean usuarioEsParte(Usuario usuario)
List<Incidente> incidentesReportados()
}
class mainNotificarIncidentes {
void notificarIncidentes()
}
mainNotificarIncidentes --> RepositorioDeUsuarios
@enduml