Apakah satu metode kelebihan beban yang lain, atau keduanya metode "kelebihan beban"

13

Jika saya membuat metode ini

public void foo()

Dan kemudian saya membuat versi overload seperti ini

public void foo( string bar )

Apakah kita mengatakan bahwa fungsi kedua membebani yang pertama, atau keduanya sama-sama "kelebihan beban"?

Ini akan menyiratkan (saya pikir), bahwa ada fungsi tipe dasar, yang kelebihan beban, oleh fungsi lain (agak seperti warisan, tetapi tidak benar-benar).

Dengan asumsi bahwa satu metode dapat "membebani yang lain", juga akan menyiratkan istilah seperti "overloader" dan "overloadie", jika itu hanya kata. Tetapi itu sama sekali tidak terasa benar, terutama karena Anda dapat mengalami beberapa kelebihan.

Saya sampai pada pertanyaan ini ketika saya ingin menuliskan proses menciptakan metode kelebihan beban dan saya ingin cara yang paling benar untuk menuliskannya.

Contoh:

  • Saya kelebihan beban foo
  • Saya kelebihan beban foodenganfoo( string bar )
  • Saya membuat metode kelebihan beban
  • Saya membuat foo kelebihan beban

Jadi ya, ini membuat saya berpikir, saya tidak yakin apa yang harus saya lakukan. Ada ratusan, jika bukan ribuan, deskripsi fungsi yang kelebihan online, tetapi pada pandangan pertama saya tidak dapat menemukan cara mengatasi hal ini.

Willem D'Haeseleer
sumber
Saya ingin tahu mengapa kata overload digunakan untuk ini. Sepertinya tidak masuk akal. Apa yang sedang dimuat? Bagaimana ini dimuat lagi atau berlebihan?
Martin Maat
@ MartinMaat Sudahkah Anda membaca jawaban yang diterima oleh thiton dan komentar kindall tentang itu? Mereka tampaknya melakukan pekerjaan yang baik untuk menjelaskan apa yang sedang dimuat.
8bittree
Saya sudah membaca itu, mereka menjelaskan konsepnya, bukan etomologi.
Martin Maat

Jawaban:

29

Ketika berbicara tentang kelebihan, nama fungsi kelebihan beban, bukan fungsi itu sendiri. Fungsi overloading nama adalah "overloads" dan overload nama, tetapi tidak satu sama lain. Dalam contoh Anda, "public void foo()"dan "public void foo( string bar )"keduanya membebani nama "foo". Oleh karena itu, Anda tidak dapat berbicara dalam hal kelebihan muatan dan kelebihan muatan dari salah satu fungsi, karena mereka tidak memiliki hubungan langsung.

Dalam contoh Anda, Anda dapat mengatakan bahwa Anda kelebihan "foo" (nama) dengan "foo (bilah string)" (fungsi), tetapi Anda tidak bisa mengatakan bahwa Anda membuat metode kelebihan beban, karena metode tidak pernah kelebihan beban. Anda dapat mengatakan bahwa Anda membuat metode kelebihan beban. Merumuskan "membuat foo kelebihan beban" adalah cara yang lebih buruk untuk mengatakan "kelebihan muatan foo".

thiton
sumber
Tapi bukankah setiap fungsi akan kelebihan namanya, bahkan jika tidak ada fungsi lain yang memiliki yang sama?
leftaroundabout
Saya setuju dengan ini sebagai jawaban untuk pertanyaan umum di atas. Tetapi jika satu memanggil salah satu fungsi dari yang lain, maka saya merasakan suatu perasaan di mana yang satu kelebihan beban lainnya.
Joshua Drake
3
@leftaroundabout: "Kelebihan muatan" menyiratkan bahwa Anda melakukan lebih banyak "memuat" dari biasanya, jadi istilah ini hanya digunakan ketika Anda memiliki lebih dari satu fungsi dengan nama yang sama.
ramah
Setuju dengan @kindall; kata "kelebihan" dalam konteks pengembangan perangkat lunak berarti "untuk menetapkan lebih dari satu makna untuk"; kelebihan kolom dalam DB (artinya tergantung pada bidang lain), parameter kelebihan (artinya tergantung pada parameter lain), dll. Satu metode tidak kelebihan yang lain, tetapi jika ada lebih dari satu metode dengan satu nama , namanya adalah " kelebihan beban ".
KutuluMike
15

Saya hanya akan mengatakan fookelebihan beban. Jelas tidak ada hubungan tuan / budak atau orang tua / anak yang terjadi di sini.

DeadMG
sumber
2
Setuju - itu nama metode atau operator yang kelebihan beban, bukan metode itu sendiri. Jangan bingung dengan menimpa , di mana implementasi metode yang diberikan dalam subkelas menggantikan implementasi di kelas induk.
Caleb
1
Saya setuju dengan ini juga, tetapi saya pikir thiton melakukan pekerjaan yang lebih baik dalam menjelaskannya. Terima kasih atas jawaban Anda !
Willem D'Haeseleer
3

Saya pikir cara yang baik untuk mengekspresikan ini adalah dengan fokus pada hasil akhir, bukan pada perubahan yang dilakukan ke kelas dari waktu ke waktu. Jadi, alih-alih mengatakan "Saya membebani 'foo' dengan 'foo (parameter lain)'," Anda mengatakan "foo adalah fungsi kelebihan beban, dengan 'foo ()' dan 'foo (parameter lainnya)." "

mjfgates
sumber