Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJuan Manuel Luna Coronel Modificado hace 8 años
1
1 Ingeniería del Software Solución Examen Junio 2006 (a) Ejercicio UNIPRE (1h 20 min.) Diagrama de Casos de Uso y Casos de uso expandido (2,5 puntos) Modelo de Dominio (1,5 puntos)
2
2 Ingeniería del Software Actores ESTUDIANTESECRETARIO
3
3 Ingeniería del Software Actor Secretario SECRETARIO Buscar por Población Buscar por Código Reservar > Consultar Disponibilidad
4
4 Ingeniería del Software Actor Estudiante ESTUDIANTE Solicitar Preferencias Realizar Matrícula
5
5 Ingeniería del Software Actor Secretario SECRETARIO Asignar Números Clausus Establecer Fecha Asignación Realizar Proceso Asignación Comprobar plazas libres Comprobar estudiantes no matriculados >
6
6 Ingeniería del Software Casos de uso de alto nivel (1) Caso de uso:Solicitar Preferencias Actores:ESTUDIANTE Tipo:Secundario Descripción:Durante la preinscripción universitaria, el estudiante puede solicitar hasta ocho preferencias, las cuales tienen que estar ordenadas de forma estricta por orden de interés. Caso de uso: Realizar Matrícula Actores:ESTUDIANTE Tipo:Secundario Descripción:Si no se ha superado la fecha tope, el estudiante realiza la matrícula en la titulación asignada.
7
7 Ingeniería del Software Casos de uso de alto nivel (2) Caso de uso:Asignar Numerus Clausus Actores:SECRETARIO Tipo:Secundario Descripción:El secretario asigna los numerus clausus a las titulaciones Caso de uso: Establecer Fecha Asignación Actores:SECRETARIO Tipo:Secundario Descripción:Si aún hay plazas libres y estudiantes por matricular, el secretario establece la fecha de convocatoria en que se realizará la asignación de estudiantes.
8
8 Ingeniería del Software Casos de uso de alto nivel (3) Caso de uso:Realizar Proceso Asignación Actores:SECRETARIO Tipo:Primario Descripción:El secretario inicia el proceso de asignación de estudiantes a plazas sin superar el numerus clausus. Las solicitudes se ordenan según nota media obtenida en la prueba de acceso a la universidad. Cuando un estudiante es admitido a una titulación debe recibir un correo electrónico en el que se indica la fecha tope de matriculación.
9
9 Ingeniería del Software Casos de uso de alto nivel (4) Caso de uso: Comprobar Plazas Libres Actores:SECRETARIO Tipo:Secundario Descripción:Se comprueba la diferencia entre numerus clausus y estudiantes matriculados. Caso de uso: Comprobar Estudiantes No Matriculados Actores:SECRETARIO Tipo:Secundario Descripción:Se comprueba la diferencia entre los estudiantes preinscritos y los matriculados.
10
10 Ingeniería del Software Modelo de dominio TitulaciónUniversidad OfertaPlazas ** Solicitud id Nombre id Nombre FechaAsignación FechaTopeMatricula NumerusClausus OrdenInterés Matrícula 0.. 1 1 Estudiante Dni Nombre NotaMedia email 8 *
11
11 Ingeniería del Software Solución Examen Junio 2006 (b) Ejercicio Convoy más Ineficiente (1h 20 min.) Análisis (1,5 puntos): Diagrama Secuencia Sistema + Contratos Diseño (2,5 puntos): Diagramas de Secuencia
12
12 Ingeniería del Software Diagrama secuencia sistema :Planificador ObtenerEstaciones(fecha) : ListaInfoEstaciones TrenMásIneficiente(idEstación) : ListaInfoTrenes :Sistema
13
13 Ingeniería del Software Contrato operación ObtenerEstaciones Name:ObtenerEstaciones(fecha) : ListaInfoEstaciones Responsabilities Dad una fecha, obtener las estaciones por las que pasan viajes en esa fecha. Preconditions La fecha es válida Postconditions Salida ListaInfoEstaciones = Lista(idEstacion, nombre, nviajes)
14
14 Ingeniería del Software Contrato operación TrenMásIneficiente Name:TrenMásIneficiente(idEstacion) : ListaInfoTrenes Responsabilities Busca los trenes más ineficientes entre los que en la fecha propuesta pasan por la estación seleccionada. Preconditions idEstación es válido Postconditions Salida ListaInfoTrenes = Lista(idViaje, FechaSalida, HoraSalida, idEstaciónOrigen, nombreOrigen, idEstacion, nombre, idConvoy, Tmax, Peso, diferencia)
15
15 Ingeniería del Software ListaInfoEstaciones :GestorCMI OE(fecha) :Pase :Viaje * * :Pase :Convoy :Via :Estación OE(fecha) IdEstacion IdE idViaje, lista(IdE) ViajesEstación() ObtenerEstaciones(fecha)
16
16 Ingeniería del Software Escogemos el patrón controlador para gestionar el evento externo ObtenerEstaciones. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el controlador de caso de uso: GestorCMI. Además, esta clase artificial agrupa todos los viajes y estaciones y gestiona la estructura auxiliar ViajesEstación. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento. Por el patrón experto, el método ObtenerEstaciones selecciona los viajes cuya FechaSalida sea la proporcionada por el Planificador. Por el patrón experto, el método OE de Viaje es el encargado de obtener las estaciones (IdEstacion) por las que transcurrirá cada viaje (Viaje conoce la FechaSalida y los Convoyes que lo conforman). Se aplica el mismo patrón experto para los métodos OE de Convoy (conoce las vias por las que pasa), Via (conoce las estaciones por las que pasa) y Estación. Finalmente, el método OE de Estación obtiene el IdEstacion de la estación destino. Además, el método ViajesEstación de GestorCMI gestiona la estructura de datos ViajesEstación para almacenar para cada estación los IdViaje de viajes que pasan por ellas (eliminando viajes repetidos). Finalmente, este método obtiene el total de viajes que pasan por cada estación.
17
17 Ingeniería del Software ListaInfoEstaciones :GestorCMI TMI( ) :Pase :Viaje * * :Pase :Convoy * Info() Peso, TnMax IdConvoy,T, P idViaje, lista(ldConvoy, T, P) TrenMásIneficiente(IdEstación) :Contenedor * Peso() Peso() peso :Pase :Convoy :Pase :Convoy :Pase :Locomotora :Pase :Convoy :Pase :Vagón * info() IdViaje, FechaSalida, HoraSalida, idEstacionOrigen :Convoy :Estacion * ciudad() ciudad
18
18 Ingeniería del Software Escogemos el patrón controlador para gestionar el evento externo TrenMasIneficiente. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el mismo el controlador de caso de uso que para la operación anterior: GestorCMI. Además, esta clase artificial agrupa también todos los viajes y estaciones y gestiona la estructura auxiliar ViajesEstación. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento. Por el patrón experto, el método TrebMasIneficiente recorre los viajes de ViajesEstación que corresponden a la Estación seleccionada. Por el patrón experto, el método TMI de Viaje es el encargado de obtener los convoyes más ineficientes de cada viaje (Viaje conoce los convoyes que lo componen). Se aplica el mismo patrón experto para el método TMI de Convoy (conoce las locomotoras y vagones que lo componen), que debe obtener el peso máximo que pueden transportar las locomotoras del convoy y el peso total entre ambos. Finalmente, el método info de Locomotora obtiene el peso y el tonelaje máximo que puede transportar y los métodos peso de Vagón y Contenedor los pesos de ambos.
19
19 Ingeniería del Software Tras obtener los viajes que contienen los convoyes más ineficientes, también por el patrón experto, el método info de Viaje obtiene su idViaje, sus fechas y horas de salida y su estación origen. Por último, aplicando el patrón experto, el método ciudad de Estación obtiene las ciudades de la estación seleccionada y las estaciones origen de los viajes más ineficientes.
20
20 Ingeniería del Software Solución Examen Junio 2006 (c) Ejercicio Implementación (1h.) Realizar el diagrama de clases y la separación física (2 puntos) Completar la consulta SQL qEMV (2 puntos) Implementar el método EMV de la clase Gestor EMV (2 puntos) Responder a las preguntas (4 puntos)
21
21 interface InterfazGestorEMV + list EMV(String fecha) interface java.rmi.remote implements class GestorEMV + list EMV(String fecha) {...}... + main (){... Naming.rebind } class java.rmi.server.UnicastRemoteObject extends class IU_EMV + main () {... Naming.lookup } p: InterfazGestorEMV usa CLIENTE SERVIDOR SERVIDOR DE DATOS BD Capa de Presentación Capa de Lógica de Negocio Capa de Datos extends
22
22 Ingeniería del Software
23
23 Ingeniería del Software
24
24 public list EMV (String fecha) throws RemoteException { String SQL = "SELECT E.idEstacion, E.ciudad, COUNT(DISTINCT(V.idViaje)) AS Nviajes FROM Viaje AS V INNER JOIN Convoy as C ON V.idViaje=C.idViaje INNER JOIN Via AS VIA ON C.idVia=VIA=idVia INNER JOIN Estacion AS E ON VIA.Origen=E.idEstacion WHERE V.fechaSalida = “+fecha+” GROUP BY E.idEstacion ORDER BY NViajes DESC"; list l = new LinkedList(); int max= 0; int NViajes= 0; boolean continue= true; try { Statement s = c.createStatement(); // c anteriormente definida ResultSet r = s.executeQuery(SQL); while (r.next() && continue) { NViajes = r.getInt(“NViajes”); if (max <= Nviajes) { list e = new linkedList(); e.add(r.getString(“idEstacion”)); e.add(r.getString(“ciudad”)); e.add(r.getInt(“NViajes”)); l.add(e); max = Nviajes; continue = true } else { continue = false } catch (Exception ex) { System.out.println(ex.getMessage()); list e = new linkedList(); e.add(“error”); e.add(“null”); e.add(0); l.add(e); } return l; }
25
25 a) ¿En el método de qué clase se carga el puente JDBC-ODBC? En el constructor de la clase GestorEMV. ¿Dónde está definida la pregunta SQL? En el método EMV de la clase GestorEMV. b) ¿Cómo es la instrucción que establece la conexión con la base de datos? Connection c = DriverManager.getConnection(“jdbc.odbc.BD”); c) ¿Qué instrucciones registran el servicio remoto y en el método de qué clase se encuentran? GestorEMV g = new GestorEMV(); Naming.rebind(“”//localhost:1099/GestorEMV”, g); En el método main de la clase GestorEMV. d) ¿Cuál es la instrucción que busca el objeto remoto y en qué método de qué clase se encuentra? g = (GestorEMV)Naming.lookup("rmi://super.contren.es:1099/GestorEMV"); En el método main de la clase IU_EMV.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.