Curso de programación

Clase 6: Modularización

Concepto de modularización

Modularización

La modularización ó modularidad es un principio de diseño que permite dividir un programa en partes más pequeñas y manejables llamadas módulos. Cada módulo representa una unidad lógica y funcional que se puede desarrollar, mantener y probar de forma independiente. Esto facilita el desarrollo y la gestión del código, ya que cada módulo se puede trabajar por separado sin afectar a otros módulos.

Ventajas (p1)

  • Reutilización de códigoAl dividir un programa en módulos se fomenta la reutilización de código. Un módulo puede ser utilizado en diferentes partes de un programa o incluso en varios programas diferentes. Esto evita la duplicación de código y mejora la eficiencia del desarrollo, ya que no es necesario volver a escribir el mismo código una y otra vez.
  • MantenimientoAl dividir un programa en módulos se mejora el mantenimiento y soporte del código. Cada módulo se puede entender, probar y corregir de forma aislada, lo que facilita la detección y solución de errores. Además, si se requiere realizar cambios o mejoras en el programa, es más sencillo y menos propenso a errores modificar un módulo específico en lugar de tener que revisar y modificar todo el código.

Ventajas (p2)

  • EscalabilidadLa división en módulos permite que un programa crezca y se amplíe de manera más sencilla. Se pueden agregar nuevos módulos para incorporar nuevas características o funcionalidades sin afectar el funcionamiento de los módulos existentes. Esto permite una mayor flexibilidad y adaptabilidad del programa a medida que cambian los requisitos o se agregan nuevas necesidades.
  • ColaboraciónDividir un programa en módulos facilita la colaboración en el desarrollo de software. Varios desarrolladores pueden trabajar en diferentes módulos simultáneamente sin interferir con el trabajo de los demás. Esto agiliza el proceso de desarrollo y permite una mayor productividad en equipos de desarrollo.

Ventajas (resumen)

En resumen, la división de programas en módulos ofrece beneficios como modularidad, reutilización de código, mantenibilidad, escalabilidad y facilidad de colaboración. Estas prácticas ayudan a mejorar la eficiencia, calidad y soporte del software.

Modularidad (cont)

La modularidad puede llevarse a cabo mediante varias técnicas y prácticas, entre ellas:

  • Abstracción Consiste en identificar y aislar las partes fundamentales y funcionales de un programa. Estas partes se convierten en módulos independientes que ocultan los detalles internos y proporcionan una interfaz clara y definida para su uso.
  • Modularidad funcional Implica dividir un programa en funciones lógicas y coherentes. Cada función realiza una tarea específica y bien definida dentro del programa. Estas funciones pueden ser reutilizables y se pueden llamar desde diferentes partes del programa. La modularidad funcional permite una mayor legibilidad, mantenibilidad y reutilización de código.

Modularidad (cont)

La modularidad puede llevarse a cabo mediante varias técnicas y prácticas, entre ellas:

  • Acoplamiento adecuado El acoplamiento se refiere al grado de interdependencia entre los módulos de un programa. Un acoplamiento bajo significa que los módulos son independientes y tienen poca relación entre sí, lo que facilita los cambios y las actualizaciones.
  • Pruebas unitarias Unit-tests. Se centran en verificar el funcionamiento correcto de cada módulo de forma aislada. Esto implica diseñar y ejecutar pruebas específicas para cada módulo individualmente, comprobando que produce los resultados esperados.

¿Cómo definimos un módulo?

Una de las formas es mediante funciones. Los lenguajes de programación proveen instrucciones para definir funciones.

Estas funciones son prácticamente un bloque de código que se definen pero se ejecutan solo en el momento del programa que son invocadas.

Las funciones pueden tener datos de entrada y retornar un valor como resultado.

Crear funciones en Python

Ejemplo de una función simple. Sin parámetros de entrada ni retorno de resultado.


						def saludo():
							print("Hola")

						print("Bienvenido al programa")
						saludo()
					

Salida del programa


					Bienvenido al programa
					Hola

					

Crear funciones en Python

Podemos utilizar muchas veces la función


						def saludo():
							print("Hola")

						print("Bienvenido al programa")
						saludo()
						saludo()
						saludo()
					

Salida del programa


					Bienvenido al programa
					Hola
					Hola
					Hola

					

Valor de retorno

Por lo general, una función devuelve un valor de retorno resultado de su ejecución. Si nuestra función se encarga de devolver un número aleatorio, el resultado sería ese número en particular.

Supongamos que queremos implementar esa función


						from random import randint
						# Comienza la función
						def lanzar_dado():
							return randint(1,6)

						# El programa
						mi_dado = lanzar_dado()
						print(f"El resultado es {mi_dado}")
							
					

Consideraciones

La función NO se ejecutará hasta que sea invocada. Diferencia entre definir e invocar.

