function what Qual a diferença entre um método e uma função?




what means object oriented programming (24)

Eu sei que muitos outros já responderam, mas descobri que seguir é uma resposta simples, mas eficaz, de uma única linha. Embora não pareça muito melhor do que outras respostas aqui, mas se você ler atentamente, tem tudo que você precisa saber sobre o método vs função.

Um método é uma função que tem um receptor definido, em termos OOP, um método é uma função em uma instância de um objeto.

Alguém pode fornecer uma explicação simples de métodos vs. funções no contexto de POO?


Uma função é um conceito matemático. Por exemplo:

f(x,y) = sin(x) + cos(y)

diz que a função f () retornará o sin do primeiro parâmetro adicionado ao cosseno do segundo parâmetro. É só matemática. Como acontece sin () e cos () também são funções. Uma função tem outra propriedade: todas as chamadas para uma função com os mesmos parâmetros devem retornar o mesmo resultado.

Um método, por outro lado, é uma função que está relacionada a um objeto em uma linguagem orientada a objetos. Ele tem um parâmetro implícito: o objeto que está sendo usado (e é o estado).

Portanto, se você tiver um objeto Z com um método g (x), poderá ver o seguinte:

Z.g(x) = sin(x) + cos(Z.y)

Neste caso, o parâmetro x é passado, o mesmo que no exemplo da função anterior. No entanto, o parâmetro para cos () é um valor que vive dentro do objeto Z. Z e os dados que residem dentro dele (Zy) são parâmetros implícitos para o método g () de Z.


para mim: a função de um método e uma função é a mesma se eu concordar que:

  • uma função pode retornar um valor
  • pode esperar parâmetros

Assim como qualquer pedaço de código, você pode ter objetos que você coloca e você pode ter um objeto que vem como resultado. Ao fazer isso, eles podem alterar o estado de um objeto, mas isso não alteraria seu funcionamento básico para mim.

Pode haver uma diferença de definição nas funções de chamada de objetos ou outros códigos. Mas isso não é algo para uma diferenciação verbal e é por isso que as pessoas as trocam? O exemplo de menção de computação eu teria cuidado com. porque eu contrato emprega para fazer meus cálculos:

new Employer().calculateSum( 8, 8 );

Ao fazer isso, posso confiar em um empregador responsável pelos cálculos. Se ele quer mais dinheiro, eu o libero e deixo que a função do coletor de lixo de eliminar funcionários não-empregados faça o resto e consiga um novo funcionário.

Mesmo argumentando que um método é uma função de objetos e uma função é desconectada, a computação não me ajudará. O próprio descritor de função e, idealmente, a documentação da função me dirá o que precisa e o que pode retornar. O resto, como manipular o estado de algum objeto, não é realmente transparente para mim. Espero que ambas as funções e métodos forneçam e manipulem o que eles reivindicam sem precisar saber em detalhes como eles fazem isso. Até mesmo uma função computacional pura pode alterar o estado do console ou anexá-lo a um arquivo de log.


As pessoas da IMHO só queriam inventar novas palavras para facilitar a comunicação entre os programadores quando eles queriam se referir a funções dentro de objetos.

Se você está dizendo métodos, você quer dizer funções dentro da classe. Se você está dizendo funções que você quer dizer simplesmente funciona fora da classe.

A verdade é que ambas as palavras são usadas para descrever funções. Mesmo se você usou errado, nada de errado acontece. Ambas as palavras descrevem bem o que você deseja alcançar no seu código.

Função é um código que tem que desempenhar um papel ( uma função ) de fazer algo. O método é um método para resolver o problema.

Faz a mesma coisa. É a mesma coisa. Se você quiser ser super preciso e concordar com a convenção, pode chamar métodos como as funções dentro dos objetos.


'method' é a palavra orientada a objeto para 'function' . Isso é praticamente tudo que existe para isso (ou seja, nenhuma diferença real).

Infelizmente, acho que muitas das respostas aqui estão perpetuando ou avançando a ideia de que há alguma diferença significativa e significativa.

Realmente - não há tanto assim, apenas palavras diferentes para a mesma coisa.

[adição tardia]

De fato, como Brian Neal apontou em um comentário a essa questão , o padrão C ++ nunca usa o termo 'método' ao referir-se a funções-membro. Algumas pessoas podem entender isso como uma indicação de que o C ++ não é realmente uma linguagem orientada a objetos; no entanto, prefiro considerá-lo como uma indicação de que um grupo muito inteligente de pessoas não achava que houvesse uma razão particularmente forte para usar um termo diferente.


Função é um conjunto de lógica que pode ser usado para manipular dados.

