Selain Unified Modeling Language (UML) dikenal istilah lain yang agak baru lagi, yaitu SOLID (dalam disain berbasis objek). Istilah ini muncul dari saran Uncle Bob (Robert C. Martin), yang berisi empat prinsip dalam disain berbasis objek. Lima prinsip tersebut antara lain:
1. S – Single-responsibility principle
Prinsip ini mewajibkan suatu kelas (class) sebaiknya hanya memiliki satu tugas. Jangan sampai satu kelas memiliki lebih dari satu tugas. Sebagai contoh suatu program bermaksud menghitung luas seluruh bentuk, misal lingkaran, bujur sangkar, dan lain-lain. Suatu kelas yang berisi perhitungan total area beserta outputnya sebaiknya dihindari. Sesuai prinsip “single-responsibility principle (SRP)” sebaiknya kelas totalArea(shape) dipisahkan dengan outputArea(area). Jadi kelas totalArea hanya berisi perhitungan area sementara outputArea memiliki tugas menampilkan keluaran apakah JASON, HTML, atau format lainnya.
2. O – Open-closed principle
Terbuka di sini menyatakan suatu kelas bisa di extend tetapi “closed” dalam artian tidak perlu memodifikasi kelas sebelumnya. Misal kasus sebelumnya, menghitung total luas area beberapa bangun. Dengan memisahkan kelas totalArea dan outputArea, SRP terpenuhi. Tetapi jika ingin menambah satu bentuk baru, misalnya segitiga maka kelas totalArea terkadang harus di-modif, terutama di loopingnya. Hal ini melanggar prinsip “tak memodif”. Untuk mengatasi hal tersebut, tiap kelas bentuk/bangun, Shape, menyertakan suatu interface berupa implement, yaitu metode/fungsi berisi penentuak jari2/sisi/parameter lain disertai luasnya, misalnya diberi nama shapeInterface. Kemudian kelas totalArea memiliki fungsi sum yang memanggil interface dengan for each terhadap seluruh bangun/bentuk. Jika ada satu bentuk/bangun baru, maka asalkan disertai interface dengan nama shapeInterface maka akan otomatis ikut terhitung. Dan karena tidak ada modif di kelas totalArea, maka prinsip “open-closed” terpenuhi.
3. L – Liskov substitution principle
Jika tipe S adalah sub-tipe dari tipe T, maka fungsi q(x) yang bisa menjalankan objek x dari tipe T bisa juga menjalankan q(y) dimana y adalah objek S.
“Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.”
Contoh sederhananya kembali ke kelas perhitungan luas. Karena volume adalah sub-tipe dari luas, maka perhitungan volume bisa mengambil fungsi dari perhitungan area/luas. Misal persegi panjang, maka volume balok bisa mengambil luas persegi panjang dikalikan tinggi, dengan memanfaatkan extend.
4. I – Interface segregation principle
Prinsip ini menganjurkan agar tidak memaksa pemesan/client mempunyai metode (method) yang tidak mereka butuhkan. Misalnya kita diminta menghitung bentuk 3D seperti kotak, bola, dll maka pada metode shapeInterface akan diisi luas dan volume yang harus dimiliki oleh kelas-kelas lain yang tidak memiliki volume (lingkaran, bujur sangkar, dll). Oleh karena itu agar tidak melanggar prinsip “interface segregation” yang memaksa perhitungan volume, maka perlu membedakan kelas solid dengan yang tidak memiliki volmue. Dengan kata lain perlu interface solidShapeInterface dengan fungsi perhitungan volume.
5. D – Dependency Inversion Principle
Prinsip ini mengharuskan tiap entitas tergantung dari hasil abstraksi (pemodelan fungsi dari kondisi real). Suatu kelas pengingat pasword, passwordReminder tidak boleh tergantung dari koneksi ke MySQL atau Oracle atau database lain. Jika ada pergantian jenis database, misal dari MySQL ke SQL Server, maka tidak melanggar juga prinsip ini “Open-closed principle” yang tidak boleh lagi memodifikasi fungsi sebelumnya (koneksi ke MySQL). Solusinya adalah menambah interface koneksi database, misal DBConnectionInterface. Jika sebelumnya class MySQLConnection implements DBConnectionInterface, jika diganti SQLSERVER maka tinggal menggati dengan SQLSERVERConnection implemetns DBConnectionInterface.
Prinsip SOLID ini sangat penting, itulah mengapa dalam videonya di youtube bu Inge menyinggung masalah SOLID ini. Bahkan merupakan hal yang wajib diketahui oleh para developer.
Referensi
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design