PDF de programación - Acabando con el patrón singleton

Acabando con el patrón singletongráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 1 de Octubre del 2017)
675 visualizaciones desde el 1 de Octubre del 2017
343,9 KB
74 paginas
Creado hace 9a (29/10/2014)
Acabando con el patrón singleton

Acabando con el patrón singleton

using std::cpp 2014

J. Daniel Garcia

Grupo ARCOS

Universidad Carlos III de Madrid

28 de Octubre de 2014

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

1/55

Acabando con el patrón singleton

Aviso

c Esta obra está bajo una Licencia Creative Commons

Atribución-NoComercial-SinDerivar 4.0 Internacional.

b Debes dar crédito en la obra en la forma especificada

por el autor o licenciante.

e El licenciante permite copiar, distribuir y comunicar pú-
blicamente la obra. A cambio, esta obra no puede ser
utilizada con fines comerciales — a menos que se ob-
tenga el permiso expreso del licenciante.

d El licenciante permite copiar, distribuir, transmitir y co-
municar públicamente solamente copias inalteradas de
la obra – no obras derivadas basadas en ella.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

2/55

Acabando con el patrón singleton

Introducción

1 Introducción

2 El patrón Singleton

3 Ejemplos en la biblioteca estándar

4 La sencillez de los singleton

5 Revisitando el patrón

6 Detalles

7 Conclusiones

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

3/55

Acabando con el patrón singleton

Introducción

Diseño de software

Existen dos formas de construir un diseño de
software: simplificándolo hasta el punto que resulte
obvio que no hay en el errores o complicándolo de tal
forma que los errores que haya en el no sean obvios.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

4/55

Acabando con el patrón singleton

Introducción

Diseño de software

Existen dos formas de construir un diseño de
software: simplificándolo hasta el punto que resulte
obvio que no hay en el errores o complicándolo de tal
forma que los errores que haya en el no sean obvios.

El primer método es mucho mas difícil.

Sir Tony Hoare, Premio Turing 1980.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

4/55

Acabando con el patrón singleton

Introducción

¿Importa el diseño?

¿Dónde te gustaría vivir?

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

5/55

Acabando con el patrón singleton

Introducción

Lenguajes de Patrones

1977: A Pattern Language: Towns, Buildings, Construction.
1979: The timeless Way of buildings.
Christopher Alexander.

Introduce las nociones de patrón y lenguaje de patrones.
Es un libro de arquitectura y edificación.
Buscaba definir reglas paso-a-paso para resolver
problemas comunes de ingeniería en la creación de
edificios y ciudades.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

6/55

Acabando con el patrón singleton

Introducción

GoF: The Gang of Four

1991: Gamma → Idea de patrones
software.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

7/55

Acabando con el patrón singleton

Introducción

GoF: The Gang of Four

1991: Gamma → Idea de patrones
software.
1993: GoF envían un catálogo de patrones
al ECOOP.

Design Patterns: Abstraction and Reuse
of Object-Oriented Design. E. Gamma, R.
Helm, R. Johnson, J. Vlissides. ECOOP,
LNCS 707, pp. 406–431.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

7/55

Acabando con el patrón singleton

Introducción

GoF: The Gang of Four

1991: Gamma → Idea de patrones
software.
1993: GoF envían un catálogo de patrones
al ECOOP.

Design Patterns: Abstraction and Reuse
of Object-Oriented Design. E. Gamma, R.
Helm, R. Johnson, J. Vlissides. ECOOP,
LNCS 707, pp. 406–431.

1995: Desing Patterns elements of
Reusable Object-Oriented Software.

Más de un millón de copias vendidas.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

7/55

Acabando con el patrón singleton

Introducción

GoF: Catálogo

Creación

Abstract Factory.
Builder.
Factory Method.
Prototype.
Singleton.

Estructural

Adapter.
Bridge.
Composite.
Decorator.
Facade.
Flyweight.

Proxy.

Comportamiento

Chain of Responsibility.
Command.
Interpreter.
Iterator.
Mediator.
Memento.
Observer.
State.
Strategy.
Template Method.
Visitor.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

8/55

Acabando con el patrón singleton

El patrón Singleton

1 Introducción

2 El patrón Singleton

3 Ejemplos en la biblioteca estándar

4 La sencillez de los singleton

5 Revisitando el patrón

6 Detalles

7 Conclusiones

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

9/55

Acabando con el patrón singleton

El patrón Singleton

Patrones de creación

Un patrón de creación ofrece flexibilidad sobre:

¿Qué debe crearse?
¿Quién lo crea?
¿Cómo se crea?
¿Cuándo se crea?
¿Quién lo destruye?
¿Cómo se destruye?
¿Cuándo se destruye?

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

