Requisito RF-02
SENA · Tecnólogo en Análisis y Desarrollo de Software

Un requisito,
cuatro diagramas

Cómo modelar bien la fase de análisis: del mismo requisito nacen los casos de uso, las clases, el modelo de datos y el flujo — y todos deben hablar de lo mismo.
Requisito RF-02
El sistema debe permitir registrar un estudiante con su nombre, documento y correo, y matricularlo en un curso.
Bloque 3 · Modelado y análisis · Competencia 38376
El punto de partida
Todo nace del mismo requisito
La regla de oro del bloque: cada modelo debe poder rastrearse a un requisito. Según qué necesites mostrar, eliges el diagrama. Estos son los cuatro que salen de RF-02.
●
Funciones
Casos de uso
Registrar Matricular

Muestra qué puede hacer el usuario con el sistema: registrar, matricular, validar.

■
Estructura
Clases
Estudiante Curso 1*

Muestra cómo se organiza el código: las clases Estudiante y Curso.

▦
Datos
Entidad-relación
curso estudiante

Muestra cómo se guarda: tablas, llave primaria y llave foránea.

⇩
Proceso
Flujo
Inicio Ingresar datos ¿Válido? Guardar

Muestra en qué orden ocurre: ingresar, validar, guardar, matricular.

Diagrama 1 · Funciones
Casos de uso
Instructor Sistema de registro Registrar estudiante Matricular en curso Validar datos «include»
?
Responde a la pregunta ¿qué hace el sistema? No tiene detalle técnico: es la vista que entiende hasta el cliente.
1
El actor (muñeco) es quien usa el sistema: aquí el Instructor. Cada elipse es una función que puede ejecutar.
2
Las funciones salen directo de RF-02: "registrar" pide nombre, documento y correo; "matricular" es la acción sobre el curso.
3
La flecha «include» significa que registrar siempre pasa por "Validar datos": no se guarda nada sin validar.
Diagrama 2 · Estructura
Diagrama de clases
Curso - nombre: String - codigo: String - cupos: int + agregarEstudiante(e: Estudiante) Estudiante - nombre: String - documento: String - correo: String + matricular(c: Curso) + getNombre(): String + setNombre(n: String) tiene 1 *
?
Responde a ¿cómo se organiza el código? Cada caja es una clase con tres partes: nombre, atributos y métodos.
1
El - antes de cada atributo significa privado (encapsulamiento). Los tres datos de RF-02 son los atributos de Estudiante.
2
El + antes de un método significa público. matricular() es la acción de "matricular en curso" del requisito.
3
La línea con 1 y * es la relación: un curso tiene muchos estudiantes. Esa cardinalidad decide cómo se escribe el código.
Diagrama 2 · Del modelo al código
El diagrama se convierte en Java
Cada caja, atributo y método del diagrama de clases tiene su equivalente exacto en el código. Así se verifica que el modelo y el programa dicen lo mismo.
Curso.java// Clase del diagrama
public class Curso {
  private String nombre;
  private String codigo;
  private int cupos;

  // el "*": muchos estudiantes
  private List<Estudiante> estudiantes
      = new ArrayList<>();

  public void agregarEstudiante(Estudiante e) {
    if (estudiantes.size() < cupos)
      estudiantes.add(e);
  }
}
Estudiante.java// Clase del diagrama
public class Estudiante {
  private String nombre;
  private String documento;
  private String correo;

  // método "+ matricular(c: Curso)"
  public void matricular(Curso c) {
    c.agregarEstudiante(this);
  }

  public String getNombre() {
    return nombre;
  }
  public void setNombre(String n) {
    this.nombre = n;
  }
}
Diagrama 3 · Datos
Modelo entidad-relación
curso codigo (PK) nombre cupos estudiante documento (PK) nombre correo curso_codigo (FK) contiene 1
?
Responde a ¿cómo se guardan los datos? Cada tabla es una entidad; cada fila, una columna de la base de datos.
1
La PK (llave primaria) identifica de forma única cada fila: el documento del estudiante, el codigo del curso.
2
La FK (llave foránea) curso_codigo conecta cada estudiante con su curso: así se guarda la relación.
3
La "pata de gallo" en estudiante es el muchos: es el mismo 1 → * del diagrama de clases, pero visto desde los datos.
Diagrama 4 · Proceso
Diagrama de flujo
Inicio Ingresar datos nombre, documento, correo ¿Datos válidos? Sí No Mostrar error Guardar estudiante Matricular en curso Fin
?
Responde a ¿en qué orden ocurre? Es la secuencia del proceso paso a paso, de Inicio a Fin.
1
El primer paso pide los mismos tres datos de RF-02. El rombo es una decisión: bifurca el camino en Sí / No.
2
Si los datos no son válidos, muestra error y vuelve a pedirlos (la flecha roja). Nada se guarda mal.
3
Si son válidos: guardar (el INSERT en la tabla) y luego matricular (el método matricular() de la clase). Todo conecta.
La prueba de calidad
Trazabilidad y coherencia
Elige un dato y míralo aparecer en los cuatro diagramas. Si un dato existe en uno pero falta o se llama distinto en otro, hay una incoherencia que corregir antes de programar.
Resaltar dato:
Funciones
Casos de uso
  • documento
  • nombre
  • correo
  • curso a matricular
Estructura
Clase Estudiante
  • - documento: String
  • - nombre: String
  • - correo: String
  • + matricular(c: Curso)
Datos
Tabla estudiante
  • documento (PK)
  • nombre
  • correo
  • curso_codigo (FK)
Proceso
Flujo · Ingresar
  • documento
  • nombre
  • correo
  • matricular en curso
Para recordar
El orden correcto siempre es el mismo
Requisito
→
Diagramas
→
Código
1
Primero el requisito. Sin RF-02 no hay nada que dibujar. Todo modelo debe rastrearse a él.
2
Luego los diagramas. Elige el tipo según lo que muestras (funciones, estructura, datos, proceso) y verifica que los cuatro sean coherentes entre sí.
3
Al final el código. Debe poder leerse al lado del diagrama y verse igual, como Estudiante y su clase Java.
!
El error clásico: dibujar los diagramas después de programar solo para "cumplir la evidencia". Ahí el diagrama ya no sirve para pensar, y es cuando el software falla.
01 / 09