Você está na página 1de 28

República Bolivariana de Venezuela

Área de Computación

Curso de C #

Facilitador:
Prof. Bassam Asfur
Programación Modular

Es un método de resolución de problemas que consiste en resolver de forma


independiente los subproblemas que se obtienen de una descomposición del
problema general

Un módulo debe ofrecer un grupo de servicios diseñados para que el esto


del programa pueda interactuar con él

Es más fácil resolver un problema complejo cuando se rompe en piezas


manejables.

¡Divide y Vencerás!
Programación Modular

La base fundamental de este paradigma de programación es el módulo

Un módulo en un conjunto de rutinas que prestan un servicio específico.

Una rutina, subrutina o subprograma, como idea general, se presenta


como un algoritmo separado del algoritmo principal, el cual permite resolver
una tarea específica

Decimos que algo es modular si es construido de manera tal que se facilite su


ensamblaje, acomodamiento flexible y reparación de sus componentes

La modularidad da una mejor compresión del problema y reduce el tamaño


del código

Generalmente se hace la asociación de un módulo como una caja negra. Se


sabe que entra y que sale pero no como se procesa
Programación Modular

En la programación modular se debe asegurar los siguientes preceptos

● máxima cohesión

● mínimo acoplamiento entre módulos

Un módulo debe ofrecer un grupo de servicios que sin lugar a dudas deben
ir juntos, por ejemplo:
La Clase Math
Algunas Ventajas

Facilitan la escritura y depuración de un programa

Localización rápida de errores

La modificación de un módulo no afecta a los demás

Un grupo de instrucciones que se repite en varias partes de un programa


puede incluirse en un módulo y llamarlo en el programa.
Funciones y Procedimientos

Es evidente, que si está metodología, nos lleva a tratar con subproblemas,


entonces también tengamos la necesidad de poder crear y trabajar con
subprogramas para resolverlos.

A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de


programación modular. En los lenguajes de programación disponemos de dos
tipos de módulos: los procedimientos y las funciones.

Elementos de la declaración de una subrutina

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.
Funciones y Procedimientos

Los procedimientos y funciones son subprogramas que realizan tareas


específicas. Para invocarlo, es decir, para hacer que se ejecute, basta con escribir
su nombre en el cuerpo de otro procedimiento o en el programa principal.

La diferencia entre procedimiento y función está dada por su utilización dentro


de nuestro diseño de la solución, un procedimiento realiza una tarea y al finalizar
retorna al punto donde fue invocado, no así la función al ejecutarse obtiene un
valor el cual es retornado al punto donde fue invocado por ejemplo raíz cuadrada
es una función por que retorna un resultado.

Declaración de Funciones y Procedimientos

Al igual que los identificadores (Variables), los procedimientos y funciones


deben declararse dentro del programa.

La declaración de un procedimiento NO indica a la computadora que ejecute las


instrucciones dadas, sino que indica a la computadora cuáles son estas
instrucciones y dónde están localizadas cuando sea necesario.
Funciones y Procedimientos

FUNCIONES

Una función es una un conjunto de instrucciones, con un nombre asociado, que


cumple las siguientes características:

•Tiene uno o más parámetros de entrada.

•Tiene un parámetro exclusivamente de salida y de tipo simple (es decir, lo que


devuelve). Muchos lenguajes de programación no requieren el hecho de que el
parámetro sea simple pero en esta asignatura se considerará la versión más
purista.

•Todos los valores de entrada son necesarios y suficientes para determinar el


valor de salida.
Funciones y Procedimientos

PARÁMETROS DE UN PROCEDIMIENTO O FUNCIÓN

Los parámetros o argumentos de una función o procedimiento son el mecanismo


que permite el intercambio de datos entre la función o procedimiento que es
llamado y el que realiza la llamada.

En el momento de definir una función o procedimiento, es necesario especificar


los parámetros, con el tipo asociado. En este momento, los parámetros se
denominan formales.

Por otra parte, en el momento de hacer la llamada a una función o


procedimiento,
cuando se utilizan literales o variables como lista de parámetros (que deben
emparejarse con los parámetros formales en cuanto al tipo y orden). Estos
parámetros se denominan reales.
Funciones y Procedimientos

Parámetros de entrada

Permiten aportar datos a función o procedimiento por parte del algoritmo que le
invoca.

Un parámetro real asociado con un parámetro formal de entrada, puede ser un


literal, una variable o incluso el valor que se obtendrá como resultado de la
evaluación de una expresión.

La definición de un parámetro formal de entrada se hace anteponiendo el


modificador delante del nombre del parámetro formal.

