sábado, 20 de junio de 2015

Patrones Estructurales

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

Singleton patrón de diseño

Estructura de un programa COBOL

La estructura de un programa COBOL Consiste de 4 divisiones:

· Identification Division
· Environment Division
· Data Division
· Procedure Division.

Identification Division

La Identification Division es obligatoria. Las otras tres son opcionales, pero si se las codifica, estas deben ser invocadas en orden. Cada división tiene un propósito especifico y usa Cláusulas, Frases, instrucciones y Sentencias para cumplir con dicho objetivo.
La Identification Division es la primer división que se escribe en un programa COBOL. Especifica el nombre del programa y provee de información adicional, tal como el autor del programa y la fecha de compilación. La Identification Division debe comenzar con las
palabras IDENTIFICATION DIVISION o ID DIVISION. El párrafo PROGRAM-ID es obligatorio y debe ser el primero de la identificación. Los restantes párrafos son opcionales y pueden ser escritos en cualquier orden.

Environment Division

La Environment Division de un programa COBOL brinda información sobre las características físicas especificas del ambiente en el que correrá el programa. Especifica información sobre la computadora en que se generó el programa y aquella en la que se correrá. También relaciona los archivos de entrada y salida del programa con los
dispositivos de hardware específicos. La Environment Division se compone de dos secciones “section”:

*Configuration Section
*Input-Output Section.

Data Division

La Data Division describe las estructuras de datos a ser procesadas por el programa COBOL. Puede contener hasta cinco secciones (dependiendo del cobol en uso, las primeras tres comunes a todos), todas son opcionales:

* File Section
* Working-Storage Section
* Linkage Section
* Screen Section
* Local Section

Estas secciones, en orden, están compuestas por la descripción de los archivos, las descripciones de entrada de datos necesarias para ejecutar el programa, las descripciones de áreas de datos para recibir parámetros, las descripciones de las áreas para describir el formato de los datos a ser mostrados y recibidos desde pantalla y la descripción de las entradas de datos que permitirán generar distintas instancias de las variables en aquellos
programas recursivos.

Procedure Division

La Procedure Division es la cuarta y ultima división dentro de un programa COBOL. Contiene los procedimientos, secciones, párrafos, declaraciones, sentencias e instrucciones necesarias para ejecutar el procesamiento de la función y resolver el problema de procesamiento de los datos. Una sección declarativa “Declaratives Section” puede aparecer al comienzo de la procedure division. Esta especifica procesos declarativos a ser procesados cuando se produce una condición de excepción que no puede ser tratada por los testeos ordinarios. La sentencia USE debe ser la primer sentencia de cada sección especificada dentro de la Declaratives Section. Esta identifica el tipo de procesos declarativos provistos. (En la actualidad esta sección es muy poco usada dada las posibilidades de testeos de condiciones de excepción que tienen las sentencias actuales).

viernes, 19 de junio de 2015

DEFINICION DE BUSINESS INTELLIGENCE

“Business Intelligence (BI) es un término cierto que abarca los procesos, las herramientas, y las tecnologías para convertir datos en información, información en conocimiento y planes para conducir de forma eficaz las actividades de los negocios. BI abarca las tecnologías de datawarehousing los procesos en el ‘back end’, consultas, informes, análisis y las herramientas para mostrar información (estas son las herramientas de BI) y los procesos en el ‘front end’

Exploremos algunos ejemplos concretos de cómo el Business Intelligence nos puede generar beneficios:

• Beneficios tangibles, generación de ingresos:

• Mejorar la adquisición de clientes y su conversión mediante el uso de la segmentación.
• Reducir la tasa de abandono de clientes, incrementar su fidelidad, teniendo en cuenta cuál es su valor.
• Incrementar los ingresos por crecimiento de las ventas.
• Aumentar los resultados, consiguiendo que nuestros clientes actuales compren más productos o servicios.
• Evitar las pérdidas producidas por las ventas de nuestros competidores.
• Aumentar la rentabilidad por el acceso a información detallada de productos, clientes, etc.
• Conocer mejor cuáles son las características demográficas de nuestra zona de influencia.
• Hacer crecer la participación de mercado.
• Reducir el tiempo de lanzamiento de nuevos productos o servicios.
• Mejorar aquellas actividades relacionadas con la captura de datos.
• Analizar la cesta de la compra y la afinidad de venta entre los productos Facilitar la adopción de los cambios en la estrategia.
• Proveer el autoservicio de información a trabajadores, colaboradores, clientes y proveedores.
• Medir la efectividad de las campañas rápidamente y ser capaces de hacer los ajustes durante el ciclo de vida de las mismas.
• Optimizar las acciones de marketing.
• Identificar clientes rentables en segmentos no rentables.
• Analizar a la competencia cuando establecemos precios.
• Crear nuevas oportunidades.

• Beneficios tangibles, reducción de costes:

• Negociar mejores precios con los proveedores, identificar a los proveedores más importantes, gestionar descuentos por cantidades de compra; permitir el análisis del cumplimiento de los proveedores y asignar las compras de acuerdo con ello; medir el nivel de calidad, servicio y precio.
• Reducir o reasignar el personal necesario para llevar a cabo los procesos.
• Incrementar la productividad con información más inmediata y mejor.
• Aumentar el control de costes.
• Disminuir los gastos.
• Eliminar ineficiencias y reducir los costes operativos al generar “una sola versión de la verdad”.
• Descender pérdidas detectando fraude.
• Reducir los créditos incobrables.
• Bajar las reclamaciones (por ejemplo en el sector seguros).
• Eliminarlas sobreproducciones de productos.
• Proveer inventarios “just-in-time”; gestionar los inventarios de productos acabados; mejorar la gestión de materias primas y productos acabados; reducir los costes de mantenimiento del stock.
• Acortar los tiempos de respuesta a las peticiones de informes.
• Analizar los problemas, reparaciones y defectos y proveer la información para hacer un seguimiento y corregir los problemas recurrentes.
• Reducir el tiempo para recoger la información para cumplir con las normativas legales.
• Evaluar el rendimiento de los activos y generar las alertas cuando el mantenimiento preventivo se debe llevar a cabo.
• Proveer el suministro dentro del plazo.
• Hacer un seguimiento de los problemas de los productos desde el inicio de su vida hasta el fin.
• Retirar los viejos equipos para disminuirlos costes de actividad.
• Reducir las devoluciones de productos.
• Analizar la productividad de los empleados.
• Dar soporte a las reclamaciones de facturación.
• Abaratar los costes de las acciones de marketing.
• Hacer un mejor seguimiento de las acciones delictivas.
• Saber qué comisiones se deben pagar.
• Hacer decrecer las pérdidas de créditos, analizando la utilización de los clientes, asignando un análisis de riesgo.

• Beneficios intangibles:

• Optimizar la atención a los clientes.
• Aumentar la satisfacción de los clientes.
• Mejorar el acceso a los datos a través de consultas, análisis informes.
• Información más actualizada.
• Dotar a la información de mayor precisión.
• Conseguir ventajas competitivas.
• Controlar mejor de la información.
• Ahorrar costes.
• Menor dependencia de los sistemas desarrollados.
• Mayor integración de la información.

• Beneficios estratégicos:

• Mayor habilidad para analizar estrategias de precios.
• Y para identificar y nutrir a aquellos clientes con mayor potencial.
• Mejorar la toma de decisiones, realizándola de forma más rápida, informada y basada en hechos.
• Mayor visibilidad de la gestión.
• Dar soporte a las estrategias.
• Aumentar el valor de mercado.

Harold Caicedo

miércoles, 8 de octubre de 2014

Abstract Factory (Fabrica Abstracta) Patron de diseño


Crea una instancia de varias familias de clases

Definición


Proporcionar una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.


Frecuencia de uso:
High


























UML class diagram


Los participantes


Las clases y los objetos que participan en este modelo son:

  • AbstractFactory (ContinentFactory) 
  1. declara una interfaz para las operaciones que crean productos abstractos 
  • ConcreteFactory (AfricaFactory, AmericaFactory) 
  1. implementa las operaciones para crear objetos de productos concretos 
  • AbstractProduct (Herbivore, Carnivore) 
  1. declara una interfaz para un tipo del objeto Product
  • Product (Wildebeest, Lion, Bison, Wolf) 
  1. define un objeto de producto que se crea por la correspondiente fábrica de hormigón 
  2. implementa la interfaz AbstractProduct 
  • Client (AnimalWorld) 
  1. utiliza interfaces declaradas por las clases AbstractFactory y AbstractProduct 
Código estructural en C # 

Este código estructural demuestra el patrón Abstract Factory crear jerarquías paralelas de los objetos. Creación de objetos ha sido abstraído y no hay necesidad de nombres de clase no modificables en el código de cliente.

  1. using System;

  2. namespace Abstract.Structural
  3. {
  4.   /// <summary>
  5.   /// MainApp startup class for Structural
  6.   /// Abstract Factory Design Pattern.
  7.   /// </summary>
  8.   class MainApp
  9.   {
  10.     /// <summary>
  11.     /// Entry point into console application.
  12.     /// </summary>
  13.     public static void Main()
  14.     {
  15.       // Abstract factory #1
  16.       AbstractFactory factory1 = new ConcreteFactory1();
  17.       Client client1 = new Client(factory1);
  18.       client1.Run();

  19.       // Abstract factory #2
  20.       AbstractFactory factory2 = new ConcreteFactory2();
  21.       Client client2 = new Client(factory2);
  22.       client2.Run();

  23.       // Wait for user input
  24.       Console.ReadKey();
  25.     }
  26.   }

  27.   /// <summary>
  28.   /// The 'AbstractFactory' abstract class
  29.   /// </summary>
  30.   abstract class AbstractFactory
  31.   {
  32.     public abstract AbstractProductA CreateProductA();
  33.     public abstract AbstractProductB CreateProductB();
  34.   }


  35.   /// <summary>
  36.   /// The 'ConcreteFactory1' class
  37.   /// </summary>
  38.   class ConcreteFactory1 : AbstractFactory
  39.   {
  40.     public override AbstractProductA CreateProductA()
  41.     {
  42.       return new ProductA1();
  43.     }
  44.     public override AbstractProductB CreateProductB()
  45.     {
  46.       return new ProductB1();
  47.     }
  48.   }

  49.   /// <summary>
  50.   /// The 'ConcreteFactory2' class
  51.   /// </summary>
  52.   class ConcreteFactory2 : AbstractFactory
  53.   {
  54.     public override AbstractProductA CreateProductA()
  55.     {
  56.       return new ProductA2();
  57.     }
  58.     public override AbstractProductB CreateProductB()
  59.     {
  60.       return new ProductB2();
  61.     }
  62.   }

  63.   /// <summary>
  64.   /// The 'AbstractProductA' abstract class
  65.   /// </summary>
  66.   abstract class AbstractProductA
  67.   {
  68.   }

  69.   /// <summary>
  70.   /// The 'AbstractProductB' abstract class
  71.   /// </summary>
  72.   abstract class AbstractProductB
  73.   {
  74.     public abstract void Interact(AbstractProductA a);
  75.   }


  76.   /// <summary>
  77.   /// The 'ProductA1' class
  78.   /// </summary>
  79.   class ProductA1 : AbstractProductA
  80.   {
  81.   }

  82.   /// <summary>
  83.   /// The 'ProductB1' class
  84.   /// </summary>
  85.   class ProductB1 : AbstractProductB
  86.   {
  87.     public override void Interact(AbstractProductA a)
  88.     {
  89.       Console.WriteLine(this.GetType().Name +
  90.         " interacts with " + a.GetType().Name);
  91.     }
  92.   }

  93.   /// <summary>
  94.   /// The 'ProductA2' class
  95.   /// </summary>
  96.   class ProductA2 : AbstractProductA
  97.   {
  98.   }

  99.   /// <summary>
  100.   /// The 'ProductB2' class
  101.   /// </summary>
  102.   class ProductB2 : AbstractProductB
  103.   {
  104.     public override void Interact(AbstractProductA a)
  105.     {
  106.       Console.WriteLine(this.GetType().Name +
  107.         " interacts with " + a.GetType().Name);
  108.     }
  109.   }

  110.   /// <summary>
  111.   /// The 'Client' class. Interaction environment for the products.
  112.   /// </summary>
  113.   class Client
  114.   {
  115.     private AbstractProductA _abstractProductA;
  116.     private AbstractProductB _abstractProductB;

  117.     // Constructor
  118.     public Client(AbstractFactory factory)
  119.     {
  120.       _abstractProductB = factory.CreateProductB();
  121.       _abstractProductA = factory.CreateProductA();
  122.     }

  123.     public void Run()
  124.     {
  125.       _abstractProductB.Interact(_abstractProductA);
  126.     }
  127.   }
  128. }
Resultado
ProductB1 interacts with ProductA1
ProductB2 interacts with ProductA2

Código del mundo real en C #

