domingo, 10 de junio de 2018

Metodo de Fabrica

MÉTODOS DE FABRICA 
Debemos definir claramente qué es una factoría o fábrica. De la misma forma que sucede con muchos conceptos en la Ingeniería del Software, existen varias definiciones para este término, por tanto, es fundamental clarificar este concepto para sentar las bases de nuestro estudio posterior.
El término factory (o fábrica) adolece de ser sobre utilizado e impreciso. Mucha gente se refiere a factory para indicar una implementación de Factory Method o de Abstract Factory (patrones definidos en el libro del GoF). Otros sin embargo, se refieren a un objeto que crea instancias de otros, aunque no sigue las reglas de los patrones mencionados anteriormente.
Los Patrones permiten establecer un vocabulario común de diseño, cambiando el nivel de abstracción a colaboraciones entre clases y permitiendo comunicar experiencia sobre dichos problemas y soluciones. Son también un gran mecanismo de comunicación para transmitir la experiencia de los ingenieros y diseñadores experimentados a los más nóveles, convirtiéndose en unas de las vías para la gestión del conocimiento.
Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar, permite que una clase delegue en sus subclases la creación de objetos.
El patrón de diseño FACTORY MOTHOD consiste en definir una interfaz para crear objetos de tipo genérico permitiendo a las subclases decidir qué tipo de objetos concreto crear.
En diseño de software, el patrón de diseño Factory Method consiste en utilizar una clase constructora (al estilo del Abstract Factory) abstracta con unos cuantos métodos definidos y otro(s) abstracto(s): el dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.
Factory Method es un patrón de creación de objetos y normalmente lo suelo usar para solucionar el problema que se presenta cuando tenemos que crear la instancia de un objeto pero a priori no sabemos aún que tipo de objeto tiene que ser, generalmente, porque depende de alguna opción que seleccione el usuario en la aplicación o porque depende de una configuración que se hace en tiempo de despliegue de la aplicación.
Este patrón está compuesto por:
 Product: Define la interfaz de los objetos que de van a crear.
 ConcreteProduct: Implementación de la interfaz.
 Creator: Declara la factoría y devuelve un objeto del tipo producto. También puede definir una implementación por defecto para la factoría que devolvería un objeto ConcreteProduct por defecto.
 ConcreteCreator: Sobrescribe el método de la factoría para devolver una instancia concreta de un objeto ConcreteProduct.

Video

Identificación de patrones de diseño para la autentificación en aplicaciones (Método de Prototipo)
El patrón de diseño prototipo tiene como finalidad crear nuevos objetos clonando una instancia creada previamente. Este patrón especifica la clase de objetos a crear mediante la clonación de un prototipo que es una instancia ya creada. La clase de los objetos que servirán de prototipo deberá incluir en su interfaz la manera de solicitar una copia, que será desarrollada luego por las clases concretas de prototipos. Este patrón resulta útil en escenarios donde es impreciso abstraer la lógica que decide qué tipos de objetos utilizará una aplicación, de la lógica que luego usarán esos objetos en su ejecución. Los motivos de esta separación pueden ser variados, por ejemplo, puede ser que la aplicación deba basarse en alguna configuración o parámetro en tiempo de ejecución para decidir el tipo de objetos que se debe crear. En ese caso, la aplicación necesitará crear nuevos objetos a partir de modelos. Estos modelos, o prototipos, son clonados y el nuevo objeto será una copia exacta de los mismos, con el mismo estado. Esto resulta interesante para crear, en tiempo de ejecución, copias de objetos concretos inicialmente fijados, o también cuando sólo existe un número pequeño de combinaciones diferentes de estado para las instancias de una clase. Este patrón propone la creación de distintas variantes de objetos que la aplicación necesite, en el momento y contexto adecuado. Toda la lógica necesaria para la decisión sobre el tipo de objetos que usará la aplicación en su ejecución se hace independiente, de manera que el código que utiliza estos objetos solicitará una copia del objeto que necesite. En este contexto, una copia significa otra instancia del objeto. El único requisito que debe cumplir este objeto es suministrar la funcionalidad de clonarse.
En el caso de un editor gráfico, se pueden crear rectángulos, círculos u otros, como copias de prototipos. Estos objetos gráficos pertenecerán a una jerarquía cuyas clases derivadas implementarán el mecanismo de clonación.



Participación:

e implementa una operación para clonarse.
Prototipo: declara Cliente: es el encargado de solicitar la creación de los nuevos objetos a partir de los prototipos.
Prototipo Concreto: posee características concretas que serán reproducidas para nuevos objetos una interfaz para clonarse, a la que accede el cliente.
El cliente solicita al prototipo que se clone.

Archivo en PDF

Video de ayuda

Implementacion




