Ricardo / Análisis y orientdo a objetos

Trabajos de Análisis

Parcial 1

1.1.- Conceptos de POO (Podcast)

Audio explicativo sobre los conceptos básicos de Programación Orientada a Objetos.

Ver en Google Drive

1.2.- Creación de clase

Ejercicio práctico de creación de clases en programación orientada a objetos.

Ver código

1.3.- Creación de clase Car

Implementación de una clase Car con sus atributos y métodos.

Ver código

1.4.- Diagrama de clases y herencia

Diagrama UML mostrando relaciones de herencia entre clases.

Ver diagrama

1.5.- Ejercicio clase Car y Cabriole con herencia

Implementación de herencia entre clases Car y Cabriole.

Ver código

1.6.- E-Portafolio

Documentación y archivos del portafolio académico avanzes

Ver documentos

1.7.- Relaciones entre clases (composición y agregación)

Ejemplos prácticos de relaciones entre clases.

Ver ejemplos

Parcial 2

2.1.- Clase Abstracta vs Interfaz en Java

Clase Abstracta

Una clase abstracta es una clase que no puede ser instanciada directamente, sino que debe ser extendida por otras clases. Puede contener métodos abstractos (sin implementación) y métodos concretos (con implementación).

Interfaz

Una interfaz es una colección de métodos abstractos (a partir de Java 8 también puede tener métodos default y estáticos). Las interfaces solo pueden contener constantes (public static final) y métodos abstractos (antes de Java 8).

Ver ejemplos completos

2.2.- Ejemplo de Clase Abstracta: Sistema de Cuentas Bancarias

Implementación de un sistema de cuentas bancarias usando una clase abstracta Cuenta y una clase concreta CuentaBasica.

Ver explicación en video

2.3.- Presentación: Programación Orientada a Objetos

Presentación detallada sobre los conceptos fundamentales de POO.

Ver presentación

2.3.1 a 2.3.4 - Documentación adicional sobre POO

Recursos complementarios sobre Programación Orientada a Objetos:

Parcial 3

3.4.- Resumen Completo de Diagramas UML

Documento técnico detallado sobre diagramas en ingeniería de software.

Logo

RICARDO LOZANO CABRERA "ANALISIS Y DISEÑO ORIENTADO A OBJETOS"

RESUMEN DE DIAGRAMAS

3.4 -- RESUMEN

ISC -- 601 | 04/06/2023

Tipos de Diagramas en Ingeniería de Software

Índice Analítico

  1. Introducción
    1. Importancia de los diagramas en ingeniería de software
    2. Objetivos del documento
    3. Tipos de diagramas cubiertos
  2. Diagrama de Actividades
    1. Definición y propósito fundamental
    2. Elementos clave y simbología
    3. Ejemplo práctico: Sistema de gestión de alumnos con SQLite
    4. Aplicaciones avanzadas
  3. Diagrama de Secuencia
    1. Conceptos fundamentales
    2. Componentes estructurales
    3. Ejemplo detallado: Proceso en cafetería
    4. Aplicaciones en sistemas modernos
  4. Diagrama de Objetos
    1. Diferencias clave con diagrama de clases
    2. Ejemplo ampliado: Sistema de gestión de alumnos
    3. Relación con otros diagramas UML
  5. Diagrama de Gestión (Flujo de Cajas)
    1. Contexto del sistema modelado
    2. Componentes principales
    3. Casos de uso detallados
  6. Conclusión
    1. Valor integrado de los diagramas
    2. Recomendaciones de uso
    3. Perspectivas futuras

1. Introducción

En el desarrollo de software, los diagramas son herramientas fundamentales que permiten visualizar, diseñar y documentar sistemas de manera estructurada. Estos modelos gráficos facilitan la comunicación entre desarrolladores, analistas y stakeholders, asegurando que todos comprendan el funcionamiento del sistema antes de su implementación. Los diagramas no solo sirven como guía durante la fase de desarrollo, sino que también son cruciales para el mantenimiento futuro del sistema, permitiendo a nuevos integrantes del equipo comprender rápidamente la arquitectura y los procesos implementados.

En este documento, se analizan cuatro tipos de diagramas esenciales en ingeniería de software: el Diagrama de Actividades, que muestra flujos de procesos; el Diagrama de Secuencia, que ilustra interacciones temporales; el Diagrama de Objetos, que representa instancias en tiempo de ejecución; y el Diagrama de Gestión, que modela procesos operativos complejos. Cada uno cumple una función específica y se utiliza en diferentes etapas del ciclo de vida del software, desde el diseño inicial hasta el mantenimiento y la optimización del sistema.

2. Diagrama de Actividades

2.1 Definición y Propósito

