You are on page 1of 14

Arquitectura De Software

TRABAJO DE INVESTIGACION
PATRONES DE DISEO




Nombre del Profesor: Armando Muoz Tamponi
Fecha de realizacin: 27 de Marzo del 2014
Fecha de Entrega Informe: 07 de Abril del 2014


Arquitectura De Software

ndice

Introduccin................................................................................................................. 3
Patrones de Diseo..................................................................................................... 4
Command Pattern Desing o Patrn de Comandos..................................................... 6
Ejemplo de Cdigo de patrn de Comandos.............................................................. 9
Conclusin.................................................................................................................. 13
Bibliografa.................................................................................................................. 14


Arquitectura De Software


Introduccin
El presente trabajo nos presentara uno de los tantos patrones de diseo que podemos
utilizar en nuestro desarrollo.
Primero explicaremos que es un patrn y cules son sus caractersticas, despus
veremos que es el patrn de diseo por comando y cules son sus usos.
Finalmente veremos un ejemplo de cmo implementar este patrn en un desarrollo con un
ejemplo simple.


Arquitectura De Software


Patrones de Diseo
Los patrones de diseo software son el esqueleto de las soluciones a problemas
comunes en el desarrollo de software. En otras palabras, brindan una solucin ya
probada y documentada a problemas de desarrollo de software que estn sujetos a
contextos similares.

Podramos clasificar los patrones en tres grandes grupos segn la escala o nivel de
abstraccin:
Patrones de arquitectura: Aqullos que expresan un esquema organizativo
estructural fundamental para sistemas de software.
Patrones de dialectos: Patrones de bajo nivel especficos para un lenguaje
de programacin o entorno concreto.
Patrones de interaccin: Son patrones que nos permiten el diseo de
interfaces web.
Patrones de diseo: Aqullos que expresan esquemas para definir
estructuras de diseo (o sus relaciones) con las que construir sistemas de
software.

Los patrones de diseo software pretenden:

Proporcionar catlogos de elementos reusables en el diseo de sistemas
software.
Evitar la reiteracin en la bsqueda de soluciones a problemas ya
conocidos y solucionados anteriormente.
Formalizar un vocabulario comn entre diseadores.
Estandarizar el modo en que se realiza el diseo.
Facilitar el aprendizaje de las nuevas generaciones de diseadores
condensando conocimiento ya existente.


Arquitectura De Software

Asimismo, no pretenden:

Imponer ciertas alternativas de diseo frente a otras.
Eliminar la creatividad inherente al proceso de diseo.
No es obligatorio utilizar los patrones, solo es aconsejable en el caso de
tener el mismo problema o similar que soluciona el patrn, siempre
teniendo en cuenta que en un caso particular puede no ser
aplicable. Abusar o forzar el uso de los patrones puede ser un error.

Por otro lado, los patrones se clasificaran segn el propsito para el que han sido
definidos:

Patrones de Creacin: patrones de diseo software que solucionan
problemas de creacin de instancias. Nos ayudan a encapsular y abstraer
dicha creacin.
Patrones Estructurales: patrones de diseo software que solucionan
problemas de composicin (agregacin) de clases y objetos.

Patrones De Comportamiento: patrones de diseo software que ofrecen
soluciones respecto a la interaccin y responsabilidades entre clases y
objetos, as como los algoritmos que encapsulan.

Adems de su aplicacin directa en la construccin de software en general, y
derivado precisamente del gran xito que han tenido. En particular son notorios los
esfuerzos en los siguientes mbitos:

Patrones de interfaces de usuario, esto es, aquellos que intentan definir las
mejores formas de construir interfaces hombre-mquina.

Patrones para la construccin de sistemas empresariales, en donde se
requieren especiales esfuerzos en infraestructuras de software y un nivel
de abstraccin importante para maximizar factores como la escalabilidad o
el mantenimiento del sistema.

Patrones para la integracin de sistemas, es decir, para la
intercomunicacin y coordinacin de sistemas heterogneos.

Patrones de flujos de trabajo, esto es para la definicin, construccin e
integracin de sistemas abstractos de gestin de flujos de trabajo y
procesos con sistemas empresariales.

Arquitectura De Software


Command Design Pattern o Patrn de Comando

