Caso #1 - Sistema de Notas A continuación se presenta el anál isis del caso de estudio Sistemas de Notas. El alcance de esta solución contempla el modelo de dominio del mundo del problema. E s importante aclarar que esta solución no es única.
Enunciado El Colegio de Los Alpes es uno de los colegios más reconocidos en el país. Tiene desde primero hasta undécimo grado y en cada uno de cursos hay 1, 2 ó 3 secciones llamadas A, B y C respectivamente. Todos los estudiantes de una misma sección ven juntos todos los cursos de 7 a.m. a 1 p.m. Cada clase es de 1 hora y tienen un recreo de 9 a 10. Una sección ve el mismo curso a la misma hora todos los días (por ejemplo, ve Matemáticas II de 10 a 11, de lunes a viernes). Todos los profesores son de tiempo completo y tienen asociado, además de la información personal, un código único, una lista de materias que puede dictar, una lista de cursos que está dictando, el grado del cual está encargado (si tiene alguno), y una categoría que determina el salario que le van a pagar. Las categorías son de 1 a 5 (5 es la máxima) y el sistema debe permitir a la Oficina de Recursos Humanos administrar la tabla de salarios. Cuando un estudiante se matricula en el colegio, debe ir a la Oficina de Admisiones. Allí suministra todos sus datos personales, el grado al cual entra y el estrato (1..6) en el cual vive. Allí, después de pagar, el sistema lo agrega a la sección en la cual haya menos estudiantes en ese momento. La matrícula se calcula usando una tabla a partir del estrato al cual pertenece. Dicha tabla también se debe poder administrar desde la Oficina de Admisiones. Cada dos meses la Oficina de Registro pide al sistema la generación de los boletines de notas de todos los estudiantes, a partir de la información ingresada en el sistema directamente por los profesores. Al hacer esto, el sistema debe calcular las notas definitivas de cada estudiante en cada curso y cerrar el bimestre, de manera que las l as notas parciales ya no se puedan modificar. Por reglamento del colegio, el profesor debe hacer cada bimestre dos exámenes y dos trabajos, e ingresar cada una de estas notas al sistema a medida que las va obteniendo. La nota del bimestre en cada curso corresponde al promedio de estos cuatro valores. Las notas van de 1 a 5 (por ejemplo, 4.23). En un año hay 4 bimestres. La Oficina de Registro debe poder, además, pedir al sistema la generación de un boletín específico de un bimestre ya cerrado, dando el carné del estudiante y el bimestre. El sistema no maneja información de años anteriores, sino sólo la información del año en curso. El colegio tiene un salón para cada sección (hasta 33 salones). Cada salón se llama con el grado y la sección correspondientes. Por ejemplo, 3A (tercero sección A). El sistema genera, a petición de la Oficina de Registro, una comunicación impresa con
los cursos que debe dictar algún profesor del colegio (materia y hora), que incluye la lista de sus estudiantes (carné y nombre). Este carné se le asigna al estudiante el día de la matrícula y corresponde a un valor secuencial (5 dígitos: 0000099999). Una materia tiene un nombre (por ejemplo “Matemáticas II”) y un código. Este código es único y está constituido por 5 dígitos, así: los dos primeros dígitos dan el grado (01-11), y los tres siguientes corresponden a un consecutivo. La información de materias, cursos, profesores y secciones se debe cargar, al comienzo de la ejecución, de una base de datos con la que cuenta el colegio y que es administrada con otro programa.
Solución propuesta Aspectos Estructurales
Solución propuesta - Aspectos Estructurales Análisis del modelo de dominio
Para ver imagen ampliada click aquí Entidad
Descripción
Atributos y asociaciones → bimestreActual: bimestre actual del año → [5] tablaSalarios: contiene los posibles salarios
Colegio
Representa el colegio
de un profesor → [*] matriculados: contiene los estudiantes matriculados del colegio
→ [11] grados: contiene los grados escolares ofrecidos → [*] profesores: contiene los profesores del colegio → [6] tablaMatriculas: contiene el valor de la matrícula por estrato social → [*] catalogo: contiene las materias ofrecidas por el colegio → [1..3] secciones: contiene las secciones de Grado
Representa uno de los grados
estudiantes
escolares
→ [1] encargado: es el profesor encargado → número: es el número del grado → letra: es la letra de la sección
Sección
Es una sección de un grado escolar
→ [5] cursos: contiene los cursos vistos por esta sección → [*] estudiantes: contiene los estudiantes de esta sección
Curso
Es un curso visto por una sección en un cierto horario
→ hora: es la hora en la que se dicta el curso → [1] datosMateria: son los datos de la materia dictada por este curso → informacionPersonal: es la información personal de un profesor → código: es el código único de identificaci ón del profesor → categoría: es la categoría salarial
Profesor
Es un profesor del colegio
→ [0..1] gradoEncargado: grado del que puede estar encargado el profesor → [*] dictando: contiene los cursos que está dictando actualmente → [*] dictables: contiene las materia s que puede dictar → nombre: es el nombre de la materia
Materia
Es una materia ofrecida por el
→ código: es el código de identificación
colegio
→ programa: es el programa cubierto por la materia → informaciónPersonal: es la información personal de un estudiante → carné: es el código único de identificación → estrato: es el estrato social al que pertenece el
Estudiante
Es un estudiante inscrito en el
estudiante
colegio
→ [5] cursosAbiertos: contiene los cursos vistos en el bimestre actual → [0..4] bimestresCerrados: contiene los datos académicos del estudainte de los bimestres cerrados
→ [1] datosCurso: son los datos del curso NotasParciales
Representa el conjunto de notas
→ [0..1] examen1: posible nota de un examen
de un curso del bimestre en
→ [0..1] examen2: posible nota de un examen
curso
→ [0..1] trabajo1: posible nota de un trabajo → [0..1] trabajo2: posible nota de un trabajo
Nota
Es una nota de un examen o un
→ valor: es el valor numérico de la nota
trabajo
→ id: es el identificador único BimestreCerrado Representa un bimestre cerrado
→ [5] cursosCerrados: contiene el conjunto de notas de cada uno de los cursos
Representa el conjunto de notas NotaCurso
de un curso de un bimestre cerrado
Categoría
Estrato
→ nota: es el valor numérico de la nota → [1] curso: son los datos del curso
Es una categoría salarial de un
→ identificador: es el identificador único
profesor
→ salario: es el valor numérico del salario
Es el estrato social de un
→ identificador: es el identificador único
estudiante
→ valor: es el valor numérico de la matrícula
Enunciado del caso
Caso #2 - Sistema de Información de un Parqueadero A continuación se presenta el anál isis del caso de estudio del Sistema de Infor mación de un Parqueadero. El alcance de la solución contempla análisis de los requerimientos funcionales, modelo de dominio del mundo y diagramas de secuencia del problema. Es importante aclarar que esta solución no es única.
Enunciado Se quiere construir un sistema de información para manejar un parqueadero. En un parqueadero existe un número dado de puestos (configurados por el administrador),
cada
uno
de
los
cuales
tiene
un
identificador.
Al llegar un carro a la puerta, el portero teclea la placa del carro y el sistema le informa
el
puesto
en
el
que
debe
parquear.
A la salida, el portero teclea la placa y el sistema informa el monto que debe pagar el dueño del carro, si éste no tiene un contrato mensual con el parqueadero. Para abrir un contrato por mes (todos comienzan el 1 del mes), el dueño de un carro debe ir donde el administrador, darle los datos básicos del carro y pagar. Los carros que tienen contrato no tienen que pagar nada a la salida. Tanto la tarifa que paga cada vehículo por minuto como la tarifa que se paga por un contrato mensual son definidos por el administrador.
Por razones de auditoría, el parqueadero debe guardar todos los servicios de parqueo del último mes: hora de llegada, hora de salida, placa del carro, monto pagado
(si
pagó
algo).
El administrador puede pedir un reporte en el que aparezcan dichos servicios de parqueo para un contrato dado (identificado por la placa) o para todos los carros que
no
tienen
contrato.
Al final de cada mes el administrador hace un cierre, se borran los archivos de auditoría y se cancelan todos los contratos.
Solución propuesta Aspectos
Funcionales
Aspectos
Estructurales
Aspectos de Comportamiento
Solución propuesta - Aspectos Funcionales Análisis de Requerimientos Funcionales Administrador Representa a la persona encargada de administrar el parqueadero Actores
Representa a la persona que permite la entrada de vehículos y cobra cada vez
Portero
que sale uno de ellos
Guías -
Nombre
Clave los
casos
de
uso
comenzando
: con
un
verbo.
- Escriba casos de uso en un estilo esencial; no considere la interfaz de usuario y céntrese
en
la
intención
del
actor.
- Las relaciones entre los casos de uso son secundarias en el trabajo con los diagramas de casos de uso.
Actor
Caso de uso
Entradas
Precondiciones
Resultados → Se ha definido que el
C1: Configurar
→ número
→ El número de
puestos
de puestos
puestos es válido
parqueadero tiene el número dado de puestos → Se ha asignado un identificador a cada puesto
→ tarifa C2: Definir tarifas
por minuto → Las tarifas son
→ Se han fijado las tarifas del
→ tarifa
válidas
parqueadero en los valores dados
→ Los datos son
→ Se ha definido el contrato para el
válidos
carro con los datos dados
por mes → datos C3: Abrir Contrato básicos del carro C4: Generar el reporte de un contrato
→ placa del → La placa del carro
carro es válida
→ Se ha generado un reporte con todos los servicios de parqueo del carro durante el mes
C5: Generar el
→ Se ha generado un reporte con
reporte de todos
los servicios de parqueo de todos los
los carros sin
carros que no tienen contrato y que
contrato
han entrado durante el último mes → Se han borrado los archivos de
C6: Generar cierre
auditoria y se han cancelado todos los contratos del mes
Actor
Caso de uso
Entradas
Precondiciones
Resultados → Se ha indicado el puesto en el que
C7: Permitir el ingreso de un carro
→ placa
→ Hay cupo en el
del carro
parqueadero
el vehículo debe parquear → El carro ha ingresado al parqueadero y ha ocupado el puesto señalado
C8: Autorizar salida de un carro
Enunciado del caso
→ placa del carro
→ Hay un carro con la placa dada en el parqueadero
→ Se ha indicado el valor que debe pagar el conductor del carro (el valor es 0 si el carro tiene contrato) → El carro ha salido del parqueadero
Solución Propuesta - Aspectos Estructurales Análisis del modelo de dominio
Guías
Clave
:
- Un modelo de dominio es una representación de las cosas del mundo real del dominio
de
interés,
no
de
componentes
de
software.
- Es mejor especificar por exceso en un modelo del dominio con muchas clases conceptuales
de
grano
fino
que
especificar
por
defecto.
- Haga el modelo de dominio con el modo de trabajo de los cartógrafos: utilice los nombres existentes en el territorio, excluya características irrelevantes y no añada cosas
que
no
están
ahí.
- Si tiene dudas en cuanto representar algo como un atributo o como un concepto, piense si lo que desea representar es un número o texto en el mundo real, si no lo es, probablemente sea una clase conceptual, no un atributo. En caso de mayor duda,
considérelo
como
un
concepto
separado.
- Un modelo de dominio no es absolutamente correcto o equivocado, sino más o menos útil, es una herramienta de comunicación que proporciona una diccionario visual del vocabulario y conceptos del dominio de los cuales nos inspiramos para nombrar algunas cosas del diseño de software. Entidad
Descripción
Atributos y asociaciones → tarifaMinuto: tarifa que se cobra por minuto estacionado → tarifaMensual: tarifa que se cobra por un contrato
Parqueadero Representa el parqueadero
mensual → [*] movimientosSinContrato: conjunto de servicios de parqueo prestados a los carros que no cuentan con un contrato mensual → [*] puestosOcupados: conjunto de puestos ocupados
en el parqueadero → [*] puestosLibres: conjunto de puestos libres en el parqueadero → [*] contratos: conjunto de contratos abiertos para el mes actual → [*] parqueados: conjunto de carros estacionados actualmente en el parqueadero
Puesto
Es un puesto del parqueadero
→ identificador: identificador único del puesto
que puede tener un carro
→ [0..1] carro: carro que puede estar estacionado en este
estacionado
puesto → horaLlegada: hora de llegada del carro al parqueadero
Carro
Es un carro parqueado en a lgún puesto del parqueadero
→ placa: número de placa del carro → [0..1] carrosConContrato: contrato mensual que puede tener un carro con el parqueadero → [0..1] puesto: puesto en el que está parqueado el carro
Contrato
→ placa: número de placa del carro
Representa un contrato
→ [*] movimientosConContrato: conjunto de servicios
mensual de un carro
utilizados por el carro durante el mes actual → horaLlegada: hora de llegada del carro al parqueadero
Representa el servicio prestado → horaSalida: hora de salida del carro del parqueadero Movimiento a un carro al entrar y salir del parqueadero
→ montoPagado: suma de dinero pagada por el carro (si pagó algo) → placa: número de placa del carro
Enunciado del caso
Solución Propuesta Comportamiento
-
Aspectos
de
Principales diagramas de secuencia Caso de uso C4: Generar el reporte de un contrato
Entradas
Precondiciones
→ placa del
→ La placa del carro
carro (placa)
es válida
Resultados → Se ha generado un reporte con t odos los servicios de parqueo del carro durante el mes
Guías
Clave
:
- Dibuje un Diagrama de secuencia del sistema para el principal escenario de éxito de cada caso de uso, y los escenarios frecuentes o alternos complejos. - Los diagramas de secuencia pueden opcionalmente mostrar el retorno de un mensaje mediante una línea punteada con la punta de la flecha abierta, al final de una caja de activación. Pero lo normal es que se excluya por quienes utilizan UML. Caso de uso
C8: Autorizar salida de un carro
Entradas
→ placa del carro (placa)
Precondiciones
→ Hay un carro con la placa dada en el parqueadero
Para ver imagen ampliada click aquí Enunciado del caso
Resultados → Se ha indicado el valor que debe pagar el conductor del carro (el valor es 0 si el carro tiene contrato) → El carro ha salido del parqueadero
Caso #4 - Exámenes en línea A continuación se presenta el análisis del caso de estudio de Exámenes en Línea. El alcance de la solución contempla análisis de los requerimientos funcionales, modelo de dominio del mundo y diagramas de secuencia del problema. Es importante aclarar que esta solución no es única.
Enunciado Una universidad está interesada en construir un sistema para el manejo y aplicación de exámenes en línea para cualquiera de sus cursos. La universidad considera que dicho sistema es el primer paso para montar versiones totalmente virtuales de sus cursos y ha preparado varios incentivos para que los profesores lo utilicen muy activamente. En dicho sistema cualquier profesor (después de haber tecleado su usuario y su palabra clave desde un navegador) debe poder agregar un nuevo curso, para lo cual debe dar un código y un nombre. Para cada curso, el sistema almacena un conjunto de preguntas que, por ahora, tienen que ser de selección múltiple. Dichas preguntas pueden ser agregadas por cualquier profesor (no tiene que ser el profesor que creó el curso). Una pregunta tiene asociado un número consecutivo (llamado su identificador y asignado automáticamente por el sistema) y consta de un enunciado y de una secuencia de respuestas posibles, numeradas de 1 a 5, una sola de las cuales es correcta. Una vez los profesores han definido este banco de preguntas, cualquiera de ellos puede crear un examen (debe dar su nombre de usuario y el código del curso, para que el sistema asocie el examen con este profesor) de dos maneras distintas: seleccionando pregunta a pregunta dando su identificador, o pidiendo al sistema que genere el examen de manera aleatoria, para lo cual el profesor debe definir el número de preguntas que el examen debe contener. Un examen tiene un código que es único (generado por el sistema), el cual debe ser tecleado por el estudiante cuando le piden que conteste un examen de un curso. Al crear un examen el profesor define una fecha y una hora de inicio (en ese momento se abre el examen), y una fecha y una hora de finalización (en ese momento se cierra el examen). Los exámenes pueden abrirse o cerrarse en cualquier momento del día, de la semana, pero no se espera que se realicen uniformemente a lo largo del semestre: en algunas semanas particulares se realizarán la mayoría de los exámenes. Cada estudiante (identificado por un número de carnet y un nombre), luego de dar su usuario y su palabra clave desde un navegador, indica que va a comenzar a contestar un examen abierto, ingresando su código. Después, puede contestar sus
preguntas, dando el número de la pregunta que quiere contestar y la respuesta que considera correcta. Si el estudiante ya había contestado dicha pregunta, el sistema remplaza la respuesta por la nueva. Al llegar la hora de cierre del examen, el sistema calcula la nota de cada uno de los estudiantes (un valor entre 0 y 5), teniendo en cuenta que todas las preguntas valen lo mismo En cualquier momento un estudiante puede consultar los resultados (nota) de todos los exámenes ya cerrados que fueron presentados por él. Adicionalmente, un profesor también puede consultar los resultados de cualquiera de los exámenes cerrados que él ha creado. La universidad está planeando una campaña bastante ambiciosa para que los profesores construyan un banco de preguntas muy completo (al menos 500 preguntas por curso). Se calcula que cuando el sistema sea adoptado por todos los cursos de la universidad (actualmente son 900) el número de estudiantes participantes será cercano a 15.000.
Solución propuesta Aspectos
Funcionales
Aspectos
Estructurales
Aspectos de Comportamiento
Solución propuesta - Aspectos Funcionales Análisis de Requerimientos Funcionales Estudiante
Representa a un estudiante que va a ut ilizar el sistema de exámenes en línea, contestando preguntas y consultando sus resultados.
Profesor
Representa a un profesor, que construye exámenes para aplicar a sus estudiantes y revisa los resultados obtenidos por ellos.
Actores
Actor
Caso de uso C1: iniciar un
Entradas → código
Precondiciones → Es un estudiante
Resultados → El estudiante comenzó a
examen abierto
estudiante
válido
contestar el examen, inicialmente
→ código
→ El examen está
sin ninguna respuesta dada
examen
abierto
→ código
C2: contestar
estudiante
→ Es un estudiante
→ código
válido
examen
→ El estudiante ya
una pregunta de → número
había iniciado este
un examen
de la
examen
iniciado
pregunta
→ Los números de la
→ número de la
pregunta y la respuesta son válidos
→ El estudiante ha contestado en el examen, la pregunta dada con la respuesta dada. Si la pregunta ya tenía una respuesta, ésta ha sido actualizada
respuesta
C3: consultar los resultados de sus exámenes
Actor
Caso de uso
→ El estudiante obtiene las notas → código
→ Es un estudiante
obtenidas en todos sus exámenes
estudiante
válido
presentados que ya fueron cerrados
Entradas
Precondiciones
Resultados
C4: agregar un → código curso
→ No existe un curso
→ El curso se ha agregado al
curso
con ese código
sistema de exámenes en línea
→ nombre curso → código curso → enunciado
→ La pregunta con sus
pregunta C5: agregar
→ Es un curso válido
respuestas posibles ha sido
→ respuesta1,
una pregunta
→ La respuesta
agregada al banco de preguntas
respuesta2,
a un curso
correcta es una de las
del curso
respuesta3,
respuestas posibles
→ Se le ha asignado a la
respuesta4, respuesta5 → respuesta
pregunta un identificador único
correcta → Se ha creado un nuevo examen vacío, para el curso C6: crear un examen vacío de un curso
→ cédula profesor
→ Es un profesor válido dado, con las fechas dadas
→ código curso
→ Es un curso válido
→ El nuevo examen se ha
→ fecha-hora inicio → Las fechas de inicio y asociado con el profesor → fecha-hora final
finalización son válidas
→ Al examen creado se le ha asignado un código que es único
→ El código del examen es válido y no ha sido C7: agregar
→ código examen
abierto
→ Se ha agregado al examen la
una pregunta
→ identificador
→ La pregunta es válida pregunta con el identificador
a un examen
pregunta
y corresponde al curso
dado
del cual hace parte el examen → Se ha creado un nuevo examen, para el curso dado, con → cédula profesor
→ Es un profesor válido
→ código curso
→ Es un curso válido
C8: generar
→ número de
→ El número de
examen
preguntas
preguntas es válido
el número de preguntas pedidas, seleccionadas de manera aleatoria, con las fechas dadas
→ El nuevo examen se ha → fecha-hora inicio → Las fechas de inicio y asociado con el profesor → fecha-hora final finalización son válidas → Al examen creado se le ha asignado un código que es único → Es un profesor válido
C9: consultar los resultados de un examen
→ cédula profesor → código examen
→ El examen fue creado por el profesor, y ya se encuentra cerrado
→ El profesor obtiene los resultados obtenidos por los estudiantes que contestaron el examen
Enunciado del caso
Solución Propuesta - Aspectos Estructurales
Análisis del modelo de dominio
Para ver imagen ampliada click aquí Evalúe:
Los elementos del mundo están completos?
Las relaciones entre elementos son suficientes?
Tengo toda la información que necesito
No tengo información que no necesito
¿El modelo del mundo soporta los requerimientos que se plantearon?
¿Podemos navegar el modelo adecuadamente? Descripción
Entidad
Atributos y asociaciones → código: identificador único del examen → inicio: fecha-hora de inicio del examen → finalización: fecha-hora de cierre del examen
Examen
Es un examen construido por un
→ [*] preguntas: conjunto de preguntas que
profesor, en todos sus estados
hacen parte del examen
posibles (en creación, abierto y
→ [1] curso: curso del cual hace parte este
cerrado)
examen → [*] terminados: conjunto de exámenes terminados de contestar por los estudiantes. Mientras el examen esté abierto, este conjunto está vacío
ExamenEnProceso
Es un examen que está siendo contestado por un estudiante y
→ [*] contestadas: contiene las preguntas que hasta ahora ha contestado el estudiante, con su respectiva respuesta
que no ha sido todavía cerrado
→ [1] examen: examen que está siendo contestado → carné: carné del estudiante → nombre: nombre del estudiante → [*] contestando: contiene los exámenes
Estudiante
En un estudiante inscrito en la
que en este momento el estudiante se
universidad
encuentra contestando → [*] contestados: contiene los resultados de los exámenes cerrados que fueron contestados por el estudiante → cédula: documento de identidad del profesor → [*] creados: contiene los exámenes
Profesor
Es un profesor de la universidad
creados por el profesor, que se encuentran en proceso de construcción o abiertos → [*] cerrados: contiene los exámenes creados por el profesor, que se encuentran cerrados → identificador: código de la pregunta → enunciado: texto que contiene el enunciado de la pregunta
Pregunta
Es una pregunta de selección
→ [5] posibles: contiene las 5 respuestas
múltiple de un examen
posibles a la pregunta → [1] correcta: es la respuesta correcta a la pregunta. Corresponde a una de las 5 respuestas posibles → código: código del curso
Curso
Es un curso de la universidad
→ nombre: nombre del curso → [*] preguntas: banco de preguntas del curso
Respuesta
Es una respuesta a una pregunta
→ texto: cadena de caracteres con la
de un examen
respuesta
Es la respuesta que ha dado un RespuestaMarcada estudiante a una pregunta de un examen
→ [1] preguntaRef: pregunta del examen que contestó → [1] contestada: respuesta marcada como correcta → [*] cursos: contiene todos los bancos de preguntas asociados con los cursos de la universidad
ManejadorExamenes
Representa el manejador de exámenes de la universidad
→ [*] profesores: contiene todos los profesores de la universidad → [*] estudiantes: contiene todos los estudiantes de la universidad → [*] exámenes: contiene todos los exámenes de la universidad, en cualquier
estado (en creación, abierto y cerrado) → nota: evaluación final obtenida en el ExamenTerminado
Representa un examen cerrado, ya terminado por un estudiante
examen → [1] estudiante: persona que contestó el examen → [1] examen: examen contestado
Enunciado del caso
Solución Propuesta Comportamiento
-
Aspectos
de
Principales diagramas de secuencia Caso de uso
Entradas
Resultados
→ Código estudiante C1: iniciar examen (codEst) abierto → Código examen
→ El estudiante comenzó a contestar el examen, inicialmente sin ninguna respuesta dada
(codEx)
Caso de uso
Entradas
Resultados
→ cédula profesor (ced) → código curso C6: crear un examen vacío
(cod)
de un curso
→ fecha-hora inicio (inic) → fecha-hora final (fin)
→ Se ha creado un nuevo examen vacío, para el curso dado, con las fechas dadas → El nuevo examen se ha asociado con el profesor → Al examen creado se le ha asignado un código que es único
Caso de uso
Entradas
Resultados
→ carné estudiante (car) C2: Contestar una pregunta de un examen iniciado
→ código examen (cod) → número de la pregunta (preg) → número de la respuesta (resp)
→ El estudiante ha contestado en el examen la pregunta dada con la respuesta dada. Si la pregunta ya tenía una respuesta, ésta ha sido actualizada
Enunciado del caso