You are on page 1of 44

Fundamentos de programacin

Tema 3. Funciones y clases


Objetivos

Conocer los fundamentos de la


programacin modular.
Conocer el diseo de funciones y
procedimientos en C++.
Conocer los tipos de paso de
parmetros a mdulos.
Fundamentos sobre clases en
C++: Datos miembro y mtodos.

2
Motivacin

El desarrollo de programas complejos requiere


elaborar un conjunto de mdulos. Ejemplo:
Desarrollo de un videojuego.

En C++ hay 2 tipos de mdulos: Funciones (ya


las conocemos) y procedimientos.
3
Funciones

Una funcin es un subprograma que devuelve un


valor de acuerdo a los valores de los parmetros
de entrada.
Ya conocemos algunas funciones. Ejemplo:
double sqrt(double v)

Declaracin de las funciones:


<tipo> <nombre de la funcin> (<Parmetros formales>)

Ejemplo: Funcin para calcular el factorial de un


nmero dado: n! = n*(n-1)*(n-2)**2*1

int factorial(int n)

4
Funciones

El tipo de retorno es el tipo de dato del valor que


devuelve la funcin .
El nombre de la funcin es un identificador
Los parmetros formales indican el nmero de
valores de entrada a la funcin y su tipo.
Los parmetros formales se declaran como
variables separadas por comas, para poder
operar con dichos valores en la implementacin
de la funcin.
Ejemplo: Definicin de una funcin para calcular
xy

double elevarA(double base,double exponente)

5
Funciones: Implementacin

Las funciones se definen antes de la funcin


main y despus de la declaracin de tipos de
datos (estructuras, enums, etc.), constantes y
variables globales.
Ejemplo:

#include <iostream>
using namespace std;
double Factorial(int n);
int main() {
...
}

6
Funciones: Implementacin

Las funciones se implementan despus de la


funcin main
Ejemplo:
#include <iostream>
using namespace std;
double Factorial(int n);
int main() {
...
}
double Factorial(int n){

}

7
Funciones: Implementacin

Toda funcin debe devolver un valor al final con


return
Este valor debe ser del mismo tipo de dato que el
retorno de la funcin
Ejemplo:
int factorial(int n) {
int resul= 1, i;
i = n;
while(i > 0){
resul= resul*i;
i--;
}
return resul;
}

8
Funciones: Uso
Factorial.cpp

Las funciones implementadas se utilizan igual que


cualquier otra funcin de las bibliotecas estudiadas en el
tema 1.

9
Funciones: Uso
Factorial.cpp (continuacin)

Las funciones implementadas se utilizan igual que


cualquier otra funcin de las bibliotecas estudiadas en el
tema 1.

10
Funciones: Uso
Menu.cpp

Ejemplo de funcin que pide al usuario introducir por


teclado una opcin entre un men de opciones.

11
Funciones: Uso
Menu.cpp (continuacin)

Ejemplo de funcin que pide al usuario introducir por


teclado una opcin entre un men de opciones.

12
Funciones: Uso
Menu.cpp (continuacin)

Ejemplo de funcin que pide al usuario introducir por


teclado una opcin entre un men de opciones.

13
Procedimientos

Los procedimientos son funciones que no


devuelven ningn valor con return
Por tanto, no se pueden asignar a otras variables
como en la sentencia x= sqrt(2.5);
Donde sqrt es una funcin
Declaracin de procedimientos:
void <nombre del procedimiento> (<Parmetros formales>)

El tipo void es el tipo nulo: Indica que el


procedimiento no devuelve ningn valor con
return.

14
Procedimientos: Ejemplo
MostrarSaludo.cpp

Ejemplo de procedimiento que da la bienvenida al usuario.

15
Procedimientos: Ejemplo
ProgramaGrande.cpp

Ejemplo de procedimiento que da la bienvenida al usuario.

16
Procedimientos: Ejemplo
ProgramaGrande.cpp

