SlideShare una empresa de Scribd logo
1 de 16
Maestria en Sistemas Computacionales
Diseño Orientado a Objetos
Patron Semifallo oPatron Semifallo o
de Instancia Unicade Instancia Unica
(Pattern Singleton)(Pattern Singleton)
Expone:
Ing. Fernando Alfonso Casas De la Torre
Catedratico:
Dr. Diego Uribe Agundis
Patron SingletonPatron Singleton
DEFINICION:
En Ingeniería De Software, Singleton o Instancia Única es un 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 sólo 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 sólo 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).
DEFINICION:
La idea del Patrón Singleton es proveer un mecanismo para limitar el número
de instancias de una clase.
Por lo tanto el mismo objeto es siempre compartido por distintas partes del
código. Puede ser visto como una solución más elegante para una variable
global porque los datos son abstraídos por detrás de la interfaz que publica la
Clase Singleton.
Dicho de otra manera, esta patrón busca garantizar que una clase sólo tenga
una instancia y proporcionar un punto de acceso global a ella.
Patron SingletonPatron Singleton
USOS:
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, sólo 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.
Patron SingletonPatron Singleton
Las situaciones más habituales de aplicación de este
patrón son aquellas en las que dicha clase controla el
acceso a un recurso físico único (como puede ser el
ratón o un archivo abierto en modo exclusivo) o cuando
cierto tipo de datos debe estar disponible para todos
los demás objetos de la aplicación.
USOS:
Este tipo de patron es identificable y aplicable cuando:
♦ Deba haber exactamente una instancia de una clase y deba ser accesible a
los clientes desde un punto de acceso conocido.
♦ Se requiera de un acceso estandarizado y conocido públicamente.
Sus usos más comunes son clases que representan objetos unívocos. Por
ejemplo, si hay un servidor que necesita ser representado mediante un objeto,
este debería ser único, es decir, debería existir una sola instancia y el resto de
las clases deberían de comunicarse con el mismo servidor. Un Calendario, por
ejemplo, también es único para todos.
Patron SingletonPatron Singleton
No debe utilizarse cuando una clase esta
representando a un objeto que no es único, por
ejemplo, la clase Persona no debería ser Singleton,
ya que representa a una persona real y cada persona
tiene su propio nombre, edad, domicilio, DNI, etc.
EJEMPLO
A continuacion se presenta una analogia del mundo real de como seria un
Patron Singleton utilizando el cargo de Presidente de los EU que se podria
identificar como un Singleton.
La Constitucion de EU especifica los
metodos por los cuales se elije un
presidente: limita los poderes que
tiene, la duracion de su mandato y
define el modo de la sucesion. Como
resultado solo se tiene un presidente
a un tiempo y el que ocupa el cargo
es llamado Presidente de los EU.
Patron SingletonPatron Singleton
Diagrama UML
Para garantizar que habra al menos una instancia de una clase podemos
aplicar el patron Singleton y como se muestra mediante el diagrama UML en el
que se aprecia que…
• UniqueInstance es una clase variable que
mantiene a una misma y unica instancia.
• getInstance() es un metodo de una clase que
puede autoreferenciarse.
• El constructor es privado.
Patron SingletonPatron Singleton
Diagrama UML
En el diagrama UML, la clase que es Singleton define una instancia para que
los clientes puedan accederla. Esta instancia es accedida mediante un método
de clase.
Los clientes (quienes quieren acceder a la
clase Singleton) acceden a la única instancia
mediante un método llamado getInstance().
Por lo tanto este patron es muy util para
clases que representan objetos unicos.
Patron SingletonPatron Singleton
Una implementación correcta en el lenguaje de programación Java es la
siguiente:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// El constructor privado no permite que se genere un constructor por defecto.
// (con mismo modificador de acceso que la definición de la clase)
private Singleton()
{} public static Singleton getInstance() {
return INSTANCE;
}
}
Patron SingletonPatron Singleton
Se coloca una variable al mismo tiempo que la clase
llamada por convencion «INSTANCE» y aquí reside el
secreto del patron ya que dicha variable es la que
instancia por unica vez y la devuelve al cliente.
El ejemplo de libro «Head Fhrist» dedicado a patrones muestra una clase
llamada ChocolateBoiler (*) que ejemplifica el control de un horno de chocolate
que muestra que puede tener al menos una instancia
(*) tomado del libro del curso “Head First Design Patterns de Eric Freeman
Patron SingletonPatron Singleton
En el ejemplo del ChocolateBoiler al hacer referencia al objeto tipo Singleton, el
cliente-objeto puede crear al instancia al invocar la clase.
Patron SingletonPatron Singleton
Si no existe la crea y si existe la usa, pero esto puede
dar problemas en un ambiente multitareas o multihilos.
Otro posible escenario para ChocolateBoiler en el que ahora no se crea la
instancia sino que se solicita informar su condicion …
Patron SingletonPatron Singleton
Problemas en ambientes multihilo
Si estamos en un ambiente de un solo hilo (single-thread) esta implementación es
suficiente. En contrapartida, tiene serios problemas en entornos multihilo (multi-thread)
dado que, debido a cuestiones de sincronización y concurrencia, puede crearse más de
una instancia del miembro instance.
Patron SingletonPatron Singleton
¿Cómo puede ser esto posible?
Imaginemos que dos hilos evalúan la condición
instance == null y en ambos casos es
verdadera.
En este caso, ambos hilos crearán la instancia,
violando el propósito del patrón Singleton.
Los problemas que se producen a raíz de esto pueden ser muy
difíciles de detectar. La creación dual suele producirse en forma
intermitente e incluso puede no suceder (no es determinista).
Problemas en ambientes multihilo
Si el Singleton es absolutamente stateless (es decir, no mantiene ningún tipo de estado)
puede no ser un problema.
Si estamos en C++ o algun lenguaje, se puede producir un memory leak, dado que sólo
se va a eliminar uno de los objetos aunque hayamos creado dos.
Si el Singleton es statefull (mantiene estado) se pueden producir errores sutiles. Por
ejemplo, si se modifica el estado del objeto en el constructor, pueden producirse
inconsistencias, dado ese código de inicialización se ejecuta mas de una vez.
Patron SingletonPatron Singleton
Tomemos como ejemplo de esto último un Singleton que
implementa un contador. Imaginemos que el constructor
inicializa el contador a 0. Si se producen dos creaciones, se
inicializará dos veces el contador. Quizás en la segunda
inicialización, una instancia ya había incrementado su
contador, pero debido a la ejecución de ese código de
inicialización, ese incremento se perderá.
El problema con el patron es que en caso de procesamiento multihilos se
pueden crear multiples instancias en cada uno de los hilos y estas pueden
generar descontrol en el sistema. En este caso, dos hilos solicitan la instancia
a través de la función GetInstance, pero ésta todavía no ha sido creada. Por lo
tanto, en los dos casos se procede a la creación de la única instancia.
Patron SingletonPatron Singleton
Las dos columnas a la izquierda
(Thread 1 y Thread 2) representan los
hilos de ejecución y muestran el código
que se ejecuta. La columna de la
derecha (Valor Instance) muestra el
valor de instance luego de que se
ejecuta cada línea de código.
¡Gracias por su atencion!
Expuso:
Ing. Fernando Alfonso Casas De la Torre
Catedratico:
Dr. Diego Uribe Agundis
REFERENCIAS:
BLOG: Mi granito de JAVA
http://migranitodejava.blogspot.mx/2011/05/singleton.html
BLOG: CODEJAVU
http://codejavu.blogspot.mx/2013/07/ejemplo-patron-singleton.html
Sitio WIKIPEDIA
https://es.wikipedia.org/wiki/Singleton
Sitio MICROSOFT
https://msdn.microsoft.com/es-es/library/bb972272.aspx#EDAA

