Programacin Grfica 8 Clases y objetos Clases Clases

Programación Gráfica 8. Clases y objetos

Clases

Clases • En Programación orientada a objetos, cada objeto del mundo real puede ser presentado como una clase en el programa. • Se pueden instanciar múltiples objetos de esa clase, cada una con diferentes atributos.

Declaración class <identificador de clase> { <lista de miembros> };

Especificadores de acceso class <identificador de clase> { public: <lista de miembros> private: <lista de miembros> protected: <lista de miembros> };

Especificadores de acceso class Jugador { private: Mov. Type mov_type; Sprite* sp; float velocity; public: Jugador(Scene. Manager* sm); void Move(Mov. Type type); void Stop(Move. Type type); void Loop. Jugador(); };

Especificadores de acceso • Acceso privado, private: – Los miembros privados de una clase sólo son accesibles por los propios miembros de la clase, pero no desde funciones externas o desde funciones de clases derivadas. • Acceso publico, public: – Cualquier miembro público de una clase es accesible desde cualquier parte donde sea accesible el propio objeto.

Especificadores de acceso • Acceso protegido, protected: – Con respecto a las funciones externas, es equivalente al acceso privado, pero con respecto a las clases derivadas se comporta como público

Constructores • Son funciones especiales que nos permiten inicializar el objeto asociado a la clase, y así mismo inicializar todos sus valores. • Tienen el mismo nombre que la clase, no retornan ningún valor y por lo general son public.

Constructores Jugador: : Jugador(Scene. Manager* sm) { this->sp = sm->Create. Sprite("nave. Jugador", "nave. bmp", 0. 0 f); this->velocity = 2. 0 f; this->mov_type = Mov. Type: : MOV_NONE; }

Sobrecarga de constructores • Al igual que las funciones, éstas se pueden sobrecargar de igual manera. Jugador(Scene. Manager* sm); Jugador(Scene. Manager* sm, int x, int y, char name[50]);

Creación de objetos • Para crear un objetos se debe asignar espacio en memoria para dicho objeto y sus componentes. • Para ir al espacio de memoria asignado se ocupan PUNTEROS. • Un objeto no es más que una instancia de una clase, y por lo tanto se pueden crear tantas instancias como memoria se tenga.

Objetos • Para crear objetos se utiliza el operador * y la palabra reservada new. • Jugador* jugador 1 = new Jugador(sm) • Jugador* jugador 2 = new Jugador(sm, 0, 100); • Jugador* jugador 3 = new Jugador(sm, 0, 100, “Terminator”);

Funciones • Cada clase puede tener funciones que representarán las acciones que puede realizar un objeto en el mundo real > POO. • Ejemplo: – Un Soldado puede: Disparar, Correr, Cargar su arma, etc. – Un Auto puede: Aplicar Turbo, Avanzar, Girar, etc.

Funciones - Ejemplo • Se tiene una enumeración que indique los movimientos que puede hacer un jugador. enum Mov. Type { MOV_NONE, MOV_UP, MOV_RIGHT, MOV_LEFT, MOV_DOWN };

Funciones - Ejemplo void Jugador: : Move(Move. Type mov_Type) { switch(mov_type) { case MOV_UP: sp->Set. Position(sp->get. Position. X(), sp->get. Position. Y() - velocity); break; case MOV_LEFT: sp->Set. Position(sp->get. Position. X() - velocity, sp->get. Position. Y()); break; case MOV_RIGHT: sp->Set. Position(sp->get. Position. X() + velocity, sp->get. Position. Y()); break; case MOV_DOWN: sp->Set. Position(sp->get. Position. X(), sp->get. Position. Y() + velocity); break; default: break; } }

Funciones • Para llamar a las funciones de un objeto se ocupa el operador -> jugador 1 ->Move(Move. Type: : MOV_DOWN); jugador 2 ->Move(Move. Type: : MOV_UP);

Destructores • Sirven para eliminar un objeto de una clase determinada, liberando memoria utilizada por el objeto. ~World. Manager() { delete background; delete jugador; delete sm; }

C++. NET • En C++. NET las clases son administradas, esto quiere decir que el entorno provee servicios automáticos al código que se ejecuta. • Para declarar una clase se utiliza la palabra reservada “ref”. ref class Jugador { <cuerpo> };

C++. NET • Para asignar memoria y crear objetos se utiliza el operador ^ y la palabra reservada gcnew. Jugador^ jugador = gcnew Jugador(sm); • Para llamar a funciones del objeto, es lo mismo que en c++ standar. jugador->Mover(Move. Type: : MOV_UP);

Preguntas ¿?
- Slides: 21