ETS

Nama     : Hafidz Panji Ashari 
NRP       : 5025231278
Kelas      : PBO-A


Soal 

1. Jelaskan perbedaan antara kelas dan objek dalam pemrograman berorientasi objek. Berikan contoh dengan kode sederhana yang menunjukkan hubungan antara kelas dan objek.

Objects
object adalah instance dari sebuah class. Object berisi data (dalam bentuk atribut/properti) dan metode (fungsi) yang dapat dioperasikan untuk berinteraksi dengan data tersebut. Setiap object dapat memiliki nilai properti yang berbeda walaupun berasal dari class yang sama.

Class
class adalah cetak biru (blueprint) atau template untuk membuat objek. Class mendefinisikan atribut (properti atau variabel) dan metode (fungsi atau perilaku) yang akan dimiliki oleh objek yang dibuat dari class tersebut.

Perbedaan antara Class dan Objects
Dalam pemrograman berorientasi objek, kelas adalah blueprint atau template untuk membuat objek. Kelas mendefinisikan atribut dan metode yang dimiliki oleh objek. Sedangkan objek adalah instance dari kelas, yaitu entitas nyata yang dibuat berdasarkan kelas.

Contoh Program 

class Mobil {
    String merk;
    String warna;
   
    public Mobil(String merk, String warna) {
        this.merk = merk;
        this.warna = warna;
    }
   
    public void info() {
        System.out.println("Mobil " + merk + " Warna " + warna);
    }
}

public class Main {
    public static void main(String[] args) {
        Mobil mobil1 = new Mobil("Ferrari", "Merah");
        Mobil mobil2 = new Mobil("BMW", "Biru");
       
        mobil1.info();
        mobil2.info();
    }
}



penjelasan 

Kelas Mobil mendefinisikan atribut merk dan warna, serta metode info untuk menampilkan informasi mobil. Objek mobil1 dan mobil2 dibuat dari kelas Mobil di dalam fungsi main.
Metode info() dipanggil pada masing-masing objek untuk menampilkan informasi terkait objek tersebut.


2. Buatlah Aplikasi CoffeeMachine yang menyediakan kopi dengan harga tertentu:

Kode Program 

import java.util.Scanner;

class CoffeeMachine {
    String namaKopi;
    double harga;

    public CoffeeMachine(String namaKopi, double harga) {
        this.namaKopi = namaKopi;
        this.harga = harga;
    }

    public void tampilkanMenu() {
        System.out.println(namaKopi + " - Rp " + harga);
    }
}

public class Main {
    public static void main(String[] args) {
        CoffeeMachine KopiSusu = new CoffeeMachine("Kopi-Susu", 15000);
        CoffeeMachine KopiGulaAren = new CoffeeMachine("Kopi-GulaAren", 20000);
        CoffeeMachine latte = new CoffeeMachine("Kopi-Latte", 25000);

        System.out.println("Menu Kopi:");
        KopiSusu.tampilkanMenu();
        KopiGulaAren.tampilkanMenu();
        latte.tampilkanMenu();

        Scanner scanner = new Scanner(System.in);
        System.out.print("Pilih kopi (1: Kopi-Susu, 2: Kopi-GulaAren, 3: Kopi-Latte): ");
        int pilihan = scanner.nextInt();

        if (pilihan == 1) {
            System.out.println("Anda memilih Kopi-Susu. Harga: Rp " + KopiSusu.harga);
        } else if (pilihan == 2) {
            System.out.println("Anda memilih Kopi-GulaAren. Harga: Rp " + KopiGulaAren.harga);
        } else if (pilihan == 3) {
            System.out.println("Anda memilih Kopi-Latte. Harga: Rp " + latte.harga);
        } else {
            System.out.println("Pilihan tidak valid.");
        }
    }
}


Hasil : 




3. Apa yang dimaksud dengan enkapsulasi dalam pemrograman berorientasi objek?
Berikan contoh bagaimana enkapsulasi diterapkan dalam kelas menggunakan modifier private dan metode akses (getter dan setter).