Vamos a simular el bucle principal de un videojuego

17
Procedimientos: Ejemplo
ProgramaGrande.cpp

Vamos a simular el bucle principal de un videojuego

18
Procedimientos: Ejemplo
ProgramaGrande.cpp

Vamos a simular el bucle principal de un videojuego

19
Procedimientos
Ventajas

Los procedimientos facilitan el desarrollo


de programas grandes y el trabajo en
equipo.
El uso de procedimientos puede hacer que
disminuya el cdigo de los subprogramas,
haciendo ms fcil su depuracin y
aumentando la claridad del cdigo fuente.
Los procedimientos pueden utilizarse para
devolver ms de un valor, utilizando el
paso de parmetros por referencia.

20
Paso de parmetros
Tipos

Cuando se utilizan las funciones y


procedimientos implementados dentro de
un programa, es posible pasar los
parmetros de dos formas:
Paso por valor: (Como hemos hecho hasta
ahora). Los parmetros no se pueden modificar en
la funcin.
Paso por parmetro: Permite que la funcin
pueda modificar los argumentos que recibe y
devolver as ms de un valor.

21
Paso de parmetros
Por valor

El paso de parmetros por valor


copia el valor que se pasa a la
funcin al parmetro formal
correspondiente.
El parmetro formal acta como una
variable local, dentro de la
funcin/procedimiento donde est
definido

22
Paso de parmetros
Por valor

23
Paso de parmetros
Por valor

24
Paso de parmetros
Por referencia

El paso de parmetros por referencia hace que el


parmetro formal sea un alias de la variable que
se pasa como parmetro.
Por tanto, la modificacin del parmetro formal
dentro de la funcin/procedimiento tambin
modifica el valor de la variable original que se
pasa como parmetro.
El paso por referencia se indica anteponiendo un
& antes del identificador de la variable que
define al parmetro de la funcin.
Ejemplo: int mifuncion(int x, int & y);
El paso por referencia se puede utilizar para que
una funcin/procedimiento pueda devolver ms
de un valor.
25
Paso de parmetros
Por referencia

26
Paso de parmetros
Por referencia (continuacin)

27
Paso de parmetros. Ejemplo
Estructuras como introduccin a la necesidad de clases

Ejercicio:
Haced un programa que muestre un men de
opciones.
La primera opcin pedir los coeficientes de una
ecuacin de segundo grado.
La segunda opcin calcular las soluciones de la
ecuacin.
La tercera opcin mostrar las soluciones por
pantalla.
Por ltimo, la cuarta se utilizar para terminar el
programa.
Hacedlo utilizando procedimientos y estructuras

28
Paso de parmetros. Ejemplo
Estructuras como introduccin a la necesidad de clases

En el ejemplo anterior hemos usado estructuras


+ funciones que operan sobre ellas para
solucionar el problema.
Hemos desarrollado el Tipo de Dato Ec2grado.

El desarrollo de nuevos tipos de datos complejos


conlleva dos fases:
1. Diseo de la representacin del TDA (struct)
2. Diseo de las operaciones que se pueden
hacer con el TDA (funciones)

Las clases son la evolucin natural de este


planteamiento.
29
Clases
Definicin

La definicin de una clase se realiza despus de


la inclusin de bibliotecas y constantes globales y
antes que la funcin main:

#include<iostream>
using namespace std;

class Nombreclase {
// Definicin de datos miembro (variables)
// Definicin e implementacin de mtodos (funciones)
};
Ojo al punto y
coma!

30
Clases
Definicin de datos miembro

Los datos miembro se definen igual que cualquier


conjunto de variables.
Se puede acceder a ellos desde otras funciones
como si la clase fuera un struct, anteponiendo la
palabra reservada public:

31
Clases
Definicin de mtodos

Los mtodos de una clase son funciones y


