miércoles, 30 de marzo de 2011

Código de patrones de diseño

Aquí les posteo mi código de diseño de patrones


//Patron Singleton
class SingletonUS
{
//Aquí se pueden edclarar las demas variables para el query y la db, éstas solo son como la escructura
private static $singleInstancia;
private function __construct(){ }

public static function getInstancia(){
if(!self::$singleInstancia){
self::$singleInstancia = new self();
}
return self::$singleInstancia;
//Patron Strategy
class StraUs {

public function CreateOrUpdate($name, $mail, $userid = null, $father)
{
if( is_null($userid) ) {
// Esto significa que el usuario aún no existe, crear nuevo registro
}
else {}

if( is_null($father) ) {
// Si tiene papa el empleado
}
else {}

}
}}

/* Aquí se va añadiendo los métodos de la clase */
function Metodo(){
var_dump(self::$singleInstancia);
}

}

$mysingleton = SingletonUS::getInstancia();
$mysingleton->Metodo();

$mysingleton = SingletonUS::getInstancia();
$mysingleton->Metodo();




//Patron Strategy
class StraUs {

public function CreateOrUpdate($name, $mail, $userid = null, $father)
{
if( is_null($userid) ) {
// Esto significa que el usuario aún no existe, crear nuevo registro
}
else {}

if( is_null($father) ) {
// Si tiene papa el empleado
}
else {}

}
}




//Patrones Factory
abstract class FactoriCnva {
protected $_html;
}

public function getHtml()
{
return $this->_html;
}
}

class ImageFactoriCnva extends FactoriCnva {
protected $_html = "...";
}

class InputFactoriCnva extends FactoriCnva {
protected $_html = "...";
}

class FactoriCnvaFactory
{
public static function createFactoriCnva($type)
{
$baseClass = 'Boton';
$targetClass = ucfirst($type).$baseClass;

if (class_exists($targetClass) && is_subclass_of($targetClass, $baseClass)) {
return new $targetClass;
} else {
throw new Exception("El tipo de botón '$type' no existe.");
}
}
}

$FactoriCnvas = array('image','input');
foreach($FactoriCnvas as $b) {
echo FactoriCnvaFactory::createFactoriCnva($b)->getHtml()
}

abstract class FactoriCnva {
protected $_html;
}

public function getHtml()
{
return $this->_html;
}
}

class Nodo extends FactoriCnva {
protected $_html = "...";
}

class Linea extends FactoriCnva {
protected $_html = "...";
}

class FactoriCnvaFactory
{
public static function createFactoriCnva($type)
{
$baseClass = 'Canva';
$targetClass = ucfirst($type).$baseClass;

if (class_exists($targetClass) && is_subclass_of($targetClass, $baseClass)) {
return new $targetClass;
} else {
throw new Exception("La canva '$type' no existe.");
}
}
}

$FactoriCnvas = array('Nodo','Linea');
foreach($FactoriCnvas as $b) {
echo FactoriCnvaFactory::createFactoriCnva($b)->getHtml()
}


Patrones de Diseño

Hola que tal otra vez compañeros, ahora lo que vamos a hablar es acerca de los patrones de diseño.

Antes que nada hay que definir o dar la idea acerca de los patrones de diseño

Un patrón de diseño es una solución, que fue analizada, de un problema de programación y que éstas se pueden volver a utilizar en otros problemas de programación, para su mejor funcionamiento (Es una plantilla que se aplica a una situación).
Hay que tomar en cuenta que si un patrón se aplica erróneamente, nos puede traer problemas y dificultames para su trabajo ó manejo.

Tipos:
En los patrones de diseño contamos con 3 tipos los cuales son: estructural, creacional y de compartamiento.
  • En el estructural, tenemos las relaciones entre las clases y objetos, que nos ayudan y facilitan el trabajo en conjunto.
  • En el creacional, tenemos los mecanismos de instalación, facilitandonos la creación de objetos a adaptarse a dicha situación.
  • En el de compartamiento, ayuda a facilitar la comunicación entre las clases y objetos.

