Misalkan saya memiliki kelas abstrak bernama Task
.
Apakah ada standar atau konvensi yang menyarankan agar saya AbstractTask
menamainya?
java
naming
coding-standards
juan
sumber
sumber
Jawaban:
Menurut Bloch's Java Efektif (Butir 18), awalan abstrak adalah konvensi yang digunakan dalam kasus khusus.
Tapi Bloch juga menunjukkan bahwa nama SkeletalInterface akan masuk akal, tetapi menyimpulkan itu
Seperti yang ditunjukkan oleh jawaban lain, secara umum tidak ada alasan untuk menerapkan konvensi penamaan ini untuk semua kelas abstrak.
sumber
Tidak ada konvensi. Ini semua tentang apa yang akan membantu Anda, sebagai pengembang, kode lebih cepat dan lebih baik, dan membantu orang lain memahami kode Anda.
Tanyakan kepada orang-orang yang akan melihat dan memelihara kode. Apa yang ingin mereka lihat? Apa yang akan membuatnya lebih mudah? Kemudian beri nama berdasarkan apa yang mereka inginkan.
Pada catatan lain, Konvensi Kode untuk Bahasa Pemrograman Java: 9. Konvensi Penamaan menunjukkan tidak ada persyaratan:
sumber
Intellisense sepele akan memberitahuku kalau itu abstrak, jadi kau hanya melanggar KERING di sini.
sumber
abstract
ke nama kelas tidak melanggar KERING, dan tidak semua orang menggunakan kecerdasan. Sebagai contoh, apa yang Anda lakukan jika Anda membaca kode di halaman web, atau jika itu adalah bagian dari tambalan yang Anda lihat di editor teks biasa atau alat diff eksternal?abstract class AbstractName
? Jelas memiliki "abstrak" dua kali. Dan jika Anda tidak menggunakan Intellisense, maka itu masalah Anda, semua orang menggunakan alat yang waras untuk melihat kode.Ini agak masalah preferensi (tetapi praktik buruk batas), tetapi kebanyakan orang tidak suka melihat bagian dari kualifikasi atas nama kelas.
Sebagian besar IDE akan membuat informasi itu mudah tersedia bagi Anda, jadi memasukkannya dalam nama tidak perlu, dan akan lebih bersih jika hanya menghilangkannya. Ini mengingatkan pada notasi hungaria untuk penamaan variabel, dan itu tentu saja dianggap bentuk buruk sekarang-a-hari. Saya sarankan hanya menyebutnya
Task
.sumber
Dalam .NET, penggunaan "Basis" sebagai akhiran untuk menunjukkan kelas dasar abstrak sering terlihat. Saya akan merujuk pada jawaban lain, apakah ini adalah praktik umum di Jawa.
sumber
Menurut pendapat saya, nama entitas tidak boleh menyampaikan informasi tentang struktur tipenya, tetapi tentang semantiknya. Jadi tidak masuk akal untuk mendefinisikan kelas Anda sebagai "AbstractSomething" jika abstraksi bukan bagian dari tujuan runtime-nya. Itu adalah kelas abstrak dasar yang terlihat oleh programmer, dan tidak perlu tercermin dalam namanya.
Namun, jika membuatnya sempurna untuk menyebut implementasi pabrik abstrak sebagai AbstractFactory, karena itu berkaitan dengan maksud kelas.
Secara umum, nikmatilah konvensi penamaan yang membantu menyampaikan informasi paling banyak tentang tujuan kelas Anda.
Demikian pula, jauhi
SomethingImpl
. Kami tidak peduli bahwa ini merupakan implementasi dan bukan kelas dasar. Jika hierarki kelas Anda dirancang dengan benar untuk warisan, maka seseorang dapat mewarisinya. Tentunya tidak akan ada nilai di dalamnya menambahkan lebih banyak sufiks "Impl" atau artefak lainnya. Tidak ada nilai dalam menambahkan akhiran "Antarmuka" atau awalan "Saya".Mempertimbangkan:
Sebagai lawan:
Saya lebih suka yang terakhir.
Ini, dalam beberapa hal, mirip dengan penyalahgunaan yang mencolok dari Notasi Hongaria yang terakhir memberikannya reputasi buruk , karena orang-orang salah menafsirkannya sebagai mengharuskan pengembang untuk mengawali variabel mereka dengan indikator tipe variabel. Meskipun ini kadang-kadang dapat memiliki kegunaannya (kebanyakan jika Anda malas mencari definisi tipe), sebagian besar tidak berguna. Gagasan asli Simonyi dengan Notasi Hongaria adalah menggunakannya sebagai mnemonik untuk mengingatkan pengembang tentang kemampuan entitas, bukan dari jenisnya.
sumber
Aturan praktis yang baik adalah untuk tidak menyertakan properti dalam nama yang jelas dari sintaksis. Karena di Jawa, Anda harus menandai kelas abstrak dengan
abstract
kata kunci yang dinamai dengan tepat , saya tidak akan memasukkannya ke dalam namanya. Dalam C ++, misalnya, kasingnya tidak begitu jelas, tetapi setidaknya kompiler akan memberi tahu Anda ketika Anda salah menggunakan kelas abstrak. Dalam sesuatu seperti Python lagi, secara eksplisit menyebutkan kelas abstrak seperti itu bukanlah ide yang buruk.Pengecualian umum untuk aturan adalah ketika nama tersebut ambigu. Jika, karena alasan apa pun, ada subkelas konkret
Task
(dalam contoh lain, ini mungkin lebih masuk akal, tapi apa pun), maka tentu saja, gunakanAbstractTask
.sumber
List
danAbstractList
kelas (yang mengimplementasikannya).Ini memberitahu saya ini adalah kelas abstrak. Menambahkan awalan adalah tautologi dan anti-pola dan dalam kebanyakan kasus tidak cocok, lihat tautan di mana itu berbicara tentang
package local
menjadi pengecualian misalnya.Dalam kebanyakan kasus,
Abstract
kelas tidak boleh menjadi bagian dari API yang dihadapi publik, jika memang ada alasan yang kuat dan alasan yang baik harus memberikan nama yang jelas selainAbstractSomeClass
.Dalam kebanyakan kasus, jika Anda tidak dapat membuat nama yang lebih deskriptif, Anda mungkin perlu melakukan desain ulang.
sumber
Lima sen saya, Mungkin Anda akan memiliki implementasi kelas abstrak itu dan mereka akan dinamai 'SomeSpecificTask', 'TaskWithBubbles', 'StrangeTask' dll. Jadi tidak akan ada bentrokan nama antara 'Tugas' abstrak Anda dan mereka.
Selain itu, kata 'abstrak' adalah tentang sintaks bahasa, bukan entitas domain bisnis, jadi saya lebih suka untuk tidak menggunakannya sebagai bagian dari nama.
Di sisi lain, dalam satu jawaban di sini saya melihat kutipan dari J.Bloch Java Efektif yang mengatakan bahwa menggunakan 'abstrak' sebagai bagian dari nama adalah praktik yang mapan. Mungkin begitu. Tetapi bagaimanapun juga dalam konvensi kode java resmi tidak ada yang seperti itu.
sumber
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
- seseorang tidak dapat menggunakanList
sebagai nama untukAbstractList
kelas karena itu adalah nama antarmuka. Ini adalah praktik mapan dan bagian dari kode Java resmi yang digunakan di mana sesuatu yang mengimplementasikan antarmuka mungkin atau mungkin tidak memperpanjang kelas abstrak (yang juga mengimplementasikan (beberapa) antarmuka).Jika Anda bekerja dalam tim, maka seluruh tim harus memutuskan apakah Anda harus mengawali kelas abstrak dengan "Abstrak".
Jika Anda bekerja sendiri, maka sepenuhnya terserah Anda, bukan saya atau siapa pun di situs ini.
sumber
Saya bukan pengembang Java (INAJD?) Dan tidak tahu nomenklatur standar untuk hal-hal seperti itu, tapi saya pikir
Task
terdengar cukup abstrak sehingga bisa berdiri sendiri apa adanya.sumber
Bagaimana jika Anda ingin menulis
AbstractSyntaxTree
kelas abstrak ? Atau mungkin hanya abstrakSyntaxTree
?Ini tidak konvensional dan dapat dengan mudah membingungkan orang.
sumber
Saya sudah melakukan ini. Saya memang menambahkan 'Abstrak' sebagai awalan ke kelas abstrak saya bernama AbstractOperation. Alasan saya melakukan ini adalah ada paket lain yang memiliki kelas non-abstrak bernama Operation, dan itu membantu tim saya dan para programmer yang mengambil alih kemudian dalam menghindari kebingungan di antara keduanya.
sumber