10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Selalunya saya bertemu dengan pembangun yang tidak pernah mendengar tentang prinsip SOLID (kami bercakap tentang mereka secara terperinci di sini. β€” Transl.) atau pengaturcaraan berorientasikan objek (OOP), atau pernah mendengar tentangnya, tetapi tidak menggunakannya dalam amalan. Artikel ini menerangkan faedah prinsip OOP yang membantu pembangun dalam kerja hariannya. Sebahagian daripada mereka terkenal, yang lain tidak begitu banyak, jadi artikel itu akan berguna untuk kedua-dua pemula dan pengaturcara yang berpengalaman.

Kami mengingatkan: untuk semua pembaca Habr - diskaun 10 rubel apabila mendaftar dalam mana-mana kursus Skillbox menggunakan kod promosi Habr.

Skillbox mengesyorkan: Kursus dalam talian pendidikan "Pembangun Java".

KERING (Jangan Ulang Sendiri)

Prinsip yang agak mudah, intipatinya jelas dari namanya: "Jangan ulangi diri sendiri." Bagi seorang pengaturcara, ini bermakna keperluan untuk mengelakkan kod pendua, serta peluang untuk menggunakan abstraksi dalam kerja mereka.

Jika terdapat dua bahagian berulang dalam kod, ia harus digabungkan menjadi satu kaedah. Jika nilai berkod keras digunakan lebih daripada sekali, ia berbaloi untuk menukarnya kepada pemalar awam.

Ini adalah perlu untuk memudahkan kod dan menjadikannya lebih mudah untuk diselenggara, yang merupakan matlamat utama OOP. Anda juga tidak boleh menggunakan kesatuan secara berlebihan, kerana kod yang sama tidak akan lulus pengesahan dengan OrderId dan SSN.

Mengkapsulkan Perubahan

Kebanyakan produk perisian syarikat sentiasa berkembang. Ini bermakna perubahan perlu dibuat pada kod, ia perlu disokong. Anda boleh menjadikan hidup anda lebih mudah dengan menggunakan enkapsulasi. Ini akan membolehkan anda menguji dan mengekalkan asas kod sedia ada anda dengan lebih cekap. Berikut adalah satu contoh.

Jika anda menulis dalam Java, maka tetapkan kaedah peribadi dan pembolehubah secara lalai.

Prinsip terbuka/tertutup

Prinsip ini boleh diingati dengan mudah dengan membaca pernyataan berikut: "Entiti perisian (kelas, modul, fungsi, dll.) harus dibuka untuk sambungan, tetapi ditutup untuk pengubahsuaian." Dalam amalan, ini bermakna bahawa mereka boleh membenarkan tingkah laku mereka diubah tanpa mengubah kod sumber.

Prinsip ini penting apabila perubahan kepada kod sumber memerlukan semakan kod, ujian unit dan prosedur lain. Kod yang mengikut prinsip terbuka/tertutup tidak berubah apabila dilanjutkan, jadi terdapat lebih sedikit masalah dengannya.

Berikut ialah contoh kod yang melanggar prinsip ini.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Jika anda perlu menukar sesuatu di dalamnya, ia akan mengambil banyak masa, kerana semua bahagian kod yang mempunyai sambungan dengan serpihan yang dikehendaki perlu ditukar.

By the way, openness-closedness adalah salah satu prinsip SOLID.

Prinsip Tanggungjawab Tunggal (SRP)

Satu lagi prinsip dari set SOLID. Ia menyatakan bahawa "terdapat hanya satu punca yang menyebabkan perubahan dalam kelas." Kelas menyelesaikan satu masalah sahaja. Ia mungkin mempunyai beberapa kaedah, tetapi setiap daripada mereka hanya digunakan untuk menyelesaikan masalah biasa. Semua kaedah dan sifat harus berfungsi hanya ini.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Nilai prinsip ini ialah ia melonggarkan gandingan antara komponen perisian individu dan kod. Jika anda menambah lebih daripada satu fungsi pada kelas, ia memperkenalkan hubungan antara dua fungsi. Oleh itu, jika anda menukar salah satu daripadanya, terdapat kemungkinan besar untuk merosakkan yang kedua, yang disambungkan dengan yang pertama. Dan ini bermakna meningkatkan kitaran ujian untuk mengenal pasti semua masalah terlebih dahulu.

Prinsip Penyongsangan Ketergantungan (DIP)

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Di atas ialah contoh kod di mana AppManager bergantung pada EventLogWriter, yang seterusnya berganding rapat dengan AppManager. Jika anda memerlukan cara lain untuk menunjukkan pemberitahuan, sama ada push, SMS atau e-mel, anda perlu menukar kelas AppManager.

Masalah boleh diselesaikan menggunakan DIP. Jadi, bukannya AppManager, kami meminta EventLogWriter, yang akan dimasukkan menggunakan rangka kerja.