Enquanto, Method é a função que é usada para manipular os dados do objeto onde ele pertence. Então, tecnicamente, se você tem uma função que não está completamente relacionada à sua classe, mas foi declarada na classe, ela não é um método; É chamado de design ruim.


Em geral: métodos são funções que pertencem a uma classe, funções podem estar em qualquer outro escopo do código, então você poderia afirmar que todos os métodos são funções, mas nem todas as funções são métodos:

Tome o seguinte exemplo de python:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

O exemplo dado mostra uma classe chamada "Porta" que tem um método ou ação chamada "aberta", é chamada de método porque foi declarada dentro de uma classe. Existe outra parte do código com "def" logo abaixo que define uma função, é uma função porque não é declarada dentro de uma classe, esta função chama o método que definimos dentro de nossa classe como você pode ver e finalmente a função está sendo chamado por si só.

Como você pode ver, você pode chamar uma função em qualquer lugar, mas se você quiser chamar um método, você tem que passar um novo objeto do mesmo tipo da classe que o método é declarado (Class.method (object)) ou você deve invocar o método dentro do objeto (object.Method ()), pelo menos em python.

Pense em métodos como coisas que apenas uma entidade pode fazer, portanto, se você tiver uma classe Dog, faria sentido ter uma função de casca somente dentro dessa classe e isso seria um método, se você também tem uma classe Person, poderia fazer sentido escreva uma função "feed" para que não pertença a nenhuma classe, pois humanos e cães podem ser alimentados e você poderia chamar isso de uma função, já que ela não pertence a nenhuma classe em particular.


Historicamente, pode ter havido uma diferença sutil, com um "método" sendo algo que não retorna um valor, e uma "função" que é o que faz. Cada linguagem tem seu próprio léxico de termos com significado especial.

Em "C" , a palavra "função" significa uma rotina de programa .

Em Java , o termo "função" não tem nenhum significado especial. Considerando que "método" significa uma das rotinas que forma a implementação de uma classe.

Em C # isso seria traduzido como:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

Mas realmente, eu reitero que realmente não há diferença nos dois conceitos. Se você usar o termo "função" em discussões informais sobre Java, as pessoas assumirão que você quis dizer "método" e continuar. Não use em documentos apropriados ou apresentações sobre Java, ou você parecerá tolo.


Aqui está alguma explicação para o método versus função usando exemplos de JavaScript:

test(20, 50); é função definir e usar para executar algumas etapas ou retornar algo que pode ser armazenado / usado em algum lugar.

Você pode reutilizar código: defina o código uma vez e use-o várias vezes.

Você pode usar o mesmo código várias vezes com argumentos diferentes para produzir resultados diferentes.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); aqui test () pode ser um método de algum objeto ou personalizado definido um protótipo para objetos embutidos, aqui está mais explicação:

Métodos JavaScript são as ações que podem ser realizadas em objetos.

Um método JavaScript é uma propriedade que contém uma definição de função.

Propriedade / método interno para strings em javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Exemplo personalizado:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

Você pode definir propriedades para String, Array, etc, bem como por exemplo

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Algumas referências: Método de Objeto Javascript , Functions , Mais informações sobre protótipo


Como você mencionou o Python, o seguinte pode ser uma ilustração útil do relacionamento entre métodos e objetos na maioria das linguagens modernas orientadas a objetos. Em suma, o que eles chamam de "método" é apenas uma função que recebe um argumento extra (como outras respostas apontaram), mas o Python torna isso mais explícito do que a maioria das linguagens.

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

Agora compare a função greet_with_greeter e o método greet : a única diferença é o nome do primeiro parâmetro (na função que chamei de "greeter", no método que eu chamei de "self"). Então eu posso usar o método greet exatamente da mesma maneira que eu uso a função greet_with_greeter (usando a sintaxe "dot" para chegar a ela, já que eu a defini dentro de uma classe):

Greeter.greet(hello_greeter, "World")

Então eu efetivamente transformei um método em uma função. Posso transformar uma função em um método? Bem, como o Python permite que você mexa com as classes depois que elas são definidas, vamos tentar:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Sim, a função greet_with_greeter agora também é conhecida como o método greet2 . Isso mostra a única diferença real entre um método e uma função: quando você chama um método "on" em um objeto chamando object.method(args) , a linguagem magicamente transforma isso em method(object, args) .

