MODUL 3
“Design Principle (S.O.L.I.D)”
Disusun Oleh
PENDAHULUAN
I.1 PENDAHULUAN
A. Interface Segregation Principle (ISP)
Interface Segregation Principle bertujuan untuk mengurangi jumlah
ketergantungan sebuah class terhadap interface class yang tidak dibutuhkan.
Jumlah ketergantungan dari fungsi pada sebuah interface class yang dapat
diakses oleh class tersebut harus dioptimalkan atau dikurangi. Terkadang
ketika sebuah class dibuat dengan jumlah fungsi dan properti yang banyak,
class lain yang bergantung pada class tersebut hanya membutuhkan satu atau
dua fungsi dari class tersebut. Ketergantungan antar class akan semakin
bertambah seiring bertambahnya jumlah fungsi dan properti dari class yang
dibutuhkan.
Menggunakan prinsip Interface Segregation, class-class yang saling
bergantung dapat berkomunikasi dengan menggunakan interface yang lebih
kecil, mengurangi ketergantungan pada fungsi-fungsi yang tidak digunakan
dan mengurangi coupling. Dengan menggunakan interface yang lebih kecil
akan memudahkan dalam implementasi, meningkatkan fleksibilitas dan juga
kemungkinan untuk digunakan kembali (reuse).
Interface VehicleInterface
interface VehicleInterface {
void drive();
void stop();
void refuel();
void openDoors();
}
Class Motorcycle
class Motorcycle implements VehicleInterface {
// Can be implemented
@Override
public void drive() {
}
@Override
public void stop() {
}
@Override
public void refuel() {
}
// Can not be implemented
@Override
public void openDoors() {
}
}
Class Car
class Car implements VehicleInterface {
// Can be implemented
@Override
public void drive() {
}
@Override
public void stop() {
}
@Override
public void refuel() {
}
// Can not be implemented
@Override
public void openDoors() {
}
}
B. Latihan DPI
Berikut adalah kasus implementasi kasus mobil dan mesin yang
dimodelkan menjadi Class Car dan Engine. Class Car memiliki engine, dalam
hal ini dimodelkan sebagai class Engine. Namun, jika terdapat jenis engine
yang berbeda, sebagai contoh menjadi mesin diesel hal tersebut
mengakibatkan perlunya membuat class baru DieselEngine.
Class Car
class Car {
private final Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
void start() {
engine.start();
}
}
Class Engine
class Engine {
void start() {
}
}
Class DieselEngine
class DieselEngine {
void start() {
}
}
Design code tersebut jika diterapkan prinsip Dependency Inversion,
maka akan menjadi seperti berikut:
Class PetrolEngine
class PetrolEngine implements EngineInterface {
@Override
public void start() {
}
}
Class HybridEngine
class HybridEngine implements EngineInterface {
@Override
public void start() {
}
}
Class DieselEngine
class DieselEngine implements EngineInterface {
@Override
public void start() {
}
}
Sehingga, kita dengan mudah dapat membuat jenis Car yang berbeda,
cukup dari satu model class Car saja. Berikut penerapan untuk pemanggilan
kodenya:
class Main {
public static void main(String[] args) {
Car fuelCar = new Car(new PetrolEngine());
Car dieselCar = new Car(new DieselEngine());
Car hybridCar = new Car(new HybridEngine());
//Booom boom
fuelCar.start();
dieselCar.start();
hybridCar.start();
}
}
C. Tugas
Untuk memahami principle dari SOLID terutama bagian ISP dan DPI.
Selesaikan perintah berikut.
1. Pada Latihan 4.2.1 ISP, Jelaskan alasan kenapa bentuk/design codenya
harus diubah?
Jawab: Karena Prinsip ini sendiri bertujuan untuk mengurangi jumlah
ketergantungan sebuah class terhadap interface class yang tidak
dibutuhkan.
@Override
public void drive() {
System.out.println("Driving the motorcycle...");
}
@Override
public void start() {
System.out.println("Starting the motorcycle...");
}
@Override
public void stop() {
System.out.println("Stopping the motorcycle...");
}
}
3. Pada Latihan 4.2.2 DPI, Jelaskan alasan kenapa bentuk/design
codenya harus diubah?
Jawab: karena akan membutuhkan pemfaktoran ulang class car namun,
bisa menyelesaikan ini dengan memperkenalkan lapisan abstrak. Alih
alih car yang bergantung langsung pada Engine, sehingga dapat
menghubungkan segala jenis engine yang mengimplementasikan
interface engine ke class car
BAB III
KESIMPULAN
S.O.L.I.D merupakan suatu prinsip yang digunakan agar kita tetap dapat
menjaga kualitas dari kodingan. Dibutuhkan sedikit waktu untuk terbiasa dengan
prinsip-prinsip ini, namun mempelajari dan melaksanakannya, sangat membantu kita
dalam memelihara source code perangkat lunak.