tema 14: diseño estructurado (modularidad ) · funciones y procedimientos en c ... subrutinas de...

29
Estructuras de datos (Prof. Edgardo A. Franco) 1 Tema 14: Diseño Estructurado (Modularidad) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Upload: hahanh

Post on 03-Oct-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Estructuras de datos (Prof. Edgardo A. Franco)

1

Tema 14: Diseño Estructurado (Modularidad)

M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Contenido • Introducción • Diseño Estructurado • Ventajas de modular un problema • Funciones y procedimientos en Programación Estructurada

• Funciones • Procedimientos

• Concepto de función en C • Funciones de C

• Funciones y procedimientos en C • Estructura de una función en C • Llamada a una función • Prototipo o declaración de funciones • Definición de funciones • Ejemplo de programa en C

• Ámbito de variables • Variables locales • Variables globales

• Parámetros de una función • Paso por valor • Paso por referencia

2

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Introducción • La modularidad es la capacidad que tiene un sistema de ser

estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para la consecución de dicho objetivo.

• Cada una de esas partes en que se encuentre dividido el sistema recibe el nombre de módulo. Idealmente un módulo debe poder cumplir las condiciones de caja negra, es decir, ser independiente del resto de los módulos y comunicarse con ellos (con todos o sólo con una parte) a través de unas entradas y salidas bien definidas.

3

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Diseño Estructurado • En programación y diseño de algoritmos, el diseño

estructurado persigue elaborar algoritmos que cumplan la propiedad de modularidad, para ello, dado un problema que se pretende resolver mediante la elaboración de un programa de cómputo, se busca dividir dicho programa en módulos siguiendo los principios de diseño de descomposición por refinamientos sucesivos, creación de una jerarquía modular y elaboración de módulos Independientes.

4

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Ventajas de modular un problema • Modular un problema complejo trae muchos beneficios:

• Entender mejor un problema complejo. • Ir aislando de manera especifica cada subproblema. • Escribir algoritmos correctos y más eficientes. • Producir programas que son más fáciles de mantener. • Escribir programas que son reutilizables.

• En la programación estructurada la modularización de

una solución es posible al emplear funciones y procedimientos.

5

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Funciones y procedimientos en Programación Estructurada

• La programación estructurada se apoya de los conceptos de función y procedimiento para lograr el objetivo de un diseño estructurado.

6

INICIO

ProcesoA

FunciónA

ProcesoB

FIN

Principal

INICIO

Proceso

FunciónB

FIN

ProcesoA

INICIO

Proceso

FIN

FunciónA

INICIO

Proceso

FIN

FunciónB

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Lenguajes como Pascal (100% estructurado) lo reflejan:

7

Procedimiento en Pascal Función en Pascal

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Funciones • Son elementos que realizan una tarea en particular

y retornan un valor a la salida.

• Son utilizadas como expresiones primarias y por lo tanto formar parte de expresiones más complejas, es decir, se pueden utilizar para realizar operaciones con el valor que retornan a la salida. Por ejemplo, sumarse, restarse, multiplicarse, dividirse, etc.

float valor; valor = 2*pow(x,y)+sqrt(4.23245)+7*sin(2*3.1416);

8

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Procedimientos • Son elementos que realizan una tarea en particular

pero que no retornan un valor a la salida y pueden recibir o no parámetros a la entrada.

• Son utilizadas como expresiones instrucción y se invocan cuando se requiere que el programa realice esa tarea en particular.

printf( “Imprimir una cadena de caracteres” ); scanf( “%f”, &x );//Capturar el valor de una variable

9

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Concepto de función en C • Una función en lenguaje C es un miniprograma dentro de un

programa más general, en otras palabras, una función es un pequeño fragmento de código “funcional” que realiza una tarea especifica.

Desarrollar un programa utilizando funciones ayuda a: • Ahorrar espacio eliminando el código repetido. • Hace más fácil la programación. • Proporcionan un medio para dividir un proyecto grande en

pequeños módulos más entendibles y manejables. • Permiten construir nuevos sistemas a partir de otros ya

desarrollados. • Facilitan la labor de planeación, desarrollo y

documentación de los programas.

10

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Funciones de C • Un programa en C puede constar de una o varias definiciones

de funciones. • Cada una de estas funciones realiza una tarea en particular. • Las funciones en C no se pueden anidar, es decir, no se puede

declarar el cuerpo de una función dentro de otra función. • En C todas las funciones son externas y globales, es decir,

pueden ser invocadas desde cualquier parte del programa, incluso dentro de otra función.

11

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Funciones y procedimientos en C • Las funciones en C provienen de las llamadas a

subrutinas de Fortran, sin embargo, su uso intensivo se introdujo con los procedimientos y funciones de Algol y Pascal.

• Las funciones en C se pueden utilizar para modelar los conceptos de la modularidad como: • Funciones (Retornando un valor “return un tipo de dato no void” y recibiendo

o no parámetros)