Enkapsulasi adalah :

 konsep untuk membatasi akses langsung ke atribut atau data dalam sebuah objek dan memberikan kontrol penuh atas cara data tersebut dimodifikasi. Atribut-atribut biasanya ditetapkan sebagai private, artinya mereka hanya dapat diakses dari dalam kelas itu sendiri. Untuk memungkinkan pengaksesan atau modifikasi dari luar kelas, digunakan metode akses yang disebut getter dan setter.

contoh program : 

class Person {
    // Atribut private
    private String nama;
    private int umur;
    // Konstruktor
    public Person(String nama, int umur) {
        this.nama = nama;
        this.umur = umur;
    }
    // Getter
    public String getNama() {
        return nama;
    }
    // Setter
    public void setNama(String nama) {
        this.nama = nama;
    }
    // Getter
    public int getUmur() {
        return umur;
    }
    // Setter
    public void setUmur(int umur) {
        if (umur > 0) {  
            this.umur = umur;
        } else {
            System.out.println("Umur ga valid.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Person orang = new Person("Hafidz", 25);
        System.out.println("Nama: " + orang.getNama());  
        System.out.println("Umur: " + orang.getUmur());  

        // Mengubah nilai 'nama' dan 'umur' melalui setter
        orang.setNama("Panji");
        orang.setUmur(30);

        // Menampilkan nilai setelah perubahan
        System.out.println("Nama baru: " + orang.getNama());  
        System.out.println("Umur baru: " + orang.getUmur());  

        // Coba mengatur umur yang tidak valid
        orang.setUmur(-5);  
    }
}




Penjelasan:

Modifier private:
Atribut nama dan umur dalam kelas Person bersifat private, sehingga tidak dapat diakses langsung dari luar kelas. Ini mencegah pengguna mengakses atau mengubah data tanpa izin.

Metode akses (getter dan setter):

Getter: Metode getNama() dan getUmur() digunakan untuk mengambil nilai dari atribut nama dan umur.

Setter: Metode setNama() dan setUmur() digunakan untuk mengubah nilai dari atribut nama dan umur. Pada metode setUmur(), ada logika validasi yang memastikan bahwa umur tidak bisa diatur dengan nilai negatif.



4. Buatlah dua kelas, BankAccount dan Customer / Nasabah. Setiap objek Customer memiliki akun bank (BankAccount). Buatlah metode dalam Customer yang memungkinkan nasabah untuk melakukan penyetoran (deposit) dan penarikan (withdraw) melalui akun bank mereka. Pastikan interaksi terjadi melalui metode dalam Customer.


Kode Program :


import java.util.Scanner;

class BankAccount {
    private double saldo;

    public BankAccount(double saldoAwal) {
        this.saldo = saldoAwal;
    }

    public void setor(double jumlah) {
        saldo += jumlah;
        System.out.println("Setor berhasil. Saldo sekarang: Rp " + saldo);
    }

    public void tarik(double jumlah) {
        if (jumlah <= saldo) {
            saldo -= jumlah;
            System.out.println("Tarik berhasil. Saldo sekarang: Rp " + saldo);
        } else {
            System.out.println("Saldo tidak cukup.");
        }
    }

    public double getSaldo() {
        return saldo;
    }
}

class Nasabah {
    private BankAccount akun;

    public Nasabah(double saldoAwal) {
        akun = new BankAccount(saldoAwal);
    }

    public void setor(double jumlah) {
        akun.setor(jumlah);
    }

    public void tarik(double jumlah) {
        akun.tarik(jumlah);
    }

    public void cekSaldo() {
        System.out.println("Saldo saat ini: Rp " + akun.getSaldo());
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Nasabah nasabah = new Nasabah(500000);

        while (true) {
            System.out.println("\n1. Setor\n2. Tarik\n3. Cek Saldo\n4. Keluar");
            System.out.print("Pilih: ");
            int pilihan = scanner.nextInt();

            if (pilihan == 1) {
                System.out.print("Jumlah setor: ");
                nasabah.setor(scanner.nextDouble());
            } else if (pilihan == 2) {
                System.out.print("Jumlah tarik: ");
                nasabah.tarik(scanner.nextDouble());
            } else if (pilihan == 3) {
                nasabah.cekSaldo();
            } else if (pilihan == 4) {
                System.out.println("Terima kasih.");
                break;
            } else {
                System.out.println("Pilihan tidak valid.");
            }
        }
    }
}


Hasil : 



5. Buatlah Desain Class Diagram untuk Trip Application yang digunakan untuk mengelola perjalanan. Setiap perjalanan memiliki atribut destination, distance, dan costPerkm. Fitur aplikasi sebagai berikut:
a. Menghitung total biaya perjalanan berdasarkan jarak dan biaya per kilometer.
b. Menambah penumpang dan mencetak daftar penumpang.
c. Membatalkan perjalanan jika penumpang kurang dari jumlah minimum.

Desain Class Diagram untuk Trip Application:



Penjelasan:
Atribut Trip:

destination: Menyimpan tujuan perjalanan.
distance: Menyimpan jarak perjalanan dalam kilometer.
costPerKm: Menyimpan biaya per kilometer.
passengers: Menyimpan daftar nama penumpang.
minPassengers: Menyimpan jumlah penumpang minimum yang diperlukan untuk perjalanan.
Metode Trip:

calculateTotalCost(): Menghitung total biaya perjalanan berdasarkan jarak dan biaya per kilometer (distance * costPerKm).
addPassenger(String name): Menambah penumpang ke daftar.
printPassengers(): Mencetak atau menampilkan daftar penumpang yang terdaftar untuk perjalanan.
cancelTrip(): Membatalkan perjalanan jika jumlah penumpang kurang dari minPassengers.


Kode Program : 

import java.util.ArrayList;
import java.util.List;

class Trip {
    private String destination;
    private double distance;
    private double costPerKm;
    private List<String> passengers;
    private int minPassengers;

    public Trip(String destination, double distance, double costPerKm, int minPassengers) {
        this.destination = destination;
        this.distance = distance;
        this.costPerKm = costPerKm;
        this.minPassengers = minPassengers;
        this.passengers = new ArrayList<>();
    }

    // Menghitung total biaya perjalanan
    public double calculateTotalCost() {
        return distance * costPerKm;
    }

    // Menambah penumpang
    public void addPassenger(String name) {
        passengers.add(name);
        System.out.println("Penumpang " + name + " telah ditambahkan.");
    }

    // Mencetak daftar penumpang
    public void printPassengers() {
        System.out.println("Daftar Penumpang:");
        for (String passenger : passengers) {
            System.out.println("- " + passenger);
        }
    }

    // Membatalkan perjalanan jika penumpang kurang dari jumlah minimum
    public boolean cancelTrip() {
        if (passengers.size() < minPassengers) {
            System.out.println("Perjalanan dibatalkan karena penumpang kurang dari " + minPassengers);
            return true;
        } else {
            System.out.println("Perjalanan dapat dilanjutkan.");
            return false;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // Membuat objek Trip
        Trip trip1 = new Trip("Bali", 100, 5.0, 3);

        // Menambah penumpang
        trip1.addPassenger("Hafidz");
        trip1.addPassenger("Panji");

        // Mencetak daftar penumpang
        trip1.printPassengers();

        // Menghitung dan menampilkan total biaya perjalanan
        double totalCost = trip1.calculateTotalCost();
        System.out.println("Total biaya perjalanan: Rp " + totalCost);

        // Membatalkan perjalanan jika penumpang kurang
        trip1.cancelTrip();
    }
}



Hasil : 






LINK YOUTUBE



Comments

Popular posts from this blog

Daily Task Manager

EAS

DisplayClock