Pergunta

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

Foi útil?

Solução

A função é um pedaço de código que é chamado pelo nome. Ele pode ser passada de dados para operar em (isto é, os parâmetros) e, opcionalmente, pode retornar dados (o valor de retorno). Todos os dados que são passados ??para uma função é passado explicitamente.

A método é um pedaço de código que é chamado por um nome que está associado com um objeto. Na maioria dos aspectos, é idêntica a uma função, exceto por duas diferenças fundamentais:

  1. Um método é passado implicitamente o objeto em que foi chamado.
  2. Um método é capaz de operar em dados que estão contidos dentro da classe. (Lembrando que um objeto é uma instância de uma classe - a classe é a definição, o objeto é uma instância de que os dados)

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

Outras dicas

Um método é sobre um objeto.
Uma função é independente de um objecto.

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

Para C ++ que depende se você está ou não em uma classe.

'método' é a palavra orientada a objeto para 'função' . Isso é muito bonito tudo que existe para ela (ie., Nenhuma diferença real).

Infelizmente, eu acho que muitas das respostas aqui estão perpetuando ou avançar a ideia de que há algum complexo diferença significativa.

Realmente -. Não é tudo o que muito a ele, apenas palavras diferentes para a mesma coisa

[adição tardia]


Na verdade, como Brian Neal fora apontado em um comentário para this, C ++ padrão nunca usa o termo 'método' quando referindo-se a funções membro. Algumas pessoas podem tomar isso como uma indicação de que C ++ não é realmente uma linguagem orientada a objetos; No entanto, eu prefiro tomar isso como uma indicação de que um grupo muito inteligente de pessoas fez não acho que houve um particularmente forte razão para usar um termo diferente.

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

Tome o seguinte exemplo 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 "aberto", ele é chamado de método porque ele foi declarado dentro de uma classe. Há uma 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 foi definido dentro de nossa classe como você pode ver e, finalmente, a função está sendo chamado por si.

Como você pode ver, você pode chamar uma função em qualquer lugar, mas se você quiser chamar um método ou você tem que passar por um novo objeto do mesmo tipo que a classe o método é declarado (Class.method (objeto)) ou você ter de chamar o método no interior do objecto (objeto.método ()), pelo menos no pitão.

Pense em métodos como as coisas apenas uma entidade pode fazer, por isso, se você tem uma classe Dog, faria sentido ter uma função casca somente dentro dessa classe e que seria um método, se você tem também uma classe Person que podia faz sentido para escrever um "feed" função para que não pertence a qualquer classe desde que ambos os seres humanos e cães podem ser alimentados e você poderia chamar isso de uma função, uma vez que não pertence a qualquer classe em particular.

Uma definição muito geral de que a principal diferença entre um Função e Método :

As funções são definidas fora das aulas, enquanto os métodos são definidos dentro de e parte de classes.

A maneira simples de lembrar:

  • F unção ? F ree (meios gratuitos não pertencem a um objeto ou classe)
  • M étodo ? M brasa (Um membro de um objecto ou classe)

Se você sentir como lendo aqui é "Minha introdução aos métodos OO"

A idéia por trás objeto paradigma orientado é a "ameaça" do software é composto por .. bem "objetos". Os objetos no mundo real têm propriedades, por exemplo, se você tem um empregado, o empregado tem um nome, uma identificação do empregado, uma posição, ele pertence a um departamento etc. etc.

O objeto também sabem como lidar com seus atributos e executar algumas operações sobre eles. Vamos dizer que se queremos saber o que um funcionário está fazendo agora gostaríamos de perguntar a ele.

employe whatAreYouDoing.

Que "whatAreYouDoing" é uma "mensagem" enviada para o objeto. O objeto sabe como resposta a essa pergunta, diz-se que tem um "método" para resolver a questão.

Assim, a forma como os objetos têm para expor o seu comportamento são chamados métodos. Métodos são, portanto, o objeto artefato tem que "fazer" alguma coisa.

