Está en la página 1de 12

UACJ/IIT Clase# 9

Departamento: Eléctrica y Computación Tema: sobrecarga de funciones e introducción al


Materia: Programación Orientada a Objetos polimorfismo

Maestra: Sandra Elena Ramírez Jara sramirez@uacj.mx Fecha:


Grupo:
Nombre del Alumno: Matricula: Correo:

Objetivos:

Recordar que son las funciones, cómo se gestiona la memoria para ellas, cual es el ámbito de sus variables, cuales tipos de
funciones podemos configurar, que ventajas nos ofrece la programación al aplicar funciones en nuestros programas en que
consiste la sobrecarga de funciones, cuando es útil aplicar la sobrecarga de funciones.

Preguntas inicializadoras

Pregunta Respuesta
1
2
3
4

Introducción

¿Qué es una función en programación?

Las funciones es uno de los temas más importantes que estudiamos en el curso del semestre anterior en la materia de Programación
Estructurada. En este curso seguiremos aplicando funciones, pero ahora las podemos llamar  métodos, son muy útiles porque nos permiten
dividir el trabajo que hace un programa muy grande, en tareas más pequeñas separadas de la parte principal.

Una función puede estar diseñada para realizar cualquier tipo de tareas desde un cálculo sencillo como una suma, hasta un cálculo matemático
más complicado o procesos que se aplique a datos como por ejemplo para relacionarlos, ordenarlos, compararlos, clasificarlos, etc.. Estas
funciones o métodos pueden ser usada de forma independiente en diferentes partes del programa.

En programación Estructurada diseñamos programas con funciones independientes como se muestra en la imagen de la tabla

Como se implementan las funciones en nuestros Notas


programas en lenguaje c
Las funciones pueden ser escritas para realizar tareas repetitivas y
por ende para reducir el tamaño de un programa. Segmentar el
código en funciones permite crear piezas de código que hacen una
determinada tarea y volver al área del código desde la que han sido
llamadas

Una función puede llamarse múltiples veces e incluso llamarse a sí


misma (función recurrente).

Las funciones pueden recibir datos desde afuera al ser llamadas a


través de los parámetros y puede entregar un resultado.
Como hacer la declaración y Definición de una función

Para definir una función, la sintaxis de la declaración es la siguiente: descripción

Declaración del prototipo