El patrn de comando es un patrn de diseo que permite a toda la informacin de una
solicitud y se encierra en un nico objeto. El comando puede ser invocado como se
requiere, a menudo como parte de un lote de comandos en cola con capacidades de
reversin.

Ques es el patrn de comando?

El patrn de comando es parte de Gang of Four Design Pattern (Gang of Four es el
nombre con el que se conoce comnmente a los autores del libro de referencia en el
campo del diseo orientado a objetos Design Patterns). Este es un patrn de
comportamiento, ya que define una forma para controlar la comunicacin entre las
clases o entidades.

El patrn de comando se utiliza para expresar una peticin, incluyendo el llamado a ser
hecho ya todos sus parmetros requeridos, en un objeto de comando.

El comando puede entonces ser ejecutado de inmediato o se mantiene para su uso
posterior. A menudo, una cola de comandos ser creado que se puede ejecutar en un
lote.

El objeto de comando no contiene la funcionalidad que se va a ejecutar, slo la
informacin necesaria para realizar una accin.

La funcionalidad est contenida dentro de objetos receptores. Esto elimina el vnculo
directo entre las definiciones de comandos y la funcionalidad, la promocin de la
articulacin flexible.

Ninguno de estos tipos de objetos es el responsable de determinar el momento de la
ejecucin del comando. Esto se controla mediante un invocador.

Arquitectura De Software

UML del modelo de comandos



El diagrama de clases UML anterior muestra una implementacin del patrn de diseo de
un sistema. Los elementos en el diagrama se describen a continuacin:

Cliente. La clase es un consumidor de las clases de patrn de diseo del sistema.
Crea los objetos de comando y los vincula a los receptores.
Receptor. Objetos receptores contienen los mtodos que se ejecutan cuando se
invocan uno o ms comandos. Esto permite que la funcionalidad real que se
celebrar por separado a las definiciones de los comandos.
CommandBase. Esta clase abstracta es la clase base para todos los objetos de
comando. Define un campo protegido que contiene el receptor que est vinculada
a la orden, que se fija por lo general a travs de un constructor. La clase tambin
define un mtodo abstracto que se utiliza por el invocador para ejecutar
comandos.
ConcreteCommand. Clases de comandos Concretos son subclases de
CommandBase. Adems de implementar el mtodo Execute, que contienen toda
la informacin que se requiere para llevar a cabo correctamente la accin
utilizando el objeto receptor vinculado.
Invocador. El objeto invocador inicia la ejecucin de comandos. El invocador
podra ser controlado por el objeto de cliente. Sin embargo, el invocador se puede
desconectar desde el cliente. Por ejemplo, el cliente puede crear una cola de
comandos que se ejecutan peridicamente por un evento programado.



Arquitectura De Software

El patrn de comando es til en el apoyo a las actividades que requieren la
ejecucin de una serie de comandos. Los objetos de comando se pueden mantener en
una cola y se procesan de forma secuencial. Si cada comando se almacena en
una pila despus de que se ejecuta, y si los comandos son reversibles, esto permite la
ejecucin de una operacin de deshacer o multi-nivel deshacer instalacin.

Un ejemplo de la utilizacin del patrn de diseo comando podra ser utilizado como
control remoto de un robot, tales como los utilizados en los programas espaciales.

En nuestro ejemplo, el receptor sera el robot. La clase de receptor incluira mtodos que
permitiran que el robot se mueva hacia delante una distancia especfica o hacia atrs y
gire a la izquierda o la derecha.
Tambin puede incluir mtodos que permitan que una muestra de suelo que deben
recogerse o desecharse.
Para controlar el robot, se aadira una secuencia de comandos a una cola que se
encuentra en el objeto invocador. Cuando los comandos se deben ejecutar, el invocador
sera procesar la cola y agregar los comandos a una pila de deshacer.


Arquitectura De Software


Ejemplo de Cdigo para este Patrn

La primera clase ser la clase base abstracta para comandos del robot, que incluye un
mtodo de deshacer,as como un mtodo de ejecucin.

public abstract class RobotCommand
{
protected Robot _robot;
public RobotCommand(Robot robot)
{
_robot = robot;
}
public abstract void Execute();
public abstract void Undo();
}