Modificando un parámetro formal de entrada nunca se modifica el


correspondiente parámetro real.
Funciones y Procedimientos

Parámetros de salida

Permiten que la acción pueda devolver resultados de su ejecución al algoritmo


que invoca.

El parámetro real asociado con un parámetro formal de este tipo debe ser
necesariamente una variable en la que almacenar el resultado devuelto por la
acción. Esa variable no tiene porque haber sido inicializada con anterioridad.

Cualquier acción o modificación realizada sobre el parámetro formal de salida


se refleja, de forma inmediata, sobre el correspondiente parámetro real.

Para la definición de un parámetro formal de salida se debe anteponer el


modificador delante del nombre formal.
Funciones y Procedimientos

Parámetros de entrada/salida

Los parámetros de entrada/salida permiten aportar datos de entrada en un


procedimiento o función, que ésta los modifique y los devuelva como resultado
al algoritmo que la invoca.

El parámetro real asociado con un parámetro formal declarado de entrada /salida,


necesariamente debe ser una variable donde almacenar el valor devuelto por el
procedimiento o función invocada y debe haber sido inicializado previamente a
la invocación.

La declaración de un parámetro de entrada/salida se hará anteponiendo el


modificador E/S delante del nombre del parámetro formal en la definición de la
función.
Funciones y Procedimientos

Descomposición de una tarea en Funciones y Procedimientos

La mayor complejidad a la hora de aplicar programación estructurada es saber


decidir correctamente cuándo extraer código para colocarlo en un procedimiento o
función, y cuándo utilizar una u otra.

El proceso de identificación de procedimientos y funciones se basa en el empleo de


cuestiones lógicas (experiencia y sentido común), ciertas heurísticas y una regla
Básica.

Existen procedimientos y funciones que realizan procesos de entrada de datos,


otras de salida de datos y otras de procesamiento de datos.

Un procedimiento o función no debe combinar los tres tipos de tareas.


Funciones y Procedimientos

Entre las heurísticas a tener en cuenta se encuentran las siguientes:

1. Cada vez que se necesita operar con ciertos tipos de datos compuestos (como
registros o vectores) suele resultar necesario disponer de procedimientos para la
lectura de esos datos, otras para la visualización de los mismos y finalmente otras
que implementen las distintas operaciones necesarias.

2. Las operaciones de inicialización de un algoritmo que se ejecutan antes de


empezar a funcionar dicho algoritmo (lecturas de ficheros de disco, inicialización
de estructuras de datos) se colocan normalmente en un procedimiento (muchas
veces llamado iniciar) si bien, de resultar ser este procedimiento demasiado
extenso o complejo, se puede subdividir, a su vez, en otros procedimientos.

Esto mismo ocurre con las operaciones que se deben ejecutar justo antes de
terminar el algoritmo (volcados a disco, etc.). Por otra parte, si las operaciones son
muy sencillas, no será probablemente interesante realizar este proceso.
Funciones y Procedimientos

3. Las operaciones de búsqueda y ordenación en cualquier estructura de datos se


implementarán normalmente en procedimientos.

4. Cada una de las funcionalidades que un algoritmo proporcionará a un usuario


un procedimiento. Tomando el enunciado del problema, muchas veces se pueden
identificar los procedimientos (de más alto nivel) a crear prestando atención a los
verbos presentes.

5. Un indicativo de que un procedimiento o función es demasiado grande suele ser


el número de líneas que ocupa: si contiene más de 25 – 30 líneas (no se
Visualizará totalmente en una sola pantalla) es demasiado grande y, por lo tanto,
debe ser descompuesta, a su vez, en procedimientos o funciones más pequeños.
Funciones y Procedimientos

6. Cuando en un algoritmo se repita más de una vez la misma tarea con una
diferencia pequeña, esta diferencia pequeña se representará en los parámetros de un
procedimiento o función que será capaz de adaptarse a todas las circunstancias en
las que pueda ser empleado.

En todo caso, hablar de diferencia pequeña implica que las instrucciones ejecutadas
son las mismas y que, por ejemplo la única diferencia se encuentra en el número de
veces que se ejecuta una composición iterativa o cuestiones muy similares que se
puedan parametrizar.

Un error muy común es emplear un procedimiento para dos acciones totalmente


diferentes empleando un parámetro que indique cuál de ellas ejecutar.

7. La interfaz de un procedimiento o función se diseñará para asegurar la máxima


reutilización.
Funciones y Procedimientos

ÁMBITO DE VARIABLES

Las variables sólo se pueden referenciar desde la función o procedimiento en la que


