PT. Neuronworks Indonesia

2023-10-25 04:21:37, Ristek ALPRA,


Fondasi Kokoh untuk Pengembangan Software

SOLID Principles adalah salah satu prinsip “standar” yang bisa diterapkan pada kode program yang kita buat. Apabila kita menerapkan prinsip SOLID, maka kode yang kita buat akan menjadi jauh lebih baik; lebih mudah di-maintain, flexible, reusable, extendable. Dengan kata lain, kode kita menjadi lebih “pro”.

 

SOLID dipopulerkan oleh Uncle Bob (Robert C. Martin), meskipun beberapa item di dalamnya sudah pernah dipopulerkan sebelumnya oleh orang lain. Uncle Bob adalah penulis buku “Clean Code: A Handbook of Agile Software Craftsmanship”. Ini adalah salah satu buku yang kami rekomendasikan kepada setiap para programmer untuk dibaca.

“Writing clean code is what you must do in order to call yourself a professional. There is no reasonable excuse for doing anything less than your best.” Robert C. Martin

image

1. SRP (Single Responsibility Principle)

Definisi: “A class should have one and only one reason to change (single responsibility)” Dalam satu class, hanya boleh diisi dengan satu tanggung jawab. Jangan memasukan kode yang beraneka ragam ke dalam satu class. Contoh: Jika class tersebut bertanggung jawab untuk me-manage tabel “users”, maka tidak boleh dibebani lagi dengan tabel “orders” misalnya, atau dengan menambahkan perhitungan diskon akhir tahun. Perhitungan diskon harus dipisahkan ke class tersendiri. Manajemen tabel “orders” pun harus dipisah ke class tersendiri.

Mengapa hal ini penting?

  • Saat menulis class atau function yang didedikasikan untuk satu fungsi, akan lebih mudah untuk memahami, memelihara, dan memodifikasi kode Anda.
  • Jika Anda ingin mengubah fungsionalitas sistem, akan mudah mencari bagian code yang harus diubah.
  • Membuat kode lebih terorganisir dan mudah dibaca. Ini juga membuat penggunaan kembali kode menjadi lebih mudah.

Conton Implementasi :

  • Tanpa SRP

image

  • Dengan SRP

image


 

2. OCP (Open Closed Principle)

Definisi: “Entities (classes, modules, functions etc.) should be open for extension but closed for modifications”.

Class/function harus dapat di-extend fungsinya tanpa merubah kode di dalamnya. Hmm terdengar tricky, tapi dalam programming hal itu bisa dilakukan.

image

Ide ini difasilitasi oleh Open/Closed Principle. function, class, dan modul kita harus dirancang sedemikian rupa sehingga terbuka untuk perluasan, namun tertutup untuk modifikasi.

  • Open for Extension: Fungsi baru dapat ditambahkan ke dalam class dan modul tanpa merusak kode yang ada. Komposisi dan warisan dapat digunakan untuk mencapai hal ini.
  • Closed for Modification: Sebaiknya jangan membuat perubahan yang merusak fungsionalitas saat ini, karena hal ini memerlukan refactoring dari kode yang sudah ada dan menulis beberapa pengujian untuk memastikan perubahan tersebut berfungsi.

Contoh Implementasi:

  • Contoh yang belum menggunakan OCP:

image

  • Contoh yang salah:

image image image

  • Contoh yang benar:

image image image image image image image


 

3. LSP (Liskov Substitution Principle)

Definisi: “Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it”. Class harus bisa di-switch dengan class turunannya tanpa menyebabkan kesalahan logic ataupun teknis.

image

Contoh Implementasi :

image image image image image


 

4. ISP (Interface Segregation Principle)

Clients should not be forced to depend upon interfaces that they do not use.”

Interface dibuat sesuai dengan kebutuhan klien, dan tidak boleh memaksa untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.

image

Contoh :

image


 

5. DIP (Dependency Inversion/Injention Principle)

Definisi: “Clients should not be forced to depend upon interfaces that they do not use.” A. “High level modules should not depend upon low level modules. both should depend upon abstractions.” B. “Abstractions should not depend upon details. Details should depend upon abstractions.”

Mirip-mirip SRP, tapi ini berlaku ntuk interface. Interface juga tidak boleh memiliki terlalu banyak function sehingga memaksa client class nya untuk mengimplementasi semua function. Karena, mungkin beberapa function tidak dibutuhkan oleh class tersebut.

image

Contoh :

image image image image

image image

 


Kesimpulan

A. Prinsip Single Responsibility (SRP) :
Dengan memisahkan tanggung jawab dalam kelas-kelas yang berbeda, kita menciptakan kode yang lebih mudah dimengerti, dikelola, dan diperbaiki. Setiap kelas seharusnya memiliki satu alasan untuk berubah.


B. Prinsip Open/Closed (OCP) :
Kode seharusnya terbuka untuk perluasan namun tertutup untuk modifikasi. Ini mendorong penggunaan pewarisan dan polimorfisme untuk mengubah perilaku tanpa mengubah kode yang sudah ada.


C. Prinsip Liskov Substitution (LSP) :
SubClass seharusnya bisa digunakan sebagai pengganti kelas induk tanpa memengaruhi kebenaran program. Ini memastikan hubungan semantik antar kelas.


D. Prinsip Interface Segregation (ISP) :
Interface yang spesifik untuk setiap kelas membantu menghindari implementasi yang tidak diperlukan. Kelas seharusnya hanya mengimplementasikan apa yang diperlukan, mencegah pengaruh yang berlebihan.


E. Prinsip Dependency Inversion (DIP) :
Bergantung pada abstraksi daripada implementasi konkrit memungkinkan fleksibilitas dan menghindari ketergantungan yang kuat antara komponen-komponen sistem.