Ahora podemos crear los tres comandos que el robot ser capaz de realizar.
El primer comando permitir que el robot se mueva hacia delante por un nmero
especificado de milmetros. Si el valor dado es negativo, el robot se mueva hacia atrs.

public class MoveCommand : RobotCommand
{
public int ForwardDistance { get; set; }
public MoveCommand(Robot robot) : base(robot) { }
public override void Execute()
{
_robot.Move(ForwardDistance);
}
public override void Undo()
{
_robot.Move(-ForwardDistance);
}
}


Arquitectura De Software


Un comando similar se permite que el robot puede girar un nmero de grados a la
izquierda, o hacia la derecha cuando el valor es negativo.

public class RotateCommand : RobotCommand
{
public double LeftRotation { get; set; }
public RotateCommand(Robot robot) : base(robot) { }
public override void Execute()
{
_robot.RotateLeft(LeftRotation);
}
public override void Undo()
{
_robot.RotateLeft(-LeftRotation);
}
}

El tercer comando mueve la muestra de recoleccin scoop hacia arriba o hacia abajo.

public class ScoopCommand : RobotCommand
{
public bool ScoopUpwards { get; set; }
public ScoopCommand(Robot robot) : base(robot) { }
public override void Execute()
{
_robot.Scoop(ScoopUpwards);
}
public override void Undo()
{
_robot.Scoop(!ScoopUpwards);
}
}

En cada sistema, existen los mtodos Execute y Undo que realizan las acciones


Arquitectura De Software


Con los comandos listos podemos crear la funcionalidad que los apoya. En este caso a
cabo dentro de una sola clase de receptor que llama "Robot". En lugar de ejecutar las
acciones, cada mtodo enviara un mensaje con la accin que debera realizar.

public class Robot
{
public void Move(int forwardDistance)
{
if (forwardDistance > 0)
Console.WriteLine("Robot se movio hacia Adelante {0}mm.",
forwardDistance);
else
Console.WriteLine("Robot se movio hacia Atras {0}mm.", -
forwardDistance);
}

public void RotateLeft(double leftRotation)
{
if (leftRotation > 0)
Console.WriteLine("Robot giro a la Izquierda {0} grados.",
leftRotation);
else
Console.WriteLine("Robot giro a la Derecha {0} grados.", -
leftRotation);
}

public void Scoop(bool upwards)
{
if (upwards)
Console.WriteLine("Robot Recogio una Muestra.");
else
Console.WriteLine("Robot Libero la Muestra.");
}
}




Arquitectura De Software


Para completar las clases clave debemos programar el invocador. Esta ser una versin
mejorada, ya que contiene una cola de comandos en lugar de una sola referencia. Esta
cola se puede utilizar para deshacer los comandos que se han ejecutado.

public class RobotController
{
public Queue<RobotCommand> Commands;
private Stack<RobotCommand> _undoStack;

public RobotController()
{
Commands = new Queue<RobotCommand>();
_undoStack = new Stack<RobotCommand>();
}

public void ExecuteCommands()
{
Console.WriteLine("EJECUTANDO COMANDOS.");

while (Commands.Count > 0)
{
RobotCommand command = Commands.Dequeue();
command.Execute();
_undoStack.Push(command);
}
}

public void UndoCommands(int numUndos)
{
Console.WriteLine("REVERSANDO {0} COMANDOS.", numUndos);

while (numUndos > 0 && _undoStack.Count > 0)
{
RobotCommand command = _undoStack.Pop();
command.Undo();
numUndos--;
}
}
}


Arquitectura De Software



Conclusin

La ventaja de este sistema es que pueden ser utilizados en todo tipo de sistema que se
requiera ejecutar comandos en forma secuencial y reversarlos de la misma manera de ser
necesario, por ejemplo para poder mantener una integridad de una base de datos a fin de
no grabar los datos y poder reversar los cambios solicitados, controlados por el software y
no por la base, para la creacin de usuario en un sistema, o realizar las compras en una
pgina web


Arquitectura De Software

Bibliografa

Wikipedia, La Enciclopedia Libre http://es.wikipedia.org

BlackWasp web site http://www.blackwasp.co.uk

Buscador Google http://www.google.cl

You might also like