1. Programación Modular
CURSO: Programación Estructurada
Instructores:
MC. Gerardo Gálvez Gámez
Febrero 2024
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
2. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Modularidad
1. Modularidad
1.1. Declaración y uso de funciones.
1.2. Paso de parámetros
1.2.1. Por valor
1.2.2. Por referencia
1.3. Creación de bibliotecas de funciones
3. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Aprendizajes Esperados
• Identificar las ventajas, desventajas, estructura y
usos de la programación modular.
• Identificar la diferencia entre parámetros y
argumentos, su estructura e importancia,
mediante una investigación bibliográfica,
presentando ejemplos de programas en
exposición grupal.
• Realizar ejercicios en la plataforma OmegaUp que
involucren la implementación de métodos o
funciones con pase de parámetros en la
resolución de problemas, documentar y exponer.
4. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
¿Qué es la Programación Modular?
La programación modular es un paradigma
(modelo) de programación, que consiste en dividir
un problema en subproblemas con el fin de
simplificarlo.
Aplicando la Programación Modular, podemos
descomponer problemas grandes y tediosos en
pequeños subproblemas, y estos a su vez en otros
más pequeños, hasta poder resolverlos fácilmente
con un lenguaje de programación. A esta técnica la
llamaremos 'divide y vencerás’.
Un módulo es cada una de las partes del programa
que resuelve un subproblema en las que se dividió
el problema original.
5. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Concepto de Función(método, módulo)
• Una función es un conjunto de
instrucciones a las que se les da un
determinado nombre de tal manera que
sea posible ejecutarlas en cualquier
momento sin tenerlas que rescribir sino
usando sólo su nombre.
• A estas instrucciones se les denomina
cuerpo de la función, y a su ejecución a
través de su nombre se le denomina
llamada a la función.
6. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de funciones
Uno de los principios básicos del diseño de aplicaciones es
que deben estar divididas en unidades funcionales, ya
que las secciones pequeñas de código son más fáciles de
entender, diseñar, desarrollar y depurar.
La división de una aplicación en unidades funcionales
permite también la reutilización de componentes
funcionales en toda la aplicación.
– Definición de funciones.
– Llamadas a funciones.
– Uso de la instrucción return.
– Uso de variables locales.
– Devolución de valores.
7. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de funciones
• En C++ se debe declarar una función
antes de utilizarla.
• La declaración de la función indica al
compilador el tipo de valor que devuelve
la función y el número y tipos de
argumentos que acepta.
• Se utilizan para estructurar el código de
un programa.
8. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Definición de la función
Una función es una serie de instrucciones C++ que han sido
agrupadas bajo un nombre determinado.
Ejemplo:
▫ main es la función donde comienza la ejecución de un programa C.
Para definir funciones propias se usa la siguiente sintaxis:
<tipoRetorno> <FuncionName<(Lista de parámetros )
{
cuerpo de la función
}
9. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Definición de la función
Cuando se crea una función hay que especificar lo siguiente:
▫Nombre
– Una función no puede tener el mismo nombre que una variable, una
constante o cualquier otro elemento que no sea un código y haya
sido declarado en la clase. El nombre de la función puede ser
cualquier identificador permitido de C++ y distingue entre
mayúsculas y minúsculas.
▫Lista de parámetros
– A continuación del nombre de la función viene una lista de
parámetros para el la función. Esta lista aparece entre paréntesis
que deben estar presentes aunque no hay ningún parámetro.
▫Cuerpo del método
– Después de los paréntesis viene el cuerpo de la función, que debe
estar entre llaves ({ y }) aunque no contenga más que una
instrucción.
▫<tipoRetorno> indica cuál es el tipo de dato que la función
devuelve, y si no devuelve ninguno se ha de escribir void en su
lugar.
10. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Llamadas a Funciones
Una vez definido una función, se puede:
▫Llamar a una función:
– Se usa el nombre de la función seguido de una lista
de parámetros entre paréntesis.
▫Usar llamadas anidadas:
– Unas funciones pueden hacer llamadas a otras, que a
su vez pueden llamar a otras funciones, y así
sucesivamente
11. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Ejemplo
Función que retorna la suma de 2 números
int Suma (int a, int b){
return a+b;
}
void main(){
int x=10, y=20, z;
z = Suma(x, y);
printf("La Suma es %dn", z);
}
12. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de la instrucción return
La instrucción return se puede emplear para hacer que una
función se devuelva inmediatamente al llamador. Sin una
instrucción return, lo normal es que la ejecución se
devuelva al llamador cuando se alcance la última
instrucción de la función.
• Return inmediato
• Return con una
instrucción condicional
void Example( )
{
int Numero;
printf("Hello");
if (Numero < 10)
{
return;
}
printf("World");
}
13. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Return inmediato
Por defecto, una función es devuelto a su llamador cuando
se llega al final de la última instrucción del bloque de
código.
La instrucción return se utiliza cuando se quiere que una
función sea devuelta inmediatamente al llamador.
Ejemplo:
void Example( )
{
printf("Hola");
return;
printf("mundo");//código inalcanzable
}
14. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Return con una instrucción
condicional
Es mucho más habitual, y mucho más útil, utilizar la
instrucción return como parte de una instrucción
condicional como if o switch.
Esto permite que una función sea devuelta al llamador si
se cumple cierta condición.
Ejemplo: void ExampleMethod( )
{
int Numero;
printf("Hello");
if (Numero < 10)
{
return;
}
printf("World");
}
15. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de variables locales
• Variables locales:
▫Se crean cuando comienza la función.
▫Son privadas para la función.
▫Se destruyen a la salida.
16. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Variables Locales
void MethodWithLocals( )
{
int x = 1; // Variable con valor inicial
int y;
char z;
...
}
17. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Devolución de valores
• La función se debe declarar con un tipo que no sea void.
• Se añade una instrucción return con una expresión donde:
▫Se Fija el valor de retorno.
▫Se devuelve al llamador.
• Las funciones que no son void deben devolver un valor.
int DosMasDos( ) {
int a,b;
a = 2;
b = 2;
return a + b;
}
int main( )
{
int x;
x = DosMasDos( );
printf(“%d”,x);
return 0;
}
18. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Las funciones que no son void
Deben devolver valores:
1. Si se declara una función con un tipo distinto de void, es
obligatorio añadir al menos una instrucción return.
El compilador intenta comprobar que cada una de estas
funciones devuelve siempre un valor a la función de llamada.
2. Si detecta que una función que no es void no incluye
ninguna instrucción return, el compilador mostrará el
siguiente mensaje de error: “No todas las rutas de código
devuelven un valor.”
Este mensaje también aparecerá si el compilador detecta que es
posible ejecutar una función que no es void sin devolver un
valor.
19. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de parámetros
• Declaración y llamadas a parámetros
• Mecanismos de paso de parámetros
• Parámetros de entrada
• Parámetros de entrada/salida
• Normas para el paso de parámetros
20. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Parámetros
La forma en que se define cada parámetro de una
función depende del tipo de parámetro del que se
trate.
En C++ se admiten dos tipos de parámetros:
entrada Paso por valor
entrada
salida Paso por referencia
21. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Declaración y llamadas a parámetros
• Declaración de parámetros:
▫Se ponen entre paréntesis después del nombre
de la función
▫Se definen el tipo y el nombre de cada
parámetro
• Llamadas a funciones con parámetros:
▫Un valor para cada parámetro
void MethodWithParameters(int n, float y)
{ ... }
MethodWithParameters(2, 2300.67);
22. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Parámetro de entrada (paso por valor)
Mecanismo predeterminado para el paso de
parámetros:
▫Se copia el valor del parámetro.
▫Se puede cambiar la variable dentro de la función.
▫No afecta al valor fuera de la función.
▫El parámetro debe ser de un tipo igual o compatible.
void SumaUno(int x)
{
x++; // Incrementar x
}
int main( )
{
int k = 6;
SumaUno(k);
printf(“%d”,k); // Muestra el valor 6, no 7
}
23. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Parámetros de entrada
• Ejemplo:
int suma (int a, int b){
return a+b;
}
void main(){
int x=10, y=20, z;
z = suma(x, y);
printf("La Suma es %dn", z);
}
24. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
ExtraClases
Objetivo:
El alumno demostrara la habilidad alcanzada en clases, para
codificar diversos problemas, que utilizan procedimientos de
solución de parametros de entrada.
24
25. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Parámetros por Entrada Salida (Paso
por referencia puntero)
• Son similar a un parámetro de salida sólo que no es
obligatorio modificarlo dentro de la función al que
pertenece, por lo que será obligatorio pasarle una variable
inicializada ya que no se garantiza su inicialización en la
función.
• Es una referencia a una posición de memoria.
• A diferencia de un parámetro valor, un parámetro
referencia no crea una nueva ubicación de
almacenamiento. Por el contrario, un parámetro referencia
representa la misma posición de memoria que la variable
indicada en la llamada a la función.
26. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de Punteros en Funciones
Obje%vos:
1.Entender el concepto de punteros en el lenguaje C++
y su importancia en el paso de parámetros por
referencia.
2.Aprender cómo declarar y u=lizar punteros como
parámetros de funciones en C++.
3.Prac=car mediante ejemplos para afianzar los
conocimientos adquiridos.
27. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Contenido:
1. Concepto de Punteros en C++:
Definición de punteros.
La relación entre punteros y direcciones de memoria.
Operadores de punteros: * (operador de indirección) y & (operador de
dirección).
2. Declaración y Uso de Punteros como Parámetros de Funciones:
Sintaxis para declarar una función que toma punteros como parámetros.
Pasar variables por referencia uPlizando punteros.
Ejemplos de funciones que operan sobre variables uPlizando punteros
como parámetros.
3. Casos de Uso y Ventajas:
Ventajas de uPlizar punteros como parámetros en comparación con el
paso por valor.
Casos de uso comunes de punteros en funciones: manipulación de
arreglos, manipulación de estructuras de datos, entre otros.
28. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Concepto de Punteros en C++:
Los punteros son una de las caracterís0cas más poderosas
y dis0n0vas del lenguaje C++. Permiten trabajar
directamente con direcciones de memoria, lo que
proporciona un mayor control sobre la manipulación de
datos y la ges0ón de la memoria en un programa.
• Definición de Punteros:
• Un puntero es una variable que almacena la dirección de
memoria de otra variable. En lugar de almacenar el valor
de una variable, los punteros almacenan la dirección en la
que se encuentra esa variable en la memoria.
29. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Relación entre Punteros y Direcciones de Memoria:
Cada variable en C++ reside en una ubicación de memoria con una
dirección única. Los punteros nos permiten acceder a esta
dirección de memoria y, por lo tanto, manipular los datos
almacenados en esa ubicación.
Operadores de Punteros:
& (Operador de dirección): Este operador se u;liza para obtener
la dirección de memoria de una variable. Por ejemplo, &variable
devuelve la dirección de memoria de variable.
* (Operador de indirección o de desreferenciación): Este
operador se u;liza para acceder al valor almacenado en la
dirección de memoria apuntada por un puntero. Por ejemplo, *ptr
accede al valor almacenado en la dirección de memoria apuntada
por ptr.
30. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Ejemplo
int x = 10; // Variable entera
int *ptr; // Declaración de un puntero a entero
ptr = &x; // Asignación de la dirección de memoria de x al
puntero ptr
cout<<*ptr; // Acceso al valor de x a través del puntero ptr
31. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Sintaxis para Declarar una Función que
Toma Punteros como Parámetros:
void nombreFuncion(tipo *nombrePuntero);
Donde:
• void: Tipo de retorno de la función, puede ser cualquier Ppo de dato.
• nombreFuncion: Nombre de la función.
• Ppo *nombrePuntero: Parámetro de la función que es un puntero. Ppo es
el Ppo de dato al que apunta el puntero.
Ejemplo de Declaración de Función que Toma un
Puntero como Parámetro
▫void duplicarValor(int *ptr);
32. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Uso de Punteros como Parámetros:
Al llamar a la función, se pasan las direcciones de memoria de las variables
que se desean modificar como argumentos. Dentro de la función, se puede
acceder y modificar el valor de la variable original a través del puntero.
Ejemplo:
#include <stdio.h>
void duplicarValor(int *ptr) {
*ptr *= 2; // Duplica el valor de la variable apuntada por ptr
}
int main() {
int num = 10;
cout<<("Valor original:",<<num; // Llamada a la función con la dirección de memoria de num
duplicarValor(&num);
cout <<“Valor duplicado:”<<num;
return 0;
}
33. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Casos de Uso y Ventajas:
Los punteros como parámetros de funciones Penen varios casos de uso y
ofrecen ventajas significaPvas en la programación en C++:
Manipulación Eficiente de Datos:
Los punteros permiten acceder y modificar directamente los valores de las
variables en la memoria, lo que puede ser más eficiente que pasar copias de
grandes estructuras de datos como parámetros.
Modificación de Variables Externas:
Al uJlizar punteros como parámetros, las funciones pueden modificar
directamente las variables definidas fuera de su ámbito local. Esto es úJl cuando
se desea modificar el estado de una variable desde una función sin tener que
devolver un valor.
Ges;ón Dinámica de Memoria:
Los punteros son fundamentales para la gesJón dinámica de memoria en C++, ya
que permiten reservar y liberar memoria en Jempo de ejecución uJlizando
funciones como malloc, calloc, realloc y free.
34. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
• Operaciones sobre Arreglos y Estructuras de Datos:
• Los punteros son ampliamente uPlizados en operaciones sobre
arreglos y estructuras de datos. Permiten pasar arreglos a funciones
de manera eficiente y trabajar con estructuras de datos complejas
como listas enlazadas y árboles.
• Interacción con Funciones de la Biblioteca Estándar:
• Muchas funciones de la biblioteca estándar de C uPlizan punteros
como parámetros para interactuar con los datos. Por ejemplo, la
función scanf uPliza punteros para leer datos de entrada y
almacenarlos en variables.
• OpLmización de Recursos:
• Al uPlizar punteros como parámetros en lugar de copias de variables,
se reduce la sobrecarga de memoria y se opPmiza el uso de recursos,
especialmente en aplicaciones que manejan grandes canPdades de
datos.
35. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Intercambian valores de variables
u2lizando punteros.
Ejemplo:
void cambia (int *a, int *b){
int temp=*a;
*a=*b;
*b=temp;
}
void main() {
int v1=10, v2=20;
cambia(&v1, &v2);
cout<<"v1 es “<<v1<<“ v2 es ”<< v2;
}
36. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Preguntas:
1.¿Cuál es la diferencia entre el paso de parámetros
por valor y por referencia en C++?
2.¿Por qué es ú=l u=lizar punteros como parámetros
en funciones?
3.¿Cómo se declara una función que toma un puntero
como parámetro en C++?
37. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
ExtraClases
Objetivo:
El alumno demostrara la habilidad alcanzada en clases, para
codificar diversos problemas, que utilizan procedimientos de
solución de parametros por referencia.
37
38. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
39. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Biblioteca de funciones
Una biblioteca de funciones en C++ es un
conjunto de funciones y clases que están
agrupadas y organizadas de manera lógica
y coherente para realizar tareas específicas.
Estas bibliotecas pueden ser
proporcionadas por el propio lenguaje C++
estándar, por bibliotecas de terceros o
pueden ser creadas por los programadores.
40. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Importancia de las bibliotecas para
modularizar el código:
Las bibliotecas ayudan a organizar el código en módulos
separados, lo que facilita su mantenimiento y reu0lización.
Permiten ocultar la implementación de las funciones,
proporcionando una interfaz clara y coherente para los
usuarios.
Las librerías pueden 0enen la extensión .h
Se u0liza la direc0va #include seguida del nombre del
archivo de encabezado entre comillas (" ").
41. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Ejercicio:
1. Biblioteca de Funciones Matemá%cas:
Crear una biblioteca de funciones que contenga
operaciones matemá0cas como suma, resta,
mul0plicación y división.
2. Uso de la Biblioteca en un Programa Principal:
U0lizar la biblioteca de funciones en un programa
principal para realizar cálculos matemá0cos.
42. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Preguntas:
1. ¿Qué son las bibliotecas de funciones y cuál es su propósito
en la programación?
2. ¿Cuál es la diferencia entre archivos de código fuente (.cpp)
y archivos de encabezado (.h) en C++?
3. ¿Cómo se incluyen bibliotecas de funciones en programas
C++ y qué direcTva de preprocesador se uTliza para ello?
43. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
ExtraClases
Objetivo:
El alumno demostrara la habilidad alcanzada en clases, para
codificar diversos problemas, que utilizan procedimientos de
solución empleando la creación de librerias.
43
44. AYDOO
U N I V E R S I D A D A U T Ó N O M A D E S I N A L O A
Preguntas ?