Вы находитесь на странице: 1из 13

FUNDAMENTOS DE PROGRAMACIN.

SEMANA 8
Fundamentos de Programacin -
Semana 8

Esta semana utilizars funciones en la creacin de programas


computacionales, identificars partes o componentes de una
funcin dada, implementars funciones con paso de parmetros
por valor, de acuerdo a requerimientos de un problema e
implementars funciones con paso de parmetros por referencia,
de acuerdo a requerimientos de un problema.

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


Funcin

Una funcin es muy similar a un procedimiento, con la salvedad de


que la funcin debe retornar algn valor, o dicho de otra forma el
proceso dentro de la funcin debe generar algn resultado en
algn tipo de datos conocido para retornarlo a quien llame al
procedimiento. Un ejemplo ser el comportamiento sumar, el cual
recibir dos parmetros y cuyo resultado de la suma no ser una
impresin por pantalla, el resultado generado ser devuelto a
quien llame a la funcin como un valor representado por alguno de
los tipos de datos que tenga el lenguaje, la funcin utiliza la
palabra reservada return para realizar el retorno del resultado del
proceso, por ello return siempre debe estar presente y su
ejecucin significa tambin el final de la funcin, ya que una vez se
retorna el resultado significa que la funcin ha finalizado.

int suma(int a, int b)


{
int c = a + b;
return c;
}

El cdigo anterior es un ejemplo de la funcin suma, en este caso


y al igual que en el procedimiento, la funcin recibe dos
parmetros de tipo entero, la diferencia est dada en que void ha
sido remplazada por int, el cual define el tipo de dato que la
funcin va a retornar, en este caso se ha utilizado int dado que la
suma de a y b representarn un entero. As una funcin podr
retornar cualquier tipo de datos conocido por el lenguaje. Luego
de la operatoria encontraras la sentencia return c, la cual contiene

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


el resultado de la operatoria a+b y cuyo resultado concuerda con
el tipo que explicitamos que la funcin retornara.

Llamada a una funcin


En la programacin estructurada las funciones y procedimientos
acompaan el mtodo principal, llevando parte de la lgica a ellas,
las cuales tienen como propsito resolver problemas ms
pequeos, hacer ms fcil la programacin y reutilizar el trabajo
ya hecho. Una funcin que nos indique si un archivo existe en
nuestro disco duro es un buen ejemplo, la prxima vez que se
necesite verificar la existencia de un archivo bastar con llamar a
dicha funcin entregando la ruta del archivo a buscar, estas tareas
especficas no tienen sentido por s solas, casi siempre son parte
de un programa que tiene algn propsito mayor y este programa
es el encargado de llamar a una o mas funciones para lograr el
objetivo.

Durante este capitulo veremos cmo utilizar las funciones desde el


punto de vista estructurado y ms adelante veremos como las
funciones son utilizadas en la programacin orientada a objetos.

La forma en la que las utilizaremos depender de dos factores, lo


primero a considerar es si lo que estamos llamando es un
procedimiento o funcin, ya que la primera diferencia entre ellos
es su retorno. Recuerda que un procedimiento no retornar nada,
sin embargo si llamamos una funcin debemos esperar algn
resultado, el otro factor corresponde a los parmetros que reciben,
para ambos casos hay que considerar cuantas variables hay que
enviarle al procedimiento o funcin y de qu tipos son.

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


Comenzaremos con el caso ms sencillo e iremos transformando
un programa simple en un programa dividido en funciones,
supongamos que tenemos el siguiente cdigo:

public class JavaApplication2 {

public void miEjemplo() {

int fechaNacimiento=1982;

String nombre = sebastian;

int fechaActual = 2012;

int edad = 0;

edad = fechaActual - fechaNacimiento;

String correo = nombre + edad + @ + empresa.cl

System.out.println("Hola mi nombre es " + nombre + ",


tengo " + edad + "aos y mi correo es " + correo);

Este pequeo programa presenta el nombre y la edad de una


persona, la cual se ha calculado slo considerando el ao de
nacimiento, por lo que en este simplificado ejemplo es posible que
la falta de la inclusin de los meses produzca alguna diferencia, el
clculo que se almacena en una variable edad que es despus
desplegada como parte del mensaje, adems el correo de la
persona tambin se muestra, pero previo a ello se genera
basndose en el nombre y la edad de la persona y se le agrega
@empresa.cl. Si hacemos un pequeo anlisis aqu hay 3

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


pequeas funcionalidades que pueden ser fcilmente llevadas
funciones y procedimientos.

1) Calculo de la edad
2) Generacin del correo.
3) Presentacin de la persona mediante una impresin.
El paso siguiente ser determinar cmo debemos modularizar
estas funcionalidades, especificando cuales sern procedimientos,
cuales deben ser funciones y que valores deben recibir. Si
hacemos un pequeo anlisis nos daremos cuenta que algunas
variables como por ejemplo el nombre, deben ser conocidos por
dos de los tres procesos. Primero la debemos utilizar para la
generacin del correo y luego en el paso nmero tres para la
impresin, esto nos indica rpidamente que el nombre no es una
variable exclusiva de ninguno de los dos, ya que si se declara
dentro de alguno de los dos mtodos la variable y su valor estara
slo disponible dentro de l, por lo tanto la variable nombre debe
declararse en el mtodo miEjemplo ya que este ser el encargado
de llamar a las dems funciones pudiendo as pasarlas de una a
otra sin perder la variable. Esto se deber a que las funciones que
vaya llamando miejemplo crearn sus variables que tengan
declaradas, pero al finalizar su ejecucin todas ellas sern
destruidas, sin embargo, miEjemplo estar activo durante todo
el proceso, llamando y ejecutando las funciones que en el
programamos.