• Procedimientos (No retornando ningún valor “return void” y recibiendo o no parámetros)

12

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Estructura de una función en C • La estructura de una función es:

tipo_de_retorno nombreFuncion( listaParámetros ) { /**Cuerpo de la función*/ return expresión; } Donde: • tipo_de_retorno: Es el valor devuelto por la función o la

palabra reservada void por si la función no retorna ningún valor.

• nombreFuncion: Es el identificador o nombre de la función.

• listaParametros: Es la lista de parámetros que la función recibe como entrada, separados por comas.

• Expresión: Es el valor que regresa la función. 13

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Una llamada a una función produce la ejecución de las expresiones del cuerpo de la función y un retorno a la unidad de programa invocadora después de que la ejecución de la función haya terminando, normalmente cuando se encuentra una sentencia return.

La sentencia return termina inmediatamente la función en la se ejecuta.

tipo_de_retorno nombreFuncion( listaParámetros ) { /**Cuerpo de la función*/ return expresión; }

14

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Nombre o identificador de una función: Por convención el nombre de una función debe comenzar

con una letra en mayúscula o con un guión bajo ( _ ) y puede estar formado de una longitud n se recomienda una longitud no máxima de 32 caracteres alfanuméricos, mayúsculas, minúsculas y guiones bajos, pero sin espacios intermedios.

• Tipo de retorno: Una función siempre devuelve un tipo de valor a la salida,

este tipo de retorno puede ser uno de los datos simples de C o un apuntador a cualquier tipo de dato, sin embargo, si una función no devuelve un resultado, se utiliza el tipo void, que se considera como un tipo de dato nulo.

15

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Una función devuelve un único valor, el valor devuelto (expresión) puede ser cualquier tipo de dato conocido en C (simple o estructurado). Sin embargo, también se puede retornar valores múltiples devolviendo un apuntador a una estructura o un arreglo.

• Una función puede tener cualquier numero de sentencias return, en

el momento que el programa encuentre una de estas sentencias, devolverá el control a la sentencia invocadora.

• Sí no se encuentra ninguna sentencia return la ejecución de la función continuará hasta el final de dicha función, es decir, hasta que se encuentre la llave de cerrado “}”, en ese momento se devolverá el control a la sentencia invocadora.

16

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Parámetros de entrada formales: En C sólo se permite el paso de parámetros por valor y

únicamente de los tipos de datos básicos. No obstante, C utiliza el paso de apuntadores para el paso de parámetros por referencia, es decir, se puede pasar apuntadores a tipos de datos simples, estructuras, arreglos e incluso a funciones. (Se retomará con el tema de apuntadores).

El paso de parámetros en una función es opcional, pero si se

incluyen, deben estar declarados entre los paréntesis de la declaración de la función y separados por comas, es decir, cada parámetro debe tener una declaración independiente.

17

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Llamada a una función • Las funciones, para poder ser ejecutadas, han de ser

llamadas o invocadas. Cualquier instrucción o expresión puede tener una llamada a función que redirigirá el control del programa a la función invocada.

• Normalmente la invocación a una función ser realiza desde la función principal main(), sin embargo, también pueden ser invocadas desde otras funciones, incluso desde ellas mismas “recursividad”.

• Una función invocada recibe el control del programa, se

ejecuta y cuando termina (cuando se alcanza una sentencia return o la llave de cierre de la función) el control del programa retorna a la función principal o a la función llamadora.

18

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Control del flujo del programa

19

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Prototipo o declaración de funciones • A la declaración de una función se le llama prototipo. Los