Tipo de retorno de un método
[tipo_retorno nombre_funcion ([argumentos])
{
bloque_código; El tipo retorno es el tipo de valor devuelto por la función, y puede
retrun ser usado en cualquier parte del programa.
}
Las funciones sólo pueden devolver un valor, ya sea un tipo de datos
básico, como puede ser un número entero o un string, o un objeto.
Definición de la función
función que no tiene argumentos y no retorna nada.
void Dibuja() Si la función no devuelve ningún valor entonces se colocará delante
{ la palabra “void”, que significa “función vacía” función(void) o
println("*****"); función()
}
Nombre de la función
Un ejemplo de una función que acepta dos argumentos y devuelve
un resultado de una suma:
También llamado identificador, es como llamamos a la función.
public int Suma(int num1, int num2)
{ Igual que cuando declaramos una variable, el nombre de la función
return num1 + num2; no puede llevar espacios, por ejemplo: calculo total es incorrecto,
} debería ser alguna de estas opciones: claculoTotal, calculo_total,
etc. Tampoco debería de empezar por un número y no puede usarse
ninguna palabra reservada para el lenguaje (una función no podría
llamarse int).

Argumentos o parámetros de una función

Los argumentos de una función, también llamados parámetros,


representa una lista de variables cuyos valores son pasados al
método para ser usados por éste. Ojo una función puede no tener
argumentos (son los que van dentro de los paréntesis)

El bloque de código

El código del método es la secuencia de instrucciones o sentencias


que la función realiza.

Estas instrucciones son las tareas que hacen que la función tenga
sentido.

Para saber que un bloque de código pertenece a una función debe


ir entre llaves {} que indican el inicio y final de la tarea,
regularmente en cuanto termina la tarea el compilador libera
memoria
Especificaciones que demos tener claro al aplicar funciones

Que hacer Especificaciones


para llamar a funciones en programación  No hay límite en cuanto a la cantidad de llamadas a funciones que un método
puede realizar.
 Se puede invocar a los métodos en cualquier orden.
Para funciones en objetos:
 Los métodos no necesitan ser completados en el orden que son listados en la clase,
que es dónde están declarados.
 El método llamado y el método desde dónde se llama pueden estar en la misma
clase o en diferentes clases.

Para pasar argumentos o parámetros a  las funciones pueden ser invocadas desde otro método, con una lista de
una función argumentos.
 las funciones pueden devolver un valor para ser usado como resultado.
 Muchos de los métodos que declaras o usas desde la biblioteca que te ofrece el
compilador del lenguaje también aceptan argumentos.
 Pasa pasar argumentos desde un método a otro, se hace desde los paréntesis de la
llamada al método.
 Al llamar a un método, se deben listar los argumentos en el mismo orden que
dichos argumentos están declarados en la definición del método, además que
deben pasarse todos los argumentos requeridos. El compilador verificará si el tipo y
cantidad de argumentos pasados concuerda con el tipo, el orden y cantidad de
parámetros que acepta el método llamado.

Para devolver un valor con return  se utiliza la palabra clave return. Por ejemplo, el siguiente código devuelve el valor
que tiene actualmente la variable result.
Para recibir valores  Si se invoca un método que devuelve un valor, como en el caso anterior, se puede
utilizar el valor devuelto en el método desde dónde se ha llamado

, Ventajas del uso de funciones en programación

 Hace que los programas sean más legibles y fáciles de mantener. Por ejemplo, es fácil saber lo que un programa hace si el código
está dividido en varios métodos diferentes con nombres que describan el comportamiento de los mismos.
 El desarrollo y el mantenimiento es más rápido. Por ejemplo, puedes elegir crear y probar un método por vez cada para asegurar
que el programa, en su totalidad, funciona bien cuando se ha finalizado.
 Son utilizados para que el software sea reusable. Por ejemplo, las bibliotecas de cualquier compilador tiene muchas clases con
métodos que pueden ser usados una y otra vez en los programas.
 Se puede crear métodos para que otros programadores puedan usar.
 Los métodos permiten separar los objetos para comunicar y distribuir el trabajo realizado por el programa.
El ámbito de las variables de las funciones

En programación, el ámbito de una variable es la parte del código desde donde se puede acceder a una variable. Básicamente
una variable puede ser global (se puede acceder desde cualquier parte del código) o local (sólo se puede acceder desde una
porción del código) O ( public, protected, private) en una clase

El ámbito de una variable (llamado "scope" en inglés) es la zona del programa en la que se define la variable.

Ambito y procesamiento de las variables Notas

La variable x se ha definido dentro de la función f() y por


tanto, es una variable local que solamente está definida
dentro de la función.

Deducir:
Tipo de dato parámetro:
Tipo de función:
Tipo de retorno:
Ámbito de las variables del a función:
Codigo:

Ventajas de las funciones Notas


Ventajas del uso de funciones:
 Ayuda a tener organizado el código.
 Una función codifica una tarea en un lugar de nuestro sketch, así que la
función solo debe ser pensada una sola vez.
 Reduce la probabilidad de errores al modificar el código.
 Hacen que el tamaño del sketch sea menor porque el código de la función es
reutilizado.
 Facilita la lectura del código.
 Hace más sencillo reutilizar código en otros sketches.

Llamada de función Notas

Cuantas veces se puede llamar


Como se llama a una función

para llamar a una función, simplemente:


En una función que devuelve un valor siempre debe tener la instrucción:

Si se define una función y no ponemos return que pasa? : el valor devuelto es cero. No
da error de compilación pero no olvidar que depende del compilador
Notas
Espacio en memoria de una funcion

Donde se almacenan las funciones durante el tiempo de corrido

Primero debemos de conocer como se divide la memoria de un programa en


ejecución, que se conoce como segmentación de memoria de un programa,
cuáles son sus segmentos, que objetivos tienen y que se almacena en ellos.
Hasta ahora lo que hemos utilizado es el segmento del stack, en la imagen
nos ayuda a imaginarnos como es el comportamiento, de la pila o frame stack
Donde se almacenan partes de las funciones

Como se gestiona la memoria del stack cuando llamamos a una función y


como es el flujo del programa

Sobrecarga de funciones

En nuestro lenguaje natural del español, así como en un lenguaje de programación aparecen los problemas de que una misma
palabra expresa diversos significados dependiendo del contexto. Y sabemos que una palabra tiene múltiples significados, es
decir, está sobrecargada (polisemia).. Ejemplos

vino: bebida fermentada procedente de la uva de la vid.


vino: tercera persona del pasado del verbo venir.

Otros ejemplos

Cabo: del ejército geográfico… de vela


Café: color establecimiento. bebida
Calculadora: aparato electrónico persona meticulosa…
Canal: de agua de televisión…
Capa: de algo sobre algo… de ropa
Capital: de una empresa. de un país
Carta: de baraja… de escribir
Chile: planta y fruto. país de Sudamérica
Cólera: enfermedad. Ira
La mayoría de los lenguajes de programación requieren que se utilice un identificador único para cada elemento también
recordemos que existen las palabras reservadas y los tipos de datos primitivos.

Una de las características más importantes en cualquier lenguaje de programación es la utilización adecuada de los nombres de
cómo se identifican los datos por medio de variables, contantes, estructuras, arreglos, funciones etc.

En el caso para darles nombre a las funciones sabemos que se pueden seguir las reglas sintácticas de las variables ser en
minúscula, o mayúscula, no palaras reservadas del lenguaje, soportan un guion bajo, aplicándose éstos tanto como sea
necesario para mejorar la legibilidad. Y lo mas importante es que en lenguaje C no podíamos repetir nombres de funciones

En lenguaje C++ se permite especificar más de una función del mismo nombre en el mismo ámbito a estas funciones se
denominan funciones sobre cargadas. 

Las funciones sobrecargadas permiten proporcionar una semántica diferente para una función, en función de los tipos y el
número de argumentos.

En C++ hay otro factor que fuerza la sobrecarga de los nombres de función: el constructor.

Como el nombre del constructor está predeterminado por el nombre de la clase, podría parecer que sólo puede haber un
constructor. Pero ¿qué ocurre si desea crear un objeto de diferentes maneras? Por eso la sobrecarga de funciones es esencial
para permitir el mismo nombre de función (el constructor en este caso) se utilice con diferentes argumentos.

El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones y
tipos polimórficos.

Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los
tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está
especificado.

El origen del griego de la palabra Polisemia


El prefijo "poli-”, se puede traducir como muchos
La palabra "sema", es equivalente a la palabra “significado”
polimorfismo
El prefijo “poli-”, que puede traducirse como “muchos”.
El sustantivo “morfo”, que es equivalente a “formas”.
El sufijo “-ismo”, que significa “actividad”.

Clasificación de polimorfismo

• Polimorfismo estático () es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados
uno por uno antes de poder ser utilizados.

• Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación
sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.

Polimorfismo de sobrecarga

El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que
son completamente independientes una de otra
Como introducción veremos cómo C++ permite especificar más de una función del mismo nombre en el mismo ámbito, con
diferente estructura y que tengan el mismo nombre, aunque las funciones compartan el mismo nombre en el texto fuente, el
compilador de C++ implementa las acciones usando nombres diferentes internamente a esto se le llama 'name mangling'.

Las funciones sobrecargadas permiten a los programadores proporcionar una semántica diferente para una función,
dependiendo de los tipos y el número de argumentos.  

 La sobrecarga permite usar una nomenclatura uniforme y evita que los programadores tengan que inventarse nombres para
distinguir entre grupos de funciones con el mismo nombre en el mismo ámbito.  

Ejemplos de polimorfismo en funciones o métodos ( sin clases)


Prototiposde funciones Las funciones deben diferir en

int imprimir( char * );


int imprimir( double );
int imprimir( double , int);  en la lista de argumentos,
 el número de variables que se pasan a la función

Consideraciones sobre la sobrecarga

Elemento de declaración de
¿Se usa para la sobrecarga?
función

Tipo de valor devuelto de la función No

Número de argumentos Si

Tipo de argumentos Si

Uso de nombres typedef No

Límites de matriz sin especificar No

const o volatile Si

Ejemplo de tres funciones con sobrecarga

Código sobrecarga de funciones Notas

#include <iostream>
#include <iomanip>

using namespace std;

// Prototipos
int imprimir( char * );
int imprimir( double );
int imprimir( double , int );
int main( )
{
double d = 893094.2987;
int entero=4;
imprimir( "Esta funcion requiere de un argumento." );
imprimir( "El argumento es una cadena" );
imprimir( d );
imprimir( d, entero );
return 0;
}

//Definiciones de las funciones

int imprimir( char *s )


{
cout << s << endl;
return 0;
}
/****************/
int imprimir( double dvalue )
{
//cout << fixed << setprecision(4);

cout <<"El valor es "<< dvalue << endl;


return 0;
}

int imprimir( double dvalue, int prec )


{
cout << fixed << setprecision(prec);

cout <<"El valor de doble presicion es "<< dvalue << endl;

return imprimir( prec);


}

Actividades

Actividad 1

Resaltar texto del tema introductorio

Actividad 2

Analizar los programas y explicar su funcionalidad

Código 1 Código 2
#include <iostream> #include <iostream>
using namespace std; using namespace std;

int mayor(int a, int b); int mayor(int a, int b);


char mayor(char a, char b); int mayor(int a, int b, int c);
double mayor(double a, double b); int mayor(int a, int b, int c, int d);

int main() { int main() {


cout << mayor('a', 'f') << endl; cout << mayor(10, 4) << endl;
cout << mayor(15, 35) << endl; cout << mayor(15, 35, 23) << endl;
cout << mayor(10.254, 12.452) << endl; cout << mayor(10, 12, 12, 18) << endl;

return 0; return 0;
} }

int mayor(int a, int b) { int mayor(int a, int b) {


if(a > b) return a; else return b; 97 y 102 if(a > b) return a; else return b;
} }

char mayor(char a, char b) { int mayor(int a, int b, int c) {


if(a > b) return a; else return b; return mayor(mayor(a, b), c);
} }

double mayor(double a, double b) { int mayor(int a, int b, int c, int d) {


if(a > b) return a; else return b; return mayor(mayor(a, b), mayor(c, d));
} }

existe la sobrecarga? existe la sobrecarga?

Explique Explique

Actividad 3

Identifique cuáles de los prototipos cumplen con la sobrecarga y explique porque

A. int imprimir( char * );


B. int imprimir( double );
C. void imprimir( double );

Actividad 4

Completar programas

Prototipos de sobrecarga Salidas esperadas


/ funciones prototipo El área del cuadrado es : 9
int area(int); El área del rectángulo es: 20
int area(int, int); El área del círculo es : 122.718
float area(float);
Completan los códigos de las funciones

int sumarValores(int a, int b) Completan los códigos de las funciones


int sumarValores(int a, int b, int c)

Salidas las indicadas en los prototipos


void mostrarMensaje(void)
{
cout << "Mensaje por omisión: Rescatado por C++" << endl } Completan con los prototipo y llaman a las funciones desde el
main()
void mostrarMensaje(char *mensaje)
{
cout << mensaje << endl;
}

void mostrarMensaje(char *primero, char *segundo)


{
cout << primero << endl;
cout << segundo << endl;
}

Completan con los prototipo y llaman a las funciones desde el


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

Actividad 5
Analice los programas de la tabla y conteste las preguntas

1. Que tipo de prototipo de funciones tienen los programas

2. A cuál paradigma podría ubicarse cada uno de los programas

3. Explique a grandes rasgos el diseño de los programas

4. Que tarea hace la función

Prog 1 Prog 2
#include <iostream> #include <iostream>
using namespace std; using namespace std;

void obtenerCuadrado(int Cuadrado) class Crecuadro


{ {
int anchoUno=0; private:
int cuadrado;
if (Cuadrado == 1) public:
{ void obtenerCuadrado(int);
cout <<"*" <<endl;
} };

else void Crecuadro::obtenerCuadrado(int Cuadrado)


{ {
while (anchoUno != Cuadrado) int anchoUno=0;
{
cout <<"*";
++anchoUno; if (Cuadrado == 1)
} {
cout <<"*" <<endl;
}
anchoUno= 0;
cout <<endl;
else
{
int auxLineas=1; while (anchoUno != Cuadrado)
{
while ((Cuadrado >= 3) && ( auxLineas <= (Cuadrado - 2))) cout <<"*";
{ ++anchoUno;
int auxAncho= 0; }
cout <<"*";
anchoUno= 0;
while (auxAncho < (Cuadrado -2)) cout <<endl;
{
cout <<" "; int auxLineas=1;
++auxAncho;
} while ((Cuadrado >= 3) && ( auxLineas <= (Cuadrado - 2)))
cout <<"*" <<endl; {
++auxLineas; int auxAncho= 0;
} cout <<"*";

while (anchoUno != Cuadrado) while (auxAncho < (Cuadrado -2))


{ {
cout <<"*"; cout <<" ";
++anchoUno; ++auxAncho;
} }
cout <<endl; cout <<"*" <<endl;
} ++auxLineas;
} }

while (anchoUno != Cuadrado)


int main() {
{ cout <<"*";
int Cuadrado; ++anchoUno;
cout <<"Ingrese el lado del cuadrado: "; }
cin >>Cuadrado; cout <<endl;
obtenerCuadrado(Cuadrado); }
return 0; }
}

int main()
{
int Cuadrado;
cout <<"Ingrese el lado del cuadrado: ";
cin >>Cuadrado;

Crecuadro objeto1;
objeto1.obtenerCuadrado(Cuadrado);

return 0;
}

Actividad 6

Cambie el programa anterior a un proyecto tipo consola

Main cpp Clase.h Clase.cpp Imagen de corrido

Actividad 7

Conclusiones
Actividad 8

Fuentes y Referencias

Liga contenido
http://conclase.net/c/curso/cap21

https://www.youtube.com/watch?v=j2RPI2TQkfs

También podría gustarte