domingo, 28 de febrero de 2010

Patrones de Diseño (Primera Entrega)

Extraído del libro: Patrones de diseño de erich gamma

Patrones de Diseño

En general un patrón tiene 4 elementos esenciales:

Nombre: Permite describir un problema de diseño junto con sus soluciones y consecuencias.

El Problema: Describe cuándo aplicar el patrón. Explica el problema y su contexto. A veces el problema incluye una serie de condiciones que deben darse para que tenga sentido aplicar el patrón.

La Solución: Describe elementos que constituyen el diseño, sus relaciones, responsabilidades y colaboraciones.

Las Consecuencias: Son los resultados así como las ventajas e inconvenientes de aplicar el patrón. Son fundamentales para evaluar las alternativas de diseño y comprender los costos y beneficios de aplicar el patrón.

Patrones de Creación

Un patrón de creación de clases usa la herencia para cambiar la clase de la instancia a crear, mientras que un patrón de creación de objetos delega la creación de la instancia en otro objeto.

Hay dos temas recurrentes en estos patrones. En primer lugar, todos ellos encapsulan el conocimiento sobre las clases concretas que usa el sistema. Segundo, todos ocultan cómo se crean y se asocian las instancias de estas clases. Todo lo que el sistema conoce acerca de los objetos son sus interfaces, tal y como las definen sus clases abstractas.

El ejemplo tratado aquí es la construcción de un laberinto. A veces el juego consistirá simplemente en encontrar la salida del laberinto; en ese caso el jugador probablemente sólo tendrá una visión local del laberinto. Otras veces el laberinto contendrá problemas que resolver y peligros que superar, y estos juegos pueden proporcionar un plano de la parte del laberinto que ha sido explorada. Nos centraremos en cómo se crean los laberintos y definimos a un laberinto como un conjunto de habitaciones. Una habitación conoce sus límites; estos pueden ser otra habitación, una pared o una puerta a otra habitación. Las clases Habitación, Puerta y Pared definen los componentes del laberinto. La clase LugarDelMapa es la clase abstracta común de todos los componentes de un laberinto. LugarDelMapa sólo define una operación, Entrar. Su significado depende de en dónde estemos entrando. Si entramos en una habitación cambiará nuestra posición. Si tratamos de entrar en una puerta, puede pasar dos cosas: si la puerta está abierta, pasaremos a la siguiente habitación, si está cerrada, nos daremos con ella de nariz.

enum Direccion {Norte, Sur, Este, Oeste

};

Clases:

class LugarDelMapa {

public:

virtual void Entrar() = 0;

};

Habitación es la subclase concreta de LugarDelMapa que define las relaciones principales entre los componentes del laberinto. Mantiene referencias a otros objetos LugarDelMapa y guarda su número de habitación. Este número identificará las habitaciones del laberinto.

class Habitación: public LugarDelMapa {

public :

Habitación (int numHabitacion);

LugarDelMapa* ObtenerLado (Direccion) const;

void EstablecerLado (Direccion, LugarDelMapa*);

virtual void Entrar();

prívate:

LugarDelMapa* _lados[4];

Int _numeroHabitacion;

};

class Pared : public LugarDelMapa {

public:

Pared();

virtual void Entrar();

};


class Puerta : public LugarDelMapa {

public :

Puerta (Habitacion* = 0,Habitacion* = 0);

virtual void Entrar();

Habitacion* OtroLadoDe (Habitacion*);

private:

Habitacion* _habitacion1;

Habitacion* _habitacion2;

bool _estaAbierta;

};

Definiremos una clase Laberinto que represente una serie de habitaciones. Laberinto también puede encontrar una determinada habitación usando su operación NumeroDeHabitación.

class Laberinto {

public:

Laberinto();

void AñadirHabitación (Habitacion*);

Habitacion* NumeroDeHabitacion (int) const;

private:

// …

};

Otra clase que definiremos es JuegoDeLaberinto, que es la que crea el laberinto.

No hay comentarios:

Publicar un comentario

Gracias por dejar su comentario. Carpe diem!