Programacion Modular Python
Programacion Modular Python
TEMA 2:
Programación
Modular y
Estructurada
2
ÍNDICE Final de estos
apartados:
EJEMPLOS
ILUSTRATIVOS
2.1. Introducción(2-5) TRABAJO
2.2. Principios de la Programación Estructurada(6,7) PERSONAL
3
2.1. Introducción
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
4
2.1. Introducción
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
5
2.1. Introducción
● Código demasiado largo, enrevesado y poco claro, ilegible en la mayoría de los casos
no solo para otros programadores, también para el autor del mismo.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
6
2.2. Principios de la Programación Estructurada
Programación Estructurada.
Principios:
Abstracción.
No se diseña la solución de un problema pensando en una máquina y lenguaje concreto.
Teorema de la Estructura (Bohn y Jacopini)
Todo diagrama o programa propio, cualquiera que sea el trabajo que tenga que realizar, se
puede implementar utilizando las tres estructuras de control básicas que son la secuencial,
alternativa o selectiva y repetitiva o iterativa.
La importancia de este teorema radica en que estas tres estructuras tienen un único punto
de entrada y un único punto de salida => Todo lo que se construya con estas tres estructuras
tendrá también un único inicio y un único final.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
7
2.2.1. Instrucción goto
Esta instrucción fue la base de lenguajes como BASIC, o FORTRAN y muchos otros, pero
desde la aparición de la programación estructurada, esta instrucción esta proscrita puesto
que va contra los principios de la misma.
Esta instrucción permite saltar desde cualquier punto del programa a cualquier otro, y por
tanto va contra el principio enunciado en el Teorema de la estructura.
Esta instrucción nos impide hacer una descomposición del problema, puesto que si desde
cualquier lugar podemos ir a cualquier otro es imposible ir separando el programa en áreas
claras, todo estará mezclado con todo. Nuestro objetivo es trabajar de forma
estructurada.
Norma importantísima: se llega al fin del programa por un sólo camino, de la misma forma
que se sale de un bucle por una única vía.
En programación estructurada esta totalmente prohibido el uso de la instrucción goto
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
8
2.3. Pasos para la construcción de un programa modular
Programación modular
División del problema a resolver en varios subproblemas más sencillos con entidad y sentido
propios .
Búsqueda de la abstracción => no importa como se hace sino que hace cada uno de los
módulos.
Para cada uno de estos subproblemas o módulos se construye un algoritmo que los resuelve.
Terminada esta fase, se componen todos los módulos para obtener un algoritmo global que
resuelva el problema. Esto se conoce como la técnica Divide y vencerás.
Existen dos formas de realizar el diseño modular:
Diseño descendente (Top Down): Resolver el problema original apoyándonos en una
serie de subtareas o módulos que se suponen ya resueltos y obtener la solución del
problema, posponiendo la solución de dichas subtareas.
Diseño ascendente (Bottom Up): Se comienza por resolver las subtareas más pequeñas
que contiene el problema original para, posteriormente, unirlas obteniendo la solución
del problema.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
9
2.3.1. Ejemplo 1
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
10
2.3.2. Organigramas
Diseño del organigrama modular, donde se muestran los diferentes módulos en los que se divide el
problema inicial y la comunicación entre ellos.
Diseño del modulo principal que realiza la distribución del trabajo entre los diferentes submódulos.
Cuando se llama a un módulo, el módulo que llama cede el control al submódulo llamado, y
este le devuelve el control en el punto inmediatamente siguiente al de la llamada, una vez
completado el proceso o tarea que realiza es decir cuando finalicen TODAS SUS
INSTRUCCIONES (incluyendo las llamadas a otros módulos si las hay).
Los módulos se pueden llamar tantas veces como sea necesario, es decir es posible realizar el
mismo proceso sobre diferentes datos tantas veces como se precise sin repetir código.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
11
2.3.2. Organigramas
Prog. Principal
Módulo 8
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
12
2.3.3. Organigrama Ejemplo1
Leer radio (r) y altura (h) Calcular el área de un círculo Calcular el área de la pieza Sumar 2*S y F
de radio r (S) frontal de altura h
S=p* r2
L=2*p* r F=L*S
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
13
2.3.4. Comunicación entre módulos
Establecer la comunicación entre los módulos: Qué información necesitan, qué información
devuelven y quién y a quién se la proporcionan. Los módulos deben cumplir las siguientes
características:
Máxima cohesión, es decir, las salidas de un módulo deben ser compatibles con las entradas de
otros módulos.
Mínimo acoplamiento, es decir, la cantidad de información que recibe un módulo de otro
módulo debe ser la mínima.
El resultado de un módulo debe ser función directa de sus entradas y no depender de ningún
estado interno.
Los módulos serán como 'cajas negras' que recibe un / unos valores de entrada y devuelven un /
unos valores de
salida (los programas son combinaciones de esas cajas negras enlazadas por sus salidas y
entradas).
E1 S1 /E2 Módulo 2 S2
Módulo 1
I/F 1 I/F 2
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
E1 Programa S2
14
2.3.4. Comunicación entre módulos
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
15
2.3.4. Comunicación entre módulos
Funciones y Procedimientos
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
16
2.4. Ámbito de las variables
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
17
2.4. Ámbito de las variables
Diagrama
C C
D
E
D D, E, F, G
F
E E, F, G
G
F F
G G
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
18
2.4.1 Ejemplos
Ejemplo:
Módulo Principal
VARIABLE x, y, z: entero {Declaración de variables globales}
Modulo 1
VARIABLE x, y: entero {Declaración de variables locales}
INICIO {Modulo 1}
y x*100
Fin { Módulo 1}
Llamada a Módulo 1
zx+y
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
19
2.4.1 Ejemplos
Módulo Principal
Modulo 1
Inicio {Módulo Principal}
VARIABLE x, y: entero {Declaración de variables locales}
INICIO {Modulo 1} Leer (x, y, z) {Suponer lectura: 1,2,3}
leer (x, y ) {Suponer lectura: 3,2}
Llamada a Módulo 1
zx+y
Llamada a Módulo 2
escribir (z) { Salida: 5}
Escribir (x, y, z) {Salida 1,2,5 se ha modificado z en Modulo 1}
FIN { Módulo 1}
Fin {Módulo Principal}
Modulo 2
FIN { Módulo 2}
20
2.4.1 Ejemplos
Módulo Principal
VARIABLE x,y,z: entero {variables globales}
Modulo 1
VARIABLE x,y: entero dato:real; {variables locales}
INICIO Inicio {Módulo Principal}
leer (x,y) {Suponer lectura: 3,2} Leer (x,y,z) {Suponer lectura: 1,2,3}
z x+y Llamada a Módulo 1
escribir ( x,y, z) {salida : 3,2, 5} Escribir (x,y,z) {salida : 1,2, 5}
dato:= 10.95 Escribir (dato) {salida : ERROR, variable desconocida}
escribir (dato) {salida : 10.95} Llamada a Módulo 2
Fin {Módulo 1} Escribir (x,y,z) {Salida 1,2,5 modificado z en Modulo 1}
Modulo 2 Fin {Módulo Principal}
VARIABLE x,z: entero {variables locales}
INICIO
leer (x,z) {Suponer lectura: 10,20 }
z x+z
escribir (x, y, z) {salida: 10, 2, 30}
Fin {Módulo 2}
Tema 2: Fundamentos de Programación
21
2.4.2. Variables globales y locales en Python
Variables globales: residen fuera de toda función, son visibles en todo el programa.
Variables locales: Son creadas dentro de las funciones y solo son visibles dentro de las mismas.
En python existen además Variables no locales. Si a una variable no se le asigna valor en una
función, Python la considera libre y busca su valor en los niveles superiores de esa función,
empezando por el inmediatamente superior y continuando hasta el programa principal. Si a la
variable se le asigna valor en algún nivel intermedio la variable se considera no local y si se le
asigna en el programa principal la variable se considera global
Las variables locales, al contrario que las globales, tienen una vida efímera. Solo existen durante el
momento en el que es llamada la función. En el momento en el que esta concluye, desaparecen.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
22
2.5. Creación de subprogramas
Los procedimientos devuelven cero, uno o varios valores, en caso de que devuelva cero
valores devuelve un dato a la unidad de programa.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
23
2.5. Creación de subprogramas
Los módulos se escriben, generalmente, antes que el programa principal (en el bloque
declarativo) y constan de las mismas partes que un programa, es decir, sección de
declaraciones y cuerpo del módulo.
Cuando el módulo es llamado se realiza una correspondencia entre los parámetros formales
y los parámetros actuales ,que son utilizados en lugar de los parámetros formales,
permitiendo así el intercambio de información. Es lo que se conoce como paso de
parámetros.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
24
2.5.1 Paso de parámetros por valor y por referencia
Los parámetros se tratan como variables locales y los valores iniciales se proporcionan
copiando los valores de los correspondientes parámetros actuales.
Los cambios que se produzcan por efecto del subprograma no producen cambios en los
valores originales es decir no se devuelven valores de retorno al punto de llamada.
Por tanto este paso puede ser una constante, variable o expresión.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
25
2.5.1 Paso de parámetros por valor y por referencia
El módulo que llama pasa al módulo llamado la dirección del parámetro actual, de
forma que la variable que actúa como parámetro formal es compartida por ambos
módulos, siendo visibles las modificaciones que se realicen en el módulo llamado, se
devuelven por tanto valores de retorno al punto de llamada.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
26
2.5.2 Definición de Función
Funciones
Una función es un módulo que recibe uno o varios datos de entrada y devuelve un único valor:
Las funciones siempre devuelven un valor al programa que las invocó.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
27
2.5.2 Definición de Función
Funciones
La variable debe ser del mismo tipo que el valor de la salida de la función
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
28
2.5.2.1 Características de las Funciones
La lista de parámetros formales es la información que se le tiene que pasar a la función debe
indicar el tipo de datos que se trasfiere. Estos parámetros, dentro de la función, se utilizan como si
fueran variables locales definidas en la función.
Para cada parámetro hay que poner su nombre (identificador) y tipo de dato. Sintaxis:
(ident_F1: tipo1, ident_F2 : tipo2,.....)
La lista de parámetros actuales está formada por un conjunto de identificadores correspondientes
a variables, constantes, expresiones o literales separados por comas, definidas en el modulo que
llama, del mismo tipo especificado en la lista de parámetros formales y coincidiendo en número y
orden con los parámetros formales. Sintaxis:
(ident_A1, ident_ A2,…, ident_AN)
El nombre de la función lo da el usuario y tiene que ser significativo.
En las variables locales se declaran las variables que solo se necesita usar dentro de la función.
Entre las acciones existirá necesariamente una del tipo retorno <valor>. Esta sentencia pondrá fin a
la ejecución de la función y devolverá el valor de la función, asociado al nombre o identificador
de la función que será del mismo tipo que el indicado al declarar la función en la parte final de la
cabecera.
No se permiten funciones que no devuelvan nada.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
29
2.5.2.2 Ejemplos Funciones pseudocódigo
Ejemplo.
Diseñar una función booleana o lógica que comprueba si un carácter dado es o no un dígito.
Funcion es_digito(car:carácter):booleano
Inicio
es_digito(car>=’0’) y (car<=’9’)
Fin
...............
inicio {modulo principal}
…………….
si es_digito(car)
escribir (' el carácter es un dígito')
sino
escribir(' el caracter no es un digito’).
fin.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
30
2.5.2.3 Definición de Función en Python
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
31
2.5.2.4 Ejemplos Funciones en Python
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
32
2.5.2.4 Ejemplos Funciones en Python
``` (str)->bool
Esta función dado un carácter me dice si es un dígito’’’
Este comentario sirve para documentar cualquier función, podremos acceder a él en la Shell
mediante la función help(nombre de la función), ejemplo:
>>> help(abs)
abs(...)
Es importante crear esta información para todas las funciones que implementemos
posteriormente visualizar lo que hace la función en la shell ejemplo
>>> help(es_digito).
¡¡¡Esta es una costumbre muy recomendable!!!!
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
33
2.5.2.4 Ejemplos Funciones en Python
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
34
2.5.2.4 Ejemplos Funciones en Python
Ejemplo.
Diseñar una función que compruebe si un número es par.
# algoritmo para comprobar si un número es par
def es_par(n):
return n%2 == 0
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
35
2.5.2.4 Ejemplos Funciones en Python
#2. docstring es un comentario que siempre añadiremos indicando los parámetros de entrada y salida y un resumen de lo
que hace el #módulo y a veces también por aclarar, podemos añadir casos de uso
‘’’ (n)->bool Esta función dado un número evalúa si es un número perfecto: es un entero que es igual a la suma de los
divisores propios menores que él mismo’’’
# 3. Cuerpo de la función
# 3. Cuerpo del programa
sumatorio = 0
36
2.5.2.5 Llamada a Funciones predefinidas en Python
>>> import builtins # estas dos instrucciones muestran todas las funciones de python
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError',
'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError',
'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis',
'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',
'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError',
'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError',
'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError',
'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'ReferenceError',
'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning',
'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError',
'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError',
'__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__',
'__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod',
'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit',
'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int',
'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next',
'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
37
2.5.2.5 Llamada a Funciones en Python
abs(...)
abs(number) -> number
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
38
TRABAJO PERSONAL
39
Trabajo personal
Lectura recomendada
Laboratorio Tema 2
1. Suma de 2 números.
40
2.5.3 Definición de Procedimientos
Procedimientos
Un procedimiento es un subprograma que recibe cero o más valores de entrada y puede devolver cero o más valores de
salida.
En los procedimientos, tanto la entrada como la salida de información se realizan a través de Los parámetros.
De nuevo es necesario distinguir entre la sintaxis de la declaración o definición de un
procedimiento y la sintaxis de la llamada al mismo.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
41
2.5.3 Definición de Procedimientos
Procedimientos
En los procedimientos la lista de parámetros formales debe indicar el tipo de datos que se
trasfiere y el tipo de paso de parámetro. Sintaxis:
([E/ o E/S o S/] ident_P1: tipo1, [E/ o E/S o S/] ident_P2 : tipo2,.....)
La lista de parámetros actuales serán variables, definidas en el modulo que llama, del mismo tipo
especificado en la lista de parámetros formales y en el mismo orden.
(ident_A1, ident_ A2,…, ident_AN)
Los parámetros actuales deben coincidir en tipo, número y orden con los parámetros Formales.
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
42
2.5.3 Definición de Procedimientos
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
43
2.5.3.1 Definición de Procedimientos en Python
No todas las funciones devuelven un valor. Una función que no devuelve un valor se
denomina procedimiento.
¿Para qué sirve una función que no devuelve nada?:
Mostrar mensajes o resultados por pantalla. No te equivoques: mostrar algo por pantalla no
es devolver nada. Mostrar un mensaje por pantalla es un efecto secundario.
Veámoslo con un ejemplo. Vamos a implementar ahora un programa que solicita al usuario
un número y muestra por pantalla todos los números perfectos entre 1 y dicho número.
En Python no existe el paso de parámetro por valor y por referencia, en realidad los valores
mutables se comportan como paso por referencia, y los inmutables como paso por valor.
https://librosweb.es/libro/python/capitulo_4/definiendo_funciones.html
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
44
2.5.3.1 Definición de Procedimientos en Python
Sintaxis:
def mi_funcion(param1, param2):
print (param1)
print (param2)
Es decir, la palabra clave def seguida del nombre de la función y entre paréntesis los argumentos
separados por comas. A continuación, en otra línea, indentado y después de los dos puntos
tendríamos las líneas de código que conforman el código a ejecutar por la función.
También podemos encontrarnos con una cadena de texto como primera línea del cuerpo de la
función. Estas cadenas se conocen con el nombre de docstring (cadena de documentación
sirven para documentar la función).
def mi_función(param1, param2):
"""Esta función imprime los dos valores pasados como parametros""“
print (param1)
print (param2)
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
45
2.5.3.1 Definición de Procedimientos en Python
##Función tabla perfecto utiliza función anterior. Observar la llamada en el cuerpo del programa
sumatorio = 0
if n % i == 0:
sumatorio += i
return sumatorio == n
if es_perfecto(i):
Tabla de números perfecto de 1 a : 100
print(i, 'es un número perfecto')
46
2.5.3.2 Ejemplos de Procedimientos Python (Parametros por valor)
Algoritmo EjercicioA
# Implementación código Python
Variable
def pa(b):
a,c: entero
c = b+5
Procedimiento pa (E/ b: entero)
b=2
Variable
c=3
c: entero
a=2
inicio
pa (a)
c b+5
print (c, a) #Salida 3, 2
b 2
fin #a se esta utilizando como variable global
Inicio #paso de parámetro a por valor, la variable c
c3 Aparece en cuerpo principal y se vuelve a llamar en función
(var global)como no se dice nada se volveria a definir y sería
a 2 también una variable local del procedimiento
pa (a)
Escribir (c, a) {Salida 3, 2}
fin
Tema 2: Fundamentos de Programación
47
2.5.3.2 Ejemplos de Procedimientos Python (Uso variables globales)
Algoritmo ejercicioB
Variable
a, c: entero # Implementación código Python
b 5 b=5
fin
#Cuerpo Principal
Inicio
c=3
c3
a=2
a 2 pb(c)
pb(c) print(c,a)
Fin
Algoritmo ejercicioC
Variable a, b: entero # Implementación código Python
Procedimiento pc (E/ i: entero, E/S j: entero)
def pc (i,b):
Inicio
i i+10 i = i+10
b= b+10
j j+10
print(i, b)
Inicio a=2
a 2 b=3
b = pc(a,b)
b 3 print (a, b)
51
2.5.3.4 Resumen para simular parámetros por valor y referencias con Python
Tema
Tema 2: 3: Fundamentos
Fundamentos de Programación
de Programación
52
TRABAJO PERSONAL
53
2.6.2 Trabajo personal
Lectura recomendada
Laboratorio Tema 2
Resolver ejemplos