En Ingeniería de software, como en otras ingenierías, se buscan soluciones eficientes a problemas prácticos. Estas soluciones se materializan, casi siempre, en la creación de programas informáticos.
Estos programas son modelos informáticos (creados en la memoria de una computadora) de la situación que pretenden solucionar, definida por flujos, reglas e información. El proceso de crear estos modelos, es llamado modelamiento.
Necesitamos modelar el problema, porque es la única forma en que una computadora puede «manejar» el problema. Modelar implica crear modelos informáticos, en estructuras de datos (que es lo que finalmente manejan las computadoras) que representen a la situación que pretendemos resolver.
Modelos en bases de datos
Consideremos el problema de gestionar un colegio; tal vez para la matrícula, control de asistencia, y registro de notas (el alcance detallado dependerá del levantamiento de los requerimientos).
La solución más común sería desarrollar un sistema informático centrado en una base de datos.
El producto del modelamiento de la base de datos, es precisamente el modelo del problema que queremos resolver en ese colegio, y ese modelo es, a fin de cuentas, un conjunto de estructuras de datos. Da lo mismo si nos referimos al modelo relacional, al diagrama entidad-relación o al modelo físico de la base de datos. Todos son estructuras de datos.
La mayoría de sistemas de información, incluyendo a los ERP, se fundamentan sobre un modelo creado en una base de datos, del tipo que sea.
Las bases de datos son sistemas muy apropiados para crear modelos informáticos, incluyendo reglas de negocio, para las diversas áreas de una empresa, en todos los campos el comercio y la industria. Y no solo crean modelos, sino que almacenan también la información, en forma segura, y permiten trabajar de manera eficiente con ella. Es decir, que las bases de datos no solo son modelos representativos (como lo sería el plano impreso de una casa), sino que son modelos vivos y funcionales (un plano impreso no permite agregar reglas o hacer búsquedas automatizadas) de algún área de una empresa o a la empresa completa.
Discutir sobre los diversos tipos de bases de datos existentes o lo bien o mal que pueden modelar a una situación, escapa a los objetivos de este artículo. Pero las bases de datos se han convertido en el modelo de facto de casi todo sistema informático empresarial. Tal es así que existen ingenieros especializados, y un sinfín de herramientas, dedicadas al modelamiento en bases de datos.
Estructuras de datos
No todos los modelos se materializan en bases de datos, algunos son solo estructuras particulares (diferentes a las bases de datos) que viven en la RAM de algún computador o servidor.
Consideremos el problema de ordenar una lista de palabras por orden alfabético.
La mayoría de programadores empezará creando un arreglo (o alguna estructura tipo lista) de cadenas y luego procederá a implementar alguno de los algoritmos de ordenamiento.
Estas estructuras, como arreglos o listas, son todas estructuras de datos que residen en la memoria de una computadora. No son una lista de palabras como la que se menciona en el problema. Son solo representaciones informáticas de la verdadera lista de palabras. Se necesita modelar la lista de palabras en estructuras, de cierto lenguaje de programación, para poder realizar las comparaciones e implementar el algoritmo finalmente.
Inclusive el programa más tonto, como el que suma dos números, requiere crear un modelo en el que usamos variables numéricas, de cierto lenguaje para representar (modelar) a los números, mientras que probablemente usaremos al operador «+» (que finalmente se ejecutará como un conjunto concreto de instrucciones máquina) del lenguaje para modelar a la operación matemática de suma (algo completamente abstracto).
Los mejores modelos
Mientras mejor podamos modelar un problema en código, mejor podremos resolverlo. Y esto es aplicable a todas las ingenierías.
En software, los modelos se crean usando distintas herramientas (y hay muchas). Un modelo en particular puede crearse en una base de datos, o e una estructura de datos, de algún lenguaje de programación.
Si elegimos una base de datos, podemos elegir el tipo de base de datos (relacional o no relacional) y la base de datos en sí.
Y si usamos un lenguaje de programación, también podremos elegir el tipo de lenguaje (Declarativo o Funcional) y el paradigma (Imperativo, Orientado a objetos, etc.).
No existe la estructura perfecta para modelar todo tipo de casos. Cada una se adaptará mejor a un tipo de problema. Por ello, los desarrolladores de software deben conocer muchas herramientas y tecnologías de software para elegir la más apropiada. De otra forma terminarán creando soluciones ineficientes y costosas.
Hay paradigmas famosos, como la Programación orientada a objetos, que ha demostrado servir bien para modelar problemas concretos y abstractos, por lo tanto se usan profusamente en muchos lenguajes de programación, pero no hay que perder de vista que se trata de un paradigma más, de muchos existentes.
Modelo y Vista
Dijimos que, finalmente, los modelos informáticos, son estructuras de datos (excepto, tal vez, algo como un diagrama de clases escrito a mano en papel), y que estos residen en la memoria o disco de una computadora.
Por ejemplo un objeto de C++, que representa a un cliente, puede estar guardado en cierta posición de la memoria en donde almacena sus atributos, como la edad o el nombre de la persona.
Queda claro que el cliente real no vive en la memoria de la computadora, sino que solo se guarda su modelo o representación.
Esto nos lleva a la siguiente pregunta: ¿Cómo podemos ver ese modelo?
Primeramente hay que dejar en claro que los bytes de información que se guardan en la memoria RAM o en disco, no son visibles. La memoria RAM es solo un conjunto de minúsculos elementos semiconductores, en ciertas posiciones físicas, y que están en cierto estado de conducción o almacenando cargas eléctricas, que representan bits de información. Definitivamente no son visibles, ni aún con un microscopio. Inclusive si tuviéramos visión microscópica y de rayos X (para poder ver dentro de los chips), pudiéramos ver cargas eléctricas, y supiéramos leer binario; los bits que veríamos estarían dispuestos, físicamente, de forma tan poco apropiada que nos costaría leer más de un byte dentro de la memoria RAM.
Por lo tanto, los modelos de software (estructuras de datos en memoria) son inherentemente invisibles.
Seguro que algunos dirían: «Pero si yo puedo ver los registros de una tabla o el valor de una variable en la pantalla».
Pero la verdad es que, existen ciertos procesos, bastante complicados que permiten «leer» la información de la memoria RAM o el disco duro, para poder mostrarlos en pantalla. Discutir tales procesos, sería agotador y requeriría conocimientos avanzados de electrónica digital y arquitectura de computadoras. Basta con saber que lo que vemos en pantalla es el producto de muchos mecanismos de hardware y de software que nos permiten «ver» la información de un modelo o estructura de software.
A esos mecanismos que permiten ver la información binaria (porque finalmente todo se guarda en memoria en bits) de un modelo en pantalla o impresora, es lo que se llama «Vista».
Los modelos se pueden «ver» debido al trabajo de las vistas, que finalmente son software común que puede mostrar texto o imagen en pantalla. Pero, cada vista distinta puede mostrar al modelo de una forma diferente.
Existe un patrón de diseño muy conocido que define claramente la separación del modelo con sus vistas, es el llamado «Modelo Vista Controlador».
Pongamos como ejemplo el famoso programa «Hola mundo» en C:
#include <stdio.h> int main() { printf("Hola mundo"); return 0; }
El modelo en este caso podría ser la cadena «Hola mundo», que se guardará en memoria como un conjunto de bytes. La vista sería el programa mismo de C, compilado, que mediante llamadas a funciones de <stdio.h> logra que se muestre en pantalla el mensaje «Hola mundo».
Solo por curiosidad y ya que lo mencioné, ¿Qué pasaría si pudiéramos ver cargas eléctricas dentro de una CPU sencilla como la 6502? Les invito a reproducir esta animación: http://www.visual6502.org/JSSim/index.html
¿Cómo citar este artículo?
- En APA: Hinostroza, T. (23 de diciembre de 2020). Modelos de software. Blog de Tito. https://blogdetito.com/2020/12/23/modelos-de-software/
- En IEEE: T. Hinostroza. (2020, diciembre 23). Modelos de software. Blog de Tito. [Online]. Available: https://blogdetito.com/2020/12/23/modelos-de-software/
- En ICONTEC: HINOSTROZA, TIto. Modelos de software [blog]. Blog de Tito. Lima Perú. 23 de diciembre de 2020. Disponible en: https://blogdetito.com/2020/12/23/modelos-de-software/
Dejar una contestacion