Implementacion de código en POO
Leguajes basados en clases
Utilizan las clases como estructuras para la creación de los objetos. Una clase se define como la descripción de los atributos de los objetos. Con los campos se define el estado del objeto en un momento dado, tales como color, tamaño, longitud, básico, y con los métodos se define su comportamiento, tal como abrirDB(), validarAcceso(), insertar(), actualizar(), eliminar(), listar(), frenar(), arrancar(),  El proceso de crear un objeto significa crear su estructura  en la memoria, donde guardará el contenido de sus campos y el código de sus métodos. Ejemplo:
// Definición de la clase cell:
      Class cell is
      var contents: Integer :=0;
      method get(): Integer is;
      return self.contents;
      end;
      method set(n:integer) is
      self.contents:=n;
      end;
      end;
      // Creacion de objetos tipo cell:
      objCell1  = new cell;
      objCell2  = new cell;


Subclases

Es la descripción de una clase basada en la estructura de otra clase, la cual se denomina superclase. Se puede mirar como una extensión de la superclase, donde se pueden tomar las características de la superclase, y adicionarle nuevas característica. En la herencia se reciben las definiciones de la superclase y se usan conjuntamente con nuevas definiciones; heredar es compartir atributos entre una clase y sus subclases; si no comparte, no hay herencia. Ejemplo:
// Definición de la subclase recell
      SubClass reCell of Cell is
      var backup:integer:=0;
      override set (n:integer) is
      self.backup:=self.contents;
      super.set(n);
      end;
      method restore() is
      Self.contents:=self.backup;
      end;
      end;
      // Creación de objetos tipo reCell:
      objRecell1 new reCell;
      objRecell2 new reCell;


que es la POO?
La programación orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la obtención de datos de salida específicos, donde cada objeto ofrece una funcionalidad especial.
Muchos de los objetos pre-diseñados de los lenguajes de programación actuales permiten la agrupación en bibliotecas o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias bibliotecas.







METODO DE SINGLETON

El patrón de diseño que permite restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en garantizar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto solo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso como protegido o privado).
La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, solo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.
Garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella.