Más contenido relacionado

La actualidad más candente

encapsulamiento
encapsulamientoencapsulamiento
encapsulamientozeta2015
 
Modelado basados en escenarios
Modelado basados en escenariosModelado basados en escenarios
Modelado basados en escenariosUCATEBA
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de javainnovalabcun
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesjmachado614
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesAlvaro Enrique Ruano
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoFYaskelly Yedra
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Casos de Uso ejercicios
Casos de Uso ejerciciosCasos de Uso ejercicios
Casos de Uso ejerciciosWalter Chacon
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesNedoww Haw
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de ClasesAdal Dg
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismonestor_moren
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relaciónjosecuartas
 

La actualidad más candente (20)

encapsulamiento
encapsulamientoencapsulamiento
encapsulamiento
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Modelado basados en escenarios
Modelado basados en escenariosModelado basados en escenarios
Modelado basados en escenarios
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
Abstracción de datos
Abstracción de datosAbstracción de datos
Abstracción de datos
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Casos de Uso ejercicios
Casos de Uso ejerciciosCasos de Uso ejercicios
Casos de Uso ejercicios
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de Clases
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
MVC
MVCMVC
MVC
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
 

Similar a Patron Singleton

5 formas de implementar el patrón Singleton en Java.pdf
5 formas de implementar el patrón Singleton en Java.pdf5 formas de implementar el patrón Singleton en Java.pdf
5 formas de implementar el patrón Singleton en Java.pdfJosVctorSainsVzquez
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Instituto tecnológico de tijuana
Instituto tecnológico de tijuanaInstituto tecnológico de tijuana
Instituto tecnológico de tijuanajavier
 