Ahora pontré algunos de los patrones mas usados en PHP
Hay que tomar en cuenta que cuando vamos a usar patrones de diseños, éstos pueden ser aplicables a casi cualquier lenguaje de programación si acaso algunos varían por su forma de procesarlos, pero en sí son casi idénticos. Para ésto yo les hablaré de los más usuales que hay en el lenguaje de PHP.
  • Patrón Singleton: Éste es uno de los patrones más faciles y que con mayor frecuencia veremos en programas a poder aplicar, consiste en una clase que unicamente tiene una instancia y ésta provee un lugar global que se tiene acceso en ella (osea, devolver la clase en futuras llamadas que se hagan a ésta).
  • Ventaja: Es fácil de usar y de entender, éste patrón lo podemos usar en la gestión de conexión y query con la base de datos.


  • Patrón Observer: En éste patrón se crean objetos que mantienen una lista de observadores y éste notifica algún cambio que haya en su éstado.
  • Ventaja: Éste patrón nos puede ser muy útil al momento de tener un sistema acceso a información o loggin (un ejemplo podría ser el de facebook, que nos indica cuando alguien publico algo de nosotros o relacionado a nosotros).


  • Patrón Factory: En éste patrón se basa se basa en un método de una clase que crea objetos cuando no se sabe exactamente la clase del objeto que se va a crear (osea, una clase general que heredará subclases).
  • Ventaja: Éste patrón nos puede ser muy útil al momento de identificar objetos a crear y éste los valla identificando y asociandolos respectivamente.


  • Patrón Chain-of-command-pattern: Éste patrón también es conocido como cadena de mando, éste se basa en la creación de objetos receptores y un objeto emisor, que manda una petición y éste recorre todos los posibles receptores hasta que se responda con una acción o ejecución en el comando.
  • Ventaja: El objeto emisor, no conoce de las clases que se va a manejar y sirve para tener una arquitectura de acoplamiento (un ejemplo a éste patrón por si no entendieron del todo bien, sería en un formulario, en la cual dependiendo de los valores dados por el usuario, nosotros, podemos hacer cierta acción como si es hombre o mujer, clasificarlos ó mandar una notificación ya sea por correo o por mensaje a celular si proporcionó el correo o el número de celular).

  • Patrón Strategy: En éste patrón los algoritmos de extraen de clases complejas, para que éstas puedan ser más fácil.
  • Ventaja: Ayuda en un mejor manejo de los recursos o más bien para el mejor desarrollo de ésta o de su algoritmo (un ejemplo podría ser al tener un listado de usuarios y éste nos da un método para encontrar un conjunto de usuarios).


Por el momento serán todas a mencionar, pero cabe recordar que aún hay otras, que nos puede ser también útiles o importantes, como el patrón adapter, patrón decorator, patrón proxy, etc.

Patrones de diseños aplicados en mi proyecto
Como ya vimos 5 patrones de diseños, que son los mas importantes (factory, singleton, observer, chain-of-command and strategy), lo que resta es saber cuál aplicar a mi proyecto, hay que recordar lo comentado con anterioridad, que si un patrón lo aplicamos erróneamente a nuestro proyecto o programa, éste nos puede producir fallas o dificultades para seguir con éste.

En mi proyecto los patrónes a usar podrían ser:
  • Patrón Strategy: Éste patrón lo puedo emplear al momento de crear registros, o si ya hay uno existente, como por ejemplo que un empleado tenga de id como NULL, tener en el registro de quien es padre de ese empleado (jefe).


  • Patrón Factory: Éste patrón lo puedo usar en lo botones a crear, para indicar si hay que agregar, eliminar o editar algun empleado, ya que depende de la situación que se vaya a crear y también en la creación de las canvas


  • Patrón Singleton: Éste patrón lo puedo emplear, para declarar las instancias de la clase árbol y en la clase listar, ya que habra la conexion de la base de datos y el guardado o edición de los empleados.


A continuación les pongo mi diagrama completo:



En sí así sería como quedaría mi diagrama, por el momento es todo y en la otra entrada publicaré el código de éstos patrones de diseño aplicados a mi proyecto.
Si tienen alguna duda o comentario, no olviden en hacerlo o si creen que sería otro patrón necesario haganmelo saber.
Saludos.

Aquí dejo algunas ligas de interés y que me fueron útiles:
http://craftyman.net/patrones-de-diseno-en-php/
http://www.ibm.com/developerworks/library/os-php-designptrns/?ca=dgr-lnxw98PHP-Patterns
http://www.baluart.net/articulo/introduccion-a-los-patrones-de-diseno-con-php
http://www.davidrojas.net/

También recomiendo éste libro
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&qid=1301566231&sr=1-1-spell
En la cuál, leí un poco de éstos y me ayudaron en algunas cosas para comprender, aparte que varios autores de donde estuve investigando recomendaban el primero.

miércoles, 23 de marzo de 2011

jueves, 17 de marzo de 2011

Diagrama Secuencial UML

Aquí les adjunto, como mi diagrama de secuencia de mí proyecto, lo realicé con un programa de una página web, que ya habia mencionado, pero como quiera aquí les dejo el link, por si quieren hacer sus propios diagramas.



Si lo quieren visualizar mejor solo es cuestión que le den click para agrandar.

