Skip to content

Latest commit

 

History

History
597 lines (419 loc) · 11.5 KB

File metadata and controls

597 lines (419 loc) · 11.5 KB

Modul 3. Konsep Dasar OOP

Object-Oriented Programming (OOP) adalah cara menulis program dengan memodelkan objek seperti di dunia nyata.

Berikut adalah contoh kode yang digunakan dalam modul ini: App.java

Daftar Isi

1. Class dan Object

1773736746240

1.1 Class

Class adalah blueprint atau cetakan untuk membuat object.

Pada kode ini:

abstract class Car {
  protected String brand;
  protected String type;
  protected String color;
  private int speed;
}

Car adalah class yang mendefinisikan data dan perilaku dasar dari sebuah mobil.

Class lain juga ada, misalnya:

  • ElectricCar
  • CashPayment

1.2 Object

Object adalah hasil nyata dari class.

Contoh pada main():

ElectricCar myCar = new ElectricCar("Honda", "Brio", "Kuning", 0);

myCar adalah object dari class ElectricCar.

Artinya object myCar punya data:

  • brand = "Honda"
  • type = "Brio"
  • color = "Kuning"
  • speed = 0

Lalu object ini bisa menjalankan method seperti:

myCar.getSpeed();
myCar.startEngine();
myCar.payToll(100000);

2. Atribut dan Method

1773736770758

2.1 Atribut

Atribut adalah sifat-sifat yang dimiliki object.

Pada class Car:

protected String brand;
protected String type;
protected String color;
private int speed;
protected CashPayment cashPayment = new CashPayment();

Penjelasan:

  • brand → merek mobil
  • type → tipe mobil
  • color → warna mobil
  • speed → kecepatan mobil
  • cashPayment → object untuk proses pembayaran tol

2.2 Method

Method adalah aksi atau perilaku yang bisa dilakukan object.

Contoh method pada Car:

public int getSpeed() {
  return speed;
}

public void setSpeed(int speedNew) {
  this.speed = speedNew;
}

public void payToll(int number) {
  cashPayment.payToll(number);
}

Contoh method pada ElectricCar:

void startEngine() {
  System.out.println("Ini electric car");
}

3. Constructor

Constructor adalah method khusus yang otomatis dipanggil saat object dibuat. Fungsi utamanya adalah untuk menginisialisasi nilai awal dari object.

1773736915369

Ciri-ciri constructor:

  • Nama constructor harus sama dengan nama class
  • Tidak memiliki return type
  • Dipanggil saat object dibuat dengan keyword new

Contoh sederhana:

Car myCar = new Car();

Saat baris di atas dijalankan, constructor Car() akan dipanggil.

Secara garis besar, ada 2 jenis constructor, yaitu:

  1. Default Constructor
  2. Parameterized Constructor

Dalam implementasinya, berkembang jadi beberapa jenis, yaitu:

  1. Overloading Constructor
  2. Copy Constructor
  3. Private Constructor
  4. Constructor pada Inheritance

3.1 Default Constructor

Default constructor adalah constructor tanpa parameter. Constructor ini cocok digunakan ketika object ingin langsung punya nilai awal default tanpa harus mengisi data dari luar.

Contoh:

class Car {
  String brand;

  Car() {
    brand = "Honda";
  }
}

Pemakaian di Main:

Car myCar = new Car();
System.out.println(myCar.brand);

Output:

Honda

3.2 Parameterized Constructor

Parameterized constructor adalah constructor yang memiliki parameter. Constructor ini dipakai ketika nilai object ingin diisi langsung saat object dibuat.

Contoh:

class Car {
    String brand;
    String type;
    String color;
    int speed;

    public Car(String brand, String type, String color, int speed) {
        this.brand = brand;
        this.type = type;
        this.color = color;
        this.speed = speed;
    }
}

Pemakaian di Main:

Car myCar = new Car("Honda", "Brio", "Merah", 100);
System.out.println(myCar.brand);
System.out.println(myCar.color);

Output:

Honda
Merah

3.3 Constructor Overloading

Constructor overloading adalah satu class memiliki lebih dari satu constructor, tetapi dengan parameter yang berbeda. Dengan overloading, object bisa dibuat dengan beberapa cara sesuai kebutuhan.

Misalnya:

  • tanpa parameter
  • dengan 1 parameter
  • dengan 2 parameter

Contoh:

class Car {
  String brand;
  String color;

  Car() {
    brand = "Default Brand";
    color = "Hitam";
  }

  Car(String brand) {
    this.brand = brand;
    this.color = "Putih";
  }

  Car(String brand, String color) {
    this.brand = brand;
    this.color = color;
  }
}

Pemakaian:

Car car1 = new Car();
Car car2 = new Car("Honda");
Car car3 = new Car("Suzuki", "Biru");

3.4 Copy Constructor

Di Java, copy constructor adalah constructor yang menerima object sejenis lalu menyalin nilainya ke object baru. Constructor ini berguna untuk membuat object baru berdasarkan object yang sudah ada.

Contoh:

class Car {
  String brand;
  String color;

  Car(String brand, String color) {
    this.brand = brand;
    this.color = color;
  }

  Car(Car other) {
    this.brand = other.brand;
    this.color = other.color;
  }
}

Pemakaian:

Car car1 = new Car("Honda", "Kuning");
Car car2 = new Car(car1);