Outros métodos possíveis são

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Funções no outro lado são maneiras uma linguagem de programação tem para calcular alguns dados, por exemplo, você pode ter os addValues ??função (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...

Desde primeiras linguagens de programação populares (tais como Fortran, C, Pascal) não cobrem o paradigma OO, eles só chamam a estes artefatos "Funções".

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

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

Não é "natural" para dizer um objeto tem uma "função" para executar alguma ação, porque as funções são mais relacionadas com o material matemática enquanto um funcionário tem pouco matemática sobre ele, mas você pode ter métodos que fazem exatamente a mesma como 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 ter a mesma aparência, mas na documentação OO estes são chamados de método.

aqui está um exemplo do objeto previamente empregado 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, é sobre o "domínio" onde é aplicado.

AppleScript tem a idéia de matphor "linguagem natural", que em algum ponto OO teve. Por exemplo Smalltalk. Espero que pode ser razoável mais fácil para você entender métodos em objetos depois de ler este.

NOTA: O código não é para ser compilado, apenas para servir de exemplo. Sinta-se livre para modificar o cargo e adicionar Python exemplo.

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

De uma perspectiva matemática e CS puro, uma função sempre retornará o mesmo resultado quando chamado com os mesmos argumentos (f (x, y) = (x + y)). Um método, por outro lado, está tipicamente associado com uma instância de uma classe. Novamente, porém, a maioria das modernas linguagens OO mais usar o termo "função" para a maior parte. Muitos métodos estáticos pode ser bastante como funções, como eles normalmente têm nenhum estado (nem sempre é verdade).

Digamos que um função é 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 pode retornar um resultado.

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

Normalmente métodos também ganhar alguns atributos adicionais descrevendo o seu comportamento no interior do objecto / classe, por exemplo: visibilidade (relacionada com o conceito orientada a objectos de encapsulamento) que define a partir da qual objectos (ou classes) do método pode ser invocadas

Em muitas linguagens orientadas a objeto, todas as "funções" pertencer a algum objeto (ou classe) e assim em línguas não há funções que não são métodos.

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

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

diz que a função f () irá retornar o pecado do primeiro parâmetro adicionado ao cosseno do segundo parâmetro. É apenas matemática. Como acontece sin () e cos () também são funções. A função tem outro imóvel: todas as chamadas para uma função com os mesmos parâmetros, deve 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 a ser postas em prática (e do Estado)

Então, se você tem um Z objeto com um método g (x), que você pode ver o seguinte:

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

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

de função ou um método é uma peça que pode ser chamado com o nome de código que executa algumas operações e opcionalmente retorna um valor.

Em Idioma do termo função C é usado. Java & C # pessoas diria que um método (e uma função, neste caso, é definido dentro de uma classe / objeto).

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

Você usa uma função por apenas chamando-o de nome como,

result = mySum(num1, num2);


Você poderia chamar um método referenciando seu objeto primeiro tipo,

result = MyCalc.mySum(num1,num2);

Historicamente, pode ter havido uma diferença sutil com um "método" ser algo que não retorna um valor, e uma "função" one qual idioma does.Each tem seu próprio léxico de termos com um significado especial.

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

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

Em C # que se traduziria como:

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

Mas, realmente, eu reiterar que não há realmente nenhuma diferença entre os 2 conceitos. Se você usa o termo "função" em discussões informais sobre Java, as pessoas vão assumir que você quis dizer "método" e seguir em frente. Não usá-lo em documentos adequados ou apresentações sobre Java, ou você vai parecer ridículo.

Métodos em um ato da classe na instância da classe, chamado de objeto.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

OO línguas tais como objecto Pascal ou C ++, um "método" é uma função associada com um objecto. Assim, por exemplo, um objeto de "cão" pode ter uma função de "casca" e isso seria considerado um "método". Em contraste, a função "StrLen" fica sozinho (ele fornece o comprimento de uma string fornecido como um argumento). É, portanto, apenas a "função". Javascript é tecnicamente Orientado a Objetos tão bem, mas enfrenta muitas limitações em comparação com uma linguagem full-blown como C ++, C # ou Pascal. No entanto, a distinção ainda deve segurar.

Um par de fatos adicionais: "funções" C # é totalmente orientada a objetos para que você não pode criar autônomo Em C # todas as funções é ligado a um objecto e é, portanto, tecnicamente, um "método." O retrocesso é que poucas pessoas em C # se referem a eles como "métodos." - eles só usam o termo "funções", porque não há qualquer distinção real a ser feita

Finalmente - apenas para que nenhum gurus Pascal não saltar sobre mim aqui - Pascal também diferencia entre "funções" (que retornam um valor) e "procedimentos" que não o fazem. faz C # não fazem essa distinção explícita, embora você pode, é claro, optar por retornar um valor ou não.

Uma vez que você mencionou Python, o seguinte pode ser uma ilustração útil da relação entre métodos e objetos na maioria das modernas linguagens orientadas a objeto. Em poucas palavras o que eles chamam de um "método" é apenas uma função que é passado um argumento extra (como outras respostas têm apontado), mas Python faz isso mais explícito do que a maioria dos idiomas.

# 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 o greet_with_greeter função eo greet método: a única diferença é o nome do primeiro parâmetro (na função de I chamou de "saudação", no método I chamou de "auto"). Então, eu posso usar o método greet exatamente da mesma maneira como eu uso a função greet_with_greeter (usando o "ponto" sintaxe para chegar a ele, desde que o definiu dentro de uma classe):

Greeter.greet(hello_greeter, "World")

Então eu efetivamente virou um método em uma função. Posso transformar uma função em um método? Bem, como Python permite mexer com aulas depois de serem definidos, vamos tentar:

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

Sim, o greet_with_greeter função é agora também conhecido como o greet2 método. Isso mostra a única diferença real entre um método e uma função:. Quando você chamar um método "em" um objeto chamando object.method(args), a língua magicamente transforma em method(object, args)

(puristas OO pode argumentar 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 línguas dar métodos de acesso especial para bits de um. objeto. Mas a principal diferença conceitual ainda é o parâmetro extra escondida.)

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

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

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

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

Assim como qualquer pedaço de código que você pode ter objetos que você colocou no e você pode ter um objeto que vem como resultado. Durante fazendo que eles possam alterar o estado de um objeto, mas isso não mudaria o seu funcionamento básico para mim.

Pode haver uma definição diferenciação em chamar funções de objetos ou outros códigos. Mas isso não é algo para um diferenciações verbais e por isso as pessoas trocam-los? A menciona exemplo de computação Gostaria de ter cuidado com. porque eu contratar emprega para fazer meus cálculos:

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

Ao fazê-lo dessa maneira que eu posso contar com um empregador sendo responsável por cálculos. Se ele quer mais dinheiro que eu libertá-lo e deixar a função do coletor carbage de dispor funcionários não utilizados fazer o resto e obter um novo funcionário.

Mesmo argumentando que um método é uma função de objetos e uma função é a computação desconectados não vai me ajudar. O próprio descritor e função idealmente documentação da função vai me dizer o que precisa eo que ele pode retornar. O resto, como manipular o estado de algum objeto não é realmente transparente para mim. Eu espero ambas as funções e métodos para entregar e manipular o que eles afirmam, sem a necessidade de saber em detalhes como eles fazem isso. Mesmo uma função computacional puro pode mudar de estado ou de acréscimo do console para um arquivo de log.

De minha compreensão de um método é qualquer operação que pode ser realizada em uma classe. É um termo geral usado na programação.

Em muitos métodos de idiomas são representados por funções e sub-rotinas. A principal distinção que a maioria das linguagens usam para estes é que as funções podem retornar um valor de volta para o chamador e uma sub-rotina não pode. No entanto, muitas línguas modernas têm apenas funções, mas estes opcionalmente não pode retornar qualquer valor.

Por exemplo, digamos que você quer para descrever um gato e você gostaria que para ser capaz de bocejar. Você poderia criar uma classe Cat, com um método de bocejo, o que seria mais provável ser uma função sem nenhum valor de retorno.

Para uma aproximação de primeira ordem, um método (em C ++ OO estilo) é outra palavra para uma função de 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 chamar uma função não associada a uma classe de um método.

IMHO pessoas só queria inventar nova palavra para a comunicação mais fácil entre os programadores quando 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 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 erradamente nada de errado acontece. Ambas as palavras descrevem bem o que você deseja alcançar em seu código.

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

Ele faz a mesma coisa. É a mesma coisa. Se você quer ser super precisa e ir junto com a convenção você pode chamar métodos como as funções dentro de objetos.

Função é o conceito pertencentes principalmente à Procedimento de programação orientada , onde uma função é uma entidade que pode processar dados e retorna valor

O método é o conceito de Programação Orientada a Objetos , onde um método é um membro de uma classe que em sua maioria não processar sobre os membros da classe.

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

Eu não sou um especialista, mas isso é o que eu sei:

  1. A função é termo linguagem C, refere-se a um pedaço de código e o nome da função será o identificador para utilizar esta função.

  2. O método é o termo OO, normalmente tem um este ponteiro no parâmetro de função. Você não pode invocar este pedaço de código como C, você precisa usar o objeto para invocá-lo.

  3. Os métodos de invocação também são diferentes. Aqui invoke significado para encontrar o endereço deste pedaço de código. C / C ++, o tempo de ligação irá usar o símbolo da função de localizar.

  4. Objecive-C é diferente. Invocar o que significa uma função C de usar estrutura de dados para localizar o endereço. Isso significa que tudo é conhecido em tempo de execução.

Eu sei que muitos outros já respondeu, mas eu achei a seguir é uma simples, mas resposta única linha eficaz. Embora ele não parece muito melhor do que outras respostas aqui, mas se você lê-lo com cuidado, 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 de OOP, um método é uma função de uma instância de um objecto.

diferença entre os métodos e funções

A partir da leitura este doc no Microsoft

Os membros que contêm código executável são conhecidos coletivamente como os membros de função de uma classe. A secção anterior descreve métodos, que são o tipo principal de membros de função. Esta seção descreve os outros tipos de membros de funções suportadas pelo C #:. Construtores, propriedades, indexadores, eventos, operadores e finalizadores

métodos

Assim são o subconjunto das funções. Cada método é uma função, mas não todas as funções é um método, por exemplo, um constructor não pode ser dito como um método , mas é uma função.

Aqui está uma explicação para a função método vs. usando exemplos de JavaScript:

test(20, 50); é função de definir e usar para executar algumas etapas ou de retorno algo de volta que podem ser armazenados em algum lugar / usado.

Você pode reutilizar código:. Definir o código uma vez e usá-lo muitas vezes

Você pode usar o mesmo código muitas 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 é mais explicação:

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

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

Built-in da propriedade / método para cordas em javascript:

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

exemplo Custom:

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'

Pode definir propriedades para corda, Array, etc, bem como para 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: JavaScript Object Método , Funções , Mais informações sobre o protótipo

Função - Uma função em uma peça independente de código que inclui alguma lógica e deve ser chamado independentemente e são definidas fora da classe

.

Método - Um método é uma peça independente de código que é chamado em referência a um objecto e está ser definida dentro da classe

.

Em C ++, às vezes, o método é usado para refletir a noção de função membro de uma classe. No entanto, recentemente eu encontrei uma declaração no livro «O C ++ Linguagem de programação 4th Edition», na página 586 "classes derivadas"

Uma função virtual é às vezes chamado de método.

Este é um pouco confuso, mas ele disse que por vezes , por isso mais ou menos faz sentido, C ++ criador tende a ver métodos como funções podem ser chamados em objetos e pode se comportam polimórfico.

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

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

Agora, o objeto se tornar classe (sem construtor) & As funções são conhecidos como método no contexto de objecto.

Então, basicamente

Class <== nova ==> objeto

Função <== nova ==> Método

Em java o que é geralmente contada como que o nome do construtor mesmo nome da classe, mas em real que o construtor é como bloco instância e bloco estático, mas com ter um usuário definir o tipo de retorno (i. Tipo Classe)

Enquanto a classe pode ter um bloco estático, bloco exemplo, construtor, função O objeto geralmente têm apenas dados e método.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top