Explicación:
Primero estamos en el objeto ventana, en el cuál nosotros escogeremos que hacer, despues nos vamos al objeto nodo, en el cual aquí empieza desde el nodo raíz y tomamos en cuenta que vamos a agragar o eliminar un nodo, despues nos vamos al objeto puntero, que hara la funcion solicitada, de aquí nos vamos al objeto lista, que en esta comparemos con elementos anteriores, si este es null creamos la canva, de lo contrario regresamos y hacemos recursion para seguir buscando, una vez terminado enlistamos, ahora creamos el objeto y lo enlazamos, una vez tenida la canva o autoforma enlazada al nodo padre, le ponemos el contido que lleva éste, y ya para terminar nos vamos al objeto ventana, para visualizarlo.

Por lo pronto es todo, si tienen alguna duda o comentario haganla saber.
Saludos.

miércoles, 16 de marzo de 2011

Diagrama de Clase y Secuencia UML

Hola que tal compañeros, ahora para ésta entrada lo que veremos será acerca de los diagramas de clases y secuencia uml.

Diagrama de Clases:
Un diagrama de clases, como su nombre nos dice, nos ayuda a conocer en forma visual, las relaciones de las clases que tenemos de nuestro proyecto o programa, las cuales éstas pueden ser de uso, asociativas y herencia. Hay que tomar en cuanta que este tipo de diagramas son estáticos. Los diagramas de clases son muy usados generalmenta para proyectos de empresas, desarrollo, entre otras. Ya que se usan durante el proceso de ánalisas y en el diseño de sistemas.

A continuación les pongo la estructura que debe de llevar un diagrama de clases.
Representación:
Relaciones entre clases:
Estas nos sirven para cuando nosotros queramos relacionar mas clases y éstas las vemos representadas como flechas, a continuación mencionaré algunas de ellas:
  • Herencia: Esta es el tipo de agregación más comun que encontramos, y en ésta nos menciona que una clase de una clase(osea una subclase) hereda los métodos y atributos que estaban en ésta.
  • Agregación, Asociación y Dependencia (éstas son otros tipos que encontramos, aquí dejo el link por si quieren conocer un poco más de ellos).
Aquí les dejo un ejemplo de como puede ser usado (éste es acerca de un diccionario usando como algoritmo un diagrama de árbol):
Esta imagen la saque de ésta pagina por si quieren conocer un poco más de ella.

Secuencia de UML:
Secuancia de UML es mas conocido como diagrama de secuencia, éste tipo de Diagrama es muy usado para hacer el modelado del funcionamiento en un programa orientado a objetos. Este mas bien muestra la orientacin a travéz del tiempo y que es lo que pasa para cada caso (podríamos mencionar como las funciones que hace de éste).
Si no me entendieron, para hacerselos más fácil imaginense una linea de tiempo de una persona que tiene la línea de origen, varios caminos (ya que éste puede dormir, comer, caminar, etc.) y un fin.

Cosas a tomar en cuenta:
Hay que tomar encuenta, si queremos hacer un diagrama de secuencia bueno, es que éste no sea largo ya, que éste nos puede confundir a otras personas que quiera conocer hacerca de éste. Este debe de ser claro, indicandonos los objetivos, funciones y clases que hay en éste, si en el programa éstamos usando un algoritmo, no es necesario iindicarlo, nadamas hay que indicar de la clase perteneciente.

Elementos:
Los elementos o componentes principales que encontramos en éste son:
Actor: Este viene tomando el papel de prueba o el objetos que usaremos para el pasar por el diagrama.
Objeto: Esta viene siendo representada como un rectángulo que contiene el nombre de la clase y abajo de es éste hay una línea vertical, que también es conocida como línea de vida
Activacion: Este es un rectangulo que va en la línea de vida, indicando el tiempo que tarda la acción.
Mensaje: En éste indicamos mensajes, condiciones o iteraciones que tenemos, ya sea en una línea de tiempo, de una línea a otra o viceversa.

Ahora a continuación les pongo un ejemplo de como funciona, ya con todo ésto integrado, el ejemplo trata acerca de cuando vamos a un restaurant:


Para poder hacer éste tipo de diagramas en nuestro computador, hay varios softwares que podemos emplear, yo les recomiendo que usen Umbrello, ya que es sencillo de usar, es software libre y hay varios tutoriales para aprender a usarlo.

Si quieren descargarlo es cuestión que pongan en la terminal:
  • sudo apt-get install umbrello
Y listo seguimos con lo normal que es poner contraseña y probar el programa.
Cabe mencionar también que hay varios sitios web donde podemos generar diagramas uno de ellos es http://www.websequencediagrams.com/ en la cual ésta nos puede ayudar para hacer diagramas de secuencia.

Por lo pronto sería todo, si tienen una duda o comentario no duden en publicarlo y para hacermelo saber y asi poderselos contestar.
Saludos.

Presentación Diagramas