SOLID termasuk prinsip substitusi Liskov yang berpendapat bahwa "objek dalam suatu program harus diganti dengan instance subtipe mereka tanpa mengubah kebenaran program itu".
Karena kelas statis dengan metode statis (sedikit seperti Math
kelas) tidak memiliki instance sama sekali, apakah sistem saya dianggap SOLID jika saya memiliki kelas statis dengan metode statis?
language-agnostic
solid
static-access
Pacerier
sumber
sumber
Jawaban:
LSP berlaku untuk melewatkan instance kelas ke dalam metode, meminta metode melakukan beberapa hal dengan instance itu, dan sering menghasilkan semacam hasil. Ini tidak masalah untuk kelas statis karena di C # Anda tidak dapat membuat turunan dari kelas statis.
Yang lebih penting lagi, kelas statis disegel dan karenanya tidak dapat diwarisi. Ini membuat pertanyaan Anda dapat diperdebatkan sejauh C # berjalan.
Anda bisa mengatakan bahwa kelas statis selalu sesuai dengan LSP karena Anda tidak pernah dapat menghasilkan subkelas yang akan melanggar prinsip itu. Anda juga bisa mengatakan bahwa kelas statis tidak pernah sesuai dengan LSP untuk alasan yang sama.
Di Jawa, kelas statis sedikit berbeda. Anda tidak dapat menandai kelas tingkat atas sebagai "statis", jadi jika Anda ingin membuat kelas utilitas yang mirip dengan kelas statis C #, Anda harus mendeklarasikannya sebagai
final
dan menyembunyikan konstruktornya. Namun, begitu Anda melakukannya, mereka berperilaku serupa dengan C # - Anda tidak dapat membuat instance atau subklasnya. Anda bisa mendeklarasikan kelas dalam sebagaistatic
, tetapi itu tidak berarti hal yang sama seperti di C #: itu hanya menunjukkan kelas tingkat atas bersarang .VB.NET berperilaku persis sama dengan C # dalam kasus ini, sejauh yang saya tahu.
Anda tidak menyebutkan apakah Anda tertarik pada prinsip-prinsip lain, tetapi saya tetap akan memasukkannya untuk kelengkapan.
S prinsip tanggung jawab perapian di tungku : kelas statis dengan mudah mengikuti prinsip ini.
O pena / prinsip tertutup : karena kelas statis disegel, mereka tidak dapat mengikuti prinsip ini. Prinsip substitusi
L iskov : seperti di atas.
Saya menerapkan prinsip segregasi : tidak berlaku untuk satu kelas, tetapi memecah satu kelas statis besar menjadi lebih kecil, yang lebih khusus dapat menjadi langkah menuju mengikuti prinsip ini.
D prinsip ependency inversi : kelas statis tidak dapat mengimplementasikan antarmuka, sehingga setiap kelas menggunakannya akan selalu bergantung pada pelaksanaan apa pun yang ada pada saat itu. Kelas statis karenanya melanggar prinsip ini.
Karena kelas statis tidak memenuhi semua 5 kriteria, mereka tidak SOLID.
sumber
Saya tidak akan mengklasifikasikan kelas semacam itu sebagai berorientasi objek dan oleh karena itu saya akan mengatakan bahwa itu tidak dapat (dan tidak boleh mencoba) memenuhi prinsip-prinsip desain berorientasi objek.
Kelas-kelas ini hanyalah solusi untuk ketidakmampuan untuk menyediakan kode di luar kelas dalam bahasa seperti Java dan C #. Jika mereka bisa, mereka harus didefinisikan sebagai fungsi mandiri karena mereka tidak mendapatkan manfaat apa pun dari orientasi objek.
sumber
Layak disebutkan, karena Anda tidak menentukan bahasa, bahwa di C ++ Anda dapat melewati kelas-kelas di sekitar yang hanya memiliki anggota statis dan mengakses anggota tersebut melalui templat, dan oleh karena itu dimungkinkan untuk mengganti kelas dengan hanya anggota statis, dan bisa dibilang, metode disebut bentuk itu "antarmuka".
sumber