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 del 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.

8 Comentarios

  1. 22

    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 otros sitios, puede que desee considerar la posibilidad de hacer que los métodos estáticos de una manera diferente, no instantiable clase.

  2. 19

    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.

  3. 12

    Otro problema con 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.

    • Gracias por esta respuesta. A menudo me hacen algunos métodos estáticos (causa en la que realmente no directamente parte de la instancia). Pero ahora me evite tomar los métodos estáticos causa de que estás con ella, que la burla no será posible
  4. 2

    @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.

    Métodos estáticos 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 de ejemplo, la 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.

    • Estás en lo correcto. Realmente me había hecho las cosas muy mezclado. Puede ser porque yo era privados de sueño durante esos días. En el espíritu de ENTONCES, he borrado el comentario y no creo que tenga nada más que añadir de lo que ya han dicho. Gracias de todos modos.
  5. 2

    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.

  6. 1

    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 que se pasa 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.

    • A la derecha abajo en el completamente optimizado por el compilador cuando es importante (la mayoría del tiempo).
    • No puede ser optimizado de distancia en C++. La persona que llama no tiene manera de saber que el destinatario no va a utilizar el «este», por lo que debe pasar en independencia. Para otros idiomas, YMMV.
  7. 0

    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.

Dejar respuesta

Please enter your comment!
Please enter your name here