Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Que opinas sobre el uso de métodos estáticos privados

En lo personal, prefiero utilizar un estática método privado a no estático con tal de que no requiere ningún acceso a campos de instancia.

Pero he oído que esta práctica viola los principios de la POO.

Editar:. Me pregunto desde el estilo de vista prospectivo, no el rendimiento

¿Fue útil?

Solución

Un método private static por sí mismo no viola programación orientada a objetos en sí, pero cuando se tiene una gran cantidad de estos métodos en una clase que no necesitan (y no puede *) campos de instancia de acceso, no está programando de manera OO, porque "objeto" implica el estado + operaciones en ese estado definido juntos. ¿Por qué están poniendo estos métodos de esa clase, si es que no es necesario ningún estado?

(*) = En principio, debido a la visibilidad de nivel de clase en Java, un método estático de una clase tiene acceso a los campos de instancia de un objeto de esa clase, por ejemplo:

class Test
{
  int field = 123;

  private static void accessInstance(Test test)
  {
    System.out.println(test.field);
  }
}

Tiene que pasar en la referencia a una instancia (puntero this) a sí mismo, por supuesto, pero entonces usted está imitando esencialmente métodos de instancia. Sólo mencionar esto para lo completo.

Otros consejos

Como se mencionó anteriormente, los métodos estáticos privados son a menudo útiles para la organización de re-utilizado la lógica y la reducción / eliminación de código repetido. Me sorprende que no he notado ninguna mención de actuación en esta discusión. De Renaud Waldura de 'la última palabra sobre Final:

(Nota, los métodos estáticos privados son implícitamente final)

"Desde un método final sólo se implementa en la clase de la que se declara, no hay necesidad de enviar dinámicamente una llamada a un método final, y la invocación estática se puede utilizar en su lugar. El compilador puede emitir una llamada directa al método, sin pasar por por completo el procedimiento de invocación de métodos virtuales habitual. Debido a esto, los métodos finales también son candidatos para procesos en línea por un compilador Just-In-Time o una herramienta de optimización similar. (Recuerde, los métodos privados / estáticas están ya final, por lo tanto siempre considerados para esta optimización .) "

Salida todo el papel: http://renaud.waldura.com/ doc / java / FINAL-keyword.shtml

privada o pública no hace una diferencia - métodos estáticos están bien, pero si usted encuentra que los están usando todo el tiempo (y de los métodos de instancia del curso que no tienen acceso a ningún campos de instancia son básicamente métodos estáticos de este propósito), entonces es probable que tenga que replantearse el diseño. No siempre es posible, pero la mayoría de los métodos de tiempo debe residir con los datos que operan en -. Esa es la idea básica de la programación orientada a objetos

No estoy necesariamente veo ningún problema real con lo que está haciendo, pero mi primera pregunta sería si el método no requiere ningún acceso a campos de instancia, a continuación, ¿qué está haciendo en esa clase en el primer lugar?

Es una cuestión de gustos, pero me hacen métodos que no reaccionan a un estado estático dentro del objeto. De esta manera no tengo que reescribir el código si una función estática necesita una funcionalidad similar. Una función de clasificación sería un buen ejemplo de tal caso.

Me tienden a no utilizar los métodos estáticos privada. Hago uso de métodos estáticos públicos y agruparlos en clases Util para promover la reutilización.

métodos estáticos privados pueden, por ejemplo, operar sobre los miembros estáticos privados de su clase. Esto se puede utilizar para encapsular y unificar operaciones específicas cierta clase.

El principal inconveniente de la utilización de métodos estáticos es en mi opinión el hecho de que uno desecha la posibilidad de anular. Dado que las clases de Java no son como, digamos, las clases en Smalltalk, no se puede reemplazar los métodos estáticos.

Debido a que su pregunta se refiere a métodos estáticos privados, es primordial de la opción de todos modos.

I tienden a utilizar métodos estáticos sólo en caso de clases de utilidad (como java.lang.Math) o patrones como el patrón Singleton. Todo esto requiere una mayor visibilidad de lo privado, porque representan los servicios prestados por su clase a los demás.

pensamiento final: Si usted tiene uno o más métodos estáticos privados, piense en su extracción a una clase de utilidad dedicado y hacerlas públicas. Mejor aún, hacer que los métodos de instancia y utilizar el patrón Singleton.

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