Dalam masalah pembangunan, masyarakat selalu berbicara tentang berbagai hukum. Namun bagi kebanyakan orang, selalu ada sesuatu yang tidak Anda pahami. Masalah ini perlu diselesaikan dengan metode favorit programmer: Baru-baru ini, sebuah proyek "Law Collection" di GitHub tiba-tiba menduduki peringkat kedua dalam daftar tren. Ada ribuan Bintang. Proyek ini merangkum beberapa hukum yang paling umum. Lihat di bawah untuk detailnya.
Artikel ini berisi penjelasan tentang beberapa hukum, prinsip dan model, tetapi tidak mengklaim satupun dari mereka. Apakah akan menerapkan undang-undang mana yang selalu menjadi masalah kontroversial, dan sebagian besar tergantung pada apa yang Anda lakukan.
Daftar aturan ini adalah sebagai berikut:
hukum
Hukum Amdahl
Hukum Brooks
Hukum Conway
Hukum Housda
Siklus Hype dan Hukum Amara
Hukum Hiram
Hukum Moore
Hukum Parkinson
Hukum Putt
Hukum Kekekalan Kompleksitas (Hukum Tesler)
Hukum kerentanan abstrak
Hukum Sepele Parkinson
Filsafat Unix
Model Spotify
Hukum Wadler
pada prinsipnya
Prinsip kekokohan
PADAT
Prinsip fungsi tunggal
Prinsip pembukaan dan penutupan
Prinsip substitusi richter
Prinsip isolasi antarmuka
Prinsip pembalikan ketergantungan
Untuk sekian banyak hukum dan prinsip di atas, kami telah memilih beberapa di antaranya dan semuanya untuk disusun. Sekarang, mari kita lihat hukumnya
hukum
Hukum Amdahl
Wikipedia: Aturan praktis dalam komunitas ilmu komputer, dinamai menurut Gene Amdal. Ini mewakili kemampuan prosesor untuk meningkatkan efisiensi setelah komputasi paralel. Hukum Amdahl adalah standar kuantitatif bila beban ditetapkan (bila jumlah total tidak berubah).
Misalnya, jika sebuah program terdiri dari dua bagian (A dan B), A harus dijalankan oleh satu prosesor, dan B dapat dijalankan secara paralel, sehingga manfaat dari penambahan beberapa prosesor ke sistem yang menjalankan program menjadi terbatas. Ini mungkin sangat meningkatkan kecepatan B, tetapi kecepatan A akan tetap sama. Seperti yang ditunjukkan di bawah ini:
Dapat dilihat dari gambar bahwa jika hanya 50% dari sebuah program yang dapat diproses secara paralel, jika program tersebut menggunakan lebih dari 10 unit pemrosesan, kecepatan pemrosesan tidak akan jauh meningkat. Dan jika 95% program dapat diproses secara paralel, bahkan jika program tersebut menggunakan lebih dari 1.000 unit pemrosesan, kecepatan pemrosesannya akan meningkat secara signifikan.
Hukum Housda
Wikipedia: Waktu yang diperlukan untuk melakukan sesuatu selalu lebih lama dari yang Anda harapkan, bahkan jika Anda mempertimbangkan hukum Housda sesuai harapan Anda.
Saat Anda memperkirakan berapa lama untuk melakukan sesuatu, Anda mungkin memikirkan hukum ini. Klise dalam pengembangan perangkat lunak adalah seringkali sulit untuk memperkirakan waktu yang tepat yang dibutuhkan untuk mengirimkan sesuatu.
Siklus Hype dan Hukum Amara
Wikipedia: Kami selalu melebih-lebihkan manfaat jangka pendek dari sebuah teknologi dan meremehkan efek jangka panjangnya.
Undang-undang ini digambarkan sebagai kata-kata yang mendorong orang untuk memikirkan dampak jangka panjang dari teknologi. Pada saat yang sama, Hukum Amara juga dikenal sebagai gambaran paling gamblang dari "siklus hype" (kurva kematangan teknologi). Seperti yang ditunjukkan di bawah ini:
Singkatnya, siklus ini menunjukkan bahwa teknologi baru dan potensi dampaknya biasanya menimbulkan gelombang kegembiraan. Kemudian banyak tim dengan cepat berinvestasi dalam teknologi, dan terkadang kecewa dengan hasilnya. Ini mungkin karena teknologinya belum cukup matang, atau mungkin karena aplikasi dunia nyata belum sepenuhnya direalisasikan.
Setelah beberapa waktu, kemampuan teknologinya meningkat, dan peluang aktual untuk menggunakan teknologi juga meningkat, dan tim di dalamnya akhirnya mulai mendapatkan keuntungan.
Hukum Hiram
Definisi jaringan: Ketika API memiliki cukup pengguna, tidak masalah apa yang Anda janjikan dalam kontrak, dan semua perilaku yang diamati dalam sistem Anda akan secara langsung bergantung pada beberapa pengguna.
Hukum Hiram menyatakan bahwa ketika API Anda memiliki banyak pengguna, semua perilaku di API pada akhirnya akan bergantung pada seseorang. Contoh sederhana: elemen non-fungsional, seperti waktu respons API. Contoh yang sedikit lebih rumit: pengguna yang mengandalkan penerapan ekspresi reguler ke pesan kesalahan untuk menentukan jenis kesalahan API.
Hukum Moore
Undang-undang menyatakan bahwa jumlah transistor dalam sirkuit terintegrasi akan berlipat ganda kira-kira setiap dua tahun.
Hukum ini biasanya digunakan untuk menyatakan kecepatan perkembangan teknologi semikonduktor dan chip. Dari 1970-an hingga akhir 1990-an, prediksi Moore sangat akurat. Namun dalam beberapa tahun terakhir, tren ini telah mengalami perubahan halus, sebagian karena keterbatasan fisik pada miniaturisasi komponen. Namun, perkembangan paralelisasi dan potensi perubahan revolusioner di bidang teknologi semikonduktor dan komputasi kuantum dapat berarti bahwa Hukum Moore akan tetap berlaku dalam beberapa dekade mendatang.
Hukum Kekekalan Kompleksitas (Hukum Tesler)
Undang-undang menyatakan bahwa setiap sistem memiliki tingkat kerumitan tertentu yang tidak dapat direduksi.
Beberapa kompleksitas dalam sistem "tidak disengaja". Ini mungkin hasil dari struktur yang buruk, kesalahan, atau pemodelan yang buruk. Kompleksitas yang tidak disengaja dapat dikurangi (atau dihilangkan). Namun, beberapa kompleksitas bersifat "intrinsik" dan disebabkan oleh kompleksitas inheren dari masalah yang mendesak untuk diselesaikan. Dan kompleksitas ini dapat dipindahkan, tetapi tidak dapat dihilangkan.
Hal yang menarik tentang hukum ini adalah bahwa bahkan jika keseluruhan sistem disederhanakan, kompleksitas yang melekat tidak dapat dikurangi. Pendekatan ini hanya menggeser kompleksitas ke pengguna, dan kemudian pengguna harus bertindak dengan cara yang lebih kompleks.
Hukum Sepele Parkinson
Undang-undang menyatakan bahwa organisasi besar akan menghabiskan banyak waktu dan energi untuk membahas hal-hal sepele, tetapi keputusan yang sangat penting dapat diambil dengan mudah.
Hal ini karena ketika membahas masalah yang sangat profesional dan berskala besar, kebanyakan orang tidak berani berbicara dengan santai karena kurangnya pengetahuan profesional, agar tidak membuat kesalahan dan tertawa dengan murah hati, sehingga kebanyakan dari mereka akan menegaskan (atau menghindari) rencana utama dan menyebutkan sesuatu yang tidak ada hubungannya dengan topik tersebut. Hal-hal sepele. Sebaliknya untuk hal-hal sepele yang sederhana, karena setiap orang biasanya bersentuhan dengan dan memiliki pengetahuan yang cukup banyak, namun banyak pendapat yang muncul, Parkinson menyebut fenomena ini sebagai hukum trivialitas.
Filsafat Unix
Filosofi Unix percaya bahwa komponen perangkat lunak harus kecil, dan perhatian harus diberikan pada kejadian tertentu. Menggabungkan unit kecil, sederhana, dan terdefinisi dengan baik daripada menggunakan program multiguna yang besar, kompleks, dapat membuat sistem bangunan lebih mudah.
Praktik modern seperti "arsitektur layanan mikro" menerapkan filosofi ini. Dalam arsitektur ini, layanan berukuran kecil dan fokus pada melakukan sesuatu, membuat perilaku kompleks terdiri dari komponen sederhana.
Hukum Wadler
Undang-undang menyatakan bahwa dalam desain bahasa apa pun, total waktu yang dihabiskan untuk membahas fitur dalam daftar ini sebanding dengan kekuatan posisinya.
1. Semantik
2. Tata bahasa
3. Kosakata dan tata bahasa
4. Tata bahasa kosakata beranotasi
(Singkatnya, jika Anda menghabiskan 1 jam untuk mendiskusikan semantik, itu akan menghabiskan 8 jam untuk sintaks komentar).
Mirip dengan hukum trivialitas Parkinson, hukum Wadler menyatakan bahwa ketika merancang suatu bahasa, waktu yang dihabiskan untuk struktur bahasa tidak proporsional dengan pentingnya fitur-fitur ini.
pada prinsipnya
Dalam artikel ini, penulis menyatakan bahwa prinsip adalah beberapa pedoman yang memandu programmer untuk mengembangkan aplikasi baru. Dalam proses pengkodean sering kita jumpai berbagai kesulitan, tentunya juga terdapat berbagai aturan konvensional. Misalnya, metode penamaan yang paling sederhana, beberapa default menggunakan garis bawah, menggunakan punuk kecil atau penamaan gaya punuk besar, hanya memahami aturan ini, menulis kode itu indah.
Prinsip kekokohan
Di Wikipedia, Prinsip Kekokohan (Robustness Principle) dijelaskan sebagai: "Tulis kode secara konservatif dan terima semua jenis informasi dari aspek lain".
Prinsip ini biasanya diterapkan pada pengembangan aplikasi server, artinya konten yang dikirim harus sekecil mungkin dan memenuhi persyaratan. Tetapi jika Anda dapat menangani masukan yang tidak memenuhi persyaratan, maka tujuan Anda harus memungkinkan berbagai masukan yang tidak konsisten.
Tujuan dari prinsip ini adalah untuk membangun sistem yang kokoh. Sebagai masukan, selama maksud pihak lain masih dapat dimengerti, maka kita perlu berurusan dengan format masukan yang tidak standar. Namun, menerima masukan yang salah format memiliki implikasi keamanan potensial, terutama ketika cara masukan ini ditangani belum diuji dengan baik.
PADAT
Prinsip ini merupakan akronim, yaitu:
S: Prinsip fungsi tunggal
O: Prinsip buka dan tutup
L: Prinsip substitusi Richter
I: Prinsip isolasi antarmuka
D: Andalkan prinsip pembalikan
Seperti yang ditunjukkan di atas, SOLID mengacu pada lima prinsip dasar pemrograman berorientasi objek dan desain berorientasi objek. Ketika prinsip-prinsip ini diterapkan bersama, mereka memungkinkan pemrogram untuk mengembangkan sistem yang lebih mudah untuk memelihara dan memperluas perangkat lunak. SOLID sering digunakan dalam pengembangan yang digerakkan oleh pengujian dan merupakan bagian penting dari prinsip dasar pengembangan agile dan pengembangan perangkat lunak adaptif. Mari kita lihat apa 5 prinsip dasar ini.
Prinsip fungsi tunggal
Dalam deskripsi Wikipedia, prinsip tanggung jawab tunggal menetapkan bahwa setiap kelas harus memiliki satu fungsi, dan fungsi itu harus sepenuhnya dikemas oleh kelas ini. Semua layanannya (jenis ini) harus benar-benar sejajar dengan fungsi (fungsi paralel, artinya tidak ada ketergantungan).
Prinsip ini menyatakan bahwa modul atau kelas hanya boleh menyelesaikan satu hal. Ini berarti bahwa satu modifikasi kecil pada karakteristik program hanya perlu diubah dalam satu komponen. Misalnya, mengubah kata sandi otentikasi hanya perlu mengubah modul program tertentu.
Jaga agar kelas tetap fokus pada satu titik fungsi, alasan pentingnya adalah ini akan membuat kelas lebih kuat. Jika kita mengetahui bahwa komponen yang dimodifikasi hanya memiliki satu fungsi, maka pengujian akan menjadi lebih sederhana dan modifikasi baru akan lebih mudah ditangani. Misalnya mengubah verifikasi kata sandi seharusnya hanya mempengaruhi karakteristik yang terkait dengan verifikasi kata sandi, jika kita ingin mengubah modul yang multifungsi akan lebih rumit membuat kesimpulan seperti ini.
Prinsip pembukaan dan penutupan
Dalam pemrograman berorientasi objek, prinsip pembukaan dan penutupan menetapkan bahwa objek (kelas, modul, fungsi, dll.) Di perangkat lunak harus terbuka untuk ekstensi, tetapi modifikasi perilaku yang ada harus ditutup. Ini berarti bahwa suatu entitas harus diizinkan untuk mengubah perilakunya tanpa mengubah kode sumber.
Fitur ini sangat berharga dalam lingkungan produksi, karena mengubah kode sumber selama produksi memerlukan tinjauan kode, seperti pengujian unit, untuk memastikan kualitas penggunaan produk. Kode yang mengikuti prinsip ini tidak berubah ketika diperpanjang, jadi proses di atas tidak diperlukan.
Misalnya, modul tertentu dapat mengubah teks penurunan harga menjadi HTML. Jika modul dapat diperpanjang dengan fitur baru, yaitu dapat menangani fitur penurunan harga yang baru diusulkan tanpa mengubah bagian dalam modul, maka itu berarti modul tersebut terbuka untuk ekstensi.
Prinsip ini terutama terkait dengan pemrograman berorientasi objek. Kita dapat mendesain objek yang mudah diperluas, tetapi kita juga harus menghindari mendesain objek yang tidak stabil, karena perilaku yang ada dapat berubah dengan cara yang tidak terduga.
Prinsip substitusi richter
Prinsip Substitusi Liskov adalah definisi khusus dari subtipe. Isi dari prinsip substitusi Liskov dapat dijelaskan sebagai: Objek kelas turunan (subclass) dapat menggantikan objek kelas dasarnya (kelas induk) dalam program. Dengan kata lain, jika sebuah modul bergantung pada kelas tertentu, maka modul tersebut harus dapat menggunakan kelas turunan dari kelas tersebut, dan kesalahan sistem tidak akan terjadi.
Misalnya, jika kita memiliki metode, ia dapat membaca teks XML dari struktur file representasi. Jika kelas dasar dari metode ini adalah "file", maka ia dapat memanggil semua kelas yang diturunkan dari "file".
Prinsip ini sangat penting untuk pemrograman berorientasi objek, dan kita harus membuat model hierarki kelas dengan cermat untuk menghindari kebingungan bagi pengguna sistem.
Prinsip isolasi antarmuka
Prinsip segregasi antarmuka menetapkan bahwa klien tidak boleh bergantung pada metode yang tidak digunakannya. Prinsip isolasi antarmuka memecah antarmuka yang besar dan membengkak menjadi antarmuka yang lebih kecil dan lebih spesifik sehingga pengguna hanya perlu mengetahui metode yang mereka minati. Antarmuka yang dikurangi ini juga disebut antarmuka peran. Tujuan dari prinsip isolasi antarmuka adalah untuk melepaskan sistem agar mudah untuk difaktor ulang, diubah, dan diterapkan kembali.
Misalnya, kita memiliki cara untuk membaca dokumen XML dari struktur file representasi. Metode ini hanya perlu membaca byte dan bergerak maju atau mundur dalam file. Jika metode perlu diperbarui karena perubahan fitur yang tidak relevan dalam struktur file (seperti pembaruan model izin yang digunakan untuk menandai keamanan file), prinsip ini tidak valid. File tersebut menerapkan antarmuka 'seekable-stream' dengan lebih baik dan digunakan oleh pembaca XML.
Prinsip ini memiliki relevansi khusus dengan pemrograman berorientasi objek, di mana antarmuka, level, dan tipe abstrak digunakan untuk meminimalkan penggabungan antara komponen yang berbeda. Pengetikan bebek menerapkan prinsip ini dengan menghilangkan antarmuka eksplisit.
Prinsip pembalikan ketergantungan
Dalam arsitektur aplikasi tradisional, desain komponen tingkat rendah digunakan dalam komponen tingkat tinggi, yang memberikan kemungkinan untuk membangun sistem yang kompleks selangkah demi selangkah. Di bawah struktur ini, komponen tingkat tinggi secara langsung bergantung pada komponen tingkat rendah untuk mencapai beberapa tugas. Ketergantungan pada komponen tingkat rendah ini membatasi kelayakan penggunaan kembali komponen tingkat tinggi.
Tujuan dari prinsip inversi ketergantungan adalah untuk memisahkan komponen tingkat tinggi dari ketergantungannya pada komponen tingkat rendah, yang memungkinkan untuk menggunakan kembali komponen pada tingkat yang berbeda. Membagi komponen tingkat tinggi dan komponen tingkat rendah ke dalam paket / pustaka yang berbeda juga mendorong pemisahan ini. Karena komponen tingkat rendah adalah realisasi konkret dari antarmuka komponen tingkat tinggi, kompilasi paket komponen tingkat rendah bergantung pada komponen tingkat tinggi, yang membalikkan hubungan ketergantungan tradisional. Berbagai pola desain, seperti plug-in, pencari lokasi, atau inversi dependensi, digunakan untuk menyediakan implementasi komponen tingkat rendah yang ditentukan ke komponen tingkat tinggi pada waktu proses.
Secara khusus, prinsip pembalikan ketergantungan menetapkan:
Modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah, dan keduanya harus bergantung pada antarmuka abstrak.
Antarmuka abstrak seharusnya tidak bergantung pada implementasi konkret. Implementasi konkret harus bergantung pada antarmuka abstrak.
Misalnya, jika kita memiliki program yang membaca metadata dari situs web, dan komponen utamanya berisi komponen yang mengunduh konten situs web dan komponen yang membaca metadata. Jika kita mempertimbangkan prinsip inversi ketergantungan, maka komponen utama hanya dapat bergantung pada komponen abstrak tertentu, salah satunya hanya dapat memperoleh data bit, dan yang lainnya hanya dapat membaca metadata dari aliran bit. Komponen utama tidak mengetahui informasi yang relevan tentang protokol atau format seperti TCP / IP, HTTP, atau HTML.
Prinsip ini lebih rumit karena tampaknya membalikkan ketergantungan sistem. Dalam praktiknya, prinsip ini berarti bahwa modul orkestrasi independen harus memastikan bahwa implementasi tipe abstrak yang benar digunakan. Misalnya pada contoh di atas, modul pembacaan metadata masih membutuhkan implementasi beberapa jenis abstrak yaitu HTTP file downloader dan HTML meta tag reader.
- SUV peledak Geely memiliki model baru, yang akan diluncurkan pada pertengahan Juni, dan juga dapat dibeli dengan gaji bulanan 3.000.
- Membeli sedan usaha patungan di awal 100.000 yuan, tetapi juga dengan T, keduanya adalah pilihan yang dapat diandalkan
- Saya tidak menyangka bahwa lebih dari 100.000 yuan akan mampu untuk membeli SUV benchmark dari merek usaha patungan ini
- Salah satu SUV paling indah di China memiliki model baru dengan sunroof panoramik 65 inci, baru di awal tahun 80-an.