Un Diagrama de Actividades es una representación gráfica de los flujos de trabajo y procesos dentro de un sistema. Se asemeja a un flujograma, donde se detallan las acciones, decisiones y secuencias lógicas que componen un proceso determinado. Este tipo de diagrama es particularmente útil para modelar comportamientos complejos que involucran múltiples participantes o sistemas.

Los Diagramas de Actividades se utilizan principalmente para:

  • Modelar casos de uso complejos que involucran múltiples pasos y decisiones
  • Representar algoritmos y procesos de negocio de manera clara y concisa
  • Identificar posibles cuellos de botella o puntos de falla en un proceso
  • Facilitar la comunicación entre equipos técnicos y no técnicos al presentar procesos de manera visual
2.2 Ejemplo Práctico (Código SQLite)

El siguiente fragmento de código ilustra un proceso típico que podría representarse mediante un Diagrama de Actividades:

AlumnosDbHelper admin = new AlumnosDbHelper(this,"administracion",null,1);
SQLiteDatabase bd = admin.getWritableDatabase();

Cursor fila = bd.rawQuery("select codigo, nombre from alumnos", null);
list = new ArrayList<String>();

adapter = new ArrayAdapter<String>(getApplicationContext(), 
    android.R.layout.simple_spinner_item, list);

if(fila.moveToFirst()) {
    do {
        list.add(fila.getString(0)); 
        list.add(fila.getString(1));
        grid.setAdapter(adapter);
    } while(fila.moveToNext());
} else {
    list.add("sin datos"); 
    list.add("sin datos");
    grid.setAdapter(adapter);
}
bd.close();

Análisis detallado del flujo:

  1. Inicio del proceso: Se establece una conexión con la base de datos mediante la creación de un objeto AlumnosDbHelper y se obtiene una instancia de base de datos escribible.
  2. Ejecución de consulta: Se realiza una consulta SQL para obtener los datos de los alumnos utilizando el método rawQuery.
  3. Procesamiento de resultados:
    • Se crea una lista vacía y un adaptador para mostrar los datos.
    • Si la consulta devuelve resultados (if(fila.moveToFirst())), se itera a través de ellos y se agregan a la lista.
    • Si no hay resultados, se agregan valores predeterminados a la lista.
  4. Visualización de datos: Los datos se muestran en un GridView mediante el adaptador.
  5. Cierre del proceso: Finalmente, se cierra la conexión con la base de datos para liberar recursos.

Este flujo podría representarse gráficamente como un Diagrama de Actividades con nodos para cada acción principal (conexión a BD, consulta, procesamiento) y ramas condicionales para manejar los diferentes escenarios (datos encontrados vs. no encontrados).

2.3 Aplicaciones Avanzadas en Desarrollo de Software

Los Diagramas de Actividades encuentran aplicaciones significativas en diversas áreas del desarrollo de software:

En el análisis de requisitos:

Permiten descomponer procesos de negocio complejos en pasos manejables, facilitando la identificación de requisitos funcionales y no funcionales. Por ejemplo, en un sistema de reservas de hotel, un diagrama de actividades podría mostrar el flujo completo desde la búsqueda de disponibilidad hasta la confirmación de la reserva.

En el diseño de sistemas:

Ayudan a planificar la arquitectura de un sistema al mostrar cómo los diferentes componentes interactúan para completar un proceso. Esto es especialmente útil en sistemas distribuidos donde múltiples servicios deben coordinarse.

En la optimización de procesos:

Al visualizar todo el flujo de actividades, los equipos pueden identificar redundancias o pasos innecesarios que podrían simplificarse o automatizarse. Por ejemplo, en un proceso de aprobación de documentos, el diagrama podría revelar cuellos de botella donde las solicitudes suelen quedarse estancadas.

En la documentación de sistemas legacy:

Para sistemas antiguos con poca documentación, crear diagramas de actividades basados en el código existente ayuda a entender la lógica del negocio implementada, facilitando futuras modificaciones o migraciones.

3. Diagrama de Secuencia

3.1 Definición y Propósito Fundamental

Un Diagrama de Secuencia es un tipo de diagrama de interacción que muestra cómo los objetos operan entre sí y en qué orden dentro de un escenario particular. Estos diagramas son especialmente valiosos para modelar el comportamiento de un sistema a lo largo del tiempo, mostrando la secuencia exacta de mensajes intercambiados entre los objetos.

La importancia de los Diagramas de Secuencia radica en su capacidad para:

  • Visualizar claramente el flujo de control en tiempo de ejecución
  • Identificar dependencias críticas entre componentes
  • Facilitar la detección de problemas de sincronización en sistemas concurrentes
  • Servir como base para la generación de casos de prueba
3.2 Ejemplo Detallado (Proceso en Cafetería)

El siguiente texto en formato UML describe un proceso de pedido en una cafetería:

1. Cliente -> Cajero: Entra a la cafetería
2. Cliente -> Cajero: Hace fila
3. Cliente -> Cajero: Solicita un café
4. Cajero -> Cliente: Informa precio
5. Cliente -> Cajero: Realiza el pago
6. Cajero -> Barista: Envía orden de café
7. Barista -> Barista: Prepara el café
8. Barista -> Cliente: Entrega el café

Análisis exhaustivo de las interacciones:

  1. Inicio de la interacción: El cliente inicia el proceso al entrar a la cafetería y hacer fila (pasos 1-2). Este paso representa la activación del caso de uso.
  2. Solicitud de servicio: El cliente formula su pedido al cajero (paso 3), lo que desencadena una serie de interacciones posteriores.
  3. Procesamiento del pedido:
    • El cajero responde con información sobre el precio (paso 4), estableciendo un contrato temporal entre las partes.
    • El cliente cumple con su parte al realizar el pago (paso 5).
  4. Coordinación interna: El cajero deriva la orden al barista (paso 6), demostrando cómo los roles se especializan en diferentes tareas dentro del sistema.
  5. Ejecución del servicio: El barista realiza el trabajo principal de preparación (paso 7), que representa la operación central del proceso.
  6. Finalización: El barista entrega el producto final al cliente (paso 8), completando satisfactoriamente la transacción.

Este diagrama podría extenderse para mostrar casos alternativos, como cuando no hay inventario del producto solicitado, o para mostrar interacciones más complejas con sistemas de pago electrónico.

3.3 Aplicaciones en Sistemas Modernos

Los Diagramas de Secuencia encuentran aplicaciones críticas en diversos contextos tecnológicos:

En arquitecturas microservicios:

Permiten modelar cómo los diferentes servicios interactúan para completar una transacción distribuida. Por ejemplo, en un sistema de comercio electrónico, podrían mostrar la secuencia entre el servicio de catálogo, carrito de compras, procesamiento de pagos y envíos.

En sistemas de tiempo real:

Son esenciales para garantizar que las interacciones entre componentes cumplan con restricciones temporales estrictas. En sistemas de control industrial, por ejemplo, pueden mostrar los tiempos máximos permitidos entre la detección de un evento y la respuesta del sistema.

En el diseño de APIs:

Ayudan a documentar el flujo esperado de llamadas entre clientes y servidores, especificando el orden correcto de invocación de endpoints y las precondiciones para cada operación.

En la resolución de problemas:

Cuando ocurren errores en sistemas complejos, recrear el diagrama de secuencia del flujo fallido ayuda a identificar en qué punto exacto se produjo la falla y qué componentes estuvieron involucrados.

4. Diagrama de Objetos

4.1 Conceptos Fundamentales

Un Diagrama de Objetos es una representación estática que muestra instancias específicas de clases en un momento particular de la ejecución del sistema. A diferencia del Diagrama de Clases que muestra las plantillas, este diagrama presenta objetos reales con sus valores concretos, ofreciendo una "instantánea" del sistema en funcionamiento.

Las características principales incluyen:

  • Muestra objetos (instancias de clases) con sus atributos poblados
  • Ilustra enlaces temporales entre objetos durante la ejecución
  • Es especialmente útil para entender escenarios complejos de interacción
4.2 Ejemplo Ampliado (Sistema de Gestión de Alumnos)

Basándonos en el código SQLite anterior, podemos identificar los siguientes objetos clave:

Objeto admin (AlumnosDbHelper):

  • Atributos:
    • context: Referencia al contexto de la aplicación Android
    • databaseName: "administracion"
    • version: 1
  • Responsabilidades:
    • Gestionar la creación y actualización de la base de datos
    • Proporcionar métodos para operaciones CRUD

Objeto bd (SQLiteDatabase):

  • Estado:
    • Modo: escritura (por getWritableDatabase())
    • Tablas activas: "alumnos"
  • Operaciones realizadas:
    • Ejecución de consulta RAW
    • Cierre de conexión

Objeto fila (Cursor):

  • Contenido:
    • Resultados de la consulta "select codigo, nombre from alumnos"
    • Posición actual: gestionada por moveToFirst() y moveToNext()

Objeto list (ArrayList<String>):

  • Contenido típico:
    • ["A001", "Juan Pérez", "A002", "María García"] en caso de éxito
    • ["sin datos", "sin datos"] en caso de fallo

Objeto adapter (ArrayAdapter<String>):

  • Configuración:
    • Layout: simple_spinner_item
    • Contexto: aplicación actual
  • Relación:
    • Conecta list con grid

