Post on 06-Jan-2015
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 accesoclass Jugador{
private: MovType mov_type;Sprite* sp;float velocity;
public: Jugador(SceneManager* sm);void Move(MovType type);void Stop(MoveType type);void LoopJugador();
};
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(SceneManager* sm)
{
this->sp = sm->CreateSprite("naveJugador","nave.bmp",0.0f,0.0f);
this->velocity = 2.0f;
this->mov_type = MovType::MOV_NONE;
}
Sobrecarga de constructores• Al igual que las funciones, éstas se pueden sobrecargar
de igual manera.
Jugador(SceneManager* sm);
Jugador(SceneManager* sm, int x, int y);
Jugador(SceneManager* 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* jugador1 = new Jugador(sm)
• Jugador* jugador2 = new Jugador(sm, 0, 100);
• Jugador* jugador3 = 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 MovType
{
MOV_NONE,
MOV_UP,
MOV_RIGHT,
MOV_LEFT,
MOV_DOWN
};
Funciones - Ejemplovoid Jugador::Move(MoveType mov_Type){
switch(mov_type){
case MOV_UP:sp->SetPosition(sp->getPositionX(), sp->getPositionY() - velocity);break;
case MOV_LEFT:sp->SetPosition(sp->getPositionX() - velocity, sp->getPositionY());break;
case MOV_RIGHT:sp->SetPosition(sp->getPositionX() + velocity, sp->getPositionY());break;
case MOV_DOWN:sp->SetPosition(sp->getPositionX(), sp->getPositionY() + velocity);break;
default:break;
}}
Funciones• Para llamar a las funciones de un objeto se ocupa el operador ->
jugador1->Move(MoveType::MOV_DOWN);
jugador2->Move(MoveType::MOV_UP);
Destructores• Sirven para eliminar un objeto de una clase
determinada, liberando memoria utilizada por el objeto.
~WorldManager()
{
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(MoveType::MOV_UP);