Tugas Pertemuan 4 Pemrograman Berbasis Objek (PBO) A 2024

Nama : Amadeo Yesa

NRP : 5025231160

Kelas : A

Tahun : 2024


Pada pertemuan 4, diberikan studi kasus Clock Display. Implementasi Clock Display pada dasarnya menggunakan 2 class, yaitu Class NumberDisplay untuk angka masing-masing jam, menit, dan detik serta Class ClockDisplay untuk menampung waktu secara utuh. Class tambahan ClockGUI digunakan untuk menampikan waktu.


Class NumberDisplay

class NumberDisplay {
    private int limit;
    private int value;

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

    public int getValue(){
        return value;
    }

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

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

    public void inc(){
        value = (value + 1) % limit;
    }
}
Attribute:
  • limit: sebagai batas maksimum masing-masing angka, jam memiliki limit 24, menit 60, dst.
  • value: sebagai nilai sekarang.
Method:
  • Constructor: memiliki parameter maxValue, yaitu limit dari angka yang diinput.
  • getValue(): mengembalikan nilai value sebagai integer.
  • getDisplayValue(): mengembalikan nilai value sebagai string yang sudah diformat.
  • setValue(int newValue): mengubah nilai value sesuai yang diinput dengan parameter newValue.
  • inc(): increment atau menambahkan nilai 1 pada value.

Class ClockDisplay
class ClockDisplay {
    private NumberDisplay hours;
    private NumberDisplay minutes;
    private NumberDisplay seconds;
    private String displayString;

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

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

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

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

    public String getTime(){
        return displayString;
    }
}
Attribute:
  • hours: Object NumberDisplay sebagai jam.
  • minutes: Object NumberDisplay sebagai menit.
  • seconds: Object NumberDisplay sebagai detik.
  • displayString: string yang menampilkan waktu secara lengkap.
Method:
  • Constructor: memiliki parameter hour, minute, dan second yang akan menetapkan waktu sesuai input.
  • timeTick(): menambahkan nilai waktu seperti pada jam.
  • setTime(int hour, int minute, int second): mengubah waktu sesuai input.
  • updateDisplay: mengatur format displayString menjadi format waktu yang sesuai.
  • getTime(): mengembalikan string displayString.

Class ClockGUI
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalTime;

class ClockGUI extends JFrame {
    private ClockDisplay clock;
    private JLabel timeLabel;
    private Timer timer;

    public ClockGUI(){
        LocalTime curTime = LocalTime.now();
        clock = new ClockDisplay(curTime.getHour(), curTime.getMinute(), curTime.getSecond());

        setTitle("This is a clock.");
        setSize(300, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        timeLabel = new JLabel(clock.getTime(), SwingConstants.CENTER);
        timeLabel.setFont(new Font("Serif", Font.BOLD, 40));
        add(timeLabel, BorderLayout.CENTER);

        startClock();

        setVisible(true);
    }

    private void startClock(){
        timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e){
                clock.timeTick();
                timeLabel.setText(clock.getTime());
            }
        });

        timer.start();
    }
}
Pada dasarnya menggunakan Java Swing sebagai GUI untuk menampilkan clock. Atribut clock sendiri merupakan object ClockDisplay yang akan menampilkan waktu saat ini. Library LocalTime digunakan untuk mendapatkan waktu saat ini yang kemudian akan ditampilkan. Method startClock() menggunakan timer dengan Listener yang akan menjalankan waktu setiap 1000 ms atau 1 detik.

TestClock
import javax.swing.SwingUtilities;

public class TestClock {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ClockGUI();  // Start the Clock GUI
            }
        });
    }
}
Code yang menjalankan program Clock Display.


Class Diagram


















Object Diagram (Runtime)














Hasil









Source Code:

Comments

Popular posts from this blog

Evaluasi Tengah Semester Pemrograman Berbasis Objek (PBO) A 2024

Tugas Pertemuan 7 Pemrograman Berbasis Objek (PBO) A 2024

Evaluasi Akhir Semester Pemrograman Berbasis Objek (PBO) A 2024