SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
http://www.dipneo.com.ar 2010


Patrones de diseño de software (software design patterns)
Escrito por: Horacio Aldo Tore

¿Qué es un patrón de diseño de software?
Los patrones de diseño de software nacen de sus homólogos patrones en la ingeniería civil o arquitectura de
edificaciones, por este motivo quiero dar un ejemplo en este ámbito del cual se desprenderá luego con facilidad
el concepto que representa un patrón, entonces veamos dicho ejemplo:


                   Si tenemos que construir una casa en un lugar en el cual nieva durante todo el año, una
                   construcción tradicional tendría el problema de que el peso de la nieve acumulada en el
                   techo horizontal y paralelo al piso, sería tan grande que la derrumbaría.
                   Existen varias soluciones al problema pero la más optima y en la que seguramente estarán
                   pensando en este momento es construir el techo de la casa con una gran pendiente para que
                   la nieve caída se deslice por la misma y termine en el piso de forma que nunca se acumule
                   sobre nuestro techo.


Bueno esa solución en la que ustedes pensaron casi en forma automática es un patrón.

Observemos además que la solución o patrón se repite infinidad de beses si observamos un pueblo donde nieva,
lo que nos dice que la solución es reusable y comprobada.

Ahora si, estamos en condiciones de definir formalmente un patrón de diseño de software diciendo que:
Es una solución reusable y comprobada a un problema común en el desarrollo de software.

Dada esta pequeña introducción veamos un ejemplo real en el ámbito del diseño de software el patrón
constructor o builder pattern.

Builder pattern
Problema que resuelve: Como hacer para que un único proceso de construcción sea capas de crear
diferentes productos para que dicho proceso nos abstraiga o oculte los detalles constructivos particulares de
cada producto.

Dado que las definiciones abstractas son más difíciles de comprender, llevaremos la definición anterior a un
ejemplo concreto del mundo real para lograr una mayor claridad.

Como hacer para que un único proceso de construcción, la secuencia de instrucciones (BuildTope();
BuildMedio(); BuildBase();), sea capas de crear diferentes productos como ser un cuadrado, un triangulo o un
rectángulo, para que dicho proceso nos abstraiga o oculte los detalles constructivos particulares de cada figura
geométrica (producto).

Solución: La solución la ofrece el patrón constructor o en ingles (builder pattern), el mismo esta conformado
por una clase directora (DibujanteDirector) que es la responsable del proceso de construcción, es en ella donde
se encuentra la secuencia de comandos BuildTope(); BuildMedio(); BuildBase(); esta clase opera utilizando
una clase abstracta (GraphicBuilder), en la cual se encuentran definidos los prototipos o firmas de los métodos
BuildTope(); BuildMedio(); BuildBase(); pero no su implementación, dicha implementación es responsabilidad


                                                                                                      Page 1 of 4
http://www.dipneo.com.ar 2010

de cada constructor o builder concreto, en nuestro ejemplo son las clases CuadradoBuilder, TrianguloBuilder y
RectanguloBuilder, estas clases encapsulan los detalles de implementación particulares de cada producto.
El producto que queda construido después de la ejecución del único proceso de construcción es un objeto de la
clase Grafico, podemos observar una relación de agregación que une las clases GraphicBuilder y la clase
Grafico, esto se debe a que la clase GraphicBuilder esta compuesta por un objeto del tipo Grafico pero como la
destrucción del objeto del tipo GraphicBuilder no implica destrucción del objeto Grafico se trata de una
relación de agregación y no de composición, esto se simboliza con un diamante blanco del lado de la clase
agregada.

Diagrama de clases UML




Código fuente C#
using System;
using System.Collections.Generic;
using System.Text;

namespace Builder
{
  class Cliente
  {
    static void Main(string[] args)
    {
      CuadradoBuilder cuadradoBuilder = new CuadradoBuilder();
      TrianguloBuilder trianguloBuilder = new TrianguloBuilder();
      RectanguloBuilder rectanguloBuilder = new RectanguloBuilder();

      DibujanteDirector dibujante = new DibujanteDirector();
      dibujante.Dibujar(cuadradoBuilder);
      dibujante.Dibujar(trianguloBuilder);
      dibujante.Dibujar(rectanguloBuilder);

      cuadradoBuilder.GetGrafico().Show();
      trianguloBuilder.GetGrafico().Show();
      rectanguloBuilder.GetGrafico().Show();

      Console.ReadKey();
                                                                                                   Page 2 of 4
http://www.dipneo.com.ar 2010

    }
}

public class DibujanteDirector
{
  public void Dibujar(GraphicBuilder graphicBuilder)
  {
    graphicBuilder.BuildTope();
    graphicBuilder.BuildMedio();
    graphicBuilder.BuildBase();
  }
}

public abstract class GraphicBuilder
{
  public abstract void BuildTope();
  public abstract void BuildMedio();
  public abstract void BuildBase();