2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)UVM
 
Prototype (patron de disenio)
Prototype (patron de disenio)Prototype (patron de disenio)
Prototype (patron de disenio)Jhonny Zaruma
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)Manuel Ch.
 
Taller patrones de diseño
Taller patrones de  diseñoTaller patrones de  diseño
Taller patrones de diseñotovar1982
 
Patrones de diseño Singleton
Patrones de diseño SingletonPatrones de diseño Singleton
Patrones de diseño SingletonCarolina Rojas
 
Data Model & Singleton pattern
Data Model & Singleton patternData Model & Singleton pattern
Data Model & Singleton patternripoblet
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo2008PA2Info3
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10Hack '
 

Similar a Patron Singleton (20)

Patron creacional singleton
Patron creacional singletonPatron creacional singleton
Patron creacional singleton
 
Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
5 formas de implementar el patrón Singleton en Java.pdf
5 formas de implementar el patrón Singleton en Java.pdf5 formas de implementar el patrón Singleton en Java.pdf
5 formas de implementar el patrón Singleton en Java.pdf
 
Patrón singleton
Patrón singletonPatrón singleton
Patrón singleton
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 
Instituto tecnológico de tijuana
Instituto tecnológico de tijuanaInstituto tecnológico de tijuana
Instituto tecnológico de tijuana
 
2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)2 3 5 Patron De DiseñO Singular (Singleton)
2 3 5 Patron De DiseñO Singular (Singleton)
 
Prototype (patron de disenio)
Prototype (patron de disenio)Prototype (patron de disenio)
Prototype (patron de disenio)
 
Patrones
PatronesPatrones
Patrones
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 
Taller patrones de diseño
Taller patrones de  diseñoTaller patrones de  diseño
Taller patrones de diseño
 
Patrones de diseño Singleton
Patrones de diseño SingletonPatrones de diseño Singleton
Patrones de diseño Singleton
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
Data Model & Singleton pattern
Data Model & Singleton patternData Model & Singleton pattern
Data Model & Singleton pattern
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
 

Más de Fernando Alfonso Casas De la Torre

Congreso Internacional de Investigacion Universidad Cortazar 2018
Congreso Internacional de Investigacion Universidad Cortazar 2018Congreso Internacional de Investigacion Universidad Cortazar 2018
Congreso Internacional de Investigacion Universidad Cortazar 2018Fernando Alfonso Casas De la Torre
 
