33
Programación Gráfica 6. Clases y Métodos.

6. Clases y Métodos.. 6.1 Structs 6.2 Funciones 6.3 Namespaces 6.4 Clases

Embed Size (px)

Citation preview

Page 1: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Programación Gráfica6. Clases y Métodos.

Page 2: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Contenidos 6.1 Structs 6.2 Funciones 6.3 Namespaces 6.4 Clases

Page 3: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

6.1 Structs

Page 4: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Struct Nos permiten agrupar varios datos, aunque sean

de distinto tipo, que mantengan alguna relación, permitiendo manipularlos juntos, con un mismo identificador.

struct [<identificador>] {

[<tipo> <nombre_variable>[,<nombre_variable>,...]]; …

} [<variable_estructura>[,<variable_estructura>,...];

Page 5: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Struct En el interior de una estructura podemos definir todos

los atributos que resulten necesarios.

Son estructuras usadas básicamente para contener variables; como una clase sin métodos para llamarlos de alguna manera, aunque como veremos también se pueden usar métodos en ellas.

Page 6: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Ejemplo - Declaración

struct Jugador {

char Nombre[65];float posicionX;float posicionY;int monedas;bool grande;

} mario;

Page 7: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Ejemplo - Acceso

mario.monedas++;mario.nombre = “Mario”;mario.posicionX = 0;mario.posicionX = 100;mario.grande = false;

Page 8: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Inicializaciónstruct A {

int i;int j;int k;

};

A ejemploA = {10, 20, 30};B ejemploB = {10, {'a', 'b'}, 20};

struct B {

int x; struct C { char c; char d; } y; int z;

};

Page 9: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Ejemplo - Inicialización

Jugador Luigi = {“Luigi”, 0, 100, 0, false};

Page 10: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Ejemplo2struct Point{

int x;int y;

Point(){

x = 0;y = 0;

}

void setPoint(int x, int y){

this->x = x;this->y = y;

}}

Page 11: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

El puntero this

¿Cómo hace la función para referirse a un dato de un objeto en concreto?Usando el puntero this.

this->x = x;this->y = y;

Page 12: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

6.2 Funciones

Page 13: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Funciones Son un conjunto de instrucciones que realizan una

tarea específica.

Sirven para abstraer un algoritmo.

En general, toman unos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno.

Page 14: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Declaración Al igual que las variables, las funciones deben declararse y

definirse.

Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función. También se les denomina “prototipo” a las declaraciones.

<tipo> func(<lista de declaración de parámetros>);

int min(int a, int b);

float max(float a, float b);

Page 15: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Valor de Retorno<tipo> func(<lista de declaración de parámetros>);

Es el valor que puede o no entregarnos la función.

Se utiliza void, en la declaración, si no necesitamos un valor de retorno.

En general se puede utilizar cualquier tipo de datos para el retorno:◦ float,int, char, char[], etc…

Page 16: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Valor de retornoreturn <tipo>;

Si la función retorna algún tipo de datos, se utiliza return para retornar un valor de ese tipo de datos.

int Mayor(int a, int b){

if(a > b)return a;elsereturn b;

}

Page 17: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Parámetros con valores de referencia

Algunas veces nos puede interesar que ciertos parámetros que necesitan una función no sea necesario proporcionarlos siempre. Esto suele suceder cuando esos parámetros casi siempre se usan con un mismo valor.

void Inicializar(int x = 0, int y = 0);

void funcion(int x, int y) {

…setPosition(x, y);

}

Page 18: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Parámetros con valores de referencia

void funcion(int = 1); // Legal

void funcion1(int a, int b=0, int c=1); // Legal

void funcion2(int a=1, int b, int c); // Ilegal

void funcion3(int, int, int=1); // Legal

Page 19: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Sobrecarga Se pueden definir varias funciones con el mismo nombre,

con la única condición de que el número y/o el tipo de los parámetros sean distintos.

El compilador decidirá cual de las versiones ocupar después de analizar el número y el tipo de los parámetros.

int min(int a, int b); char min(char a, char b); double min(double a, double b); float min(float a, float b);

Page 20: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Sobrecargaint min(int a, int b);

int min(int a, int b, int c);

int min(int a, int b){

return (a < b) ? a : b;}

int min(int a, int b, int c){

int d = min(a,b);

return (d < c) ? d : c;}

Page 21: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Sobrecarga de operadores Se crea una función para que se ejecute cuando se

utilice un operador.

Se pueden sobrecargar todos los operadores básicos.

<tipo> operator <operador> (<argumentos>);

<tipo> operator <operador> (<argumentos>) {

<sentencias>; }

Page 22: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

6.3 Namespace

Page 23: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Namespace Espacio de nombres.

Nos ayuda a evitar problemas con identificadores en grandes proyectos.

Así pueden existir variables y funciones con el mismo nombre, declaradas en diferentes ficheros fuentes, cuando se declaran en distintos espacios de nombre.

Page 24: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Sintaxisnamespace [<identificador>] {

... <declaraciones y definiciones> ...

}

Page 25: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Ejemplo// Fichero de cabecera

"puntos.h"

namespace 2D {

struct Punto {

int x; int y;

}; }

namespace 3D {

struct Punto {

int x;int y; int z;

}; }// Fin de fichero

Page 26: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Using Para activar un espacio y ocuparlo por defecto se

utiliza la directiva “using”.

using namespace <identificador>;

#include "puntos.h" using namespace 2D; Punto p1;3D::Punto p2;

Page 27: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Utilidad Nos permite utilizar el código en forma de librería.

Por ejemplo un motor de videojuegos, podría tener los siguientes namespace: render, fisica, sonido, red, ia, para diferenciar cada uno de sus componentes, y a su vez, cada uno de esos componentes puede dividirse en más namespaces para así tener un orden lógico de los mismos.

Page 28: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Espacios Anidados Como mostramos, los namespace sirven para tener un orden lógico en

el código, por lo tanto tiene sentido colocar un namespace dentro de otro.

namespace Motor {

namespace Render{ namespace Particulas { …} }

}

Page 29: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

6.4 Clases

Page 30: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Clases Son el principio de la programación orientada a

objetos.

Una clase representa un objeto genérico del mundo real.

Una clase define un conjunto de funciones y atributos.

Page 31: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Declaraciónclass <identificador de clase> [<:lista de clases

base>] {

<lista de miembros> } [<lista de objetos>];

La lista de clases bases, será la herencia. La lista de miembros son las funciones y

atributos.

Page 32: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Declaración: Ejemploclass Tablero{

private:int x, int y;

public:Tablero(int x, int y);void Marcar(int marca, int x, int y);void getMarca(int x, int y);

}

Page 33: 6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases

Preguntas ¿?