Senin, 15 September 2025

PBO A - Pertemuan 4 - Interaksi Objek Clock

Nama    : Erlangga Rizqi Dwi Raswanto

NRP      : 5025241179

Kelas     : PBO A


Saya mengimplementasikan jam digital sederhana menggunakan komposisi objek: ClockDisplay memiliki dua NumberDisplay (jam dan menit). Program menampilkan waktu dalam format HH:MM, mendukung kenaikan satu menit per “tik”, rollover menit (59→00) yang memicu penambahan jam, dan rollover jam (23→00). Pengujian dasar menunjukkan seluruh perilaku sesuai spesifikasi studi kasus “Interaksi Objek”.

Abstraksi & Desain

  • Kelas NumberDisplay: menyimpan nilai saat ini (currValue) dan batas maksimum (maxValue), menyediakan increment() (modulo), setValue(), dan tampilan dua digit getDisplayValue().

  • Kelas ClockDisplay: menyusun NumberDisplay hours(24) dan minutes(60), menyajikan string waktu HH:MM, serta minIncrement() (naikkan menit; saat menit kembali ke 0, jam bertambah).

  • Kelas ClockDemo: driver untuk menjalankan simulasi berkala.

Source code :

NumberDisplay Class

public class NumberDisplay {
    private int currValue;
    private int maxValue;

    public NumberDisplay(int max) {
        maxValue  = max;
        currValue = 0;
    }

    public void setValue(int newValue) {
        if (newValue >= 0 && newValue < maxValue) {
            currValue = newValue;
        }
    }

    public int getValue() {
        return currValue;
    }

    public String getDisplayValue() {
        if (currValue < 10)
            return "0" + currValue;
        else
            return "" + currValue;
    }

    public void increment() {
        currValue = (currValue + 1) % maxValue; 
    }
}

ClockDisplay Class


public class ClockDisplay {
    private NumberDisplay hours;
    private NumberDisplay minutes;
    private String currTimeString;

    public ClockDisplay() {
        hours   = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        setTimeString();
    }

    private void setTimeString() {
        currTimeString = hours.getDisplayValue() + ":" + minutes.getDisplayValue();
    }

    public void setTime(int hour, int minute) {
        hours.setValue(hour);
        minutes.setValue(minute);
        setTimeString();
    }

    public String getTime() {
        return currTimeString;
    }

    public void minIncrement() {
        minutes.increment();
        if (minutes.getValue() == 0) {
            hours.increment();
        }
        setTimeString();
    }
}

ClockDemo Class


public class ClockDemo {
    public static void main(String[] args) {
        ClockDisplay clock = new ClockDisplay();
        clock.setTime(11, 33);

        while(true) {
            clock.minIncrement();
            System.out.println("this clock is ticking bro...");
            System.out.println("Current time: " + clock.getTime());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }
}

Contoh aplikasi saat run

Untuk keperluan demo 1 menit di set = 1 detik


Contoh saat pukul 23.45, dan perubahan angka jam saat menyentuh 23.59 → 00.00







Senin, 08 September 2025

PBO A - Pertemuan 3 - Membuat Ticket Machine Sederhana

 Nama    : Erlangga Rizqi Dwi Raswanto

NRP      : 5025241179

Kelas     : PBO A


Pada pertemuan kali ini, diberikan tugas untuk membuat sebuah class sederhana yaitu Ticket Machine yang mensimulasikan mesin penjual tiket.

Desain Class

  • Field

    • price : harga tiket (dalam cents)

    • balance: total uang yang sudah dimasukkan pelanggan

    • total : total uang yang masuk ke mesin

  • Konstruktor

    • TicketMachine(int cost) untuk menginisialisasi harga, saldo, dan total.

  • Metode Utama

    • getPrice() untuk mengembalikan harga tiket.

    • getBalance() untuk mengembalikan saldo saat ini.

    • insertMoney(int amount) untuk menambah saldo.

    • printTicket() untuk mencetak tiket jika saldo cukup (mengembalikan true jika sukses, false jika saldo kurang).

Source Code :

public class TicketMachine{
    
    // Harga tiket
    private int price;
    // Jumlah uang yang di masukkan customer
    private int balance;
    // Total uang yang masuk ke mesin ini
    private int total;
    
