ETS PBO

Nama : Kadek Fajar Pramartha Yasodana

NRP : 5025231185

Kelas : PBO A


ETS

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

-Class adalah suatu entitias atau cetakan (Blueprint) yang menggambarkan keadaan dan perilaku dari sesuatu yang logis. Class berisi cetakan fungsi, variabel, dan lain lainnya.



-Objek adalah sebuah instansiasi dari atau perwujudan dari suatu class pada suatu waktu/state yang disimpan pada memory.

-Hubungan class dan objek, bisa dilihat kita membuat sebuah class yang berisi blueprint dari objek yang nantinya akan dibuat. Dengan menginstansiasi objek kita gunakan dari blueprint ClassETS, ClassETS classETS = new ClassETS(10, "Test");.


2. Buatlah Aplikasi CofeeMachine yang menyediakan kopi dengan harga tertentu

public class Coffee {
    private String name;
    private float cost;

    public Coffee(String name, float cost)
    {
        this.name = name;
        this.cost = cost;
    }
    public String getName()
    {
        return name;
    }
    public float getCost()
    {
        return cost;
    }
}


public class Customer {
    public String name;
    public float balance;

    public Customer(String name, float balance)
    {
        this.name = name;
        this.balance = balance;
    }
    public String getName()
    {
        return name;
    }
    public float getBalance()
    {
        return balance;
    }
    public boolean useBalance(float amount)
    {
        if(amount < 0f)
        {
            System.out.println("Cannot use negative balance amount!");
        }
        float check = balance - amount;

        if(check < 0f)
        {
            System.out.println("Balance is not sufficient!");
            return false;
        }

        balance = check;
        return true;
    }
    public void addBalance(float amount)
    {
        if(amount < 0f)
        {
            System.out.println("Cannot add negative balance!");
            return;
        }

        this.balance += amount;
    }
}


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

public class CoffeeMachine {
    public List<Coffee> coffeeList;
    public CoffeeMachine()
    {
        coffeeList = new ArrayList<>();
    }
    public void addCoffee(Coffee coffee)
    {
        for(int i = 0; i < coffeeList.size(); i++)
        {
            if(coffee.getName().equals(coffeeList.get(i).getName()))
            {
                System.out.println("Cannot add same coffee type!");
                return;
            }
        }

        coffeeList.add(coffee);
    }
    public boolean buyCoffee(String coffeeName, Customer customer)
    {
        Coffee coffee = null;
        for(int i = 0; i < coffeeList.size(); i++)
        {
            if(coffeeList.get(i).getName().equals(coffeeName))
            {
                coffee = coffeeList.get(i);
            }
        }
        if(coffee == null)
        {
            System.out.println("There is no coffee with name " + coffeeName);
            return false;
        }

        boolean succeed = customer.useBalance(coffee.getCost());
        if(succeed)
        {
            System.out.println("Customer " + customer.getName() + " successfully purchased coffee " + coffee.getName());
            System.out.println("Current balance : " + customer.getBalance());
            return true;
        }

        return false;
    }
}


public class Main {
    private static CoffeeMachine coffeeMachine;
    private static Customer customer;

    public static void main(String[] args) {
        initializeCoffeeMachine();
        initializeCustomer();

        run();
    }
    private static void initializeCoffeeMachine()
    {
        coffeeMachine = new CoffeeMachine();
        coffeeMachine.addCoffee(new Coffee("Americano", 5f));
        coffeeMachine.addCoffee(new Coffee("Mocachino", 15f));
        coffeeMachine.addCoffee(new Coffee("Good Day", 2f));
        coffeeMachine.addCoffee(new Coffee("Luwak", 30f));
        coffeeMachine.addCoffee(new Coffee("Black", 20f));
        coffeeMachine.addCoffee(new Coffee("Latte", 25f));
    }
    private static void initializeCustomer()
    {
        customer = new Customer("Fajar", 100f);
    }
    private static void run()
    {
        coffeeMachine.buyCoffee("Americano", customer);
        coffeeMachine.buyCoffee("Mocachino", customer);

        coffeeMachine.buyCoffee("Starbucks", customer);

        coffeeMachine.buyCoffee("Latte", customer);
        coffeeMachine.buyCoffee("Latte", customer);
        coffeeMachine.buyCoffee("Luwak", customer);

        coffeeMachine.buyCoffee("Good Day", customer);
    }
}