están declaradas. Así, es fundamental restringir el uso de variables a las funciones o
procedimientos en las que están declaradas para no sufrir errores de programación
debida a efectos laterales.

El ámbito de una variable local o parámetro formal v declarada dentro de una


función o procedimiento M es la propia función o procedimiento, cuyas
instrucciones pueden modificarla o consultarla.

A veces, esto puede complicarse debido a que ciertos lenguajes de programación,


como Pascal, permiten crear funciones (locales) dentro de funciones, de manera
que las variables locales y parámetros formales creados para la contenedora sirven
para todas las locales. Otros lenguajes, como C++, permiten crear bloques dentro
de funciones o procedimientos, de manera que las variables creadas dentro de ellos
tienen como ámbito sólo el bloque mencionado, y sin embargo se puede acceder al
resto de variables de la función.
Variables Globales y Locales

Ámbito de las variables

a)Variables globales: Están declaradas fuera del cuerpo de cualquier función y


antes de que sea utilizada por ninguna de ellas (se recomienda declararlas al
comienzo del programa antes de las definiciones de las funciones).

El ámbito de estas variables es global, es decir, que son visibles por cualquier
función y cualquiera de ellas puede modificar su valor. La vida de estas variables
va ligada a la del programa, se crean cuando empieza la ejecución del programa
y pueden ser utilizadas hasta que se acabe el mismo.

b)Variables locales: Están declaradas dentro de la función, bien dentro del


cuerpo o bien como parámetros formales. El ámbito de la variable se reduce al
de la función y fuera de esta no tienen presencia, es decir, sólo puede ser
utilizada por la función donde esta declarada
Variables Globales y Locales

Ámbito de las variables

El intercambio de información entre procedimientos y funciones debe producirse


siempre a través de los parámetros y nunca a través de variables globales.

Cualquier otro dato cuyo uso sólo tenga sentido dentro de una función o
procedimiento, se declarará como una variable local a ésta, incluso en el caso de
que una variable similar con el mismo identificador y tipo se use en otros
procedimientos y funciones.

Tal y como se ha comentado con respecto a las variables globales, una variable
local de una función o procedimiento oculta a la variable global con el mismo
identificador.
Variables Globales y Locales

Por su parte, las variables locales pueden ser:

Variables automáticas: Son eliminadas cuando se termina la ejecución de la


función donde han sido declaradas, es decir, su vida se limita al tiempo que está
activa la función.

Los parámetros formales son variables automáticas

Variables estáticas: A pesar de que sólo pueden ser utilizadas por la función
donde han sido declaradas, no son destruidas al terminar ésta.

Por lo tanto, mantienen su valor para la próxima vez en que sea llamada la
función. Se declaran, precediendo el nombre del tipo por la palabra "static".
Variables Globales y Locales

EFECTOS LATERALES

Efecto lateral es cualquier modificación de una variable producida en un


procedimiento o función en la que la variable no está declarada.

Estos efectos deben evitarse pues introducen dependencias indeseables (la


función o procedimiento depende entonces de una variable global, por ejemplo),
que son causas de errores muy difíciles de detectar.

PRECEDENCIA DEL NOMBRE

En un algoritmo pueden definirse identificadores de variables idénticos siempre


y cuando se definen en procedimientos o funciones distintas.
PROCESO DE INVOCACIÓN DE UN PROCEDIMIENTO O FUNCIÓN

Al ejecutar un programa, el sistema operativo asigna cierta cantidad de


memoria al mismo. El programa en ejecución (proceso en memoria) organiza el
espacio asignado atendiendo al siguiente esquema:

TEXT es la zona de la memoria donde se almacenan las instrucciones del programa.


Muchas veces, en TEXT se almacenan también las constantes, al ser esta zona de la
memoria normalmente de sólo lectura.

En DATA se almacenan las variables globales (no las constantes).


PROCESO DE INVOCACIÓN DE UN PROCEDIMIENTO O FUNCIÓN

El STACK (o pila de llamadas) permite al sistema operativo seguir el flujo de


ejecución del programa.

Finalmente, el HEAP es una zona ampliable de la memoria donde se almacenan


estructuras de datos que pueden variar de tamaño con el tiempo.

Cuando aparece una llamada a una función o procedimiento M, se crea en la pila


(stack) un registro de activación o entorno de ejecución, denominado marco o
frame de la pila, en donde se alojan las variables locales y parámetros formales
declarados en la función o procedimiento, así como, la dirección de retorno a la
instrucción posterior a la invocación.

Una vez creado el entorno, se cede el control a la primera instrucción de M. Si M


