2010-05-07 14 views
7

Soy un programador de Java y trato de entender la diferencia entre un método (métodos Java) y una función (como en C++). Solía ​​pensar que son lo mismo, solo diferentes convenciones de nombres para diferentes lenguajes de programación. Pero ahora que sé que no lo están, estoy teniendo problemas para entender la diferencia.¿Es una función algo así como un método estático?

Sé que un método se refiere a una instancia de una clase y tiene acceso a datos de clase (variables de miembro), mientras que una función no (?). Entonces, ¿una función es como un método estático?

Consulte here para las explicaciones que leí que me llevaron a pensar esto.

+2

Creo que si las diversas respuestas a continuación suenan contradictorias, solo muestra que esto es _subjetivo_ o, en otras palabras, una cuestión de convención e idioma. – wilhelmtell

Respuesta

4

Una función es simplemente un nombre genérico para una parte del código dentro de un programa. La palabra "método" es un sinónimo de función. También lo son las "subrutinas" y los "procedimientos", etc.

Las funciones de Java y C++ son, en su mayor parte, exactamente lo mismo.

La palabra "método" tiende a usarse para subrutinas asociadas con una instancia, mientras que "función" tiende a usarse para aquellas que son globales/estáticas.

Pero incluso entonces, el compilador genera "métodos" como si fueran "funciones".

consideran este código en C++:

class Foo 
{ 
public: 
    void DoFoo(int param) 
    { 
     printf("%d, %d\n", param, member); 
    } 
private: 
    int member; 
}; 

int main() 
{ 
    Foo f; 
    f.DoFoo(42); 
    return 0; 
} 

El compilador genera código para algo equivalente a esto:

struct Foo 
{ 
    int member; 
}; 

void Foo_DoFoo(Foo* this, int param) 
{ 
    printf("%d, %d\n", param, this->member); 
} 

int main() 
{ 
    Foo f; 
    Foo_DoFoo(&f, 42); 
    return 0; 
} 

Así que la distinción entre "método" y "función" no es más que una convención.

1

En C, todas las "funciones" son de "nivel superior" en el sentido de que no están asociadas a un tipo. Si estuvieran en su alcance (por ejemplo, a través de una inclusión), podría consultarlos y podrían vincularse.

En C++ puede crear clases y colocar métodos en ellas. Los métodos marcados como estáticos se invocan a través de una clase particular pero no están asociados con una instancia de la clase. En ese sentido, son como funciones. Sin embargo, se les permiten algunos privilegios asociados con la clase (por ejemplo, pueden hacerse privados y pueden acceder a miembros estáticos privados). Sin embargo, aún puede usar funciones de estilo C, por ejemplo para funciones de biblioteca.

En Java, todos los métodos están asociados a una clase, por lo que existen métodos estáticos pero no funciones de estilo C.

+0

Esto tiene sentido, por lo que la conclusión es que los métodos tienen una asociación con una clase (estática o no), mientras que la función no está asociada con una clase (y puede vivir fuera de una clase también). ¿Correcto? – lkm

2

Esto es estrictamente una diferencia de vocabulario. Algunos consideran un método una operación que pertenece a un objeto o una clase, y una función a una operación que no lo hace. Otros, como el grupo C++, los llaman funciones pero se refieren a las funciones gratuitas o funciones no miembro cuando la función no pertenece a una clase o un objeto. Yo personalmente uso los dos indistintamente.

En general, en la jerga de C++ cuando desea referirse a tipos específicos de funciones (no miembros, miembros, que no devuelven ningún valor, ...) agrega un adjetivo a la función de nombre: una función de amigo, una función vacía, una función miembro y así sucesivamente.

0

Vamos a decir que es una función muy simple es lo mismo que un método estático de Java, sin embargo, una función no requiere una clase que existe, que lo convierte como Uri dice en una pieza de código de nivel superior. Una de las ventajas de esto es que no requerirá que se invoque una instanciación de objeto.

0

¿Es una función algo así como un método estático?

Tipo de. Pero prefiero decir que un método estático es como una función que ha sido esclavizada y encadenada a un objeto. Para una elaboración de este punto de vista, ver Execution in the Kingdom of Nouns.

Cuestiones relacionadas