Modularización en Programación

Introducción

En este artículo vamos a ver qué es la MODULARIZACIÓN en programación y por qué es importante aplicarla. Además vamos a ver ejemplos de aplicación en lenguaje C# orientado a Unity.

¿Qué es la MODULARIZACIÓN en Programación y para qué sirve?

La palabra modularización proviene de módulo, cuya definición textual es: “Elemento con función propia concebido para poder ser agrupado de distintas maneras con otros elementos constituyendo una unidad mayor.”

La modularización es el proceso por el cual seleccionamos y agrupamos instrucciones de programación que cumplen una función específica.

Crear módulos es importante debido a lo siguiente:

Supongamos que tenemos un problema, tan complejo como se quiera y cuya solución consiste en ejecutar tantas instrucciones de programación como se necesite. Utilizando módulos de programación, podemos construir una solución que se pueda ejecutar empleando una sola instrucción, esta instrucción lo que hará es ir al contenido del módulo, ejecutar cada una de sus instrucciones y al finalizar el programa retornará al punto donde se hizo la llamada al módulo.

La ventaja de esto es que el módulo lo creamos una única vez y luego lo podemos reutilizar cuantas veces sea necesario y desde cualquier parte del código, además ya no necesitamos pensar en el funcionamiento interno del módulo, lo utilizamos como un conjunto que sabemos que va a realizar determinada función. En otras palabras, aumentamos el grado de abstracción de nuestro código.

reutilización de código utilizando módulos de programación
Fig. 1: A izquierda una lista de instrucciones con código repetido. Con un módulo podemos reutilizar el código y obtener algo más compacto como se ve a la derecha.

Características de los módulos en programación

Respecto a la Funcionalidad

Un módulo debe tener una función específica y no ir más allá de sus responsabilidades. Por ejemplo, si tenemos un módulo que se encarga de calcular calcular el producto de dos números y devolver el resultado, no sería adecuado que además imprima mensajes en pantalla o haga otra cosa que vaya más allá de su propósito.

Respecto a la Identificación

Los módulos tienen un nombre de identificación que nos permite ejecutarlos, es recomendable que elijamos este nombre de modo que sea lo más representativo posible de la función que realiza, de esa forma resulta más intuitivo a la hora de usarlo.

Parámetros de entrada

Los módulos pueden aceptar datos de entrada que serán utilizados por sus instrucciones internas para realizar la función.

Al momento de definir un módulo se deben indicar todos los parámetros que requiere y de qué tipo de dato se trata. Al momento de ejecutar el módulo se deben agregar todos los parámetros necesarios, en el orden establecido y deben ser del tipo correcto.

Parámetro de salida

Los módulos pueden devolver un dato como resultado de su ejecución.

Al momento de definir un método se debe indicar el tipo de dato que devuelve y la última instrucción del módulo debe ser la devolución de ese dato. Al momento de la ejecución del módulo, se debe tener en cuenta que el llamado a ese método implica como resultado un dato, por lo tanto hay que ver qué se hace con ese dato, podemos por ejemplo asignarlo a una variable o un objeto.

Visibilidad

Cuando definimos un módulo podemos darle distintos tipos de visibilidad que limitarán el acceso a ellos, por ejemplo los módulos que pertenecen al funcionamiento interno de una clase de programación usualmente se definen como privados, para que no pueda accederse a ellos desde un contexto externo a esa clase.

En C# tenemos tres tipos de visibilidad, pública, privada y protegida.

La visibilidad pública implica que la función puede ser accedida desde cualquier contexto, es decir podemos por ejemplo ejecutar la función desde otro script de programación.

La visibilidad privada implica en términos simples que el módulo sólo puede ser accedido desde el mismo Script de programación.

La visibilidad protegida se utiliza cuando tenemos herencia de clases y sirve para que las subclases puedan acceder a estos módulos, pero no las clases externas.

características de un módulo de programación
Fig. 2: En esta imagen están resumidas las características principales de un módulo de programación.

Definición de un módulo en C#

Para crear un módulo en C# vamos a usar la sintaxis de declaración de un método de programación, la cual consiste en indicar primero el tipo de visibilidad, luego el tipo de dato de retorno (o escribir “void” si no retorna datos), a continuación el nombre de identificación del módulo (se recomienda iniciar con mayúscula y usar camel case), luego entre paréntesis todos los datos que requiere el método incluyendo el tipo dato y finalmente se abre y se cierran las llaves. Todas las instrucciones del módulo estarán dentro de esas llaves.

En la figura 3 podemos ver la sintaxis de varios módulos genéricos, todos ellos con visibilidad pública (para que sea privada hay que utilizar la palabra “private”).

Arriba a la izquierda tenemos un módulo que no devuelve datos (en la definición se utiliza void) y tampoco requiere parámetros de entrada (se abre y cierra paréntesis).

Arriba a la derecha tenemos un método que no devuelve datos y requiere una cantidad N de parámetros (vemos que entre paréntesis se incluyen los datos separados por coma). El parámetro p1 podría ser por ejemplo “bool b1” indicando que es de tipo bool y su nombre es “b1”. Osea que dentro del módulo podemos utilizar b1 sabiendo que es la información que viene del exterior.

ejemplos genéricos de la sintaxis de los módulo de programación
Fig. 3: Ejemplos genéricos de la sintaxis de los módulos en programación.

En la figura 3, abajo a la izquierda tenemos un método que no requiere parámetros de entrada pero si devuelve un dato, ya que al lado de public dice “datoX”. En lugar de datoX tenemos que poner un tipo de dato, como una variable primitiva o un objeto, por ejemplo “int” indica que el módulo devuelve un valor entero, mientras que “Vector3” indica que el módulo va a devolver un objeto de la clase Vector3. Nótese que al final del método se devuelve un valor de nombre X, este valor debe ser del mismo tipo que fue declarado en el método.

En la figura 3, abajo a la derecha tenemos un método que requiere parámetros y devuelve un dato.

Ejemplo de un módulo en C#: Calcular el área de un círculo de determinado radio

Vamos a diseñar un módulo que se encargue de calcular el área de un círculo, este módulo recibirá como parámetro un valor real que representa el radio del círculo y devolverá un valor real que será el valor del área de un círculo con ese radio.

Pseudocódigo

Función AreaCirculoDeRadio (REAL radio)
– INICIO
– – Real area <- PI * radio * radio
– – Devolver area
– FIN

Implementación en C#

La sintaxis en lenguaje C# de un método basado en el pseudocódigo anterior es la siguiente.

Definición del módulo

private float AreaCirculoDeRadio(float radio){
      float area = Mathf.PI * radio * radio;
      return area;
}

Por supuesto no es la única opción, también puede ser definido de esta forma:

private float AreaCirculoDeRadio(float radio){
      return Mathf.PI * radio * radio;
}

Utilización del módulo

Luego podemos por ejemplo hacer uso de este módulo de programación desde el método Start de Unity de la siguiente forma:

void Start(){
      float r = 5;
      float a=AreaCirculoDeRadio(r);
      Debug.Log("El área de un círculo de radio "+r+" es: "+a+".");
}

Deja un comentario

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