Subprogramas Declaraciones de subprogramas Tipos de subprogramas Devolución de valores de un subprograma Llamado a un subprograma Transferencia de parámetros a subprogramas Alcance global Alcance local Prof. MSc. Luis Diego Sancho Fallas UAM Semana 09 Subprogramas En computación, una subrutina o subprograma (también llamada procedimiento, función o rutina), 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, utilizan el nombre función para referirse a subrutinas que devuelven un valor. 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, en cambio cuando se llama a una macro, el compilador toma el código de la macro y lo implanta donde fue llamado, aumentando así el código fuente y por consiguiente el objeto. Elementos de la declaración de un Subprograma Las declaraciones de subrutinas generalmente son especificadas por: 1. 2. 3. 4. Un nombre único en el ámbito: nombre de la función con el que se identifica y se distingue de otras. No podrá haber otra función ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). Un tipo de dato de retorno: tipo de dato del valor que la subrutina devolverá al terminar su ejecución. Una lista de parámetros: especificación del conjunto de argumentos (pueden ser cero, uno o más) que la función debe recibir para realizar su tarea. El código u órdenes de procesamiento: conjunto de órdenes y sentencias que debe ejecutar la subrutina. Ejemplo de Subprograma Ejemplos PROGRAMA principal instrucción 1 instrucción 2 ... instrucción N ... SUBRUTINA NombreX ....... FIN SUBRUTINA ... FIN PROGRAMA principal. Subprogramas La siguiente función es la analogía al cálculo del promedio matemático. La función "Promedio" devuelve un valor decimal correspondiente a la suma de 2 valores enteros de entrada (A y B): float Promedio(int A, int B) { float r; r=(A+B)/2.0; return r; } Así una llamada "Promedio(3, 5)" devolverá el valor de tipo real (float) 4,0. Nuestro primer subprograma en Java. package primer_subprograma_00; // Paquetes de Java import java.awt.Graphics; // importar la clase Graphics import javax.swing.JApplet; // importar la clase JApplet public class SubprogramaBienvenido extends JApplet { // dibujar texto en el fondo del subprograma public void paint( Graphics g ) { // llamar a la versión del método paint de la superclase super.paint( g ); // dibujar un String en la coordenada x 25 y la coordenada y 25 g.drawString( "¡Bienvenido a la programación en Java!", 25, 25 ); }// fin del método paint }// fin de la clase SubprogramaBienvenido Salida // Mostrar varias cadenas en un subprograma. // paquetes de Java import java.awt.Graphics; // importar la clase Graphics import javax.swing.JApplet; // importar la clase JApplet public class SubprogramaBienvenido2 extends JApplet { // dibujar texto en el fondo del subprograma public void paint( Graphics g ) { // llamar a la versión del método paint de la superclase super.paint( g ); // dibujar dos valores String en diferentes ubicaciones g.drawString( "¡Bienvenido a", 25, 25 ); g.drawString( "la programación en Java!", 25, 40 ); }// fin del método paint } // fin de la clase SubprogramaBienvenido2 Salida public class SubprogramaBienvenido extends JApplet { // dibujar texto en el fondo del subprograma public void paint( Graphics g ) { // dibujar líneas y una cadena en el fondo del subprograma // llamar a la versión del método paint de la superclase super.paint( g ); // dibujar una línea horizontal, desde (15, 10) hasta (250, 10) g.drawLine( 15, 10, 250, 10 ); // dibujar una línea horizontal desde (15, 30) hasta (250, 30) g.drawLine( 15, 30, 250, 30 ); // dibujar String entre líneas, en la ubicación (25, 25) g.drawString( "Bienvenido a la programacion en Java!", 25, 25 ); }// fin del método paint }// fin de la clase SubprogramaBienvenido Salida // Suma dos números de punto flotante. // paquetes de Java import java.awt.Graphics; // importar la clase Graphics import javax.swing.*; // importar el paquete javax.swing public class SubprogramaSuma extends JApplet { double suma; // la suma de los valores introducidos por el usuario // inicializar el subprograma, obteniendo los valores del usuario public void init() { String primerNumero; // primera cadena introducida por el usuario String segundoNumero; // segunda cadena introducida por el usuario double numero1; double numero2; // primer número a sumar // segundo número a sumar // obtener el primer número del usuario primerNumero = JOptionPane.showInputDialog("Escriba el primer valor de punto flotante" ); // obtener el segundo número del usuario segundoNumero = JOptionPane.showInputDialog("Escriba el segundo valor de punto flotante" ); // convertir los números de tipo Stromg a tipo double numero1 = Double.parseDouble( primerNumero ); numero2 = Double.parseDouble( segundoNumero ); // sumar los números suma = numero1 + numero2; }// fin del método init // dibujar los resultados en un rectángulo en el fondo del subprograma public void paint( Graphics g ) { // llamar a la versión del método paint de la superclase super.paint( g ); // dibujar un rectángulo, empezando desde (15, 10), que tenga 270 // píxeles de ancho y 20 píxeles de alto g.drawRect( 15, 10, 270, 20 ); // dibujar los resultados como String en (25, 25) g.drawString( "La suma es " + suma, 25, 25 ); }// fin del método paint } // fin de la clase SubprogramaSuma Salida