Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en...

21
Computación II Unidad IV Funciones y Módulos

Transcript of Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en...

Page 1: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Computación II

Unidad IV

Funciones y Módulos

Page 2: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Objetivos:– Comprender como construir programas en

forma modular partiendo de pequeñas partes conocidas como funciones.

– Ser capaces de crear funciones nuevas.– Comprender los mecanismos utilizados para

pasar información de función a función.– Saber usar las funciones inline y sus

ventajas.– Ser capaces de sobrecargar funciones.

Presentación de la unidad:

Page 3: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Contenidos:– Funciones – definición.– Prototipo de funciones.– Parámetros de una función.– Clases de almacenamiento.– Ámbito– Función inline.– Sobrecarga de funciones– Plantillas de función.

Presentación de la unidad:

Page 4: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Funciones - definición• Conjunto de sentencias con un nombre en común, que pueden

llamarse desde cualquier parte del programa.• Los programas en C++ se escriben combinando funciones que el

programador escribe con funciones preempacadas.• Estructura:

<tipo_de_retorno> nombreFuncion (<lista _parametros>){cuerpo_de_funcion;return <expresion>;

}• Ejemplo:

float fProducto(float nro1, float nro2){float prod = 0.0;prod = nro1*nro2;return pro;

}

Page 5: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Cada función debería limitarse a ejecutar una tarea sencilla y bien definida.

• El nombre de la función debe expresar en forma clara la tarea que ejecuta. Es un identificador válido.

int fCuadrado(int x){return x*x;

}

• El cuerpo de la función esta formado por las declaraciones de variables junto con enunciados. Es también conocido como bloque.

• Error: definir una función dentro de otra.

Funciones - definición

Page 6: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Prototipo de funciones

• C++ requiere que una función se defina o que se declare antes de su uso.

• El compilador utiliza los prototipos para verificar las llamadas de función.

• Le indica al compilador el tipo de datos requeridos por la función, el numero de parámetros que la función espera recibir, y el orden en el cual se esperan dichos parámetros.

• Los nombres de los parámetros se suelen incluir por razones de documentación. El compilador ignora esos nombres.

float fProducto(float, float);

• Coerción de argumentos: obligar a los argumentos al tipo apropiado.

Page 7: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Reglas de promoción: definen como deben ser convertidos los tipos de datos a otros tipos, sin perder datos.

• Las regla son aplicadas automáticamente. La conversión de valores a tipos inferiores por lo regular resulta en un valor incorrecto.

int fProducto (int x, int y){return x*y;}int main(){

float a, b;cout<<fProducto(a, b);return 0;

}

• Error de sintaxis: olvidar un prototipo de función si la definición de la función aparece después de la llamada de la función dentro del programa.

Prototipo de funciones

Page 8: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Parámetros de una función

• Los parámetros de una función son variables locales.

• C++ proporciona dos métodos para pasar variables (parámetros) de una función a otra.– Por valor (paso por copia): la función receptora no

puede modificar el valor del parámetros pasado.– Por referencia (o dirección): la función modifica el

valor del parámetro pasado y devuelve el valor modificado a la función llamadora.

Cuando se modifica el valor de un parámetro pasado por referencia, el valor queda almacenado en la misma dirección de memoria.

Page 9: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Parámetros de una función

Por valor Por referenciavoid fPorValor(int y){

y++;

cout<<y<<endl;

}

int main(){

int x = 6;

fPorValor(x);

cout<<x<<endl;

return 0;

}

void fReferencia(int &y){

y +=2;

}

int main(){

int x = 20;

fReferencia(x);

cout<<x<<endl;

return 0;

}

Page 10: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Por referencia – C – uso de punteros: void fIntercambio (int *x, int *y){

int aux;aux = *x;*x = *y;*y = aux;

}int main(){

int a, b;fIntercambio(&a, &b);return 0;

}

Parámetros de una función

Page 11: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Parámetros const: parámetros de sólo lectura en el interior de la función. void fRecorrerArray( arr[], const int tama);

• Argumentos por omisión o defecto:– Se pueden asignar valores por defecto a los

parámetros de una función.– El valor por defecto debe ser siempre una expresión

constante.– En la llamada a la función se deben incluir todas las

variables desde la izquierda hasta el primer parámetro omitido.

Parámetros de una función

Page 12: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Argumentos por omisión o defecto:– Los argumentos por defecto deben pasar por valor.– Los valores de los argumentos por defecto pueden

ser valores literales o definiciones constantes.– Todos los argumentos por defecto deben colocarse al

final del prototipo de la función.

void asteriscos(int fila, int columna=3, char c = ‘*’);