10/55

Acabando con el patrón singleton

El patrón Singleton

Singleton

Intención: Asegurar que una clase tiene una única
instancia y ofrecer un punto de acceso global a la misma.

Aplicabilidad:

Debe haber exactamente una instancia de la clase, y debe
ser accesible a los clientes desde un punto de acceso bien
conocido.
Cuando una única instancia debe ser extensible (mediante
subclases) y los clientes deberían poder extender la
instancia sin modificar su código.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

11/55

Acabando con el patrón singleton

El patrón Singleton

Consecuencias

Acceso controlado a la única instancia

Encapsula la instancia y controla el acceso de los clientes.

Espacio de nombres reducido

Evita la polución del espacio de nombres con variables
globales.

Permite refinar operaciones y representación

Se puede subclasificar la clase singleton.
Permite un número variable de instancias

Se puede configurar un número distinto de 1 con cambios
mínimos.

Más flexible que operaciones de clase (estáticas)

Difícil de cambiar el diseño (poca flexibilidad).

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

12/55

Acabando con el patrón singleton

El patrón Singleton

Ejemplo canónico

single.h

#ifndef SINGLE_H
#define SINGLE_H

class singleton {
public:

static singleton ∗ instance() ;
void op1();

protected:

private:

singleton () ;
static singleton ∗ psing;

};

#endif

}

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

13/55

single.cpp

#include "single.h"
#include <iostream>
singleton ∗ singleton :: psing = nullptr;
singleton ∗ singleton :: instance() {

if (nullptr == psing) {

psing = new singleton;

}
return psing;

}

}

singleton :: singleton () {

std :: cout << "singleton () " << std :: endl;

void singleton :: op1() {

std :: cout << "op1()" << std :: endl;

Acabando con el patrón singleton

El patrón Singleton

Preguntas

¿Qué debe crearse?

Una única instancia del singleton.

¿Quién lo crea?

El cliente que necesita usar el singleton.

¿Cómo se crea?

Obteniendo acceso mediante instance.

¿Cuándo se crea?

En la primera invoacación a instance.

¿Quién lo destruye?
No se destruye.

¿Cómo se destruye?

No se destruye.

¿Cuándo se destruye?

No se destruye.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

14/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

1 Introducción

2 El patrón Singleton

3 Ejemplos en la biblioteca estándar

4 La sencillez de los singleton

5 Revisitando el patrón

6 Detalles

7 Conclusiones

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

15/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

errno

errno.h

extern int errno;

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

16/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

errno

errno.h

extern int errno;

errno.cc

int errno;

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

16/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

errno

errno.h

extern int errno;

errno.cc

int errno;

Código de usuario

//

...

}

c b e d –

}

}

void g() {

...

//
if (read(fd0, buffer , n) < 0) {

switch (errno) {

J. Daniel Garcia – ARCOS@UC3M ([email protected])

16/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

errno

errno.h

extern int errno;

errno.cc

int errno;

Código de usuario

void g() {

...

//
if (read(fd0, buffer , n) < 0) {

switch (errno) {

//

...

}

c b e d –

}

}

read.cc (simplificado)
ssize_t read(int fd, void ∗ buf, size_t nb) {

if (nbytes == 0) return 0;
if (fd < 0) {
errno = EBADF;
return −1;

}
if (buf == NULL) {
errno = EINVAL;
return −1;

}

errno = ENOSYS;
return −1;

}

J. Daniel Garcia – ARCOS@UC3M ([email protected])

16/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

Preguntas sobre errno

¿Qué debe crearse?

Una única instancia de errno.

¿Quién lo crea?
El enlazador.
¿Cómo se crea?

Accediendo a la variable de programa.

¿Cuándo se crea?

En arranque de programa.

¿Quién lo destruye?
No se destruye.

¿Cómo se destruye?

No se destruye.

¿Cuándo se destruye?

No se destruye.

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

17/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

Los singletons de la biblioteca estándar

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

18/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

Los singletons de la biblioteca estándar

iostream

namespace std {

extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;

static ios_base:: Init __ioinit ;

}

c b e d –

J. Daniel Garcia – ARCOS@UC3M ([email protected])

18/55

Acabando con el patrón singleton

Ejemplos en la biblioteca estándar

Los singletons de la biblioteca estándar

globals_io.cc

iostream

namespace std {

extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;

static ios_base:: Init __ioinit ;

}

}

char alignas(istream) [sizeof(i
  • Links de descarga
http://lwp-l.com/pdf7100

Comentarios de: Acabando con el patrón singleton (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad