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

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

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

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 ¿?