Desde el main: asteriscos(4);asteriscos(4,6);asteriscos(4,6,’@’)

Parámetros de una función

Page 13: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Funciones en línea (inline)

• Reducen la sobrecarga por llamadas de función; especial para pequeñas funciones.

• “inline” aconseja al compilador que genere una copia del código de la función “in situ”, cuando sea apropiado, a fin de evitar una llamada a función.

• Usar funciones inline puede reducir el tiempo de ejecución, pero puede aumentar el tamaño del programa.

• Sintaxis:inline tipo_de_retorno nombreF(lista_de_parametros){ cuerpo}

inline float cuadrado (float x){return x*x;}

Page 14: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Las macro de procesador son un tipo de función inline definidas en una directiva de procesador #define

• El procesador no evalúa las expresiones incluidas como argumento en una macro; solo reemplaza cada instancia del nombre del argumento.

• Sintaxis:#define nombreM (parámetro)(expresión)#define cuadrado(x) (x)*(x)

• Los argumentos de las funciones en línea se evalúan antes de ser pasados a la función.

Funciones en línea (inline)

Page 15: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Nombre• Tipo de dato• Valor• Duración almacenamiento:

– Período durante el cual una variable existe en memoria.• Clase de almacenamiento:

– Ayuda a determinar la duración del almacenamiento, el alcance y el enlace.

• Alcance: – Es desde donde puede ser referenciada una variable.

• Enlace: – Determina para un programa de varios archivos fuente, si una variable

es conocida solo en el archivo en el que actúa o en cualquier archivo fuente.

Atributos de una variable

Page 16: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Clases de almacenamiento

Clases de almacenamiento:

(persistencia)

automática

estática

auto

register

extern

static

•Solo las variables pueden tener persistencia automática.

•Variables que existen en el ámbito de un bloque.

•La palabra reservada “auto” declara en forma explícita a las variables de persistencia automática; por omisión, las variables locales tienen persistencia automática.

auto tipo_de_dato nombreVariable;

auto int x;

Page 17: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• “register” sugiere al compilador que conserve la variable en uno de los registros del hardware. Usado para variables de tipo contador, evita la sobrecarga de memoria.

register tipo_de_dato nombreVariable;register int count=1;

• Los identificadores de persistencia estática existen a partir del momento en el cual el programa inicia su ejecución.

• “static” usado para identificadores externos (variables globales y nombres de función) y para variables locales.

• Las variables locales declaradas como static son conocidas solo para la función para la cual fueron definidas, pero conservan su valor cuando sale de la función para la próxima vez que esa función sea llamada.

• Las variables locales y los nombres de función por omisión son “extern”

Clases de almacenamiento

Page 18: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Ámbito o alcance

• El alcance de un identificador es la porción de programa en la cual dicho identificador puede ser referenciado.

• Los alcances posibles son:– Alcance de función– Alcance de archivo– Alcance de bloque– Alcance de prototipo de función– Alcance de programa

Page 19: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

• Las variables que tienen ámbito de programa pueden ser referenciados por cualquier función dentro del programa (variables globales)

• La variable declarada fuera de cualquier función y cuya declaración contiene la palabra static tiene ámbito de archivo.

• Las variables locales tienen ámbito de función.• Las variables declaradas en un bloque tienen ámbito de

bloque y no son visibles fuera del bloque.• Los únicos identificadores con alcance de prototipo de

función son aquellos utilizados en la lista de parámetros de un prototipo de función.

Ámbito o alcance

Page 20: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Sobrecarga de Funciones

• C++ permite que sean definidas varias funciones con el mismo nombre, siempre que estos nombres de funciones indiquen diferentes conjuntos de parámetros.

• La homónima de función se utiliza para funciones que ejecutan tareas similares sobre diferentes tipos de datos.

• Se pueden distinguir las funciones homónimas mediante su firma, combinación del nombre de la función y de sus tipos de parámetros.

• Las funciones homónimas no necesariamente tienen el mismo numero de parámetros.

int cuadrado(int x){return x*x;}double cuadrado(double y){return y*y;}

Page 21: Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.

Plantillas de Función

• Permiten la creación de funciones que ejecutan las mismas operaciones sobre distintos tipos de datos; a diferencia de la sobrecarga de funciones, solo se define una vez.

• Todas las definiciones de plantilla de función empiezan con la palabra reservada “template” seguida por una lista de parámetros formales a la plantilla. Cada parámetro formal es precedido por class.

template <class T>void printArray(T *arrayA, const int contador){

for (int i = 0; i<= contaor; i++)cout<<arrayA[i];

}