Singletons que no son single

Desde hace un buen rato he sabido que los singletons pueden no ser tan singles usando reflection.

pero ¿cómo es que esto puede suceder?


package single;

import java.lang.reflect.Constructor;

public class Main {

public static void main(String[] args) throws Exception {

Single sin = Single.getInstance();
Single sin2 = Single.getInstance();

if(sin ==sin2){
  System.out.println(" - TEST from singleton equals- ");
}else{
  System.out.println(" - Ouch1  - ");
}

Class<?> forName = Class.forName("single.Single"); //get the class
Constructor<?>[] declaredConstructors = forName.getDeclaredConstructors(); //get constructors fr4om Class
Constructor<?> constructor = declaredConstructors[0]; //get the first constructor (the only one)
constructor.setAccessible(true);//set accesible
Single newInstance = (Single)constructor.newInstance(null);//here we go

if(newInstance == sin){
  System.out.println(" - newInstace and singleton equals - ");
}else{
  System.out.println(" - Singleton is not so single  1 - ");
}

if(newInstance == sin2){
  System.out.println(" - newInstace and singleton2 aARE equals - ");
}else{
  System.out.println(" - Singleton is not so single  22 - ");
}

}

}
package single;

public class Single {

private static final Single instance = new Single();

private Single(){}

public static Single getInstance(){return instance;}

}

El resultado es:

- TEST from singleton equals-
- Singleton is not so single  1 -
- Singleton is not so single  22 -

Una forma más segura de que un singleton sea singleton es usando el approach de enum, Joshua Bloch lo describe en el Item 3 de Effective Java (2nd Edition), el mismo Bloch menciona otro punto en el que hay que tener cuidado: a la hora de deserializar.

Tambien vale la pena revisar revisar el tutorial sobre reflection, viene muy sencillo y preciso:

http://java.sun.com/docs/books/tutorial/reflect/member/index.html

¿Qué tan (pobre|rico) soy? Y los NSEs en México

En México (y prácticamente en todas partes) hay niveles (me caga tanta desigualdad…).

El NSE realmente no mide que tan pobre o rica es una persona, más bien mide el estilo de vida de la persona. Esto es particularmente interesante para los vendedores de bienes y/o servicios para identificar potenciales clientes.

Lo básico que hay que tener en cuenta es lo siguiente:

  • NSE es la sigla de Nivel Socio Económico.
  • El NSE es una medida más o menos objetiva para conocer el nivel de vida de las personas.
  • El NSE es una característica cuantitativa y cualitativa de un hogar.
  • Un hogar es un grupo de individuos que comparten una alacena.
  • Hogar no necesariamente es la vivienda. [González]
  • EL NSE de un hogar es el mismo para cada individuo del hogar. i.e. Un hogar tiene NSE B cada uno de los individuos de ese hogar tiene SNE B.
  • Hay varias formas de calcular NSE.
  • Hay 6 niveles, en orden descendente: A/B,C+,C,D+,D,E.
  • El NSE también es usado para la evaluación de crétidos, programas sociales y becas.
  • Un hogar tiene uno y sólo un NSE.
  • Hay mucha diferencia entre los SNE de los hogares en México (desigualdad en condiciones de vida).
  • Los estados con mayor NSE son: Nuevo León,D.F. y Aguascalientes.
  • Los estados con menor NSE son: Oaxaca, Guerrero y Chiapas. [López,2008]
  • Los niveles NSE son asignados por la AMAI (Asociación Mexicana de Agencias de Investigacion de Mercado y Opinión Pública).

A continuación una tabla para calcular el NSE.

Tabla NSE

Hasta 51 E
Entre 52 y 76 D
Entre 77 y 133 D+
Entre 134 y 170 C
Entre 171 y 222 C+
Más de 223 A/B

Otras cosas relacionadas:

  • El coeficiente de Gini es útil para medir la desigualdad en los NSE.
  • IDH es un indice creado por el Programa de las Naciones Unidas para el Desarrollo para medir la calidad de vida de los habitantes en los diferentes paises.

Referencias:

  • [Gonzaléz] Manuel Gonzaléz. Niveles socioeconónicos AMAI, Segemento ITAM.

http://segmento.itam.mx/Administrador/Uploader/material/Niveles Socioeconomicos AMAI.PDF

Un básico para entender mejor.

  • Estádisticas interesantes.

http://www.amai.org/NSE/AMAINSE2004.ppt

Una presentación buena.

    ¿Cuál es el NSE de tu hogar?

Silvyta

En una área de la empresa….

La gerente (femenino) está con con dos de sus mejores clientes (que al igual que la gerente también son mujeres).

-Persona de intendencia (también es mujer): [Interrumpiendo a la gerente] ¿Usted estuvo ayer en la ofician de a lado?

-Gerente: Sí ¿Por qué?
-Persona de intendencia (también es mujer): Ah,  es que la dejó usted muy tirada, había mucho desorden.

-Gerente: [Tono incomodo] Ejejemm..  [tono enérgico] ¡Silvyta! Le voy a pedir que no me vulva a hablar así.

ESCOJA y de ser posible justifique su respuesta y también diga si usted es mujer :

Considere que: Anteriormente la gerente había puesto a Silvyta en una situación incomoda, la gerente es propensa a dejar desorden en sus áreas de trabajo, la gerente es gerente, Silvyta es de intendecia, las clientes son señoronas.

A) La respuesta de la gente estuvo bien. Hay que dejar claro que hay jerarquias.

B) Pobre Silvyta, no alcanzo a distinguir que era momento inadecuado para hacer la observación. (Es de intendecia no se puede pedir tanto).

C) Pobre gerente se debe sentir de la chingada por haber expuesto prepotencia en contra de Silvyta delante de las clientas.

D) Estuvo bien lo de Sylvita, la gerente esta ya le había hecho pasar momentos incomodos a Silvyta. Era puro Karma.

E) La gerente debe sentirse pésimo. ¡Fue expuesta delante de clientas! OMG. Y por personal de intendencia OMGK.

F) Las clientas pensarán: ¿Cómo es posible que alguien de intendencia le habla así a una gerente?

G) Otra(s).¿Cuál(es)?

Glosario de acrónimos:

OMG: Oohhhh my Goddd!!!!!!!!!

OMGK. (Oohhhh my Goddd!!!!!!!!!) x 1000

_