Objeto grid (GridView):

  • Estado:
    • Adaptador asociado: adapter
    • Datos mostrados: dependientes del estado de list
4.3 Relación con Otros Diagramas

El Diagrama de Objetos complementa otros diagramas UML de varias formas:

Con Diagramas de Clases:

Mientras el Diagrama de Clases muestra las posibles relaciones (cardinalidades, herencias), el Diagrama de Objetos muestra cómo se materializan esas relaciones en tiempo de ejecución con instancias específicas.

Con Diagramas de Secuencia:

El Diagrama de Objetos puede servir para mostrar el estado del sistema antes o después de una interacción representada en un Diagrama de Secuencia.

Con Diagramas de Estados:

Puede capturar los objetos relevantes cuando el sistema está en un estado particular.

5. Diagrama de Gestión (Flujo de Cajas)

5.1 Explicación Profunda

El Diagrama de Gestión presentado modela un proceso crítico en sistemas de punto de venta: el cierre coordinado de múltiples cajas registradoras. Este tipo de diagrama combina elementos de flujogramas con especificaciones temporales y de negocio.

Características clave del proceso:

  • Restricción temporal: Todo el proceso debe completarse antes de las 12:00 PM
  • Coordinación: No todas las cajas pueden cerrar simultáneamente
  • Prioridades: Se debe garantizar que al menos una caja permanezca activa
  • Temporización: Intervalos de 15 minutos entre cierres
5.2 Análisis de Componentes

El sistema involucra los siguientes actores y componentes:

Servidor Central:

  • Funciones principales:
    • Monitorear estado de todas las cajas (ocupadas/libres)
    • Orquestar el proceso de cierre
    • Implementar las reglas de negocio (tiempos de espera, cajas mínimas)

Cajas Registradoras (1-4):

  • Estados posibles:
    • Libre: disponible para cerrarse
    • Ocupada: atendiendo cliente, no puede cerrarse
  • Procesos individuales:
    • Corte de efectivo/tarjeta
    • Confirmación de cierre

Protocolos de Comunicación:

  1. Solicitud-Estado: El servidor consulta periódicamente el estado de cada caja
  2. Iniciar-Cierre: Cuando una caja está libre, el servidor inicia su proceso de cierre
  3. Confirmación: Cada caja notifica al servidor cuando completa su cierre
5.3 Casos de Uso Detallados

Escenario Normal:

  1. A las 11:30 AM, el sistema inicia el proceso
  2. Verifica que las cajas 1 y 2 están libres, mientras 3 y 4 están ocupadas
  3. Ordena cierre a la caja 1, que completa el proceso a las 11:45 AM
  4. A las 11:45 AM, verifica nuevamente estados:
    • Caja 2 sigue libre → inicia su cierre
    • Caja 3 ahora está libre → programada para 12:00 PM
  5. A las 12:00 PM, cierra la última caja disponible

Escenario de Contingencia:

  • Si a las 11:50 AM todas las cajas excepto una están ocupadas:
    • El sistema espera hasta que al menos dos estén libres
    • Prioriza mantener una caja activa hasta el último momento
  • Si alguna caja no responde:
    • Implementa timeout después de 3 intentos
    • Registra incidencia para revisión manual

6. Conclusión

Los diagramas analizados representan herramientas indispensables en el arsenal de cualquier ingeniero de software. Su importancia trasciende las fases iniciales de diseño, extendiéndose a la implementación, prueba y mantenimiento de sistemas complejos.

Diagrama de Actividades: Proporciona una visión macro de los procesos, ideal para entender flujos de trabajo completos y optimizar procedimientos. Su aplicación en el análisis de requisitos y diseño de sistemas asegura que todos los escenarios posibles sean considerados desde etapas tempranas.

Diagrama de Secuencia: Ofrece una perspectiva temporal detallada de las interacciones entre componentes. Es particularmente valioso en sistemas distribuidos modernos, donde entender el orden exacto de las operaciones puede ser la diferencia entre un sistema robusto y uno con condiciones de carrera difíciles de depurar.

Diagrama de Objetos: Brinda instantáneas valiosas del sistema en ejecución, facilitando la depuración y la comprensión de estados complejos. Su relación con los diagramas de clases ayuda a puentear la brecha entre diseño estático y comportamiento dinámico.

Diagrama de Gestión: Para procesos operativos complejos con múltiples restricciones, como el ejemplo del cierre de cajas, estos diagramas son insustituibles. Permiten modelar no solo el flujo ideal, sino también manejar casos excepcionales y garantizar el cumplimiento de políticas de negocio críticas.