Busqueda...

Acciones Nominadas



Acciones Nominadas


Acciones Nominadas (subprogramas o módulos): representan porciones de código que comprenden una o más acciones, que pueden ser llamados en el código principal y ser usados tantas veces sea necesario sin necesidad de escribir las acciones nuevamente. Establecen “paquetes o capsulas” de código que promueven la abstracción, la reutilización de código y facilitación de depuración de soluciones de gran tamaño. Son la base de la modularidad, que establece que un programa completo se compone de un conjunto de módulos. Fomenta el pensamiento “divide y vencerás”, que establece que la solución de un problema grande está compuesta por la solución de diversos subproblemas mas pequeños. Es la base del Principio de Optimalidad de Bellman que establece que la solución optima de un problema se consigue descomponiendo el problema en pequeñas partes, y aplicando la solución optima para cada parte implica la solución optima del problema principal. Facilitan el trabajo en grupo y permiten abstraerse de ciertas cosas a la hora de solucionar problemas puntuales. Se desarrollan bajo el enfoque de “caja negra”, que representa una caja donde ocurre un procesamiento del cual no estamos enterados del todo.
Se clasifican en:



Funciones: representan subprogramas que reciben n parámetros (n >= 1) y retornan m valores de salida (m > = 1). En algunos lenguajes, las funciones retornan únicamente 1 valor de salida, que a demás debe ser primitivo (como es el caso de C). En el pseudocodigo se cumple que deben recibir 1 o más valores de entrada y deben arrojar una única salida primitiva.
Declaración:
Función id-función (lista de parámetros) : tipo de retorno
Inicio
//declaración de variables locales
//acciones
Finfuncion
Ejemplo:
Var
a,b,c : entero
Función promedio (x : real, y : real, z: real) : real
Inicio
promedio, suma : real
suma ← (x + y + z)
promedio ← (suma/3)
retornar promedio
finfuncion //ejemplo de declaración
Inicio
leer (a)
leer (b)
leer (c)
escribir (“el promedio de los 3 números es:”, promedio(a,b,c))
fin
Las funciones al ser llamadas bajo unos parámetros determinados retornan valores, por esta razón es posible llamar a las funciones al lado derecho de asignaciones (sería equivalente a asignarle a una variable un valor, ese valor seria el retorno de la función), en operaciones de escritura (sería equivalente a escribir un valor, siendo el valor el retorno de la función), en expresiones (siendo la función un valor que sirve de operando, siendo ese valor el retorno de la función) o como parámetro en la invocación de otra función.



Procedimientos: son comúnmente conocidos como funciones que no retornan valores. Reciben n parámetros (n >= 0) y no retornan valores. Semánticamente, se puede usar un procedimiento para retornar valores si se hace uso del paso de parámetros por referencia, en donde aquellos parámetros pasados de esta forma podrían ser modificados dentro del procedimiento y el cambio se vería reflejado fuera de él cuando la subrutina termine. Como es posible pasar cualquier cantidad de parámetros y estos pueden modificarse todos si se quiere, se puede ver como una acción nominada que retorna múltiples valores.
Declaración:
proc id-procedimiento (lista de parámetros formales)
Inicio
//declaraciones locales
//acciones
finproc
Invocación:
id-proc (lista de parámetros actuales)
Como los procedimientos no retornan valores directamente, no es posible invocarlos de la misma forma que las funciones. Solo pueden ser invocados directamente como si fuese una acción más dentro de la secuencialidad del algoritmo, es decir directamente en el cuerpo del algoritmo. No pueden ser asignados a variables porque no retornan valores, así como tampoco es posible llamarlos como parámetros actuales de funciones, ni llamarlos en secuencias de escritura ni en expresiones.



Parámetros: establecen la comunicación entre los subprogramas, y definen la entrada de datos a los mismos. Con respecto a su ubicación se pueden clasificar como parámetros formales (aquellos parámetros en la declaración del subprograma) o parámetros actuales (aquellos usados en la invocación del subprograma). Cuando se llama a una subrutina en el cuerpo principal del algoritmo, el control de flujo se detiene momentáneamente para darle paso a la subrutina, que se encargara de realizar las acciones que tiene programadas. Cuando esto ocurre, se hace una sustitución entre los parámetros formales y los parámetros actuales. Cuando se realiza una copia del contenido de la variable pasada como parámetro actual al correspondiente parámetro formal del subprograma, entonces se habla de paso de parámetros por valor. El subprograma en su flujo trabaja sobre una copia del valor pasado como parámetro actual, mas no sobre el parámetro actual como tal, de esta forma el valor original del parámetro actual se preserva sin cambiarse. Cuando en la sustitución de parámetros, se trabaja directamente sobre el valor pasado, se habla de paso de parámetros por referencia. Bajo este paso de parámetros, se trabaja directamente sobre los valores pasados y si estos son modificados el valor se ve reflejado fuera de la subrutina cuando el control de flujo es regresado al cuerpo principal del algoritmo. Cuando el subprograma trabaja sobre una copia, pero justo antes de su salida de la subrutina hace la actualización del valor del parámetro formal al valor del parámetro actual, hablamos de paso de parámetros por valor-resultado. Bajo este enfoque, el valor original es alterado solo al final del flujo de ejecución del subprograma, a diferencia del paso por referencia donde cada modificación era contemplada directamente.
Regla de ámbito básica en el pseudoformal: toda variable tiene alcance en el bloque donde fue declarada, y no fuera de él.


Ejemplos En Lenguaje C 


//Función que retorna la suma de 2 numeros
int suma(int a, int b){
     int c;
     c = a+b;
     return c;
}


//Procedimiento que intercambia el valor de 2 variables (paso referencia)
void exchange(int *a, int *b){
    int c;
    c = *a;
    *a = *b;
    *b = c;
}

1 comentario:

  1. Hola. ¿Sería posible si le cambiaras el fondo de pantalla, a uno más oscuro...?

    ResponderEliminar