6.5. Encapsulado y generalización

Por “encapsulado” generalmente se entiende tomar una pieza de código y envolverla en una función, permitiéndole obtener las ventajas de todo aquello para lo que valen las funciones. Hemos visto dos ejemplos de encapsulado, cuando escribimos imprimeParidad en la Sección 4.5 y esDivisible en la Sección 5.4.

Por “generalización” entendemos tomar algo específico, como imprimir los múltiplos de 2, y hacerlo mas general, como imprimir los múltiplos de cualquier entero.

He aquí una función que encapsula el bucle de la sección anterior y la generaliza para imprimir múltiplos de n.
def imprimeMultiplos(n):

   1: i = 1
   2: while i <= 6:
   3:     print n*i, '\t',
   4:     i = i + 1
   5: print


Para encapsular, todo lo que hubimos de hacer fue añadir la primera línea, que declara el nombre de la función y la lista de parametros. Para generalizar, todo lo que tuvimos que hacer fue sustituir el valor 2 por el parametro n.


Si llamamos a esta funcion con el argumento 2, obtenemos la misma salida que antes. Con el argumento 3, la salida es:




   1: 3     6     9     12     15     18


y con argumento 4, la salida es




   1: 4     8     12     16     20     24


A estas alturas es probable que haya adivinado como vamos a imprimir una tabla de multiplicacion: llamaremos a imprimeMultiplos repetidamente con diferentes argumentos. De hecho, podemos a usar otro bucle:




   1: i = 1
   2: while i <= 6:
   3:     imprimeMultiplos(i)
   4:     i = i + 1

Observe hasta que punto este bucle es similar al que hay en el interior de imprimeMultiplos. Todo lo que hicimos fue sustituir la sentencia print por una llamada a una función.


La salida de este programa es una tabla de multiplicación:




   1: 1 2 3 4 5 6
   2: 2 4 6 8 10 12
   3: 3 6 9 12 15 18
   4: 4 8 12 16 20 24
   5: 5 10 15 20 25 30 
   6: 6 12 18 24 30 36
0