A. Prinsip Perancangan Perangkat Lunak
Desain sistem perangkat lunak adalah proses merancang arsitektur dan komponen
perangkat lunak yang dapat memecahkan masalah yang dihadapi pengguna atau organisasi.
1. Prinsip Modularitas & Reusability
- Modularitas adalah prinsip desain yang mengedepankan pemecahan sistem menjadi
bagian-bagian yang lebih kecil dan independen, yang disebut modul. Setiap modul memiliki
fungsi atau tanggung jawab tertentu dan berinteraksi dengan modul lain melalui antarmuka
yang terdefinisi dengan baik.
- Reusability kemampuan perangkat untuk lunak digunakan adalah kembali komponen
perangkat lunak yang ada atau mudah tersedia untuk mengurangi waktu dan biaya untuk
komputasi dan sumber daya manusia
- DRY (Don’t Repeat Yourself)
Don't Repeat Yourself (DRY) adalah prinsip pengembangan perangkat lunak yang
mendorong pengembang untuk menghindari duplikasi kode dalam suatu sistem.
- KISS (Keep It Simple, Stupid)
Prinsip KISS betapa pentingnya kemudahan dalam desain perangkat lunak. Prinsip ini
mendorong pengembang untuk menghindari kerumitan yang tidak perlu dan menciptakan
solusi yang lugas dan mudah dipahami.
2. Prinsip SOLID dalam OOP
- Single Responsibility Princip
principle artinya setiap class wajib hanya memiliki satu tanggung jawab, dan hanya
memiliki satu alasan untuk diubah.
Dengan menerapkan Open-close principle kita harusnya bisa menambahkan fitur baru
tanpa harus mengubah kode lama yang sudah ditulis sebelumnya.
- Liskov Substitution Principle
Konsep ini terkait dengan proses inheritance suatu fungsi atau objek.
- Dependency Inversion Principle
Prinsip DIP mengatakan bahwa kelas seharusnya bergantung pada abstraksi, bukan pada
implementasi.
3. Kohesi dan Coupling
- Kopling mengacu pada tingkat saling ketergantungan antara modul perangkat lunak.
Kopling yang tinggi berarti bahwa modul-modul saling terhubung erat dan perubahan dalam
satu modul dapat memengaruhi modul-modul lainnya. Kopling yang rendah berarti bahwa
modul-modul bersifat independen, dan perubahan dalam satu modul memiliki dampak yang
kecil pada modul-modul lainnya.
Berikut ini adalah jenis-jenis Kopling:
a. Penggabungan Data: Jika ketergantungan antara modul didasarkan pada fakta bahwa
mereka berkomunikasi dengan hanya mengirimkan data, maka modul tersebut
dikatakan sebagai penggabungan data. Dalam penggabungan data, komponen-
komponennya independen satu sama lain dan berkomunikasi melalui data. Komunikasi
modul tidak berisi data tramp. Contoh-sistem penagihan pelanggan.
b. Stamp Coupling Dalam stamp coupling, struktur data lengkap diteruskan dari satu
modul ke modul lainnya. Oleh karena itu, hal ini melibatkan data tramp. Hal ini
mungkin diperlukan karena faktor efisiensi - pilihan ini dibuat oleh desainer yang
cerdas, bukan programmer yang malas.
c. Kopling Kontrol: Jika modul berkomunikasi dengan cara menyampaikan informasi
kontrol, maka modul tersebut disebut sebagai kopling kontrol. Kopling kontrol dapat
dikatakan buruk jika parameter menunjukkan perilaku yang sama sekali berbeda, dan
dapat dikatakan baik jika parameter memungkinkan pemfaktoran dan penggunaan
kembali fungsionalitas. Contoh- fungsi sortir yang menggunakan fungsi perbandingan
sebagai argumen.
d. Kopling Eksternal: Dalam kopling eksternal, modul-modul bergantung pada modul-
modul lain, yang berada di luar perangkat lunak yang sedang dikembangkan atau pada
jenis perangkat keras tertentu. Misalnya protokol, berkas eksternal, format perangkat,
dll.
e. Common Coupling: Modul-modul memiliki data bersama seperti struktur data global.
Perubahan dalam data global berarti menelusuri kembali ke semua modul yang
mengakses data tersebut untuk mengevaluasi dampak perubahan. Jadi, ada beberapa
kelemahan seperti kesulitan dalam menggunakan kembali modul, berkurangnya
kemampuan untuk mengendalikan akses data, dan berkurangnya pemeliharaan.
f. Content Coupling: Dalam content coupling, satu modul dapat mengubah data modul
lain, atau aliran kontrol diteruskan dari satu modul ke modul lainnya. Ini adalah bentuk
coupling terburuk dan harus dihindari.
g. Kopling Temporal: Kopling temporal terjadi ketika dua modul bergantung pada waktu
atau urutan kejadian, seperti satu modul perlu dijalankan sebelum modul lainnya. Jenis
kopling ini dapat mengakibatkan masalah desain dan kesulitan dalam pengujian dan
pemeliharaan.
h. Kopling Berurutan: Kopling berurutan terjadi saat output dari satu modul digunakan
sebagai input modul lain, yang menciptakan rantai atau urutan ketergantungan. Jenis
kopling ini sulit dipertahankan dan dimodifikasi.
i. Kopling Komunikasi: Kopling komunikasi terjadi ketika dua atau lebih modul berbagi
mekanisme komunikasi yang sama, seperti antrean pesan atau basis data yang sama.
Jenis kopling ini dapat menyebabkan masalah kinerja dan kesulitan dalam debugging.
- Kohesi mengacu pada tingkat di mana elemen-elemen dalam suatu modul bekerja sama untuk
memenuhi satu tujuan yang ditetapkan dengan baik. Kohesi yang tinggi berarti bahwa elemen-
elemen saling terkait erat dan terfokus pada satu tujuan, sedangkan kohesi yang rendah berarti
bahwa elemen-elemen saling terkait secara longgar dan melayani berbagai tujuan.
Berikut ini adalah jenis-jenis Kohesi:
a. Kohesi Fungsional: Setiap elemen penting untuk satu komputasi terkandung dalam
komponen. Kohesi fungsional menjalankan tugas dan fungsinya. Ini adalah situasi yang
ideal.
b. Kohesi Berurutan: Suatu elemen mengeluarkan sejumlah data yang menjadi masukan
bagi elemen lainnya, yaitu aliran data antar bagian. Hal ini terjadi secara alami dalam
bahasa pemrograman fungsional.
c. Kohesi Komunikasi: Dua elemen beroperasi pada data masukan yang sama atau
berkontribusi terhadap data keluaran yang sama. Contoh: memperbarui catatan dalam
basis data dan mengirimkannya ke printer.
d. Kohesi Prosedural: Elemen-elemen kohesi prosedural memastikan urutan pelaksanaan.
Tindakan masih terhubung secara lemah dan tidak mungkin dapat digunakan kembali.
Misalnya menghitung IPK siswa, mencetak catatan siswa, menghitung IPK kumulatif,
mencetak IPK kumulatif.
e. Kohesi Temporal: Elemen-elemen tersebut saling terkait berdasarkan waktu yang
terlibat. Modul yang terhubung dengan kohesi temporal mengharuskan semua tugas
dieksekusi dalam rentang waktu yang sama. Kohesi ini berisi kode untuk
menginisialisasi semua bagian sistem. Banyak aktivitas berbeda terjadi, semuanya
dalam waktu satuan.
f. Kohesi Logis: Elemen-elemen tersebut terkait secara logis dan tidak secara fungsional.
Misalnya, komponen A membaca input dari pita, disk, dan jaringan. Semua kode untuk
fungsi-fungsi ini ada dalam komponen yang sama. Operasi-operasinya terkait, tetapi
fungsinya sangat berbeda.
g. Kohesi Kebetulan: Elemen-elemen tidak terkait (tidak berhubungan). Elemen-elemen
tidak memiliki hubungan konseptual selain lokasi dalam kode sumber. Itu tidak
disengaja dan merupakan bentuk kohesi terburuk. Contoh: cetak baris berikutnya dan
balikkan karakter string dalam satu komponen.
h. Kohesi Prosedural: Jenis kohesi ini terjadi ketika elemen atau tugas dikelompokkan
bersama dalam sebuah modul berdasarkan urutan pelaksanaannya, seperti modul yang
menjalankan serangkaian prosedur terkait dalam urutan tertentu. Kohesi prosedural
dapat ditemukan dalam bahasa pemrograman terstruktur.
i. Kohesi Komunikasi: Kohesi komunikasi terjadi ketika elemen atau tugas
dikelompokkan bersama dalam sebuah modul berdasarkan interaksinya satu sama lain,
seperti modul yang menangani semua interaksi dengan sistem atau modul eksternal
tertentu. Jenis kohesi ini dapat ditemukan dalam bahasa pemrograman berorientasi
objek.
j. Kohesi Temporal: Kohesi temporal terjadi ketika elemen atau tugas dikelompokkan
bersama dalam sebuah modul berdasarkan waktu atau frekuensi pelaksanaannya,
seperti modul yang menangani semua tugas periodik atau terjadwal dalam sebuah
sistem. Kohesi temporal umumnya digunakan dalam sistem real-time dan embedded.
k. Kohesi Informasional: Kohesi informasional terjadi ketika elemen atau tugas
dikelompokkan bersama dalam sebuah modul berdasarkan hubungannya dengan
struktur data atau objek tertentu, seperti modul yang beroperasi pada tipe data atau
objek tertentu. Kohesi informasional umumnya digunakan dalam pemrograman
berorientasi objek.