Hasil : 


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

Enkapsulasi adalah sebuah konsep yang mengajarkan bagaimana menyembunyikan detail implementasi dari pengguna kelas dan hanya menyediakan antarmuka publik yang diperlukan.. Enkapsulasi dicapai dengan mendeklarasikan variabel suatu kelas menjadi private, yang berarti data tersebut hanya dapat terakses oleh class itu sendiri. Dan jika ingin diakses oleh luar, sebuah getter dan setter yang merupakan sebuah metode public. 

Contoh:

public class User {
    private String name;
    private int age;
    private float balance;

    public User()
    {

    }
    public String getDisplay()
    {
        return name + ", age : " + age + " , balance : " + balance;
    }
    public void setName(String value)
    {
        if(value == null)
        {
            System.out.println("Cannot set with null name!");
            return;
        }
        this.name = value;
    }
    public void setAge(int age)
    {
        if(age < 0)
        {
            System.out.println("Cannot set a negative age!");
            return;
        }

        this.age = age;
    }
    public void setBalance(float balance)
    {
        if(balance < 0)
        {
            System.out.println("Cannot set a negative balance!");
            return;
        }
        this.balance = balance;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public float getBalance()
    {
        return balance;
    }
}


public class Main {
    public static void main(String[] args) {
        User user = new User();

        user.setName("Fajar");
        user.setAge(-1);
        user.setBalance(-100f);

        user.setAge(19);
        user.setBalance(9999999f);

        System.out.println(user.getDisplay());
    }
}


Hasil :

Penjelasan : Bisa dilihat implementasi dari User tidak diperlihatkan. Dan yang hanya diperlihatkan sebuah antarmuka publik yang digunakan untuk memodifikasi dari object tersebut. Sehingga state dari object bisa dipastikan tidak menyimpang dari apa yang diinginkan oleh class tersebut.


4. Buatlah dua kelas BankAccount dan Customer. 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.


public class BankAccount {
    private String bankType;
    private float balance;
    public BankAccount(String bankType)
    {
        this.bankType = bankType;
    }
    public boolean deposit(float balance)
    {
        if(balance < 0)
        {
            return false;
        }

        this.balance += balance;

        return true;
    }
    public boolean setBalance(float balance)
    {
        if(balance < 0)
        {
            return false;
        }

        this.balance = balance;

        return true;
    }
    public float withdraw(float amount)
    {
        if(amount < 0)
        {
            return 0f;
        }

        if(amount > balance)
        {
            float tempBalance = balance;

            setBalance(0);
            return tempBalance;
        }

        setBalance(balance - amount);
        return amount;
    }
    public float getBalance()
    {
        return balance;
    }
    public String getBankType()
    {
        return bankType;
    }
}


public class Customer {
    private String name;
    private BankAccount bankAccount;