Este código del mundo real demuestra la creación de diferentes animales para un juego de ordenador utilizando diferentes fábricas. Aunque los animales creados por las fábricas son de continente diferentes, las interacciones entre los animales siguen siendo los mismos.

  1. using System;

  2. namespace Abstract.RealWorld
  3. {
  4.   /// <summary>
  5.   /// MainApp startup class for Real-World
  6.   /// Abstract Factory Design Pattern.
  7.   /// </summary>
  8.   class MainApp
  9.   {
  10.     /// <summary>
  11.     /// Entry point into console application.
  12.     /// </summary>
  13.     public static void Main()
  14.     {
  15.       // Create and run the African animal world
  16.       ContinentFactory africa = new AfricaFactory();
  17.       AnimalWorld world = new AnimalWorld(africa);
  18.       world.RunFoodChain();

  19.       // Create and run the American animal world
  20.       ContinentFactory america = new AmericaFactory();
  21.       world = new AnimalWorld(america);
  22.       world.RunFoodChain();
  23.       // Wait for user input
  24.       Console.ReadKey();
  25.     }
  26.   }

  27.   /// <summary>
  28.   /// The 'AbstractFactory' abstract class
  29.   /// </summary>
  30.   abstract class ContinentFactory
  31.   {
  32.     public abstract Herbivore CreateHerbivore();
  33.     public abstract Carnivore CreateCarnivore();
  34.   }

  35.   /// <summary>
  36.   /// The 'ConcreteFactory1' class
  37.   /// </summary>
  38.   class AfricaFactory : ContinentFactory
  39.   {
  40.     public override Herbivore CreateHerbivore()
  41.     {
  42.      return new Wildebeest();
  43.     }
  44.     public override Carnivore CreateCarnivore()
  45.     {
  46.       return new Lion();
  47.     }
  48.   }

  49.   /// <summary>
  50.   /// The 'ConcreteFactory2' class
  51.   /// </summary>
  52.   class AmericaFactory : ContinentFactory
  53.   {
  54.     public override Herbivore CreateHerbivore()
  55.     {
  56.       return new Bison();
  57.     }
  58.     public override Carnivore CreateCarnivore()
  59.     {
  60.       return new Wolf();
  61.     }
  62.   }

  63.   /// <summary>
  64.   /// The 'AbstractProductA' abstract class
  65.   /// </summary>
  66.   abstract class Herbivore
  67.   {
  68.   }
  69.   /// <summary>
  70.   /// The 'AbstractProductB' abstract class
  71.   /// </summary>
  72.   abstract class Carnivore
  73.   {
  74.     public abstract void Eat(Herbivore h);
  75.   }
  76.   /// <summary>
  77.   /// The 'ProductA1' class
  78.   /// </summary>
  79.   class Wildebeest : Herbivore
  80.   {
  81.   }

  82.   /// <summary>
  83.   /// The 'ProductB1' class
  84.   /// </summary>
  85.   class Lion : Carnivore
  86.   {
  87.     public override void Eat(Herbivore h)
  88.     {
  89.       // Eat Wildebeest
  90.      Console.WriteLine(this.GetType().Name +
  91.         " eats " + h.GetType().Name);
  92.     }
  93.   }

  94.   /// <summary>
  95.   /// The 'ProductA2' class
  96.   /// </summary>
  97.   class Bison : Herbivore
  98.   {
  99.   }

  100.   /// <summary>
  101.   /// The 'ProductB2' class
  102.   /// </summary>
  103.   class Wolf : Carnivore
  104.   {
  105.     public override void Eat(Herbivore h)
  106.     {
  107.       // Eat Bison
  108.       Console.WriteLine(this.GetType().Name +
  109.         " eats " + h.GetType().Name);
  110.     }
  111.   }
  112.   /// <summary>
  113.   /// The 'Client' class
  114.   /// </summary>
  115.   class AnimalWorld
  116.   {
  117.     private Herbivore _herbivore;
  118.     private Carnivore _carnivore;

  119.     // Constructor
  120.     public AnimalWorld(ContinentFactory factory)
  121.     {
  122.       _carnivore = factory.CreateCarnivore();
  123.       _herbivore = factory.CreateHerbivore();
  124.     }
  125.     public void RunFoodChain()
  126.     {
  127.       _carnivore.Eat(_herbivore);
  128.     }
  129.   }
  130. }

Resultado
Lion eats Wildebeest
Wolf eats Bison