llama a otra función o procedimiento M', se creará un nuevo frame en la pila, y
se procede a la primera instrucción de M'. De este modo se pueden ir apilando
llamadas (de ahí, su nombre) mientras sea necesario.
PASO DE PARAMETROS

Mecanismos de paso de parámetros en los lenguajes de programación

Los mecanismos descritos anteriormente, de paso de parámetros de entrada,


salida y entrada/salida, no suelen encontrarse en los lenguajes de programación,
por el contrario, lo más típico es encontrar mecanismos de paso por valor y paso
por referencia

Paso de parámetros por valor

Cuando se realiza la llamada de un procedimiento o función, se efectúa una


copia de la evaluación de los parámetros reales, que se almacena en una variable
local con el mismo nombre que el parámetro formal, dentro del registro de
activación. Esto implica que al finalizar la ejecución, estos parámetros se
destruyen, y los parámetros reales no se ven afectados.

Es el mecanismo más genérico de los lenguajes de programación y en la mayoría


de los cuales no es necesario especificar ningún modificador del parámetro
formal. El parámetro real puede ser cualquier expresión.
PASO DE PARAMETROS

Paso de parámetros por referencia

En el paso de parámetros por referencia, en vez de trabajar con una copia de los
parámetros reales almacenada en la pila de ejecución, se trabaja directamente
sobre el parámetro real, por lo que cualquier modificación realizada sobre el
parámetro formal es repercutida automáticamente en el parámetro real.

El compilador hace que los parámetros formales declarados en la función o


procedimiento apunten a la misma dirección de memoria que los parámetros
reales.

Este mecanismo de paso de parámetros se usa para parámetros de salida y


entrada/salida, por lo que el parámetro real debe ser una variable.

Muchas veces este tipo de paso de parámetros, combinado con restricciones de


solo lectura, se emplea en algunos lenguajes de programación para sustituir al
ineficiente paso de parámetros por valor en pasos de entrada. Nótese que si se
pasara un vector por valor, se estaría copiando todo su contenido.
Funciones

Un programa en C no es más que una colección de funciones, entre las cuales


siempre ha de estar presente la función principal main.

¿Qué es una función en C?

Una función es un módulo independiente de código, diseñado para realizar una


tarea especifica y que tiene asignado un nombre como identificador, a través del
cual puede ser llamada desde otras funciones, y “lanzar” su ejecución.

Definición de funciones

Para crear una nueva función hay que definirla. Dentro de la definición fijamos
el nombre de la función, el tipo del resultado que devuelve, la lista de
argumentos y el cuerpo de la función, siguiendo la siguiente sintaxis:

tipo_del_valor_devuelto nombre_de_la_función (lista_de_parámetros) {


cuerpo_de_la_función
}
Funciones

Basándonos en la lamina anterior:

· Tipo_del_valor_retornado (tipo de la función)


Es el tipo del valor que devuelve la función como resultado, a través de la
sentencia return. Si la función no devuelve ningún valor, es decir, sino existe
ninguna sentencia return dentro de su cuerpo, el tipo de la función debe de ser
void.

· Nombre_de_la_función
Es el identificador de la función.

· Lista_de_parámetros_formales
Son una lista de variables precedidas de su tipo y separadas por comas. Estas
variables copian los valores de los argumentos que utilizamos cuando llamamos
a la función. Cuando la función no tiene argumentos se dejan vacíos los
paréntesis, o bien se pone entre ellos la palabra reservada void, para indicar
exactamente eso, que la función esta ‘vacía’ de argumentos.
Funciones
Llamada a las funciones

Para utilizar las funciones que hemos declarado, simplemente hemos de llamar a
la función por su nombre, pasándole entre paréntesis tantos valores (argumentos)
como parámetros formales hayamos definido.

Estos valores que utilizamos en la llamada, se van copiando sobre las variables
definidas como parámetros; por lo tanto ha de existir una correspondencia, no
sólo entre el número de valores y el número de parámetros, sino también entre
sus tipos.

La sentencia return

Podemos devolver el valor dentro del cuerpo de la función a través de la


sentencia return. Además, es una sentencia de salto que provocaba la salida
inmediata de la función, independientemente de su posición relativa dentro del
cuerpo de la función.

Sintaxis: return valor; // Opcionalmente: return (valor);


Actividades de Tutoría

1. Crear un programa que determine si un numero es primo

2. Crear un programa que determine si un numero es Capicúa

3. Crear un programa que indique si un numero es:


a) Perfecto
b) Abundante
c) Deficiente

Você também pode gostar