Pregunta

Además, hay ventajas de rendimiento para los métodos estáticos sobre los métodos de instancia?

Me llegó a través de las siguientes recientemente: http://www.cafeaulait.org/course/week4/22.html :

Cuando se debe a un método estático?

  1. Ni lee ni escribe a los campos de instancia
  2. Independiente de que el estado del objeto
  3. Métodos matemáticos que aceptan argumentos, aplicar un algoritmo a los argumentos y devuelven un valor
  4. Fábrica de métodos que sirven en lugar de constructores

Yo estaría muy interesado en la retroalimentación del Desbordamiento de la Pila de la comunidad en este.

¿Fue útil?

Solución

Hacer que los métodos estáticos cuando no son parte de la instancia.No te preocupes por los micro-optimizaciones.

Usted podría encontrar que usted tiene un montón de métodos privados que podrían ser estáticos, sino que siempre la llamada de los métodos de instancia (o de la otra).En ese caso, realmente no importa mucho.Sin embargo, si usted quiere realmente ser capaz de probar tu código, y tal vez el uso de a otra parte, usted podría considerar hacer los métodos estáticos de una manera diferente, no instantiable clase.

Otros consejos

Si es o no un método es estático, es más una consideración de diseño de uno de eficiencia.Un método estático pertenece a una clase, donde un método no estático pertenece a un objeto.Si había una clase de Matemáticas, usted puede tener un par de métodos estáticos para lidiar con la suma y la resta, porque estos son los conceptos relacionados con las Matemáticas.Sin embargo, si usted tenía un Coche de la clase, usted puede tener un par de métodos no estáticos para cambiar de marcha y dirigir, porque aquellos que están asociados con un coche en concreto, y no el concepto de los coches en general.

Otro problema con los métodos estáticos, es que es muy doloroso para escribir pruebas unitarias para ellos - en Java, por lo menos.Usted no puede burlarse de un método estático de alguna manera.Hay un post en google pruebas blog acerca de este tema.

Mi regla de oro es no escribir métodos estáticos sólo cuando no tienen dependencias externas (como el acceso a bases de datos, la lectura de los archivos, correos electrónicos y así sucesivamente) para mantenerlos tan simple como sea posible.

@jagmal creo que tienes algunos cables cruzados en algún lugar - todos los ejemplos de la lista no son, evidentemente, los métodos estáticos.

Los métodos estáticos se debe tratar en su totalidad con propiedades abstractas y conceptos de una clase - que no debe de ninguna manera se refieren a instancia de atributos específicos (y la mayoría de los compiladores le grita si lo hacen).

Para el coche ejemplo, velocidad, kms impulsado se atribuyen claramente relacionados.El cambio de marchas y la velocidad de cálculo, cuando se la considera en el coche de nivel, son atributo dependiente -, pero que consideran un carModel clase que hereda de coche:en este punto theyy podría convertirse en métodos estáticos, como los atributos necesarios (tales como el diámetro de la rueda), podrían ser definidos como constantes en ese nivel.

Sólo recuerde que cuando usted está escribiendo un método estático, está escribiendo una inflexible método que no puede tener es modificar el comportamiento muy fácilmente.

Usted está escribiendo el código de procedimiento, por lo que si tiene sentido procesal, y luego hacerlo.Si no, debería de ser un método de instancia.

Esta idea es tomada de un artículo de Steve Yegge, que creo que es una interesante y útil leer.

En cuanto al rendimiento, C++ método estático puede ser ligeramente más rápido que un no-virtual método de instancia, ya que no hay necesidad de un 'esto' puntero a pasar al método.A su vez, tanto será más rápido que los métodos virtuales como no hay VMT de búsqueda necesarios.

Pero, es probable que esté a la derecha abajo en el ruido, en particular para las lenguas, que permita innecesario de paso de parámetros a ser optimizado.

Aquí es una discusión relacionada con el como a por qué la Cadena.El formato es estática en el que se destacarán algunas de las razones.

Otra cosa a tener en cuenta al hacer los métodos de la estática es que a nadie capaz de ver la clase es capaz de llamar a un método estático.Mientras que cuando la metodología es un método de instancia, sólo aquellos que tienen acceso a una instancia son capaces de llamar a ese método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top