    public Grafico GetGrafico() { return _grafico; }

    protected Grafico _grafico = new Grafico();
}

public class CuadradoBuilder : GraphicBuilder
{
  public override void BuildTope() { _grafico.Add("***"); }
  public override void BuildMedio() { _grafico.Add("* *"); }
  public override void BuildBase() { _grafico.Add("***"); }
}

public class TrianguloBuilder : GraphicBuilder
{
  public override void BuildTope() { _grafico.Add(" * "); }
  public override void BuildMedio() { _grafico.Add(" *** "); }
  public override void BuildBase() { _grafico.Add("*****"); }
}

public class RectanguloBuilder : GraphicBuilder
{
  public override void BuildTope() { _grafico.Add("*********"); }
  public override void BuildMedio() { _grafico.Add("*    *"); }
  public override void BuildBase() { _grafico.Add("*********"); }
}

public class Grafico
{
  public void Add(string dato)
  {
    _lineas.Add(dato);
  }

    public void Show()
    {
      foreach(string linea in _lineas)
      {
        Console.WriteLine(linea);
      }
    }

                                                                                            Page 3 of 4
http://www.dipneo.com.ar 2010

        private List<string> _lineas = new List<string>();
    }
}

Resultado de la ejecución:




                                                                                     Page 4 of 4

Más contenido relacionado

La actualidad más candente

Buider Patron de Diseño
Buider Patron de DiseñoBuider Patron de Diseño
Buider Patron de DiseñoMario Cabrera
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoKelly Cuervo
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo2008PA2Info3
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructuralesAutentia
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creaciónAutentia
 
Sesion 15 patrones de diseño
Sesion 15 patrones de diseñoSesion 15 patrones de diseño
Sesion 15 patrones de diseñoJulio Pari
 
Patrones de diseño y frameworks
Patrones de diseño y frameworksPatrones de diseño y frameworks
Patrones de diseño y frameworksDaniel Cam Urquizo
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoaleja0940
 
Implementación y adaptación de patrones de diseño
Implementación y adaptación de patrones de diseñoImplementación y adaptación de patrones de diseño
Implementación y adaptación de patrones de diseñoJu Pe
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareEsteban Espinel
 

La actualidad más candente (20)

Buider Patron de Diseño
Buider Patron de DiseñoBuider Patron de Diseño
Buider Patron de Diseño
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
06 patrones
06 patrones06 patrones
06 patrones
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructurales
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creación
 
Sesion 15 patrones de diseño
Sesion 15 patrones de diseñoSesion 15 patrones de diseño
Sesion 15 patrones de diseño
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 
Patrones de diseño y frameworks
Patrones de diseño y frameworksPatrones de diseño y frameworks
Patrones de diseño y frameworks
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Implementación y adaptación de patrones de diseño
Implementación y adaptación de patrones de diseñoImplementación y adaptación de patrones de diseño
Implementación y adaptación de patrones de diseño
 
Patrones Creacionales
Patrones CreacionalesPatrones Creacionales
Patrones Creacionales
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Patrones GOF
Patrones GOFPatrones GOF
Patrones GOF
 
Patrones de Diseño: Prototype
Patrones de Diseño: PrototypePatrones de Diseño: Prototype
Patrones de Diseño: Prototype
 
Abstract factory
Abstract factoryAbstract factory
Abstract factory
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
patron composite
patron compositepatron composite
patron composite
 

Similar a Patrones diseno software

Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptxgigoallspam1
 
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES .pptx
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES  .pptxPATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES  .pptx
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES .pptxjguerraf0805910805
 
Programacion VBA para AutoCad 2007 ejemplos
Programacion VBA para AutoCad 2007 ejemplosProgramacion VBA para AutoCad 2007 ejemplos
Programacion VBA para AutoCad 2007 ejemplosjjcontras
 
Revit architecture zaragoza mayo 2014
Revit architecture zaragoza mayo 2014Revit architecture zaragoza mayo 2014
Revit architecture zaragoza mayo 2014Yolanda López
 
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...WilsonTorres88
 
Ponencia conic 2009_darc
Ponencia conic 2009_darcPonencia conic 2009_darc
Ponencia conic 2009_darcJorge Rodriguez
 