Relación universidad-gobierno: caso de remodelación de una dependencia federal
Relación universidad-gobierno:  caso de remodelación  de una dependencia federalRelación universidad-gobierno:  caso de remodelación  de una dependencia federal
Relación universidad-gobierno: caso de remodelación de una dependencia federalFernando Alfonso Casas De la Torre
 
Spark: una chispa con la velocidad del rayo ¿el sustituto de Hadoop?
Spark: una chispa con la velocidad del rayo  ¿el sustituto de Hadoop?Spark: una chispa con la velocidad del rayo  ¿el sustituto de Hadoop?
Spark: una chispa con la velocidad del rayo ¿el sustituto de Hadoop?Fernando Alfonso Casas De la Torre
 

Más de Fernando Alfonso Casas De la Torre (20)

Mi Cascarita Proyecto Colibri.ppt
Mi Cascarita Proyecto Colibri.pptMi Cascarita Proyecto Colibri.ppt
Mi Cascarita Proyecto Colibri.ppt
 
Proyecto enlace WiFi Comunidades rurales
Proyecto enlace WiFi Comunidades ruralesProyecto enlace WiFi Comunidades rurales
Proyecto enlace WiFi Comunidades rurales
 
Congreso Academy Journal Tepic 2019
Congreso Academy Journal Tepic 2019Congreso Academy Journal Tepic 2019
Congreso Academy Journal Tepic 2019
 
Academy Journal Morelia 2018
Academy Journal Morelia 2018Academy Journal Morelia 2018
Academy Journal Morelia 2018
 
Congreso Internacional de Investigacion Universidad Cortazar 2018
Congreso Internacional de Investigacion Universidad Cortazar 2018Congreso Internacional de Investigacion Universidad Cortazar 2018
Congreso Internacional de Investigacion Universidad Cortazar 2018
 
Congreso Academy Journal Celaya 2017
Congreso Academy Journal Celaya 2017Congreso Academy Journal Celaya 2017
Congreso Academy Journal Celaya 2017
 
IMSS Informatica Actividades 2014 enfriamiento de site
IMSS Informatica Actividades 2014 enfriamiento de siteIMSS Informatica Actividades 2014 enfriamiento de site
IMSS Informatica Actividades 2014 enfriamiento de site
 
Historia de las Videoconsolas
Historia de las VideoconsolasHistoria de las Videoconsolas
Historia de las Videoconsolas
 
Relación universidad-gobierno: caso de remodelación de una dependencia federal
Relación universidad-gobierno:  caso de remodelación  de una dependencia federalRelación universidad-gobierno:  caso de remodelación  de una dependencia federal
Relación universidad-gobierno: caso de remodelación de una dependencia federal
 
Teorema de Naives Bayes
Teorema de Naives BayesTeorema de Naives Bayes
Teorema de Naives Bayes
 
Analisis de incendios forestales mediante WEKA
Analisis de incendios forestales mediante WEKAAnalisis de incendios forestales mediante WEKA
Analisis de incendios forestales mediante WEKA
 
Introduccion a mineria de datos
Introduccion a mineria de datosIntroduccion a mineria de datos
Introduccion a mineria de datos
 
Patron observador
Patron observadorPatron observador
Patron observador
 
Replicación de Bases de Datos con SQL Server 2008
Replicación de Bases de Datos con SQL Server 2008Replicación de Bases de Datos con SQL Server 2008
Replicación de Bases de Datos con SQL Server 2008
 
Incorporacion a la Seguridad Social
Incorporacion a la Seguridad SocialIncorporacion a la Seguridad Social
Incorporacion a la Seguridad Social
 
Plan de Contingencia Informatico
Plan de Contingencia InformaticoPlan de Contingencia Informatico
Plan de Contingencia Informatico
 
Contingencia Informatica
Contingencia InformaticaContingencia Informatica
Contingencia Informatica
 