procedimientos propios de dicha clase. Todas las
variables de una clase (objetos) utilizadas en el
programa podrn utilizarlos como suyos propios.
Los mtodos de un mismo objeto comparten
entre s los datos miembro de dicho objeto
Es decir, para una variable declarada del tipo de
dato de una clase, todos sus datos miembro seran
como variables globales para todos sus mtodos
(funciones y procedimientos).
Los dems procedimientos y funciones externos
a la clase que haya en el programa no gozan de
este privilegio.

32
Clases
Definicin de mtodos

33
Clases
Definicin de mtodos

34
Clases
Ejemplo: ec2gradoclases.cpp

(Debido a la longitud de este programa, se


recomienda visualizarlo en el fichero
ec2gradoclases.cpp.)

35
Clases
mbito pblico y mbito privado. Motivacin

Utilizando la clase ec2grado del ejercicio anterior,


el siguiente cdigo presenta problemas de
violaciones de seguridad de la clase, produciendo
errores:

36
Clases
mbito pblico y mbito privado. Motivacin

Lo ideal en el caso anterior es que no se pueda


acceder a los datos miembro de un objeto, salvo
por los mtodos de la propia clase.

37
Clases
mbito privado y mbito pblico

C++ permite resolver estos problemas


declarando datos miembro y/o mtodos como
pblicos o privados
Palabra reservada public:
Todos los datos miembro y mtodos de la clase, a
partir de donde se declare el mbito public, sern
accesibles desde cualquier funcin o
procedimiento, mediante el uso comn de
variable.dato o variable.mtodo(...).
Palabra reservada private: Todos los datos
miembro y mtodos de la clase, a partir de donde
se declare el mbito private, NO sern accesibles
desde cualquier funcin o procedimiento que no
sean los mtodos de la clase.

38
Clases
mbito privado y mbito pblico. Ejemplo

39
Clases
mbito privado y mbito pblico. Ejemplo: racional.cpp

Un nmero racional es un quebrado de la forma


a/b, donde a y b son nmeros enteros y b nunca
puede tomar el valor 0. Se pide:
Buscar una representacin adecuada para el tipo
de dato Racional e implementarla en una clase
con las siguientes operaciones:
Asignar un nmero racional, dados dos parmetros
de entrada que representen al numerador y al
denominador.
Mostrar un nmero racional por pantalla.
Calcular la suma, resta, multiplicacin y divisin de
dos nmeros racionales.
Calcular su fraccin irreducible.

40
Clases
mbito privado y mbito pblico. Ejemplo: racional.cpp

Recordatorio:

a c a * d + c *b a c a *c
+ = * =
b d b*d b d b*d
a c a * d c *b a c a*d
= / =
b d b*d b d b*c
La fraccin irreducible a'/b' de a/b se calcula
como: a
a' mcd (a, b)
=
b' b
mcd (a, b)
donde mcd(a, b) es el mximo comn divisor de a y
b
41
Clases
mbito privado y mbito pblico. Ejemplo: racional.cpp

Ayuda: Funcin para calcular el mcd(x, y) por el


mtodo de Euclides:

42
Bibliografa recomendada

Antonio Garrido, Fundamentos de Programacin


en C++, Delta Publicaciones, 2006. Pginas 1-41.

Deitel & Deitel. C++: Cmo Programar. Sexta


edicin, Prentice Hall-Pearson, 2008

Walter Savitch. Resolucin de problemas con


C++, Pearson, 2006.

43
Bibliografa recomendada
Dnde estudiar este tema

Antonio Garrido, Fundamentos de Programacin


en C++, Delta Publicaciones, 2006.
Pginas 91-124.

Deitel & Deitel. C++: Cmo Programar. Sexta


edicin, Prentice Hall-Pearson, 2008
Pginas 169-225, 404-467

Antonio Garrido. Abstraccin y estructuras de


datos en C++, Delta publicaciones, 2006
Pginas 27-66, 67-104

44

You might also like