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







Tidak ada komentar:

Posting Komentar

PBO A - Pertemuan 15 - Pong!

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