DIP memungkinkan untuk menggantikan modul individu dengan yang lain dengan mudah dengan menukar modul pergantungan. Ini memungkinkan untuk menukar satu modul tanpa menjejaskan yang lain.

Komposisi bukannya warisan

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu TahuTerdapat dua cara utama untuk menggunakan semula kod: pewarisan dan komposisi, yang kedua-duanya mempunyai kelebihan dan kekurangan mereka sendiri. Biasanya yang kedua lebih disukai kerana ia lebih fleksibel.

Komposisi memberi anda keupayaan untuk mengubah tingkah laku kelas pada masa jalan dengan menetapkan sifatnya. Apabila melaksanakan antara muka, polimorfisme digunakan, yang memberikan pelaksanaan yang lebih fleksibel.

Malah Java Efektif oleh Joshua Bloch menasihatkan memilih komposisi daripada warisan.

Prinsip Penggantian Barbara Liskov (LSP)

Prinsip lain dari kit alat SOLID. Ia menyatakan bahawa subjenis mesti boleh digantikan untuk superjenis. Iaitu, kaedah dan fungsi yang berfungsi dengan superclass seharusnya dapat berfungsi tanpa masalah dengan subclassnya.

LSP dikaitkan dengan kedua-dua prinsip tanggungjawab tunggal dan prinsip tanggungjawab bersama. Jika kelas menyediakan lebih banyak fungsi daripada subkelas, maka kelas kedua tidak akan menyokong beberapa fungsi, melanggar prinsip ini.

Berikut ialah sekeping kod yang bercanggah dengan LSP.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Kaedah luas (Rectangle r) mengira luas segi empat tepat. Program ini akan ranap selepas melaksanakan Square kerana Square bukan Rectangle di sini. Menurut prinsip LSP, fungsi yang menggunakan rujukan kepada kelas asas seharusnya boleh menggunakan objek kelas terbitan tanpa arahan tambahan.

Prinsip ini, yang merupakan definisi khusus subjenis, telah dicadangkan oleh Barbara Liskov dalam ucaptama persidangan 1987 bertajuk "Abstraksi dan Hierarki Data," maka namanya.

Prinsip Pemisahan Antara Muka (ISP)

Satu lagi prinsip PADAT. Menurutnya, antara muka yang tidak digunakan tidak sepatutnya dilaksanakan. Mengikuti prinsip ini membantu sistem kekal fleksibel dan sesuai untuk pemfaktoran semula apabila perubahan dibuat pada logik pengendalian.

Selalunya, keadaan ini berlaku apabila antara muka mengandungi beberapa fungsi sekaligus, dan pelanggan hanya memerlukan satu daripadanya.

Memandangkan menulis antara muka adalah tugas yang sukar, menukarnya selepas kerja selesai tanpa melanggar apa-apa akan menjadi satu cabaran.

Kelebihan prinsip ISP di Java ialah semua kaedah mesti dilaksanakan terlebih dahulu, dan barulah ia boleh digunakan oleh kelas. Oleh itu, prinsip itu memungkinkan untuk mengurangkan bilangan kaedah.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Pengaturcaraan untuk antara muka, bukan pelaksanaan

Semuanya di sini jelas dari tajuk. Menggunakan prinsip ini membawa kepada penciptaan kod fleksibel yang boleh berfungsi dengan mana-mana pelaksanaan baharu antara muka.

Anda harus menggunakan jenis antara muka untuk pembolehubah, jenis pulangan atau jenis hujah kaedah. Contohnya ialah menggunakan SuperClass dan bukannya SubClass.

Itu dia:

Senaraikan nombor= getNumbers();

Tetapi tidak:

Nombor ArrayList = getNumbers();

Berikut adalah pelaksanaan praktikal apa yang dibincangkan di atas.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Prinsip delegasi

Contoh biasa ialah kaedah equals() dan hashCode() dalam Java. Apabila perlu untuk membandingkan dua objek, tindakan ini diwakilkan kepada kelas yang sepadan dan bukannya klien.

Kelebihan prinsip ini ialah tiada pertindihan kod dan agak mudah untuk mengubah tingkah laku. Ia juga terpakai kepada delegasi acara.

10 Prinsip Pengaturcaraan Berorientasikan Objek Setiap Pembangun Perlu Tahu

Semua prinsip ini membolehkan anda menulis kod yang lebih fleksibel, cantik dan boleh dipercayai dengan kohesi tinggi dan gandingan rendah. Sudah tentu, teori adalah baik, tetapi untuk pembangun benar-benar menggunakan pengetahuan yang diperoleh, latihan diperlukan. Setelah anda menguasai prinsip OOP, langkah seterusnya anda mungkin mempelajari corak reka bentuk untuk menyelesaikan masalah pembangunan perisian biasa.

Skillbox mengesyorkan:

Sumber: www.habr.com

Tambah komen