2010-06-14 45 views
14

Conozco los conceptos básicos de estos métodos, procedimientos, funciones y clases, pero siempre confundo para diferenciar entre aquellos en contraste de la programación orientada a objetos, así que, ¿puede alguien decirme la diferencia entre aquellos con ejemplos simples?método vs función vs procedimiento vs clase?

+4

Uno de estos términos no se ajusta realmente a los demás :) (con respecto a la comparabilidad) –

Respuesta

30

A clase, en la corriente de OOP, convencional, es una colección de datos (variables miembro) unidas entre sí con las funciones/procedimientos que funcionan en que los datos (funciones miembro o métodos) La clase no tiene ninguna relación con los otros tres términos, aparte del hecho de que "contiene" (más propiamente "está asociada con") la última.

Los otros tres términos ... bueno, depende.

A función es una colección de instrucciones informáticas. Lo mismo ocurre con el procedimiento . Sin embargo, en algunos lenguajes muy retentivos anales, una función devuelve un valor y un procedimiento no. En tales idiomas, los procedimientos se usan generalmente para sus efectos secundarios (como E/S) mientras que las funciones se usan para los cálculos y tienden a evitar los efectos secundarios. (Este es el uso que tiendo a favorecer. Sí, soy ese anal retentivo.)

La mayoría de los lenguajes no son tan retentivos anales, sin embargo, y como resultado las personas usarán los términos "función" y "procedimiento" indistintamente , prefiriendo uno a otro en función de sus antecedentes. (Moduladores * programadores tienden a utilizar "procedimiento", mientras que C/C++/Java/lo que tenderá a utilizar "función", por ejemplo.)

Un método es sólo la jerga para una función (o procedimiento) obligado a una clase. De hecho, no todos los lenguajes de programación orientada a objetos utilizan el término "método". En una implementación típica (¡pero no universal!), Los métodos tienen un primer parámetro implícito (llamado cosas como this o self o similar) para acceder a la clase contenedora. Esto no es, como dije, universal. Algunos lenguajes hacen que ese primer parámetro sea explícito (y, por lo tanto, permite que se le denomine como quieras), mientras que en otros aún no existe el primer parámetro mágico.


Editado para añadir este ejemplo:

La siguiente no probado y sin compilar C++ - como el código que debe mostrar qué tipo de cosas están involucrados.

class MyClass 
{ 
    int memberVariable; 

    void setMemberVariableProcedure(int v) 
    { 
    memberVariable = v; 
    } 

    int getMemberVariableFunction() 
    { 
    return memberVariable; 
    } 
}; 

void plainOldProcedure(int stuff) 
{ 
    cout << stuff; 
} 

int plainOldFunction(int stuff) 
{ 
    return 2 * stuff; 
} 

En este código getMemberVariableProcedure y getMemberVariableFunction son ambos métodos.

+3

La diferencia entre función/procedimiento no es realmente anal, es una muy buena idea y a menudo se denomina separación de comando/consulta. – kyoryu

+1

Todo lo que eso significa es que estás siendo anal como retentiva (¿o es "anal-retentiva"?) Como yo. ;) –

+0

Gracias, puedes darme un ejemplo. para diferenciar entre esto? –

3

Los procedimientos, la función y los métodos son generalmente parecidos, contienen algunos enunciados de procesamiento.

Las únicas diferencias que puedo pensar entre estos tres y los lugares donde se utilizan.

Me refiero a 'método' se utilizan generalmente para definir funciones dentro de una clase, donde se pueden definir varios tipos de acceso de usuario derecho como público, protegido, privado.

"Procedimientos", también son funciones, pero generalmente representan una serie de funciones que deben llevarse a cabo al completar una función o paralelamente a otra.


Las clases son colecciones de los atributos y métodos conexos. Los atributos definen el objeto de la clase donde los métodos son la acción realizada o realizada en la clase.

Hope, esto era útil

+0

Tradicionalmente, la diferencia entre un procedimiento y una función es que una función devuelve un valor mientras que un procedimiento no lo hace. Los lenguajes tipo C no hacen esta distinción: todo es una función, simplemente podría devolver 'void'. – walkytalky

+0

@walkytalky, gracias por agregar que – Starx

Cuestiones relacionadas