Pertanyaan Apa perbedaan antara metode dan fungsi?


Bisakah seseorang memberikan penjelasan sederhana metode vs. fungsi dalam konteks OOP?


1447
2017-09-30 23:45


asal


Jawaban:


SEBUAH fungsi adalah bagian dari kode yang disebut dengan nama. Ini dapat melewati data untuk beroperasi pada (yaitu parameter) dan dapat mengembalikan data opsional (nilai kembalian). Semua data yang diteruskan ke fungsi secara eksplisit dilewatkan.

SEBUAH metode adalah sepotong kode yang disebut dengan nama yang dikaitkan dengan suatu objek. Dalam banyak hal itu identik dengan fungsi kecuali untuk dua perbedaan utama:

  1. Sebuah metode secara implisit melewati objek yang disebut.
  2. Suatu metode dapat beroperasi pada data yang terdapat di dalam kelas (mengingat bahwa suatu objek adalah turunan kelas - kelas adalah definisi, objek adalah turunan dari data tersebut).

(ini adalah penjelasan yang disederhanakan, mengabaikan masalah cakupan dll.)


1502
2017-10-01 00:00



Metode adalah pada objek.
Fungsi tidak bergantung pada objek.

Untuk Java, hanya ada metode.
Untuk C, hanya ada fungsi.

Untuk C ++ itu akan tergantung pada apakah Anda berada di kelas atau tidak.


871
2017-09-30 23:51



'metode' adalah kata berorientasi objek untuk 'fungsi'. Itu cukup banyak yang ada untuk itu (mis., Tidak ada perbedaan nyata).

Sayangnya, saya pikir banyak jawaban di sini yang mengabadikan atau memajukan gagasan bahwa ada beberapa perbedaan yang kompleks dan bermakna.

Benar-benar - tidak ada banyak untuk itu, hanya kata-kata yang berbeda untuk hal yang sama.

[penambahan terlambat]


Bahkan, seperti Brian Neal ditunjukkan dalam komentar untuk pertanyaan ini, standar C ++ tidak pernah menggunakan istilah 'metode' ketika merujuk ke fungsi anggota. Beberapa orang mungkin menganggap itu sebagai indikasi bahwa C ++ sebenarnya bukan bahasa berorientasi objek; namun, saya lebih suka menganggapnya sebagai indikasi bahwa sekelompok orang yang cukup pintar tidak berpikir ada alasan kuat untuk menggunakan istilah yang berbeda.


165
2017-09-30 23:48



Secara umum: metode adalah fungsi yang dimiliki kelas, fungsi dapat berada pada ruang lingkup kode lainnya sehingga Anda dapat menyatakan bahwa semua metode adalah fungsi, tetapi tidak semua fungsi adalah metode:

Ambil contoh python berikut:

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

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

knock_door()

Contoh yang diberikan menunjukkan Anda kelas yang disebut "Pintu" yang memiliki metode atau tindakan yang disebut "terbuka", itu disebut metode karena dideklarasikan di dalam kelas. Ada bagian lain dari kode dengan "def" tepat di bawah yang mendefinisikan fungsi, itu adalah fungsi karena tidak dideklarasikan di dalam kelas, fungsi ini memanggil metode yang kami tentukan di dalam kelas kami seperti yang Anda lihat dan akhirnya fungsi ini sedang disebut dengan sendirinya.

Seperti yang Anda lihat Anda dapat memanggil fungsi di mana saja tetapi jika Anda ingin memanggil metode baik Anda harus melewati objek baru dari jenis yang sama dengan kelas metode yang dideklarasikan (Class.method (objek)) atau Anda harus memohon metode di dalam objek (object.Method ()), setidaknya dengan python.

Pikirkan metode sebagai hal-hal yang hanya dapat dilakukan oleh satu entitas, jadi jika Anda memiliki kelas Anjing, akan masuk akal untuk memiliki fungsi kulit kayu hanya di dalam kelas itu dan itu akan menjadi metode, jika Anda juga memiliki kelas Orang, itu mungkin masuk akal untuk tulis "umpan" fungsi karena itu bukan milik kelas apa pun karena manusia dan anjing dapat diberi makan dan Anda dapat menyebutnya sebagai fungsi karena ia bukan milik kelas apa pun secara khusus.


81
2017-10-01 00:33



Definisi yang sangat umum tentang perbedaan utama antara a Fungsi dan a metode:

Fungsi didefinisikan di luar kelas, sedangkan Metode didefinisikan di dalam dan bagian dari kelas.


35
2017-10-28 23:08



Jika Anda merasa ingin membaca di sini adalah "Perkenalan saya dengan metode OO"