La función debe estar definida antes de invocarla. Sino, puede dar el mismo error de querer invocar a una variable si no está definida, por ejemplo:

NameError: name 'saludo' is not defined

¿Preguntas?

Parámetros

Parámetros

Las funciones pueden recibir valores de entrada mediante los llamados parámetros. Esos valores se definen en la cabecera de la función dentro de los paréntesis separados por coma si son mas de uno.


							def saludo(nombre):
								print("Hola",nombre)
							
							nom = input("Ingrese su nombre: ")
							saludo(nom)
						

Salida


								Ingrese su nombre: Cristian
								Hola Cristian
							

Observar que variable que se usó para enviar el dato no se corresponde con el nombre del parámetro.

Parámetros

Las funciones pueden recibir valores de entrada mediante los llamados parámetros. Esos valores se definen en la cabecera de la función dentro de los paréntesis separados por coma si son mas de uno.


							def saludo(nombre, apellido):
								print(f"¡Hola {nombre} {apellido}!")
							
							
							nom = input("Ingrese su nombre: ")
							ape = input("Ingrese su apellido: ")
							saludo(nom, ape)
						

Salida


							Ingrese su nombre: Sergio
							Ingrese su apellido: Pérez
							¡Hola Sergio Pérez!
						

Orden de los parámetros

Como se habrá observado, el parámetro se trata internamente en la función como si fuera una variable mas.

Cuando tenemos mas de un parámetro es importante saber que importa el orden que enviemos los datos ya que se respeta el orden de los parámetros y no el nombre de los mismos.

Orden de los parámetros (ejemplo)

Qué imprime este código.


							def saludo(nombre, apellido):
								print(f"¡Hola {nombre} {apellido}!")
							
							
							nom = input("Ingrese su nombre: ")
							ape = input("Ingrese su apellido: ")
							saludo(ape, nom)

						


								Ingrese su nombre: Sergio
								Ingrese su apellido: Pérez
								¡Hola Pérez Sergio!
							

¿Preguntas?

Variables locales

Variables locales

Las funciones pueden tener variables para usar internamente.

Las variables locales son exactamente igual a las variables vistas hasta el momento, solo que pueden verse dentro de la función y una vez que la función termina su ejecución las variables son eliminadas.

Ejemplo variables locales


							def funcion_prueba(numero):
								x=0
								if numero == x:
									print("El número es igual a x")
								else:
									print("El número NO es igual a x")

							funcion_prueba(3)
							funcion_prueba(2)
							funcion_prueba(0)
						

Output


								El número NO es igual a x
								El número NO es igual a x
								El número es igual a x
							
Observar que se puede enviar valores directamente.

Ejemplo variables locales


							y=99
							def funcion_prueba(numero):
								x=y
								if numero == x:
									print("El número es igual a x")
								else:
									print("El número NO es igual a x")

							funcion_prueba(3)
							funcion_prueba(2)
							funcion_prueba(99)
						

Output


								El número NO es igual a x
								El número NO es igual a x
								El número es igual a x
							
Desde las funciones se puede acceder (solo lectura) a las variables que están definidas en el programa.

¿Preguntas?

Ejercicios en clase

Ejercicio en clase 1

Escriba un programa que solicite al usuario que ingrese su nombre y apellido y luego una función que se encargue de saludar (similar a lo visto en los ejemplos). En caso que el nombre y el apellido sean "Sergio" y "Pérez" respectivamente debe saludar como "¡Hola, Checo!" de lo contrario un Hola nombre apellido.

Ejercicio en clase 2

Crea un programa que simule una calculadora. Le debe pedir al usuario dos números y una operación (puede ser suma, resta, multiplicación y división). Posteriormente debe imprimir el resultado.

Escribir una función para cada operación.


							Escriba el op1: 9
							Escriba el op2: 2
							Elija una operación (+ - * /): +

							El resultado es 9+2=11
						

En caso de la división, verificar que op2 NO sea 0. Dado que no puede realizarse una división por 0. En tal caso debe imprimir "No se puede dividir por 0".

Ejercicio en clase 3

Escribe un programa que convierta una temperatura ingresada por el usuario en grados Celsius a grados Fahrenheit y viceversa. Crea dos funciones: una llamada celsius_a_fahrenheit() que tome una temperatura en grados Celsius y devuelva su equivalente en grados Fahrenheit, y otra llamada fahrenheit_a_celsius() que haga lo contrario.

Celsius a Fahrenheit: (x°C * 9/5) + 32 = y°F

Fahrenheit a Celsius: (x°F -32) * 5/9 = y°C


							¡Bienvenido al conversor de temperaturas!
							Ingresa una temperatura: 64
							64.0 grados Celsius equivalen a 147.2 grados Fahrenheit.
							64.0 grados Fahrenheit equivalen a 17.77 grados Celsius.
						

¡Fin de la clase!

Ir al inicio
Exportar clase a PDF

Bibliografía