Cesnavarra 2008-boletín 2
Cesnavarra 2008-boletín 2Cesnavarra 2008-boletín 2
Cesnavarra 2008-boletín 2Cein
 
Guia revit structure
Guia revit structureGuia revit structure
Guia revit structureJorge Ccosco
 
Revit mep-aplicado-a-plantas-industriales
Revit mep-aplicado-a-plantas-industrialesRevit mep-aplicado-a-plantas-industriales
Revit mep-aplicado-a-plantas-industrialesElviraTerrazas1
 
Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cein
 

Similar a Patrones diseno software (20)

Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptx
 
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES .pptx
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES  .pptxPATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES  .pptx
PATRONES DE DISEÑO MODELOS IMPLEMENTADOS EN CLASES .pptx
 
archicad
archicadarchicad
archicad
 
Archi cad 8 tutorial paso a paso
Archi cad 8   tutorial paso a pasoArchi cad 8   tutorial paso a paso
Archi cad 8 tutorial paso a paso
 
Autodesk revit structure 2009
Autodesk revit structure 2009Autodesk revit structure 2009
Autodesk revit structure 2009
 
Programacion VBA para AutoCad 2007 ejemplos
Programacion VBA para AutoCad 2007 ejemplosProgramacion VBA para AutoCad 2007 ejemplos
Programacion VBA para AutoCad 2007 ejemplos
 
Revit architecture zaragoza mayo 2014
Revit architecture zaragoza mayo 2014Revit architecture zaragoza mayo 2014
Revit architecture zaragoza mayo 2014
 
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...
AutoCAD-3D-Modelado-Fundamentos-comandos-ejercicios-y-tips-Spanish-Edition-pd...
 
Ponencia conic 2009_darc
Ponencia conic 2009_darcPonencia conic 2009_darc
Ponencia conic 2009_darc
 
Cesnavarra 2008-boletín 2
Cesnavarra 2008-boletín 2Cesnavarra 2008-boletín 2
Cesnavarra 2008-boletín 2
 
Guia revit structure
Guia revit structureGuia revit structure
Guia revit structure
 
Examen de civil 3 d
Examen de civil 3 dExamen de civil 3 d
Examen de civil 3 d
 
Hola mundoconc sharp
Hola mundoconc sharpHola mundoconc sharp
Hola mundoconc sharp
 
primer codigo con C sharp
primer codigo con C sharpprimer codigo con C sharp
primer codigo con C sharp
 
Revit mep-aplicado-a-plantas-industriales
Revit mep-aplicado-a-plantas-industrialesRevit mep-aplicado-a-plantas-industriales
Revit mep-aplicado-a-plantas-industriales
 
WXWIDGET.PDF
WXWIDGET.PDFWXWIDGET.PDF
WXWIDGET.PDF
 
Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11Cesnavarra 2009-boletín 11
Cesnavarra 2009-boletín 11
 
GUÍA DE ESTUDIO 1a - Conociendo AutoCAD
GUÍA DE ESTUDIO 1a - Conociendo AutoCADGUÍA DE ESTUDIO 1a - Conociendo AutoCAD
GUÍA DE ESTUDIO 1a - Conociendo AutoCAD
 
Manual practico civil 3d 2014
Manual practico civil 3d 2014Manual practico civil 3d 2014
Manual practico civil 3d 2014
 
Patron de diseño builder
Patron de diseño builderPatron de diseño builder
Patron de diseño builder
 

Último

RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwealekzHuri
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Baker Publishing Company
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 

Último (20)

Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 