    public TicketMachine(int cost){
        if (cost <= 0){
            System.err.println("Harga ga boleh mines bro!");    
        }
        
        price   = cost;
        balance = 0;
        total   = 0;
    }
    
    // return price of ticket
    public int getPrice(){
        return price;
    }
    
    // return uang yang sudah di insert untuk tiket selanjutnya
    public int getBalance(){
        return balance;
    }
    
    // receive sejumlah uang dari customer
    public void insertMoney(int amount){
        if (amount <= 0){
            System.err.println("Uang harus positif");
        }
        
        balance = balance + amount;
    }
    
    public boolean printTicket(){
        
        // check if balance kurang dari price, return false if kurang
        if (balance < price){
            System.err.println("Saldo kurang!");
            return false;
        }
        
    // Simulate the printing of a ticket.
    System.out.println("##################");
    System.out.println("# The BlueJ Line");
    System.out.println("# Ticket");
    System.out.println("# " + price + " cents.");
    System.out.println("##################");
    System.out.println();
     // Update the total collected with the balance.
    total = total + balance;
     // Clear the balance.
    balance = balance - price;
    return true;
    }

}   

Dokumentasi aplikasi

  1. Membuat instance baru, di sini saya contohkan dengan nama instance "Tiket1000" dengan cost 1000.
  2. Kasus pertama: saya memasukkan uang sebanyak 2000, sehingga secara logika tiket bisa terbayar.
  3. Jalankan printTicket(); tiket berhasil tercetak.
  4. Cek getBalance(); hasil sesuai karena sudah membeli 1 tiket: 2000 − 1000 = 1000.
  5. Kasus kedua: memasukkan uang 500 (tidak cukup untuk membeli tiket).
  6. Saat menjalankan printTicket() pada saldo 500, output menampilkan "Saldo kurang!".

PBO A - Pertemuan 1 - Latihan Mengetik 10 Jari

Nama    : Erlangga Rizqi Dwi Raswanto

NRP      : 5025241179

Kelas     : PBO A

Tugas Latihan Mengetik 10 Jari

Pada pertemuan awal mata kuliah Pemrograman Berorientasi Objek (PBO), saya diminta membiasakan diri mengetik dengan 10 jari. Tujuannya sederhana: meningkatkan kecepatan, ketepatan, dan konsistensi saat menulis kode agar pekerjaan lebih efisien.

Metode & Alat

Dokumentasi Hasil

1) Indonesian — 30 detik

  • WPM: 119

  • Akurasi: 97%

  • Konsistensi: 79%

  • Karakter: 298

  • Catatan: ritme sudah stabil, error minim; tinggal mempertahankan akurasi sambil menambah kecepatan.



2) English — 30 detik

  • WPM: 106

  • Akurasi: 94%

  • Konsistensi: 73%

  • Karakter: 264

  • Catatan: sedikit lebih banyak koreksi; perlu latihan kata/bi-gram bahasa Inggris agar konsistensi naik.

Latihan ini membuat saya lebih sadar bahwa akurasi lebih penting di awal dibanding mengejar WPM setinggi-tingginya. Setelah akurasi mapan, kecepatan akan mengikuti secara alami.

Rencana Peningkatan

  • Latihan 10 - 30 menit/hari di Monkeytype (mix bahasa Indonesia & Inggris).

  • Drill home row & burst untuk menjaga ritme dan konsistensi.

  • Target jangka pendek: ≥120 WPM (Indonesian) dengan ≥97% akurasi, dan ≥110 WPM (English) dengan ≥95% akurasi.

  • Evaluasi mingguan dengan menyimpan hasil dan membandingkan grafik konsistensi.

Penutup

Saya akan terus berlatih agar mengetik 10 jari menjadi refleks, sehingga saat ngoding tidak terhambat oleh kecepatan input. Harapannya, performa ini berdampak langsung ke produktivitas di tugas-tugas PBO berikutnya.

PBO A - Pertemuan 15 - Pong!

Nama : Erlangga Rizqi Dwi Raswanto NRP : 5025241179 Kelas : PBO A 1. Pendahuluan Pada pertemuan 15, kita mempraktikkan pembuatan game...