Comencemos entonces a desmenuzar este problema en pequeos


problemitas, analicemos el proceso del clculo de la edad. Para
realizarlo lo que necesitamos es la fecha de nacimiento y la fecha
actual, el proceso es la resta de ambas y el resultado la edad, por
lo tanto cuando miejemplo llame la funcin que se encarga de

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


calcular la edad debe especificar ambos parmetros y luego
esperar la respuesta de la funcin, la cual corresponde a la edad
calculada. Este valor de retorno nos indica que la funcin no puede
ser un procedimiento, dado que debe retornar el valor para que
luego dicho valor sea mostrado en el mensaje, entonces nuestro
pequeo programa queda as:

int calcularEdad(int fechaNacimiento, int FechaActual)


{
int edad = fechaActual- fechaNacimiento;
return edad;
}

La funcin recibe ambos parmetros como un entero y retorna la


resta de ellos, valor que tambin es de tipo int. La variable edad
que est declarada al interior slo vive dentro de calcularEdad y
no es compartida con nadie, sin embargo la ltima lnea de cdigo
se encarga de retornar el valor de tipo entero que aseguramos
retornaramos. Debes tener cuidado con no confundirte, la funcin
no retorna una variable, lo que hace es devolver el valor de ella,
segn sea el resultado debes imaginar que lo que all dice es algo
as como: return 10 o return 39 segn el resultado del clculo.

Veamos ahora la generacin del correo, para ello las entradas son,
la edad y el nombre de la persona, el proceso es una
concatenacin de ellos y el resultado (el valor a devolver) el
correo, este proceso entonces lucir as:

String generarCorreo(String nombre, int edad)


{
String email = nombre + edad + @ + empresa.cl;

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


return email;
}

En este caso el tipo de retorno ser un String y ello se notifica a la


izquierda del nombre de la funcin, tambin recibe dos parmetros
los cuales son el nombre y la edad. Fjate que la edad se asume
viene calculada, ya que no es responsabilidad del mtodo
generarCorreo realizar este calculo, para ello hemos escrito otra
funcin. Luego de la concatenacin el mtodo retorna el valor de
la variable email hacia miEjemplo.

Finalmente el mdulo que realiza la impresin ser un


procedimiento, ya que no hay un valor que deseemos retornar
hacia mi Ejemplo, sin embargo para lograr la impresin
necesitaremos el nombre, la edad y el correo.

void imprimirDatos(String nombre, int edad, String correo)


{
System.out.println("Hola mi nombre es " + nombre + ", tengo " +
edad + "aos y mi correo es " + correo);
}

En este caso la impresin no es un valor que vayamos a devolver,


por esto el procedimiento no lleva return y en su firma informa que
el tipo de retorno es void, vale decir que no hay retorno.

Para unir todo el mtodo miejemplo ser el encargado llamar a


todas las funciones y dar el orden lgico de ejecucin, luego de
recodificar el cdigo el miejemplo lucir as:

