¿Una clase sin variables de instancia debe considerarse una clase?

7

Digamos que necesita implementar algunas funciones estrechamente relacionadas que proporcionan una parte de la funcionalidad, pero no hay necesidad de rastrear ningún estado entre esas funciones, solo algunas veces pasan algunos parámetros entre sí. ¿Cuál sería la mejor decisión desde el punto de vista del diseño? ¿Conviértalo en una clase, o simplemente en un archivo fuente separado que contiene estas funciones?

UPD: Objective-C, sin espacios de nombres

    
pregunta tux91 16.05.2012 - 01:09

7 respuestas

8

Si estás en un idioma que requiere que todas las funciones sean parte de una clase (Java, C #, etc.), no tienes muchas opciones, sino que sean parte de una clase. De lo contrario, simplemente póngalos en su propio archivo con su propio espacio de nombres. Eso mantiene las cosas más simples.

    
respondido por el Mason Wheeler 16.05.2012 - 01:41
8

Puedes agrupar esas funciones en clases de utilidad. Math en Java es un buen ejemplo de esto. No tiene estado y solo te permite hacer llamadas estáticas para hacer cosas. Poner estos métodos relacionados en una clase deja claro que, de hecho, están relacionados.

    
respondido por el Oleksi 16.05.2012 - 01:10
2

¡Claro! ¡Encapsular datos no es ciertamente lo más importante de OO!

struct thingy;

void fun(thingy & t) { t.do_stuff(); }

struct thingy {
   virtual ~thingy() {}
   virtual void do_stuff() = 0;
}

struct thingy_d1 : thingy {
  void do_stuff() { std::cout << "Doing stuff.\n"; }
};
struct thingy_d2 : thingy {
  void do_stuff() { std::cout << "Doing other stuff.\n"; }
};

El patrón de comando toma esta forma muy a menudo.

    
respondido por el Crazy Eddie 16.05.2012 - 01:31
1

Bueno, definitivamente es un class , pero generalmente no me referiría a él como una "clase" en el sentido de OO de las cosas, ya que generalmente se usan de diferentes maneras.

Por ejemplo, en idiomas que carecen de funciones libres como Java, esta es la solución para proporcionarlas.

En C ++, esto se usa comúnmente para objetos de función.

En su caso, parece que class no ofrece ventajas y, por lo tanto, es mejor que sean funciones gratuitas en un espacio de nombres.

    
respondido por el Pubby 16.05.2012 - 01:18
0

Una clase define cómo se crean los objetos. Si el objeto no requiere un estado interno, la clase no tendrá ninguna variable de instancia. Hay muchas razones por las que esto podría ser útil: cosas como objetos que implementan el patrón de Estrategia vienen a la mente.

    
respondido por el Matthew Flynn 16.05.2012 - 01:38
0

Hay una gran diferencia que parece estar olvidada entre las clases y el espacio de nombres.

Las clases pueden extenderse, mientras que los espacios de nombres no pueden. Incluso en el escenario que usted describe, es poco probable que se pueda descartar por completo que en el futuro no haya una razón para ampliar su grupo de funciones para proporcionar un grupo de funciones ligeramente alterado. Y en ese escenario, la creación de instancias de la clase tiene una propiedad, que es el tipo de clase.

En algunos idiomas donde los métodos estáticos no se pueden sobrecargar en clases heredadas, una clase con solo métodos estáticos podría considerarse simplemente como un espacio de nombres.

    
respondido por el d_inevitable 16.05.2012 - 01:53
-1

No. Eso es un namespace . Llamarlo class es una tontería. ¿Por qué harías sin sentido que una característica se convirtiera en ... una característica que el idioma ya proporciona como primera clase?

    
respondido por el DeadMG 16.05.2012 - 01:43

Lea otras preguntas en las etiquetas