prototipos de funciones comúnmente van declaradas en la cabecera del código después de la definición de las macros del preporcesador (directivas #include y #define) pero antes del método main() y con terminación en (;).

• El prototipo consta de los siguientes elementos:

tipo_retorno nombre_funcion(lista_prototipos_parametros);

• tipo_de_retorno: Es el valor devuelto por la función o la palabra reservada void por si la función no retorna ningún valor.

• nombreFuncion: Es el identificador o nombre de la función.

• lista_prototipos_parametros:Es la lista de parámetros que la función recibe como entrada, separados por comas. Colocar el identificador de los parámetros es opcional, sin embargo se recomienda colocarlos para mejor entendimiento de la función

20

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• El prototipo de la función sirve para que el compilador realice la comprobación de tipos de dato de retorno y envío.

• Cuando se realiza una invocación a una función, el compilador ya conoce cuales son el numero y los tipos de dato que la función debe recibir, confirma que los datos enviados a la función coincidan con los que conoce previamente y si no coinciden se generara un error en tiempo de compilación.

• El compilador sólo utiliza la información de los tipos de dato que debe recibir una función. Los identificadores de dichos datos son irrelevantes para tal proceso, sin embargo, se recomienda utilizarlos con propósito de hacer más comprensible la utilidad de la función.

21

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Definición de funciones • La declaración de un prototipo de función es diferente a la

definición de dicha función.

• La declaración contiene sólo la cabecera de la función, es decir, su prototipo y se listan sus características.

• La definición significa colocar el cuerpo de la función, es decir, definir la estructura del código de la función en alguna parte del programa, pero fuera del método principal main().

• La declaración del prototipo de la función sirve para el

compilador pueda validar que número y el tipo de datos de entrada de la función coincidan con los que se utilizan en la llamada o invocación a dicha función.

22

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Cuando se define el código de la función, es este momento, si es necesario colocar tanto tipo de datos y sus identificadores ya que se le estará indicando al compilador que utilice dichos identificadores como elementos de procesamiento para que la función realice la tarea especificada. #include <stdio.h> double calcularCuadrado( double ); int main( void ) { double x = 11.5; double resultado; resultado = calcularCuadrado( x ); printf( "El cuadrado de x es: %8.4lf \n", resultado ); return 0; } double calcularCuadrado( double numero ) { return numero*numero; }

Declaración del Prototipo de la función sin identificadores en los tipos de dato

Definición de la función, en este momento se colocan los identificadores en los tipos de dato

23

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

//Directivas del pre-procesador #include <stdio.h> #include <math.h> #define VALOR 5.7 //Definición de constantes //Declaración de prototipos double modulo3D(double x, double y, double z); //Declaración de variables globales double mod3; /* Variable global mod3*/ //Función principal int main(void) { int x, y, z; x=y=z=VALOR; mod3=modulo3D(x,y,z); printf(“\nEl módulo es: %lf”,mod3); return(0); } //Funciones definidas por el usuario double modulo3D(double x, double y, double z) { return(sqrt(x*x+y*y+z*z)); }

24

Ejemplo de programa en C

24

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Ámbito de variables • Existen dos tipos de ámbito en la variables que puede manejar C,

estas son las variables locales y globales.

• Variables locales son aquellas que son declaradas dentro del

ámbito de una función y su uso se restringe dentro de la misma función, se dice entonces que la variable es local a esa función.

• Esto implica que todas las variables que se declaren dentro de

una función sólo van a poder ser manipuladas dentro de dicha función y no podrán ser referenciadas desde fuera de la función.

• Cualquier variable que se defina dentro de las llaves del cuerpo de una función el compilador la interpretará como una variable local a esa función.

• Si otra función declara otra variable con el mismo identificador entonces dichas variables serán “tocayas” más no iguales.

25

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

• Variables globales es aquella que se define fuera del cuerpo de cualquier función, normalmente después de la definición de las directivas del preprocesador (#include y #define).

• El ámbito de una variable global son todas las funciones que

componen el programa.

• Cualquier función puede acceder a dichas variables para leer y modificar su valor. Es decir, se puede hacer referencia a su dirección de memoria en cualquier parte del programa.

• No puede haber declaración de variables globales con el mismo identificador.

• Las variables globales pueden ser inicializadas en el mismo instante que se declaran.

• Puede haber variables globales de cualquier tipo de dato que puede manejar C.

26

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Ámbito de variables – variables globales • La declaración de las variables globales es la misma

que la declaración de una variable local, es decir: #include <stdio.h> #define PI 3.1416 <tipo de dato> <identificador>; <tipo de dato> <identificador> = <valor>; int main( void ){ ... }

• Si una función declara una variable local con el mismo identificador que una variable global (tocayas), entonces, el compilador le dará mayor prioridad al uso de la variable local que la global.

Constante también tomada Como una variable global a partir de su declaración

27

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Parámetros de una función • C siempre utiliza el paso de parámetros por valor, para

pasar la copia del valor de una variable a una función. Sin embargo, C utiliza el paso de apuntadores para el paso de parámetros por referencia. (Se retomará con el tema de apuntadores).

Paso de parámetros por valor. El paso por valor o paso por copia, significa que cuando C

compila la función y el código que hace la llamada a la función, la función recibe una copia de los valores de los parámetros, es decir, si se modifica el valor de dichos parámetros dentro de la función, dichos cambios sólo serán validos dentro de la función pero no fuera de ella.

28

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez

Parámetros de una función – Paso por valor

• En la técnica del paso de parámetros por valor, la modificación de la variable (parámetro recibido) dentro de la función receptora no afecta el valor original del parámetro enviado al momento de la invocación a dicha función.

#include <stdio.h> double calcularCuadrado( double ); int main( void ) { double x = 11.5; double resultado; resultado = calcularCuadrado( x ); printf( "El cuadrado de %d es: %8.4lf \n", x, resultado ); return 0; } double calcularCuadrado( double x ) { int aux = x; x++; return aux*aux; }

Parámetro enviado

Parámetro copia del parámetro enviado

Modificación al valor del parámetro copia

29

14 D

iseño

Est

ruct

urad

o (M

odul

arid

ad)

Algo

ritm

ia y

pro

gram

ació

n es

truc

tura

da

Prof

. Edg

ardo

Adr

ián

Fran

co M

artín

ez