Rumah >Java >javaTutorial >Apakah enam prinsip reka bentuk berorientasikan objek di Jawa
Prinsip Tanggungjawab Tunggal
Takrif prinsip tanggungjawab tunggal ialah untuk kelas, hanya ada satu sebab untuk perubahannya. Dalam erti kata lain, kelas hanya perlu bertanggungjawab untuk satu perkara. Jika kelas bertanggungjawab untuk dua perkara yang berbeza, kaedah M1 dan kaedah M2, apabila kaedah M1 berubah, kita perlu mengubah suai kaedah M1 kelas ini, tetapi pada masa ini, kaedah M2 mungkin tidak berfungsi. Ini bukan apa yang kami jangkakan, tetapi ia sangat mungkin disebabkan oleh reka bentuk ini. Jadi pada masa ini, kita perlu mengasingkan kaedah M1 dan kaedah M2 kepada dua kelas. Biarkan setiap kelas memberi tumpuan hanya pada kaedahnya sendiri.
Faedah prinsip tanggungjawab tunggal adalah seperti berikut:
Ia boleh mengurangkan kerumitan kelas Setiap kelas hanya bertanggungjawab untuk satu tanggungjawab Ini menjadikan logik lebih mudah dan meningkatkan kebolehbacaan kelas dan kebolehselenggaraan sistem, kerana tidak akan ada kaedah aneh lain yang mengganggu kami. pemahaman tentang maksud kelas ini Apabila perubahan berlaku, impak perubahan dapat diminimumkan kerana pengubahsuaian hanya akan dibuat dalam kelas ini.
Prinsip pembuka dan penutup
Prinsip tertutup terbuka, seperti prinsip tanggungjawab tunggal, adalah prinsip yang sangat asas dan secara amnya akal. Takrif prinsip tertutup terbuka ialah objek (kelas, modul, fungsi, dll.) dalam perisian harus terbuka untuk sambungan, tetapi ditutup untuk pengubahsuaian.
Apabila keperluan berubah, kita perlu mengubah suai kod Pada masa ini, kita harus cuba melanjutkan kod asal dan bukannya mengubah suai kod asal, kerana ini boleh menyebabkan lebih banyak masalah.
Prinsip ini adalah sama dengan prinsip tanggungjawab tunggal Ia adalah prinsip yang semua orang fikir begitu tetapi tidak menyatakan bagaimana untuk melakukannya.
Kami boleh memastikan prinsip pembukaan dan penutup dalam satu cara Kami menggunakan abstraksi untuk membina rangka kerja dan pelaksanaan untuk melanjutkan butiran. Dengan cara ini, apabila pengubahsuaian berlaku, kami secara langsung menggunakan abstraksi untuk memperoleh kelas konkrit untuk melaksanakan pengubahsuaian.
Prinsip penggantian Richter
Prinsip penggantian Liskov adalah konsep yang sangat berguna. Definisi dia
Jika untuk setiap objek o1 jenis T1, terdapat objek o2 jenis T2, supaya tingkah laku semua program P yang ditakrifkan dengan T1 tidak berubah apabila semua objek o1 digantikan dengan o2, maka jenis T2 adalah subjenis jenis. T1.
Agak rumit untuk mengatakan ini, tetapi sebenarnya ada definisi yang mudah
Semua rujukan kepada kelas asas mesti boleh menggunakan objek subkelasnya dengan telus.
Dalam istilah orang awam, prinsip penggantian Liskov ialah: subkelas boleh melanjutkan fungsi kelas induk, tetapi mereka tidak boleh mengubah fungsi asal kelas induk. Ia mengandungi makna berikut:
Subkelas boleh melaksanakan kaedah abstrak kelas induk, tetapi mereka tidak boleh mengatasi kaedah bukan abstrak kelas induk.
Subkelas boleh menambah kaedah unik mereka sendiri.
Apabila kaedah subkelas mengatasi kaedah kelas induk, parameter formal kaedah lebih longgar daripada parameter input kaedah kelas induk.
Apabila kaedah subkelas melaksanakan kaedah abstrak kelas induk, nilai pulangan kaedah adalah lebih ketat daripada kelas induk.
Sebab mengapa Prinsip Penggantian Liskov memerlukan ini adalah kerana pewarisan mempunyai banyak kekurangan Walaupun ia merupakan kaedah penggunaan semula kod, pewarisan melanggar pengkapsulan pada tahap tertentu. Atribut dan kaedah kelas induk adalah telus kepada subkelas, dan subkelas boleh mengubah suai ahli kelas induk sesuka hati. Ini juga menyebabkan jika keperluan berubah dan subkelas mengatasi beberapa kaedah kelas induk, subkelas lain tidak akan dapat berfungsi dengan baik. Maka peraturan penggantian Richter telah dicadangkan.
Memastikan program mengikut prinsip penggantian Liskov memerlukan program kami untuk mewujudkan abstraksi, menetapkan spesifikasi melalui abstraksi, dan kemudian menggunakan pelaksanaan untuk mengembangkan butiran Adakah ini biasa Ya, prinsip penggantian Liskov dan prinsip pembukaan dan penutupan sering saling bergantung.
Prinsip Penyongsangan Ketergantungan
Prinsip penyongsangan kebergantungan merujuk kepada cara penyahgandingan khas, supaya modul peringkat tinggi tidak harus bergantung pada butiran pelaksanaan modul peringkat rendah, dan modul bergantung disongsangkan. Ini juga merupakan definisi yang sukar untuk difahami. Ia boleh dikatakan sebagai
Modul peringkat tinggi tidak harus bergantung pada modul peringkat rendah, kedua-duanya harus bergantung pada abstraksinya Di Java, abstraksi merujuk kepada antara muka atau kelas abstrak, kedua-duanya tidak boleh dijadikan instantiated. Butirannya ialah kelas pelaksanaan, iaitu kelas yang melaksanakan antara muka atau mewarisi kelas abstrak. Ia boleh dijadikan instantiated. Modul peringkat tinggi merujuk kepada akhir panggilan, dan modul peringkat rendah ialah kelas pelaksanaan khusus. Di Jawa, prinsip penyongsangan kebergantungan bermakna kebergantungan antara modul berlaku melalui pengabstrakan Tiada pergantungan langsung antara kelas pelaksanaan, dan kebergantungan mereka direalisasikan melalui antara muka. Ini biasanya dikenali sebagai pengaturcaraan berorientasikan antara muka.
Kami mempunyai contoh di bawah untuk menggambarkan masalah ini. Contoh ini ialah seorang pekerja menggunakan tukul untuk membaiki sesuatu. Kod kami adalah seperti berikut:
Tukul kelas awam {
fungsi rentetan awam(){
kembali "Gunakan tukul untuk membaiki barang";
}
}
Pekerja kelas awam {
pembetulan kekosongan awam(Tukul tukul){
System.out.println("pekerja" + hammer.function());
}
public static void main(String[] args) {
Pekerja baharu(). betulkan(Tukul baharu());
}
}
Ini adalah contoh yang sangat mudah, tetapi jika kita ingin menambah fungsi baru, pekerja menggunakan pemutar skru untuk membaiki sesuatu Dalam kelas ini, kita mendapati bahawa ia adalah sukar untuk dilakukan. Kerana kelas Pekerja kami bergantung pada Hammer kelas pelaksanaan tertentu. Jadi kami menggunakan idea pengaturcaraan berorientasikan antara muka dan menukarnya kepada kod berikut:
Alat antara muka awam {
public String function();
}
Kemudian Pekerja kami bergantung pada kelas perincian lain melalui antara muka ini. Kodnya adalah seperti berikut:
Pekerja kelas awam {
pembetulan kekosongan awam(Alat alat){
System.out.println("pekerja" + tool.function());
}
public static void main(String[] args) {
newWorker(). betulkan(Tukul baharu());
newWorker(). betulkan(Pemutar Skru baharu());
}
}
Kelas Hammer dan kelas Pemutar Skru kami melaksanakan antara muka ini
Hammer kelas awam melaksanakan Alat{
fungsi rentetan awam(){
kembali "Gunakan tukul untuk membaiki barang";
}
}
Pemutar skru kelas awam melaksanakan Alat{
@Batal
public String function() {
kembalikan "Gunakan pemutar skru untuk membaiki sesuatu";
}
}
Dengan cara ini, melalui pengaturcaraan berorientasikan antara muka, kod kami mempunyai kebolehskalaan yang tinggi, mengurangkan gandingan antara kod dan meningkatkan kestabilan sistem.
Prinsip pengasingan antara muka
Takrif prinsip pengasingan antara muka ialah
Pelanggan tidak seharusnya bergantung pada antara muka yang tidak diperlukan
Dengan kata lain, hubungan pergantungan antara kelas harus diwujudkan pada antara muka terkecil. Nampaknya lebih sukar untuk difahami. Mari kita gambarkan dengan contoh. Kita tahu bahawa jika kelas konkrit melaksanakan antara muka dalam Java, ia mesti melaksanakan semua kaedah dalam antara muka. Jika kita mempunyai kelas A dan kelas B yang bergantung pada antara muka I, kelas B ialah pelaksanaan pergantungan kelas A, dan antara muka I ini mempunyai 5 kaedah. Tetapi kelas A dan B hanya bergantung pada kaedah 1, 2, dan 3, dan kemudian kelas C dan D bergantung pada antara muka I. Kelas D ialah pelaksanaan pergantungan pada kelas C, tetapi ia bergantung pada kaedah 1, 4, dan 5. Kemudian apabila melaksanakan antara muka, kelas B mesti melaksanakan kaedah 4 dan kaedah 5 yang tidak diperlukan, dan kelas D mesti melaksanakan kaedah 2 dan kaedah 3 yang tidak diperlukan. Ini hanyalah reka bentuk bencana.
Jadi kita perlu membahagikan antara muka, iaitu membahagikan antara muka kepada antara muka terkecil yang memenuhi kebergantungan Kelas B dan kelas D tidak perlu melaksanakan kaedah antara muka yang tiada kaitan dengannya. Sebagai contoh, dalam contoh ini, kita boleh membahagikan antara muka kepada tiga Yang pertama ialah antara muka yang hanya mengandungi kaedah 1, antara muka kedua mengandungi kaedah 2 dan 3, dan antara muka ketiga mengandungi kaedah 4 dan 5. Dengan cara ini, reka bentuk kami memenuhi prinsip pengasingan antara muka.
Idea reka bentuk di atas boleh dibentuk menjadi SOLID dengan huruf pertama Bahasa Inggeris Program yang memenuhi lima prinsip ini juga dikatakan memenuhi kriteria SOLID.
Prinsip Dimit
Prinsip Demeter juga dipanggil Prinsip Pengetahuan Minimum, dan definisinya ialah
Objek harus menyimpan pengetahuan minimum tentang objek lain.
Kerana semakin rapat hubungan antara kelas, semakin besar tahap gandingan Apabila satu kelas berubah, lebih besar kesannya pada kelas yang lain Oleh itu, ini juga merupakan prinsip umum pengaturcaraan perisian yang kami anjurkan: gandingan rendah, gandingan tinggi . Terdapat takrifan yang lebih mudah bagi Hukum Demeter
Hanya berkomunikasi dengan rakan secara langsung. Pertama, mari kita jelaskan apa itu rakan langsung: setiap objek akan mempunyai hubungan gandingan dengan objek lain Selagi terdapat hubungan gandingan antara dua objek, kita katakan bahawa kedua-dua objek itu adalah kawan. Terdapat banyak cara gandingan, seperti pergantungan, persatuan, gabungan, pengagregatan, dll. Antaranya, kami memanggil kelas yang muncul dalam pembolehubah ahli, parameter kaedah, dan nilai pulangan kaedah rakan langsung, manakala kelas yang muncul dalam pembolehubah tempatan bukan rakan langsung. Dalam erti kata lain, adalah lebih baik supaya kelas yang tidak dikenali muncul di dalam kelas sebagai pembolehubah tempatan.
Di sini kita boleh menggunakan contoh kehidupan sebenar untuk menerangkan. Sebagai contoh, jika kita memerlukan CD, kita boleh pergi ke kedai video dan bertanya kepada bos jika dia mempunyai CD yang kita perlukan. Bos mengatakan bahawa dia tidak mempunyai CD yang kita perlukan sekarang, dan anda boleh datang dan dapatkan ia apabila ia tersedia. Di sini kita tidak perlu peduli tentang mana atau bagaimana bos mendapat CD itu. Kami hanya berkomunikasi dengan bos (rakan langsung). Kami tidak bersetuju dengannya Rakan-rakan bos (orang yang tidak dikenali) berkomunikasi. Secara terang-terangan, ia adalah kaedah perantara. Kami menggunakan bos sebagai perantara untuk menghubungi orang yang sebenarnya menyediakan CD.
Atas ialah kandungan terperinci Apakah enam prinsip reka bentuk berorientasikan objek di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!