Penamaan kelas abstrak Java

9

Contoh:

Anda membuat kelas abstrak untuk tindakan Ajax. Tindakan Ajax yang berbeda semuanya akan memperluas kelas ini.

Masalah:

  1. Apakah Anda menyebutkan kelas AjaxAction atau AbstractAjaxAction?
  2. Saat Anda membuat subclass, apakah Anda menamainya:
    • Tindakan
    • AjaxAction
    • Beri nama mereka apa adanya

Saya belum dapat menemukan apa konvensi "resmi" itu. Saya tidak melihat perlunya awalan "Abstrak" atau konvensi penamaan yang diperlukan dalam subkelas. (Mungkin tetap cocok, tergantung.)

Apakah ada konvensi resmi? Bisakah Anda menautkan saya ke sana? Dan apa pendapat Anda tentang hal ini?

Michael K.
sumber

Jawaban:

16

Jika memungkinkan, saya mencoba untuk mengabaikan detail implementasi dari nama, termasuk awalan / akhiran untuk kelas atau antarmuka abstrak.

Satu tempat untuk mencari panduan / inspirasi dalam penamaan adalah Java API. Saya tidak bisa memikirkan bagian mana pun yang menggunakan awalan (dengan pengecualian besar adalah Collections API, yang menggunakan awalan abstrak sangat). Pencarian berikut akan menghasilkan beberapa contoh yang cukup bagus:

"kelas abstrak publik" di unduh.oracle.com/javase/6

Anda akan menemukan kelas-kelas abstrak diberi nama sesuatu yang abstrak dan subkelas konkret dinamai sesuatu yang lebih konkret. Sebagai contoh, kelas abstrak Readermemiliki subclass beton BufferedReader, StringReader, InputStreamReader, dll

Karena subkelas konkret Anda hanya versi yang lebih spesifik dari kelas abstrak Anda, itu bermaksud mengungkapkan untuk memilih nama Anda dengan cara yang sama. Dalam contoh Anda, saya akan memberi nama kelas abstrak AjaxActiondan menggunakannya dalam nama untuk subkelas beton ( SpecificAjaxAction).

Tyler Holien
sumber
12

Pilih sesuatu , dan konsistenlah. Apakah Anda menggunakan akhiran Baseuntuk menunjukkan kelas dasar yang dimaksudkan, atau awalan Abstract, konsisten saja tentang hal itu.

Ada banyak pendapat tentang hal-hal seperti ini, ada, programmer. Pendapat saya, untuk apa nilainya, karena konsistensi dalam penamaan, dalam suatu proyek (atau kelompok pengembangan atau apa pun) lebih penting daripada skema penamaan tertentu.

Brian Clapper
sumber
4

Saya akan menamai kelas abstrak AjaxActionBasedan akhiran kelas anak dengan 'Aksi' atau 'AjaxAction', yang mana yang berakhir dengan lebih mudah dibaca untuk tindakan yang perlu saya buat.

Adam Lear
sumber
0

Saya lebih suka memberi petunjuk bahwa kelas abstrak dalam nama untuk satu alasan sederhana namun sangat penting:

  • Lebih baik untuk membangun API Anda di sekitar antarmuka daripada kelas abstrak.
  • Anda ingin menggunakan nama sederhana misalnya "Aksi" untuk memberi nama antarmuka Anda. Lihat misalnya Daftar atau Peta di Java Collections API - semua ini adalah antarmuka.

Oleh karena itu saya biasanya akan memanggil kelas abstrak tingkat atas baik AbstractAction atau BaseAction. Kecuali ada kebutuhan yang sangat spesifik, saya biasanya tidak akan membuat ini publik, sehingga pengguna kode diarahkan menggunakan antarmuka. Kelas dasar abstrak biasanya harus merupakan detail implementasi daripada fitur API Anda, kecuali jika Anda sangat berhati - hati tentang bagaimana Anda ingin orang memperluasnya.

mikera
sumber