(OO puristas podem argumentar que um método é algo diferente de uma função, e se você entrar em Python avançado ou Ruby - ou Smalltalk! - você vai começar a ver o seu ponto. Também algumas linguagens dão aos métodos acesso especial aos bits de um objeto. a principal diferença conceitual ainda é o parâmetro extra oculto.


Função ou um método é uma parte do código que pode ser chamada e que executa algumas operações e, opcionalmente, retorna um valor.

Na linguagem C , o termo função é usado. O pessoal do Java & C # diria que é um método (e uma função neste caso é definida dentro de uma classe / objeto).

Um programador C ++ pode chamá-lo de uma função ou, às vezes, método (dependendo se eles estão escrevendo código c ++ estilo procedural ou estão fazendo maneira orientada a objetos de C ++, também um programador C / C ++ apenas chamaria uma função porque o termo 'método' é menos frequentemente usado na literatura C / C ++).

Você usa uma função apenas chamando seu nome como

result = mySum(num1, num2);


Você chamaria um método referenciando seu objeto primeiro como,

result = MyCalc.mySum(num1,num2);

Method é um nome para uma ação. Função é um identificador para um método.


Uma classe é a coleção de alguns dados e função opcionalmente com um construtor.

Enquanto você cria uma instância (cópia, replicação) dessa classe em particular, o construtor inicializa a classe e retorna um objeto.

Agora a classe se torna objeto (sem construtor) e as funções são conhecidas como método no contexto do objeto.

Então, basicamente

Classe <== new ==> Objeto

Função <== new ==> Method

Em java, geralmente é dito como o nome do construtor igual ao nome da classe, mas em real esse construtor é como o bloco de instâncias e o bloco estático, mas com um usuário definindo o tipo de retorno (isto é, tipo de classe)

Enquanto a classe pode ter um bloco estático, bloco de instância, construtor, função O objeto geralmente tem apenas dados e método.


Métodos são funções de classes. No jargão normal, as pessoas trocam de método e função por toda parte. Basicamente, você pode pensar neles como a mesma coisa (não tenho certeza se funções globais são chamadas de métodos).

http://en.wikipedia.org/wiki/Method_(computer_science)


Para uma aproximação de primeira ordem, um método (em estilo C ++ OO) é outra palavra para uma função membro, que é uma função que faz parte de uma classe.

Em linguagens como C / C ++ você pode ter funções que não são membros de uma classe; você não chama uma função não associada a uma classe com um método.


Se você acha que ler aqui é "Minha introdução aos métodos OO"

A idéia por trás do paradigma Orientado a Objetos é "ameaçar" o software é composto de ... bem "objetos". Objetos no mundo real têm propriedades, por exemplo, se você tem um funcionário, o funcionário tem um nome, um ID de funcionário, uma posição, ele pertence a um departamento etc.

O objeto também sabe como lidar com seus atributos e realizar algumas operações neles. Digamos que, se quisermos saber o que um funcionário está fazendo agora, perguntamos a ele.

employe whatAreYouDoing.

That "whatAreYouDoing" é uma "mensagem" enviada para o objeto. O objeto sabe responder a essas perguntas, diz-se que tem um "método" para resolver a questão.

Portanto, o modo como os objetos precisam expor seu comportamento é chamado de métodos. Os métodos, assim, são o objeto de artefato que tem que "fazer" alguma coisa.

Outros métodos possíveis são

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

As funções, por outro lado, são formas que uma linguagem de programação tem para calcular alguns dados, por exemplo, você pode ter a função addValues ​​(8, 8) que retorna 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Como as primeiras linguagens de programação populares (como fortran, c, pascal) não cobrem o paradigma OO, elas apenas chamam essas funções de artefatos.

por exemplo, a função anterior em C seria:

int addValues( int x, int y ) 
{
   return x + y;
}

Não é "natural" dizer que um objeto tem uma "função" para executar alguma ação, porque as funções estão mais relacionadas a coisas matemáticas enquanto um Funcionário tem pouca matemática, mas você pode ter métodos que fazem exatamente o mesmo que funções, por exemplo, em Java, isso seria a função addValues ​​equivalente.

public static int addValues( int x, int y ) {
    return x + y;
}

Parece familiar? Isso porque o Java tem suas raízes em C ++ e C ++ em C.

No final é apenas um conceito, na implementação eles podem parecer os mesmos, mas na documentação OO eles são chamados de método.

Aqui está um exemplo do objeto Employee anteriormente em Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

A diferença então, está no "domínio" onde é aplicado.

AppleScript tem a idéia de "língua natural", que em algum momento OO tinha. Por exemplo, Smalltalk. Espero que seja razoavelmente mais fácil para você entender métodos em objetos depois de ler isto.

NOTA: O código não deve ser compilado, apenas para servir como exemplo. Sinta-se à vontade para modificar o post e adicionar o exemplo do Python.


Uma definição muito geral da principal diferença entre uma função e um método :

Funções são definidas fora de classes, enquanto Métodos são definidos dentro e parte de classes.


Em linguagens OO, como Object Pascal ou C ++, um "método" é uma função associada a um objeto. Por exemplo, um objeto "Dog" pode ter uma função "bark" e isso seria considerado um "Method". Em contraste, a função "StrLen" é a única (fornece o tamanho de uma string fornecida como argumento). É, portanto, apenas uma "função". Javascript também é tecnicamente orientado a objetos, mas enfrenta muitas limitações em comparação com uma linguagem completa como C ++, C # ou Pascal. No entanto, a distinção ainda deve ser mantida.

Alguns fatos adicionais: C # é totalmente orientado a objetos, portanto você não pode criar "funções" independentes. Em C #, cada função é vinculada a um objeto e, portanto, tecnicamente, é um "método". O kicker é que poucas pessoas em C # se referem a eles como "métodos" - eles apenas usam o termo "funções" porque não há nenhuma distinção real a ser feita.

Finalmente - assim, qualquer guru de Pascal não pula em mim aqui - Pascal também diferencia entre "funções" (que retornam um valor) e "procedimentos" que não o fazem. C # não faz essa distinção explicitamente, embora você possa, obviamente, optar por retornar um valor ou não.


No mundo OO, os dois são comumente usados ​​para significar a mesma coisa.

De uma perspectiva matemática e CS pura, uma função sempre retornará o mesmo resultado quando chamada com os mesmos argumentos (f (x, y) = (x + y)). Um método, por outro lado, é tipicamente associado a uma instância de uma classe. Novamente, porém, a maioria das linguagens OO modernas não usa mais o termo "função" na maioria das vezes. Muitos métodos estáticos podem ser bem parecidos com funções, já que eles normalmente não possuem estado (nem sempre verdadeiro).


Digamos que uma função seja um bloco de código (geralmente com seu próprio escopo e, às vezes, com seu próprio fechamento) que pode receber alguns argumentos e também retornar um resultado.

Um método é uma função que pertence a um objeto (em alguns sistemas orientados a objeto, é mais correto dizer que pertence a uma classe). Ser "possuído" por um objeto / classe significa que você se refere ao método através do objeto / classe; por exemplo, em Java, se você quiser invocar um método "open ()" de propriedade de um objeto "door" você precisa escrever "door.open ()".

Normalmente os métodos também ganham alguns atributos extras descrevendo seu comportamento dentro do objeto / classe, por exemplo: visibilidade (relacionada ao conceito de encapsulamento orientado a objetos) que define de quais objetos (ou classes) o método pode ser invocado.

Em muitas linguagens orientadas a objeto, todas as "funções" pertencem a algum objeto (ou classe) e, portanto, nessas linguagens não há funções que não sejam métodos.


Pelo que entendi, um método é qualquer operação que possa ser executada em uma classe. É um termo geral usado em programação.

Em muitos idiomas, os métodos são representados por funções e sub-rotinas. A principal distinção que a maioria das linguagens usa para isso é que as funções podem retornar um valor para o chamador e uma sub-rotina pode não retornar. No entanto, muitas linguagens modernas só têm funções, mas estas podem, opcionalmente, não retornar nenhum valor.

Por exemplo, digamos que você queira descrever um gato e gostaria de poder bocejar. Você criaria uma classe Cat, com um método Yawn, que provavelmente seria uma função sem nenhum valor de retorno.


Uma função é uma parte do código que é chamada pelo nome. Pode ser passado dados para operar em (isto é, os parâmetros) e pode, opcionalmente, retornar dados (o valor de retorno). Todos os dados que são passados ​​para uma função são explicitamente passados.

Um método é um pedaço de código chamado por um nome associado a um objeto. Na maioria dos aspectos, é idêntico a uma função, exceto por duas diferenças principais:

  1. Um método é implicitamente passado o objeto no qual ele foi chamado.
  2. Um método é capaz de operar em dados contidos na classe (lembrando que um objeto é uma instância de uma classe - a classe é a definição, o objeto é uma instância desses dados).

(esta é uma explicação simplificada, ignorando questões de scope etc.)


Não vamos complicar mais o que deveria ser uma resposta muito simples. Métodos e funções são a mesma coisa. Você chama uma função de function quando está fora de uma classe e chama uma função de método quando ela é escrita dentro de uma classe.


Um método está em um objeto.
Uma função é independente de um objeto.

Para Java, existem apenas métodos.
Para C, existem apenas funções.

Para C ++, isso depende de você estar ou não em uma classe.





terminology