System.out.println(car2.brand);
System.out.println(car2.color);

Output:

Honda
Kuning

3.5 Private Constructor

Private constructor adalah constructor yang dibuat dengan access modifier private.

Contoh:

class Database {
  private Database() {
    System.out.println("Constructor dipanggil");
  }
}

Constructor ini tidak bisa dipanggil dari luar class. Biasanya digunakan untuk:

  • pattern Singleton
  • mencegah object dibuat sembarangan
  • class utility

Contoh Singleton sederhana:

class Database {
  private static Database instance;

  private Database() {}

  public static Database getInstance() {
    if (instance == null) {
      instance = new Database();
    }
    return instance;
  }
}

Pemakaian:

Database db = Database.getInstance();

3.6 Constructor pada Inheritance

Dalam pewarisan, constructor parent bisa dipanggil menggunakan super().

Contoh:

class Car {
    String brand;
    String type;
    String color;
    int speed;

    public Car(String brand, String type, String color, int speed) {
        this.brand = brand;
        this.type = type;
        this.color = color;
        this.speed = speed;
    }
}

class ElectricCar extends Car {
    public ElectricCar(String brand, String type, String color, int speed) {
        super(brand, type, color, speed);
    }
}

Kata kunci super(...) digunakan untuk memanggil constructor milik parent class, yaitu Car.

Saat kode ini dijalankan:

ElectricCar myCar = new ElectricCar("Honda", "Brio", "Kuning", 0);

Maka constructor ElectricCar dipanggil, lalu meneruskan data ke constructor Car.

4. Empat Konsep OOP

4 pilar utama Pemrograman Berorientasi Objek (OOP) adalah

  1. Enkapsulasi
  2. Pewarisan (Inheritance)
  3. Polimorfisme, dan
  4. Abstraksi

Pilar-pilar ini berfungsi untuk meningkatkan modularitas, keamanan, dan reusabilitas kode, membuat perangkat lunak lebih mudah dikelola serta dikembangkan.

1773736399143

4.1 Abstraction

Abstraction adalah menyembunyikan detail implementasi dan hanya menampilkan hal penting.

1773737067530

Pada kode ini, abstraction terlihat dari:

abstract class Car {
  abstract void startEngine();
}

Class Car hanya mengatakan bahwa setiap mobil harus punya method startEngine(), tetapi cara menyalakan mesin tidak dijelaskan di Car.

Implementasinya diberikan di class turunan:

@Override
void startEngine() {
  System.out.println("Ini electric car");
}

Jadi:

  • Car mendefinisikan konsep umum mobil
  • ElectricCar mengisi detail implementasinya

Interface juga bagian dari abstraction

Pada kode ini juga ada:

interface TollPayment {
  void payToll(int number);
}

Interface TollPayment hanya menentukan aturan bahwa class yang mengimplementasikannya harus punya method payToll(int number).

4.2 Inheritance

Inheritance adalah pewarisan, yaitu class anak mewarisi atribut dan method dari class induk.

1773736981604

Contoh:

class ElectricCar extends Car {

ElectricCar mewarisi isi dari Car, seperti:

  • brand
  • type
  • color
  • getSpeed()
  • setSpeed()
  • payToll()

Karena itu object myCar bisa langsung memakai:

myCar.getSpeed();
myCar.payToll(100000);

padahal method tersebut didefinisikan di class Car.

Keuntungan inheritance:

  • kode lebih rapi
  • bisa digunakan ulang
  • tidak perlu menulis ulang fitur yang sama

4.3 Polymorphism

Polymorphism berarti "satu bentuk, banyak perilaku".

1773737025648

Dalam OOP, method yang sama bisa punya implementasi berbeda pada class yang berbeda.

Contoh pada method abstract:

abstract void startEngine();

Lalu di ElectricCar di-override menjadi:

@Override
void startEngine() {
  System.out.println("Ini electric car");
}

Kalau nanti ada class lain, misalnya GasCar, maka method startEngine() bisa diisi berbeda, misalnya:

@Override
void startEngine() {
  System.out.println("Mesin bensin dinyalakan");
}

Artinya:

  • nama method sama → startEngine()
  • perilaku bisa berbeda tergantung jenis object

Contoh lain polymorphism juga terlihat pada interface:

interface TollPayment {
  void payToll(int number);
}

Lalu class:

class CashPayment implements TollPayment {
  @Override
  public void payToll(int number) {
    System.out.println("Pembayaran Cash sejumlah: " + number);
  }
}

Kalau nanti ada DebitPayment atau EWaletPayment, semua bisa punya method payToll() dengan cara pembayaran berbeda.

4.4 Encapsulation

Encapsulation adalah membungkus data dan mengontrol akses terhadap data tersebut.

1773737271167

Contoh paling jelas ada pada property speed:

private int speed;

Karena speed bersifat private, property ini tidak bisa diakses langsung dari luar class.

Aksesnya harus lewat method:

public int getSpeed() {
  return speed;
}

public void setSpeed(int speedNew) {
  this.speed = speedNew;
}

Jadi daripada langsung menulis:

myCar.speed = 100; // tidak bisa, karena private

kita harus menggunakan:

myCar.setSpeed(100);
System.out.println(myCar.getSpeed());

Keuntungan encapsulation:

  • data lebih aman
  • akses bisa dikontrol
  • mencegah perubahan sembarangan dari luar class

Kesimpulan

1773737179695