Gunakan kata kerja dengan fungsi, kata benda dengan kelas - bagaimana dengan antarmuka? [Tutup]

23

Ok, saya mengerti kebiasaan menggunakan kata kerja dengan fungsi dan kata benda dengan kelas. Bagaimana dengan antarmuka? Apakah ada metodologi saat membuat nama antarmuka yang mungkin tidak begitu jelas?

Hanya untuk memperjelas, saya tidak berbicara tentang apakah akan meletakkan "I" di depan nama atau jika menggunakan camelCase atau PascalCase. Saya bertanya-tanya tentang metode mencari tahu nama semantik yang jelas untuk sebuah antarmuka.

EDIT Saya terobsesi tentang cara memberi nama antarmuka dengan cara yang paling jelas. Saya kira itu hanya perlu menjadi kata benda juga karena ketika saya memikirkan penamaan kelas saya memikirkan objek dunia "nyata" terdekat yang bisa dihubungkan dengannya. Saya kira antarmuka dunia nyata adalah hal-hal seperti keyboard, mouse, remote control, layar ATM. Itu semua adalah kata benda. Bagaimanapun, wawasan tambahan apa pun tentang cara yang baik untuk merumuskan nama antarmuka akan dihargai.

programmer
sumber
2
Hm .. Berdasarkan judulnya, saya pikir ini akan menyamakan bagian-bagian pidato antara pemrograman dan bahasa Inggris. Dalam hal ini, madlibs tampak mungkin.
Izkata
Ingat, ketika Anda membuat kelas, Anda juga membuat antarmuka untuk objek yang dibuat oleh kelas itu ... Atau dengan kata lain, kelas adalah antarmuka yang diwujudkan . Jadi, mereka harus menggunakan konvensi penamaan yang sama.
Daniel T.
Selain itu, IMHO "penggunaan kata kerja dengan fungsi" terlalu umum. Anda harus menggunakan kata kerja dengan perintah dan kata benda dengan pertanyaan .
Daniel T.

Jawaban:

21

Saya akan mengatakan itu tergantung pada apa yang mendefinisikan antarmuka. Dalam beberapa kasus ketika antarmuka agak spesifik dan rinci, saya pikir kata benda adalah yang terbaik. Contohnya adalah IList, ICollection.

Kadang-kadang meskipun antarmuka lebih tentang menambahkan fitur umum tertentu ke kelas. Dalam hal ini saya pikir kata sifat adalah yang terbaik. Contohnya adalah IDisposable, IEnumerable, ...

Mungkin cara lain untuk memikirkan ini adalah berapa banyak "kemampuan" yang didefinisikan oleh antarmuka Anda.

Sebagai contoh, IList<T>antarmuka mendefinisikan kemampuan ini: Tambah, Hapus, Berisi, Sisipkan, Hapus, ... Ini semua adalah properti daftar jadi IListadalah nama yang bagus.

IDisposabledi sisi lain hanya mendefinisikan satu kemampuan: Buang. Jadi sangat cocok untuk segala sesuatu yang sekali pakai. Karena itulah namanya IDisposable.

Kristof Claes
sumber
10
Saya akan menyarankan menggunakan kata sifat "_able" jika antarmuka Anda akan dinamai berdasarkan hal-hal yang dapat dilakukan untuk objek Anda (misalnya IEnumerable), kata benda "_er" jika antarmuka Anda akan dinamai berdasarkan hal-hal yang dilakukan objek Anda ke objek lain ( misalnya IEqualityComparer), dan kata benda umum jika antarmuka Anda dinamai berdasarkan jenis hal yang perilakunya meniru (misalnya IList<T>).
supercat
Komentar oleh @supercat harus benar-benar dimasukkan dalam jawaban ini. Itu masuk akal.
Nikhil Vartak
Sebenarnya awalan nama antarmuka dengan Iberlebihan.
user1870400
5

Sebuah antarmuka menggambarkan perilaku sehingga nama-nama harus mengatakan begitu. Saya tidak yakin tentang aturan untuk ini tetapi Anda akan tahu nama ketika Anda mendengarnya.

Beberapa contoh:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Saya pikir itu tidak pantas untuk menamai antarmuka dengan Idan memanggil Setdengan ISetkarena, sebagai pengembang, Anda tidak perlu khawatir apakah itu antarmuka atau kelas. Saya melihat praktik ini tidak ada di Jawa sekarang.

ManuPK
sumber
+1 untuk "sebagai pengembang Anda tidak perlu khawatir apakah itu antarmuka atau kelas."
Kazark
"sebagai pengembang Anda tidak perlu khawatir apakah itu antarmuka atau kelas" - tidak setuju karena jika itu adalah antarmuka maka Anda perlu tahu anggota mana yang harus Anda terapkan.
Maximus Minimus
@MaximusMinimus mengawali dengan dengan Iitu tidak penting. Lalu mengapa tidak mengawali kelas abstrak dengan A, kelas reguler dengan Cdll ??
user1870400
@ user1870400 - benar, tapi itu bukan bagian yang saya tidak setujui.
Maximus Minimus
4

Karena antarmuka benar-benar hanya sebuah ekspresi dari "apa" tetapi bukan "bagaimana" dari suatu jenis, saya akan menamai mereka dengan cara yang sama seperti Anda memberi nama kelas, setidaknya dari bagian perspektif bicara. Satu-satunya hal yang dapat saya tambahkan ke ini adalah bahwa mereka sering akan menjadi lebih umum daripada pelaksana spesifik (misalnya antarmuka "Pelanggan" mungkin memiliki pelaksana "ProspectiveCustomer" dan "PayingCustomer").

Erik Dietrich
sumber
0

Antarmuka digunakan seperti kelas. Oleh karena itu, itu juga harus dinamai dengan kata benda ketika Anda memberi nama kelas dengan kata benda. Pilih kata benda abstrak, misalnya "Kendaraan" ketika kelasnya adalah "Mobil" dan "Truk".

thiton
sumber
0

Jawaban Cepat: Antarmuka lebih tentang penambahan SET kemampuan, fitur, batasan umum atau interkoneksi antara entitas, kelas, model, konsep, dll.

Hal tentang menambahkan perilaku umum ke kelas dan entitas, dan kemudian nama bermakna yang baik akan muncul untuk mengidentifikasi set fitur yang sebenarnya.

Penamaan Antarmuka seperti: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.mungkin menjelaskan konsepnya.

EL Yusubov
sumber
1
Ya, antarmuka mewakili kontrak, atau kemampuan; begitu banyak yang diketahui. Tetapi bagaimana ini menjawab pertanyaan tentang bagaimana memberi nama mereka? Yang Anda benar-benar katakan dalam hal itu adalah, "Pikirkan tentang hal itu, dan inspirasi akan menyerang Anda." Ini tidak memberikan rekomendasi, misalnya, yang mana dari nama-nama berikut harus dipilih, apa pun alasannya: IStateMachineBuilder(kata benda), IBuildStateMachine(dinamai menurut suatu tindakan), ICanBuildStateMachine(dinamai menurut kemampuan), dll.
stakx
0

Itu tergantung, jika antarmuka hanya berisi metode itu akan baik untuk nama itu menggunakan kata kerja seperti "Actions" di mana seolah-olah itu mewakili kelas generik yang berisi statis, bidang terakhir maka kita dapat menggunakan kata benda generik seperti "Kendaraan"

Joms Antony
sumber