PBO-4 Interaksi Objek Clock

Laporan mata kuliah Pemrograman Berorientasi Objek (A) - Pertemuan 3

Nama: Nabil Irawan

NRP: 5025241231

Kelas: Pemrograman Berorientasi Objek (A)

Laporan

Membuat Implementasi kodenya untuk studi kasus Clock Display

Pada laporan ini saya telah berhasil mengimplementasikan jam digital sederhana. Objekifnya adalah program dapat menampilkan waktu dalam format HH:MM dengan kenaikan satu menit per tick, rollover menit 59 ke 00 dan rollover jam 23 ke 00.

ClockDisplay.java

Class jam sederhana yang menyusun dua NumberDisplay, hours (batas 24) dan minutes (batas 60). Kemudian menyimpan string tampilan (displayString) dan menyediakan konstruktor default 00:00 serta konstruktor dengan parameter (jam, menit).

  • setTime(int hour, int minute) untuk mengatur nilai kedua display,

  • getTime() untuk mengambil teks waktu seperti HH:MM, dan

  • updateDisplay() yang membentuk teks tersebut dari getDisplayValue() milik masing-masing display.

Code:

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

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

    public ClockDisplay(int hour, int minute){
        hours = new NumberDisplay(24);
        minutes = new NumberDisplay(60);
        setTime(hour, minute);
    }

    public void timeTick(){
        minutes.increment();
        if(minutes.getValue() == 0){
            hours.increment();
        }
        updateDisplay();
    }

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

    public String getTime(){
        return displayString;
    }

    private void updateDisplay(){
        displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue();
    }
}

NumberDisplay.java

Komponen angka umum yang menyimpan batas rollover dan value.

  • getValue() untuk angka raw,

  • getDisplayValue() yang memformat dua digit,

  • setValue(int replacementValue) yang hanya menerima nilai dalam rentang [0, limit), dan

  • increment() yang menambah nilai satu langkah dengan rollover menggunakan operasi modulo terhadap limit.

Code:

public class NumberDisplay{
    private int limit;
    private int value;

    public NumberDisplay(int rollOverLimit){
        limit = rollOverLimit;
        value = 0;
    }

    public int getValue(){
        return value;
    }

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

    public void setValue(int replacementValue){
        if((replacementValue >= 0) && (replacementValue < limit)){
            value = replacementValue;
        }
    }

    public void increment(){
        value = (value + 1) % limit;
    }
}

ClockDemo.java

Class yang menggunakan ClockDisplay dan NumberDisplay. demoClock(startHour, startMinute, steps) men-tick waktu per menit secara manual dan mencetak getTime() tiap langkah. demoNumberDisplay(limit, steps) membuat NumberDisplay dengan batas tertentu, lalu menampilkan getValue() serta getDisplayValue() sambil memanggil increment() berulang untuk memperlihatkan rollover.

public class ClockDemo {
    private ClockDisplay clock;

    public ClockDemo() {
        clock = new ClockDisplay();
    }

    public void demoClock(int startHour, int startMinute, int steps) {
        int h = startHour;
        int m = startMinute;

        clock.setTime(h, m);
        System.out.println("[Clock] start -> " + clock.getTime());

        for (int i = 0; i < steps; i++) {
            m++;
            if (m >= 60) {
                m = 0;
                h = (h + 1) % 24;
            }
            clock.setTime(h, m);
            System.out.println("[Clock] tick  -> " + clock.getTime());
        }
    }

    public void demoNumberDisplay(int limit, int steps) {
        NumberDisplay nd = new NumberDisplay(limit);
        System.out.println("[NumDisp] limit=" + limit + ", steps=" + steps);
        for (int i = 0; i < steps; i++) {
            System.out.println("  value=" + nd.getValue() + " display=" + nd.getDisplayValue());
            nd.increment();
        }
    }

    public static void main(String[] args) {
        ClockDemo demo = new ClockDemo();
    }
}

Proof:

Menginputkan 23 sebagai jam, 50 sebagai menit, 15 sebagai stepnya.

Last updated