Soluciones de Software, Diseño y Patrones: Conceptos Clave en Ingeniería Informática

Tipos de Soluciones de Software

Software Genérico

  • Orientado a: Empresas que llevan su trabajo ordenado y con procesos simples.
  • Ventajas:
    • Es un software sofisticado y estable.
    • Su implementación en una empresa es inmediata.
  • Desventajas:
    • Tiene un mayor costo que el software hecho a medida.
    • La empresa debe adaptar sus procesos al sistema.

Software a Medida

  • Orientado a: Grandes empresas que buscan solucionar problemas que no se resuelven mediante ERP.
  • Ventajas:
    • Es propio de una empresa, por tanto, se pueden personalizar las interfaces.
    • Cubre las necesidades específicas de una organización, ya que está desarrollado acorde a sus procesos.
  • Desventajas:
    • Puede presentar fallas, ya que es un software que no ha sido probado con anterioridad.
    • No es una solución inmediata, ya que debe ser construido acorde a los procesos de la empresa.

Diseño de Software

Principios

  • Abstracción: Enfocarse en un objeto para un propósito particular, con el fin de conseguir solo información relevante.
  • Acoplamiento y cohesión: El acoplamiento se define como la medida de interdependencia, y la cohesión es qué tan asociados están los elementos en un módulo.
  • Descomposición y Modularización: Un software se puede dividir en componentes pequeños.
  • Encapsulamiento u ocultamiento de información: Consiste en agrupar detalles internos de una abstracción y hacerlos inaccesibles a entidades externas.

Aspectos Claves

  • Concurrencia: Cómo se debe descomponer el software en procesos, tareas e hilos y tratar temas relacionados con la eficiencia, atomicidad, la sincronización y asuntos de planificación.
  • Control y manejo de datos: Cómo organizar los datos y controlar el flujo.
  • Distribución de los componentes: Cómo distribuir el software a través del hardware.
  • Manejo de errores: Excepciones y tolerancia a fallos; cómo prevenir y tolerar los fallos.
  • Interacción y presentación: Cómo estructurar y organizar las interacciones con los usuarios y la presentación de la información.
  • Persistencia de datos: Cómo manejar los datos a través del tiempo.

Descripción Estructural: Vista Estática

  • Lenguajes de descripción de arquitecturas: Son textuales, tienden a ser formales, son lenguajes usados para describir una arquitectura de software en términos de componentes y conectores.
  • Diagrama de clases y de objetos: Se utiliza para representar un conjunto de clases (y objetos) y sus relaciones.
  • Diagrama de componentes: Se usa para representar un conjunto de componentes.
  • Tarjetas de clase, responsabilidad y colaboración: Se usan para indicar los nombres de los componentes (clase), sus responsabilidades, y los nombres de los componentes que colaboran.
  • Diagrama de despliegue: Se utiliza para representar un conjunto de nodos (físicos) y sus interrelaciones.
  • Diagrama entidad-relación: Se utiliza para representar los modelos conceptuales de los datos almacenados en sistemas de información.
  • Lenguajes de descripción de interfaz: Lenguajes de programación que se utilizan para definir las interfaces de los componentes de software.
  • Diagrama de estructuras de Jackson: Se utilizan para describir las estructuras de datos en términos de secuencia, selección e interacción.
  • Diagrama de estructura: Se utilizan para describir la estructura de llamada de los programas.

Descripción de Comportamiento

  • Diagrama de actividad: Se utilizan para mostrar el flujo de control de una actividad.
  • Diagrama de colaboración: Se utiliza para mostrar el resultado de las interacciones que se producen entre un grupo de objetos.
  • Diagrama de flujo de datos: Se utiliza para mostrar el flujo de datos entre un conjunto de procesos.
  • Diagrama y tablas de decisión: Se utilizan para representar combinaciones complejas de condiciones y acciones.
  • Diagrama de flujo y diagramas de flujo estructurado: Se utilizan para representar el flujo de control y las acciones realizadas asociadas.
  • Diagrama de secuencia: Se utiliza para mostrar el resultado de las interacciones entre un grupo de objetos, con énfasis en el tiempo-pedido.
  • Diagrama de estados y transición de estados: Se utiliza para mostrar el flujo de control de estado a estado en una máquina de estados.
  • Lenguajes de especificación formal: Lenguajes textuales que utilizan conceptos básicos de las matemáticas.
  • Pseudocódigo y lenguajes de programación de diseño: Lenguajes estructurados como los lenguajes de programación utilizados para describir el comportamiento de un proceso.