Las 10 leyes de la Seguridad Informatica
Las 10 leyes de la Seguridad InformaticaLas 10 leyes de la Seguridad Informatica
Las 10 leyes de la Seguridad Informatica
 
Comercializacion de un producto
Comercializacion de un productoComercializacion de un producto
Comercializacion de un producto
 
Spark: una chispa con la velocidad del rayo ¿el sustituto de Hadoop?
Spark: una chispa con la velocidad del rayo  ¿el sustituto de Hadoop?Spark: una chispa con la velocidad del rayo  ¿el sustituto de Hadoop?
Spark: una chispa con la velocidad del rayo ¿el sustituto de Hadoop?
 

Último

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 

Último (7)

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 

Patron Singleton

  • 1. Maestria en Sistemas Computacionales Diseño Orientado a Objetos Patron Semifallo oPatron Semifallo o de Instancia Unicade Instancia Unica (Pattern Singleton)(Pattern Singleton) Expone: Ing. Fernando Alfonso Casas De la Torre Catedratico: Dr. Diego Uribe Agundis
  • 2. Patron SingletonPatron Singleton DEFINICION: En Ingeniería De Software, Singleton o Instancia Única es un 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 sólo 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 sólo 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).
  • 3. DEFINICION: La idea del Patrón Singleton es proveer un mecanismo para limitar el número de instancias de una clase. Por lo tanto el mismo objeto es siempre compartido por distintas partes del código. Puede ser visto como una solución más elegante para una variable global porque los datos son abstraídos por detrás de la interfaz que publica la Clase Singleton. Dicho de otra manera, esta patrón busca garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella. Patron SingletonPatron Singleton
  • 4. USOS: 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, sólo 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. Patron SingletonPatron Singleton Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación.
  • 5. USOS: Este tipo de patron es identificable y aplicable cuando: ♦ Deba haber exactamente una instancia de una clase y deba ser accesible a los clientes desde un punto de acceso conocido. ♦ Se requiera de un acceso estandarizado y conocido públicamente. Sus usos más comunes son clases que representan objetos unívocos. Por ejemplo, si hay un servidor que necesita ser representado mediante un objeto, este debería ser único, es decir, debería existir una sola instancia y el resto de las clases deberían de comunicarse con el mismo servidor. Un Calendario, por ejemplo, también es único para todos. Patron SingletonPatron Singleton No debe utilizarse cuando una clase esta representando a un objeto que no es único, por ejemplo, la clase Persona no debería ser Singleton, ya que representa a una persona real y cada persona tiene su propio nombre, edad, domicilio, DNI, etc.
  • 6. EJEMPLO A continuacion se presenta una analogia del mundo real de como seria un Patron Singleton utilizando el cargo de Presidente de los EU que se podria identificar como un Singleton. La Constitucion de EU especifica los metodos por los cuales se elije un presidente: limita los poderes que tiene, la duracion de su mandato y define el modo de la sucesion. Como resultado solo se tiene un presidente a un tiempo y el que ocupa el cargo es llamado Presidente de los EU. Patron SingletonPatron Singleton
  • 7. Diagrama UML Para garantizar que habra al menos una instancia de una clase podemos aplicar el patron Singleton y como se muestra mediante el diagrama UML en el que se aprecia que… • UniqueInstance es una clase variable que mantiene a una misma y unica instancia. • getInstance() es un metodo de una clase que puede autoreferenciarse. • El constructor es privado. Patron SingletonPatron Singleton
  • 8. Diagrama UML En el diagrama UML, la clase que es Singleton define una instancia para que los clientes puedan accederla. Esta instancia es accedida mediante un método de clase. Los clientes (quienes quieren acceder a la clase Singleton) acceden a la única instancia mediante un método llamado getInstance(). Por lo tanto este patron es muy util para clases que representan objetos unicos. Patron SingletonPatron Singleton
  • 9. Una implementación correcta en el lenguaje de programación Java es la siguiente: public class Singleton { private static final Singleton INSTANCE = new Singleton(); // El constructor privado no permite que se genere un constructor por defecto. // (con mismo modificador de acceso que la definición de la clase) private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } Patron SingletonPatron Singleton Se coloca una variable al mismo tiempo que la clase llamada por convencion «INSTANCE» y aquí reside el secreto del patron ya que dicha variable es la que instancia por unica vez y la devuelve al cliente.
  • 10. El ejemplo de libro «Head Fhrist» dedicado a patrones muestra una clase llamada ChocolateBoiler (*) que ejemplifica el control de un horno de chocolate que muestra que puede tener al menos una instancia (*) tomado del libro del curso “Head First Design Patterns de Eric Freeman Patron SingletonPatron Singleton
  • 11. En el ejemplo del ChocolateBoiler al hacer referencia al objeto tipo Singleton, el cliente-objeto puede crear al instancia al invocar la clase. Patron SingletonPatron Singleton Si no existe la crea y si existe la usa, pero esto puede dar problemas en un ambiente multitareas o multihilos.
  • 12. Otro posible escenario para ChocolateBoiler en el que ahora no se crea la instancia sino que se solicita informar su condicion … Patron SingletonPatron Singleton
  • 13. Problemas en ambientes multihilo Si estamos en un ambiente de un solo hilo (single-thread) esta implementación es suficiente. En contrapartida, tiene serios problemas en entornos multihilo (multi-thread) dado que, debido a cuestiones de sincronización y concurrencia, puede crearse más de una instancia del miembro instance. Patron SingletonPatron Singleton ¿Cómo puede ser esto posible? Imaginemos que dos hilos evalúan la condición instance == null y en ambos casos es verdadera. En este caso, ambos hilos crearán la instancia, violando el propósito del patrón Singleton. Los problemas que se producen a raíz de esto pueden ser muy difíciles de detectar. La creación dual suele producirse en forma intermitente e incluso puede no suceder (no es determinista).
  • 14. Problemas en ambientes multihilo Si el Singleton es absolutamente stateless (es decir, no mantiene ningún tipo de estado) puede no ser un problema. Si estamos en C++ o algun lenguaje, se puede producir un memory leak, dado que sólo se va a eliminar uno de los objetos aunque hayamos creado dos. Si el Singleton es statefull (mantiene estado) se pueden producir errores sutiles. Por ejemplo, si se modifica el estado del objeto en el constructor, pueden producirse inconsistencias, dado ese código de inicialización se ejecuta mas de una vez. Patron SingletonPatron Singleton Tomemos como ejemplo de esto último un Singleton que implementa un contador. Imaginemos que el constructor inicializa el contador a 0. Si se producen dos creaciones, se inicializará dos veces el contador. Quizás en la segunda inicialización, una instancia ya había incrementado su contador, pero debido a la ejecución de ese código de inicialización, ese incremento se perderá.
  • 15. El problema con el patron es que en caso de procesamiento multihilos se pueden crear multiples instancias en cada uno de los hilos y estas pueden generar descontrol en el sistema. En este caso, dos hilos solicitan la instancia a través de la función GetInstance, pero ésta todavía no ha sido creada. Por lo tanto, en los dos casos se procede a la creación de la única instancia. Patron SingletonPatron Singleton Las dos columnas a la izquierda (Thread 1 y Thread 2) representan los hilos de ejecución y muestran el código que se ejecuta. La columna de la derecha (Valor Instance) muestra el valor de instance luego de que se ejecuta cada línea de código.
  • 16. ¡Gracias por su atencion! Expuso: Ing. Fernando Alfonso Casas De la Torre Catedratico: Dr. Diego Uribe Agundis REFERENCIAS: BLOG: Mi granito de JAVA http://migranitodejava.blogspot.mx/2011/05/singleton.html BLOG: CODEJAVU http://codejavu.blogspot.mx/2013/07/ejemplo-patron-singleton.html Sitio WIKIPEDIA https://es.wikipedia.org/wiki/Singleton Sitio MICROSOFT https://msdn.microsoft.com/es-es/library/bb972272.aspx#EDAA