Ide di balik paradigma Object Oriented adalah untuk "ancaman" perangkat lunak terdiri dari .. baik "objek". Objek di dunia nyata memiliki properti, misalnya jika Anda memiliki Karyawan, karyawan memiliki nama, id karyawan, posisi, ia milik departemen dll, dll.

Objek juga tahu bagaimana menangani atributnya dan melakukan beberapa operasi pada mereka. Katakanlah jika kita ingin tahu apa yang dilakukan karyawan saat ini, kami akan bertanya kepadanya.

employe whatAreYouDoing.

Bahwa "whatAreYouDoing" adalah "pesan" yang dikirim ke objek. Objek tahu bagaimana menjawab pertanyaan itu, dikatakan memiliki "metode" untuk menyelesaikan pertanyaan.

Jadi, cara benda-benda harus mengekspos perilakunya disebut metode. Metode demikian adalah objek artifak harus "melakukan" sesuatu.

Metode lain yang memungkinkan adalah

employee whatIsYourName
employee whatIsYourDepartmentsName

dll.

Fungsi di sisi lain adalah cara bahasa pemrograman untuk menghitung beberapa data, misalnya Anda mungkin memiliki fungsi addValues ​​(8, 8) yang mengembalikan 16

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

Karena bahasa pemrograman populer pertama (seperti fortran, c, pascal) tidak mencakup paradigma OO, mereka hanya memanggil "fungsi" artefak ini.

misalnya fungsi sebelumnya di C adalah:

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

Tidak "alami" untuk mengatakan suatu objek memiliki "fungsi" untuk melakukan beberapa tindakan, karena fungsi lebih terkait dengan hal-hal matematika sementara Karyawan memiliki sedikit matematika di atasnya, tetapi Anda dapat memiliki metode yang persis sama dengan fungsi, misalnya di Jawa ini akan menjadi fungsi addValues ​​yang setara.

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

Terlihat tidak asing? Itu karena Java berakar pada C ++ dan C ++ on C.

Pada akhirnya hanyalah sebuah konsep, dalam implementasinya mereka mungkin terlihat sama, tetapi dalam dokumentasi OO ini disebut metode.

Berikut adalah contoh objek Employee sebelumnya di 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.

Perbedaannya kemudian, adalah pada "domain" di mana ia diterapkan.

AppleScript memiliki gagasan matfather "bahasa alami", yang pada titik tertentu OO miliki. Misalnya Smalltalk. Saya harap mungkin lebih mudah bagi Anda untuk memahami metode dalam objek setelah membaca ini.

CATATAN: Kode tidak dikompilasi, hanya untuk dijadikan contoh. Jangan ragu untuk memodifikasi pos dan menambahkan contoh Python.


26
2017-10-08 00:07



Cara sederhana untuk diingat:

  • Fpenguraian → Free (Gratis berarti bukan milik objek atau kelas)
  • Method → Mbara (Seorang anggota objek atau kelas)

20
2017-09-30 23:56



Di dunia OO, keduanya biasanya digunakan untuk mengartikan hal yang sama.

Dari perspektif Matematika dan CS murni, fungsi akan selalu mengembalikan hasil yang sama ketika dipanggil dengan argumen yang sama (f (x, y) = (x + y)). Sebuah metode di sisi lain, biasanya terkait dengan turunan kelas. Sekali lagi, kebanyakan bahasa OO modern tidak lagi menggunakan "fungsi" panjang untuk sebagian besar. Banyak metode statis bisa sangat mirip fungsi, karena mereka biasanya tidak memiliki keadaan (tidak selalu benar).


16
2017-09-30 23:55



Katakanlah suatu fungsi adalah blok kode (biasanya dengan ruang lingkupnya sendiri, dan kadang-kadang dengan penutupnya sendiri) yang mungkin menerima beberapa argumen dan mungkin juga mengembalikan hasil.

Metode adalah fungsi yang dimiliki oleh suatu objek (dalam beberapa sistem berorientasi objek, lebih tepat dikatakan bahwa ia dimiliki oleh kelas). Menjadi "dimiliki" oleh objek / kelas berarti Anda merujuk ke metode melalui objek / kelas; misalnya, di Jawa jika Anda ingin menjalankan metode "buka ()" yang dimiliki oleh objek "pintu" Anda harus menulis "door.open ()".

Biasanya metode juga mendapatkan beberapa atribut tambahan yang menggambarkan perilaku mereka dalam objek / kelas, misalnya: visibilitas (terkait dengan konsep enkapsulasi berorientasi objek) yang mendefinisikan dari mana objek (atau kelas) metode dapat dipanggil.

Dalam banyak bahasa berorientasi objek, semua "fungsi" milik beberapa objek (atau kelas) dan sebagainya dalam bahasa-bahasa ini tidak ada fungsi yang bukan metode.


14
2017-10-01 00:54