    public Customer(String name, String bankType)
    {
        this.name = name;
        this.bankAccount = new BankAccount(bankType);
    }
    public boolean deposit(float amount)
    {
        if(bankAccount.deposit(amount))
        {
            System.out.println(name + " ,successfully deposited " + amount + " to bank account " + bankAccount.getBankType());
            System.out.println("Current balance : " + bankAccount.getBalance());
            System.out.println();

            return true;
        }

        System.out.println(name + " ,Invalid amount for depositting");
        System.out.println();

        return false;
    }
    public float withdraw(float amount)
    {
        if(amount <= 0)
        {
            System.out.println(name + " ,Invalid amount for withdrawing");
            System.out.println();
            return 0f;
        }

        float withdrawAmount = bankAccount.withdraw(amount);
        if(withdrawAmount != amount)
        {
            System.out.println(name + " ,Insufficient balance amount, but successfully withdrawn all balance left from bank " + bankAccount.getBankType());
        }
        else
        {
            System.out.println(name + " ,Successfully withdrawn the specified amount from bank " + bankAccount.getBankType());
        }

        System.out.println("Withdrawn : " + withdrawAmount);
        System.out.println("Current Balance : " + bankAccount.getBalance());
        System.out.println();

        return withdrawAmount;
    }
    public String getName()
    {
        return name;
    }
}


public class Main {
    public static void main(String[] args) {
        Customer fajar = new Customer("Fajar", "BCA");
        Customer arya = new Customer("Arya", "Mandiri");

        fajar.deposit(100f);
        fajar.deposit(200f);
        fajar.deposit(-1f);

        arya.deposit(500f);

        fajar.withdraw(150f);

        arya.withdraw(-1f);
        arya.withdraw(300f);
        arya.withdraw(500f);
    }
}


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:

  • Menghitung total biaya perjalanan berdasarkan jarak dan biaya per kilometer.
  • Menambah penumpang dan mencetak daftar penumpang
  • Membatalkan perjalanan jika penumpang kurang dari jumlah minimum


public class Penumpang {
    private String name;
    public Penumpang(String name)
    {
        this.name = name;
    }
    public String getName()
    {
        return name;
    }
}


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

public class Trip {
    private List<Penumpang> penumpangList;
    private String destination;
    private float distanceKM;
    private float costPerKM;
    private int minimumPenumpang;

    public Trip(String destination, float distanceKM, float costPerKM, int minimumPenumpang)
    {
        this.destination = destination;
        this.distanceKM = distanceKM;
        this.costPerKM = costPerKM;
        this.minimumPenumpang = minimumPenumpang;

        penumpangList = new ArrayList<>();
    }
    public void addPenumpang(Penumpang penumpang)
    {
        this.penumpangList.add(penumpang);
    }
    public void printPenumpangs()
    {
        System.out.println("Penumpang list");
        for(int i = 0; i < penumpangList.size(); i++)
        {
            System.out.println("[" + (i + 1) + "], " + penumpangList.get(i).getName());
        }
        System.out.println();
    }
    public void startTrip()
    {
        if(penumpangList.size() < minimumPenumpang)
        {
            System.out.println("Tidak bisa memulai perjalanan, penumpang kurang");
            System.out.println("Minimum : " + minimumPenumpang);
            System.out.println("Jumlah Penumpang : " + penumpangList.size());
            System.out.println();

            return;
        }

        System.out.println("Memulai perjalanan menuju " + destination);
        System.out.println("Dengan biaya : " + getCost());
        System.out.println("Dengan penumpang");
        printPenumpangs();
    }
    public float getCost()
    {
        return distanceKM * costPerKM;
    }
}


public class Main {
    public static void main(String[] args) {
        Trip trip = new Trip("Denpasar", 200f, 10f, 5);

        Penumpang fajar = new Penumpang("Fajar");
        Penumpang arya = new Penumpang("Arya");
        Penumpang randi = new Penumpang("Randi");

        trip.addPenumpang(fajar);
        trip.addPenumpang(arya);
        trip.addPenumpang(randi);

        trip.printPenumpangs();
        trip.startTrip();

        Penumpang nanda = new Penumpang("Nanda");
        Penumpang arda = new Penumpang("Arda");
        Penumpang sudewa = new Penumpang("Sudewa");

        trip.addPenumpang(nanda);
        trip.addPenumpang(arda);
        trip.addPenumpang(sudewa);

        trip.startTrip();
    }
}


Hasil:

Demo:




Comments

Popular posts from this blog

Pertemuan 6 KPPL - Implementasi Web ChatBot Tech Support System, Web & Prototipe & Metodologi

Pertemuan 13 OOP - Abstraksi & Simulasi Fox & Rabit

Pertemuan 7 KPPL - Studi Kasus Pembuatan Aplikasi dengan Agile