public class JavaApplication2 {

public void miEjemplo() {

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


int fechaNacimiento=1982;

String nombre = sebastian;

int fechaActual = 2012;

int edad = calcularEdad(fechaNacimiento,fechaActual);


String correo =generarCorreo(nombre,edad);
imprimirDatos(nombre,edad,correo);

Como puedes ver leer el programa es mucho ms sencillo ahora,


ya que palabras como calcularEdad dejan de forma ms explicita lo
que hace esa lnea, fjate que para ejecutar ese mtodo es
necesario pasar dos parmetros, estos deben ir separados por
coma y en el mismo orden en el que la funcin esta declarada, al
igual que antes no es la variable la que se entrega sino el valor
de ellas, tambin es valido entonces solicitar a la funcin
calcularEdad que lo haga llamndola de la siguiente forma:

public class JavaApplication2 {

public void miEjemplo() {

String nombre = sebastian;

int edad = calcularEdad(1982,2012);


String correo =generarCorreo(nombre,edad);
imprimirDatos(nombre,edad,correo);

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


En este caso a la llamada a calcularEdad se le entregan los
valores explcitamente, eso tambin esta correcto ya que ambos
valores son recibidos en las variables declaradas dentro de la
funcin, se resta y se retorna el resultado, el cual guardamos en
una variable declarada dentro de miejemplo que se llama edad.

Una nota importante, si bien la variable de la que se retorna el


valor en calcularEdad se llama igual que la variable en la que
miEjemplo lo recibe no significa que esto deba ser as, recuerda
que las variables estn en mbitos distintos y por ende son
variables totalmente independientes, por esto los nombres que
utilicen no generaran alguna diferencia, pudiendo ellas llamarse
iguales o tener nombres diferente, recuerda que la variable edad
de miejemplo lo que recibe es un nmero (el valor de la
variable edad de calcularEdad)
Al igual que en calcular edad en generarCorreo debemos recibir el
valor de retorno, el cual en este caso es una concatenacin que
simula el correo del usuario y que almacenamos en una variable
llamada correo.

Finalmente para llamar a imprimirDatos no hay una asignacin


(signo igual) dado que este es un procedimiento que ejecuta una o
ms lneas de cdigo pero no retorna un valor, sin embargo si
recibe tres parmetros los cuales al igual que antes deben ser
entregados en el mismo orden y con sus tipos de datos
correspondientes.

El cdigo completo quedar de la siguiente forma, donde los


procedimientos y funciones son agregados al cdigo, no importa su
orden, slo importa el orden en el que miejemplo los utiliza, siendo

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


entonces miejemplo el punto de inicio de nuestro algoritmo y
de all se ejecuta todo lo dems.

public class JavaApplication2 {

public void miEjemplo() {

String nombre = sebastian;

int edad = calcularEdad(1982,2012);


String correo =generarCorreo(nombre,edad);
imprimirDatos(nombre,edad,correo);

void imprimirDatos(String nombre, int edad, String correo)


{
System.out.println("Hola mi nombre es " + nombre + ", tengo " +
edad + "aos y mi correo es " + correo);
}

String generarCorreo(String nombre, int edad)


{
String email = nombre + edad + @ + empresa.cl;
return email;
}

int calcularEdad(int fechaNacimiento, int FechaActual)


{
int edad = fechaActual- fechaNacimiento;

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


return edad;
}

Con las llamadas a las funciones y/o procedimientos puedes utilizar


todas las combinaciones que gustes, observa este ejemplo, el cual
hace lo mismo pero de otra forma, he aqu el cdigo y luego la
explicacin.

public class JavaApplication2 {

public void miEjemplo() {

String nombre = sebastian;

int edad = calcularEdad(1982,2012);


imprimirDatos(nombre,edad,
generarCorreo(nombre,edad));

void imprimirDatos(String nombre, int edad, String correo)


{
System.out.println("Hola mi nombre es " + nombre + ", tengo " +
edad + "aos y mi correo es " + correo);
}

String generarCorreo(String nombre, int edad)


{
String email = nombre + edad + @ + empresa.cl;
return email;
}

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES


int calcularEdad(int fechaNacimiento, int FechaActual)
{
int edad = fechaActual- fechaNacimiento;
return edad;
}

En este caso la lnea que asignaba el correo ha sido eliminada, sin


embargo para obtener el correo y luego poder imprimirlo
remplazamos la variable correo que ya no est por la llamada al
mtodo generarCorreo, esto es posible ya que el mtodo lo que
solicita es un string con el correo y dado que el orden de ejecucin
es desde adentro hacia afuera, primero se ejecutar la funcin
generarCorreo la cual retornar un String y cuyo valor es
entregado a imprimir. De esta misma forma tambin podrs llamar
a funciones desde otras funciones y/o procedimientos como
muestra el siguiente cambio realizado a imprimir.

void imprimirDatos(String nombre, int edad, String correo)


{
System.out.println("Hola mi nombre es " + nombre + ", tengo " +
edad + "aos y mi correo es " + generarCorreo(nombre,edad);
}

En este caso para obtener el correo le pedimos directamente desde


dentro de imprimirDatos.

UNIVERSIDAD TECNOLGICA DE CHILE INACAP - REA INFORMTICA Y TELECOMUNICACIONES

Вам также может понравиться