Figure 1. SOLID Principles (sumber: https://www.thoughtworks.com/)

Dalam publikasi tahun 2000an berjudul “Design Principle and Design Pattern”, Robert C. Martin, yang juga dikenal sebagai Uncle Bob, memperkenalkan konsep SOLID Principles. Tujuan dari prinsip ini adalah untuk membantu software engineer bekerja dalam kelompok dengan lebih mudah, serta untuk menghasilkan kode yang dapat digunakan kembali, dipelihara, diskalakan, dan diuji. Single-responsibility principle, Open-closed principle, Liskov substitution principle, Interface segregation principle dan Dependency Inversion Principle dikenal sebagai SOLID. SOLID adalah fondasi umum untuk pemrograman berbasis objek (OOP).

Single responsibility principle

“Responsibilities should be limited to one per class.”

Single responsibility artinya class wajib memiliki satu tanggung jawab, jadi setiap class tidak boleh memiliki lebih dari satu tugas. Misalnya, class checkout memiliki kemampuan untuk menghitung order, mengakses database, dan mencetak faktur, yang sangat bertentangan dengan prinsip ini.

Open-closed principle

“Software entities should be open for extension but closed for modification”

Menurut prinsip Open-Closed, entitas perangkat lunak seperti class, modul, dan fungsi harus dapat diperluas tanpa mengubah kode yang sudah ada. Ini berarti bahwa jika kita perlu menambahkan fitur atau perilaku baru ke perangkat lunak, kita harus dapat melakukannya dengan menambahkan kode baru daripada mengubah kode yang sudah ada. Hal ini penting untuk menghindari bug yang tidak terduga dan menjaga stabilitas kode yang sudah berfungsi dengan baik.

Liskov Substitution Principle

“Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”

Menurut prinsip Liskov substitution, objek class dapat digantikan dengan objek subclass tanpa mempengaruhi program. Dengan kata lain, jika suatu class B adalah subclass dari class A, maka kita harus dapat menggunakan objek dari class B di mana pun kita menggunakan objek dari class A, dan program harus tetap berfungsi dengan benar.

Interface Segregation Principle

“Clients should not be forced to depend on interfaces they do not use”

Dalam pembuatan interface, lebih baik membuat banyak interface dengan fungsi yang spesifik. Hal ini lebih baik daripada membuat satu interface dengan fungsi yang tidak spesifik. Pemisahan interface digunakan untuk mencegah klien menggunakan kode yang tidak diperlukan.

Misalnya, jika kita memiliki interface untuk kendaraan yang memiliki metode seperti “StartEngine” dan “Fly”, sebaiknya metode ini dipisah jika tidak semua kendaraan bisa terbang. Sebuah mobil, misalnya, seharusnya tidak perlu meng-implement metode “Fly”.

Dependency Inversion Principle

“High-level modules should not depend on low-level modules. Both should depend on abstractions”

Class dengan kompleksitas yang lebih rendah tidak boleh bergantung pada class yang lebih tinggi kompleksitasnya. Kemudian, untuk komunikasi antar kelas harus melalui abstraksinya, atau interface. Tujuan dari prinsip ini adalah untuk mengurangi ketergantungan antara berbagai bagian sistem, sehingga perubahan pada satu bagian tidak secara langsung memengaruhi bagian lainnya.

 

Referensi

Prinsip Pemrograman SOLID – by Asdita Prasetya | TLabCircle (medium.com)

What are the SOLID Principles in Software Engineering | by Sergio Sánchez | Javarevisited | Medium