Patrones diseno software

  • 1. http://www.dipneo.com.ar 2010 Patrones de diseño de software (software design patterns) Escrito por: Horacio Aldo Tore ¿Qué es un patrón de diseño de software? Los patrones de diseño de software nacen de sus homólogos patrones en la ingeniería civil o arquitectura de edificaciones, por este motivo quiero dar un ejemplo en este ámbito del cual se desprenderá luego con facilidad el concepto que representa un patrón, entonces veamos dicho ejemplo: Si tenemos que construir una casa en un lugar en el cual nieva durante todo el año, una construcción tradicional tendría el problema de que el peso de la nieve acumulada en el techo horizontal y paralelo al piso, sería tan grande que la derrumbaría. Existen varias soluciones al problema pero la más optima y en la que seguramente estarán pensando en este momento es construir el techo de la casa con una gran pendiente para que la nieve caída se deslice por la misma y termine en el piso de forma que nunca se acumule sobre nuestro techo. Bueno esa solución en la que ustedes pensaron casi en forma automática es un patrón. Observemos además que la solución o patrón se repite infinidad de beses si observamos un pueblo donde nieva, lo que nos dice que la solución es reusable y comprobada. Ahora si, estamos en condiciones de definir formalmente un patrón de diseño de software diciendo que: Es una solución reusable y comprobada a un problema común en el desarrollo de software. Dada esta pequeña introducción veamos un ejemplo real en el ámbito del diseño de software el patrón constructor o builder pattern. Builder pattern Problema que resuelve: Como hacer para que un único proceso de construcción sea capas de crear diferentes productos para que dicho proceso nos abstraiga o oculte los detalles constructivos particulares de cada producto. Dado que las definiciones abstractas son más difíciles de comprender, llevaremos la definición anterior a un ejemplo concreto del mundo real para lograr una mayor claridad. Como hacer para que un único proceso de construcción, la secuencia de instrucciones (BuildTope(); BuildMedio(); BuildBase();), sea capas de crear diferentes productos como ser un cuadrado, un triangulo o un rectángulo, para que dicho proceso nos abstraiga o oculte los detalles constructivos particulares de cada figura geométrica (producto). Solución: La solución la ofrece el patrón constructor o en ingles (builder pattern), el mismo esta conformado por una clase directora (DibujanteDirector) que es la responsable del proceso de construcción, es en ella donde se encuentra la secuencia de comandos BuildTope(); BuildMedio(); BuildBase(); esta clase opera utilizando una clase abstracta (GraphicBuilder), en la cual se encuentran definidos los prototipos o firmas de los métodos BuildTope(); BuildMedio(); BuildBase(); pero no su implementación, dicha implementación es responsabilidad Page 1 of 4
  • 2. http://www.dipneo.com.ar 2010 de cada constructor o builder concreto, en nuestro ejemplo son las clases CuadradoBuilder, TrianguloBuilder y RectanguloBuilder, estas clases encapsulan los detalles de implementación particulares de cada producto. El producto que queda construido después de la ejecución del único proceso de construcción es un objeto de la clase Grafico, podemos observar una relación de agregación que une las clases GraphicBuilder y la clase Grafico, esto se debe a que la clase GraphicBuilder esta compuesta por un objeto del tipo Grafico pero como la destrucción del objeto del tipo GraphicBuilder no implica destrucción del objeto Grafico se trata de una relación de agregación y no de composición, esto se simboliza con un diamante blanco del lado de la clase agregada. Diagrama de clases UML Código fuente C# using System; using System.Collections.Generic; using System.Text; namespace Builder { class Cliente { static void Main(string[] args) { CuadradoBuilder cuadradoBuilder = new CuadradoBuilder(); TrianguloBuilder trianguloBuilder = new TrianguloBuilder(); RectanguloBuilder rectanguloBuilder = new RectanguloBuilder(); DibujanteDirector dibujante = new DibujanteDirector(); dibujante.Dibujar(cuadradoBuilder); dibujante.Dibujar(trianguloBuilder); dibujante.Dibujar(rectanguloBuilder); cuadradoBuilder.GetGrafico().Show(); trianguloBuilder.GetGrafico().Show(); rectanguloBuilder.GetGrafico().Show(); Console.ReadKey(); Page 2 of 4
  • 3. http://www.dipneo.com.ar 2010 } } public class DibujanteDirector { public void Dibujar(GraphicBuilder graphicBuilder) { graphicBuilder.BuildTope(); graphicBuilder.BuildMedio(); graphicBuilder.BuildBase(); } } public abstract class GraphicBuilder { public abstract void BuildTope(); public abstract void BuildMedio(); public abstract void BuildBase(); public Grafico GetGrafico() { return _grafico; } protected Grafico _grafico = new Grafico(); } public class CuadradoBuilder : GraphicBuilder { public override void BuildTope() { _grafico.Add("***"); } public override void BuildMedio() { _grafico.Add("* *"); } public override void BuildBase() { _grafico.Add("***"); } } public class TrianguloBuilder : GraphicBuilder { public override void BuildTope() { _grafico.Add(" * "); } public override void BuildMedio() { _grafico.Add(" *** "); } public override void BuildBase() { _grafico.Add("*****"); } } public class RectanguloBuilder : GraphicBuilder { public override void BuildTope() { _grafico.Add("*********"); } public override void BuildMedio() { _grafico.Add("* *"); } public override void BuildBase() { _grafico.Add("*********"); } } public class Grafico { public void Add(string dato) { _lineas.Add(dato); } public void Show() { foreach(string linea in _lineas) { Console.WriteLine(linea); } } Page 3 of 4
  • 4. http://www.dipneo.com.ar 2010 private List<string> _lineas = new List<string>(); } } Resultado de la ejecución: Page 4 of 4