Singleton
  • Define una operación Instancia que permite que los clientes accedan a su única instancia. Instancia es una operación de clase (static en C# y shared en VB .NET).
  • Puede ser responsable de crear su única instancia.

Usar cuando:
·         Haya  exactamente una instancia de una clase y ésta deba ser accesible a los clientes desde un punto de acceso conocido.
·         La única instancia debería ser extensible mediante herencia y los clientes deberían ser capaces de utilizar una instancia extendida sin modificar su código.


Consecuencias
·         Acceso controlado a la única instancia. Puede tener un control estricto sobre cómo y cuándo acceden los clientes a la instancia.
·         Espacio de nombres reducido. El patrón Singleton es una mejora sobre las variables globales.
·         Permite el refinamiento de operaciones y la representación. Se puede crear una subclase de Singleton.
·         Permite un número variable de instancias. El patrón hace que sea fácil cambiar de opinión y permitir más de una instancia de la clase Singleton.
·         Más flexible que las operaciones de clase (static en C#, Shared en VB .NET).

Singleton y los Patrones de Fabricación
En el libro del GoF se establece también una relación entre Abstract Factory y Singleton. La relación es que "una fábrica concreta suele ser un Singleton" [GoF95]. 
Aquí  se muestra la relación entre estos patrones.

.Fábrica Concreta como Singleton

Se presenta la relación entre estos dos patrones diciendo que "una fábrica concreta suele ser un Singleton". El ejemplo de código a continuación muestra cómo implementar esta relación. En este caso, hemos transformado a la Fábrica Concreta de elementos de UI de Windows en un Singleton (esta clase es parte del ejemplo de implementación de Abstract Factory del artículo Patrones de Fabricación: Fábricas de Objetos [Welicki05b])

public class SingletonWindowsWidgetFactory
{   
   private static volatile SingletonWindowsWidgetFactory instance;    
   private static readonly object padlock = new object();

   private SingletonWindowsWidgetFactory() {}

   public static SingletonWindowsWidgetFactory Instance
   {
     get
     {
        if (instance == null)
        {
           lock(padlock)
           {   
              if (instance == null)
                instance = new SingletonWindowsWidgetFactory();
           }
        }

        return instance;
     }
   }

   public Window CreateWindow()
   {
     return new WindowsWindow();
   }

   public Scrollbar CreateScrollbar()
   {
     return new WindowsScrollbar();
   }
}


 Implementación de una Fábrica Concreta combinada con Singleton
Los métodos de creación de la fábrica concreta del ejemplo presentado arriba (SingletonWindowsWidgetFactory) se invocan de la siguiente forma:

Scrollbar theScrollbar =
        SingletonWindowsWidgetFactory.Instance.CreateScrollbar();

Window theWindow =
        SingletonWindowsWidgetFactory.Instance.CreateWindow();

Archivo en PDF


Identificacion de patrones de diseño para la autenticacion en aplicaciones


Identificación de  para la patrones  de diseño autentificación


Un patrón es:
·         una solución a un problema en un contexto particular
        Recurrente (lo que hace la solución relevante a otras   
        Situaciones)
·         enseña (permite entender cómo adaptarlo a la variante particular del problema donde se quiere aplicar)
·         tiene un nombre para referirse al patrón
·         Los patrones facilitan la reutilización de diseños y arquitecturas software que han tenido éxito
·         Los patrones facilitan la reutilización de diseños y arquitecturas software que han tenido éxito
Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno y describe también el núcleo de la solución al problema, de forma que puede utilizarse un millón de veces sin tener que hacer dos veces lo mismo.
Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.

Nos brindan una solución ya probada y documentada a problemas de desarrollo de software que están sujetos a contextos similares. Debemos tener presente los siguientes elementos de un patrón: su nombre, el problema (cuando aplicar un patrón), la solución (descripción abstracta del problema) y las consecuencias (costos y beneficios).

Existen varios patrones de diseño popularmente conocidos, los cuales se clasifican como se muestra a continuación:
·         Patrones Creacionales: Inicialización y configuración de objetos.

·         Patrones Estructurales: Separan la interfaz de la implementación. Se ocupan de cómo las clases y objetos se agrupan, para formar estructuras más grandes.

·         Patrones de Comportamiento: Más que describir objetos o clases, describen la comunicación entre ellos.

Patrones Creacionales

Fábrica Abstracta ( Abstract Factory )

El problema a solucionar por este patrón es el de crear diferentes familias de objetos, como por ejemplo la creación de interfaces gráficas de distintos tipos (ventana, menú, botón, etc.).

Método de Fabricación (Factory Method)
Parte del principio de que las subclases determinan la clase a implementar.
public class ConcreteCreator extends Creator
  {
  protected Product FactoryMethod()
      {
            return new ConcreteProduct();
      }
}
public interface Product{}
public class ConcreteProduct implements Product{}
      public class Client
      {
            public static void main(String args[])
            {
                  Creator UnCreator;
                  UnCreator = new ConcreteCreator();
                  UnCreator.AnOperations();
            }
      }








Prototipado ( Prototype )
Se basa en la clonación de ejemplares copiándolos de un prototipo.



Singleton
Restringe la instanciación de una clase o valor de un tipo a un solo objeto.
      public sealed class Singleton 
      { 
            private static volatile Singleton instance; 
            private static object syncRoot = new Object(); 
            private Singleton() 
            { 
                  System.Windows.Forms.MessageBox.Show("Nuevo Singleton"); 
            } 
            public static Singleton GetInstance 
            { 
                  get 
                  { 
                        if (instance == null) 
                        { 
                             lock(syncRoot) 
                             { 
                                   if (instance == null) 
                                         instance = new Singleton(); 
                             } 
                        } 
                        return instance; 
                  } 
            }
       }





MVC ( Model View Controler )

Este patrón plantea la separación del problema en tres capas: la capa model, que representa la realidad; la capa controler , que conoce los métodos y atributos del modelo, recibe y realiza lo que el usuario quiere hacer; y la capa vista, que muestra un aspecto del modelo y es utilizada por la capa anterior para interaccionar con el usuario.

Patrones Estructurales


·         Adaptador (Adapter): Convierte una interfaz en otra.

·         Puente (Bridge): Desacopla una abstracción de su implementación permitiendo modificarlas independientemente.

·         Objeto Compuesto (Composite): Utilizado para construir objetos complejos a partir de otros más simples, utilizando para ello la composición recursiva y una estructura de árbol.

·         Envoltorio (Decorator): Permite añadir dinámicamente funcionalidad a una clase existente, evitando heredar sucesivas clases para incorporar la nueva funcionalidad.

·         Fachada (Facade): Permite simplificar la interfaz para un subsistema.

·         Peso Ligero (Flyweight): Elimina la redundancia o la reduce cuando tenemos gran cantidad de objetos con información idéntica.

·         Apoderado (Proxy): Un objeto se aproxima a otro.

 

 

 

 

 

 

 

 

 

 

 

 

Patrones de Comportamiento

 

·         Cadena de responsabilidad (Chain of responsibility): La base es permitir que más de un objeto tenga la posibilidad de atender una petición.

·         Orden (Command): Encapsula una petición como un objeto dando la posibilidad de “deshacer” la petición.

·         Intérprete (Interpreter): Intérprete de lenguaje para una gramática simple y sencilla.

·         Iterador (Iterator): Define una interfaz que declara los métodos necesarios para acceder secuencialmente a una colección de objetos sin exponer su estructura interna.

·         Mediador (Mediator): Coordina las relaciones entre sus asociados. Permite la interacción de varios objetos, sin generar acoples fuertes en esas relaciones.

·         Recuerdo (Memento): Almacena el estado de un objeto y lo restaura posteriormente.

·         Observador (Observer): Notificaciones de cambios de estado de un objeto.

Public Class Artículo
   Delegate Sub DelegadoCambiaPrecio(ByVal unPrecio As Object)
   Public Event CambiaPrecio As DelegadoCambiaPrecio
   Dim _cambiaPrecio As Object
   Public WriteOnly Property Precio()
      Set(ByVal value As Object)
         _cambiaPrecio = value
         RaiseEvent CambiaPrecio(_cambiaPrecio)
      End Set
   End Property
End Class
Public Class ArticuloObservador
   Public Sub Notify(ByVal unObjecto As Object)
      Console.WriteLine("El nuevo precio es:" & unObjecto)
   End Sub


End Class

Archivo PDF