Modelo 4+1

  • Vista Lógica:
    • Tareas: Se basa en requerimientos funcionales, es decir, en lo que el usuario espera del software.
    • Requiere de abstracción para representar los objetos que contendrá el software.
    • Diagrama: Diagrama de clases.
  • Vista de Proceso:
    • Se basa en requerimientos no funcionales como la referencia a fallos, integridad, disponibilidad y ejecución.
    • Existe un hilo de procesos conectados a la capa lógica.
    • Se encarga además de la concurrencia y distribución de los componentes.
    • Diagrama: Diagrama de actividad.
  • Vista de Implementación:
    • Empaqueta en pequeños trozos.
    • Se encarga de algunas tareas, como: requisitos, seguridad, estimación de costos, etc.
  • Vista Física:
    • Contempla requerimientos no funcionales como la fiabilidad de los datos, ejecución y escalabilidad.
    • Espera que los cambios a nivel de hardware tengan un mínimo impacto en el código.
    • Diagrama: Diagrama de despliegue.
  • Vista de Casos de Uso:
    • En esta vista se unifican todas las vistas anteriores.
    • Debe ser capaz de llegar a las vistas anteriores.
    • Diagrama: Diagrama de casos de uso.

Tipos de Diagramas UML

  • Caso de uso: Sirve para modelizar cuáles son los casos de uso del sistema y cuáles son los actores que están relacionados con ellos.
  • Diagrama de clases: Sirve para modelizar clases de objetos y sus relaciones, haciendo hincapié en los aspectos estructurales más que en el comportamiento.
  • Diagrama de objetos: Similar al de clases, aquí representamos objetos.
  • Diagrama de paquetes: Permite modelizar dependencias entre paquetes. Un paquete es un grupo de elementos UML.
  • Diagrama de comunicación: Modela la interacción entre varios objetos poniendo énfasis en el aspecto estructural.
  • Diagrama de secuencia: Similar al de comunicación, en este caso se pone énfasis en la secuencia temporal.
  • Diagrama de actividad: Habitualmente para describir procesos de manera similar a los diagramas de flujo (flow-chart).
  • Diagrama de visión general de interacción: Diagrama de actividades en el que hemos sustituido las actividades por diagramas de secuencia.
  • Diagrama de estados: Modela cómo afectan a un objeto los diferentes acontecimientos que pueden tener lugar en el sistema.
  • Diagrama de componentes: Modela diferentes componentes que forman parte de nuestro sistema y las interfaces que usan para comunicarse entre sí.
  • Diagrama de estructura compuesta: Permite modelizar la estructura interna en tiempo de ejecución de una clase o componente.
  • Diagrama de despliegue: Modela la distribución física, en tiempo de ejecución, de los diferentes artefactos de software.
  • Diagrama de tiempo.

Patrón de Diseño

Es una plantilla que utilizamos para solucionar un problema durante el desarrollo del software con el fin de conseguir que el sistema desarrollado tenga las buenas cualidades.

Elementos

  • Nombre: Hace referencia al patrón cuando documentamos nuestro diseño.
  • Contexto: Nos indica en qué condiciones se tienen que dar para que sea aplicable.
  • Problema: Indica qué resuelve el patrón.
  • Solución: Describe los elementos que forman parte del patrón, así como sus relaciones, responsabilidades y colaboraciones.
  • Consecuencias: Son resultados y compromisos derivados de la aplicación del patrón.

Casos en que se Aplica

  • Modelo de análisis: Durante la etapa de análisis nos encontramos con problemas consistentes.
  • Arquitectura de software: Al iniciar un proyecto, habrá que definir la arquitectura global.
  • Asignación de responsabilidades: Durante el diseño.
  • Diseño de software.
  • Programación.

Tipos de Patrones

  • Patrón de análisis: Aquellos patrones que documentan soluciones aplicables durante la realización del diagrama estático de análisis.
  • Patrón arquitectónico: Aquellos aplicables en la definición de la arquitectura de software.
  • Patrón de asignación de responsabilidades: Se utilizan durante la etapa de diseño.
  • Patrón de diseño: Aquellos que se aplican para resolver problemas más concretos con el diseño que no afectarán al conjunto de la arquitectura del sistema.
  • Patrón de programación: Patrón que describe cómo se pueden implementar ciertas tareas utilizando un lenguaje de programación concreto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.