Introducción a la programación (Day 11)
Bienvenidos al tercer día (espero que ya hayáis descubierto el secreto del título) de nuestro curso de introducción a la programación.
Hoy toca: ¡¡ Funciones / Métodos / Procedimientos !!
Como siempre hemos hecho, recurrimos a nuestro especialista en… todo. San Wiki.
En informática, una subrutina o subprograma (también llamada procedimiento, función , rutina o método), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica. Algunos lenguajes de programación, como Visual Basic .NET o Fortran, utilizan el nombre «function» para referirse a subrutinas que devuelven un valor.
Se le llama subrutina a un segmento de código separado del bloque principal y que puede ser invocado en cualquier momento desde este o desde otra subrutina. Una subrutina, al ser llamada dentro de un programa, hace que el código principal se detenga y se dirija a ejecutar el código de la subrutina.
Vamos a darle un poco de sentido a lo que nos cuenta San Wiki, que siempre habla un poco raro…
Básicamente, es un trozo de código que se encarga de hacer exclusivamente una función en concreto.
Vamos con un ejemplo refrescante:
- Preparación del Gazpacho
- Coger tomates
- Coger pimiento verde
- Coger pepino
- Coger cebolla
- Coger pan duro
- Coger diente de ajo
- Coger aceite de oliva
- Coger vinagre
- Coger aceite de oliva
- Coger vinagre
- Coger Sal
- Lavar tomates
- Lavar pimiento verde
- Echar Tomates
- Echar pimiento verde
- Echar pepino
- Echar cebolla
- Poner el pan duro en remojo
- Echar diente de ajo
- Echar aceite de oliva
- Echar vinagre
- Echar Sal
- Triturar
- Echar pan remojado
- Triturar
- Ajustar sabor
- Remover
- Echar Hielos
- Servir
(¡¡¡¡ POR FAVOR, NO SIGÁIS ESTA RECETA !!!!)
Básicamente esto seria el «programa» de hacer un gazpacho. Como podemos ver, es muy extenso y casi que cuesta leerlo, ¿podemos hacer algo? Claro que sí, vamos a hacer uso de todo los conocimientos adquiridos hasta ahora para que tenga mejor pinta.
2. Preparación de un Gazpacho «modo informático».
Función CogerIngredientes(alimentos) {
Repetir para todos los alimentos –> alimento{
coger (alimento);
}
}
Función EcharIngredientes(alimentos) {
Repetir para todos los alimentos –> alimento{
echar a la olla (alimento);
}
}
Función LavarIngredientes(alimentos) {
Repetir para todos los alimentos –> alimento{
lavar (alimento);
}
}
- CogerIngredientes (tomates, pimiento verde, pepino, cebolla, pan duro, diente de ajo, aceite de oliva, vinagre, sal)
- LavarIngredientes (tomates, pimiento verde)
- EcharIngredientes (tomates, pimiento verde, pepino, cebolla, diente de ajo, aceite de oliva, vinagre, sal)
- Poner el pan duro en remojo
- Triturar
- EcharIngredientes (pan en remojo)
- Triturar
- Ajustar sabor
- Remover
- Echar Hielos
- Servir
Gran diferencia, ¿no? hemos conseguido reducir nuestro «programa» de 30 instrucciones a 11.
Vamos a explicar un poco lo que hemos hecho:
Primero hemos visto que hacíamos 1 tarea muchas muchas veces, como es el ejemplo de «echar», «pelar» y «lavar». Así que las hemos aislado en una función, que recibe un array de alimentos, recorremos ese array yendo 1 a 1 y ejecutando la tarea aislada.
Si vemos un poco más dentro de la función (que es lo que se ejecutaría al llamarla en el punto 1, 2, 3 y 6) vemos como la función CogerIngredientes recibe desde la parte principal de nuestro programa una variable «alimentos». Esta variable será un array (una caja, para entendernos) de alimentos y podemos ir recorriendo 1 a 1 nuestros elementos, independiente del tamaño de la caja y ejecutando siempre la tarea «coger».
Si analizásemos punto a punto cómo sería en el momento de ejecución:
- CogerIngredientes (tomates, pimiento verde, pepino, cebolla, pan duro, diente de ajo, aceite de oliva, vinagre, sal)
- Coger tomates
- Coger pimiento verde
- Coger pepino
- Coger cebolla
- Coger pan duro
- Coger diente de ajo
- Coger aceite de oliva
- Coger vinagre
- Coger aceite de oliva
- Coger vinagre
- Coger Sal
- LavarIngredientes (tomates, pimiento verde)
- Lavar tomates
- Lavar pimiento verde
- EcharIngredientes (tomates, pimiento verde, pepino, cebolla, diente de ajo, aceite de oliva, vinagre, sal)
- Echar Tomates
- Echar pimiento verde
- Echar pepino
- Echar cebolla
- Echar diente de ajo
- Echar aceite de oliva
- Echar vinagre
- Echar Sal
- Poner el pan duro en remojo
- Triturar
- EcharIngredientes (pan en remojo)
- Echar pan en remojo
- Triturar
- Ajustar sabor
- Remover
- Echar Hielos
- Servir
Podemos ver como el resultado es muy muy similar al primero que pusimos, pero esto es solamente en el momento en el que la máquina ejecuta el programa. Sin embargo, hemos ganado muchas cosas al usar las funciones, que de la otra manera no y son:
- Tamaño relativamente pequeño.- Esto facilita aislar el impacto que pueda tener la realización de un cambio en el programa, bien para corregir un error, o bien por rediseño del algoritmo correspondiente.
- Independencia modular.- Cuanto más independientes son los módulos entre sí más fácil y flexiblemente se trabajará con ellos. Esto implica que para desarrollar un módulo no es necesario conocer detalles internos de otros módulos. Como consecuencia de la independencia modular, un módulo cumplirá:
- Características de caja negra; es decir, abstracción.
- Aislamiento de los detalles mediante encapsulamiento.
La independencia modular mejora el rendimiento humano, pudiendo realizarse programación en equipo y desarrollar módulos paralelamente. También contribuye a la reutilización de software.
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable.
Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que esta puede resolver.
Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Esto debe hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser resueltos fácilmente con algún lenguaje de programación. Esta técnica se llama refinamiento sucesivo, divide y vencerás.
¡Espero que os haya servido de ayuda!
Cualquier duda, ¡nos vemos en los comentarios!.
¡¡Un saludo!!