Menu
CoddyTech

Sistem Event

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 61 dari 61.

challenge icon

Tantangan

Mudah

Mari kita bangun Sistem Notifikasi: arsitektur berbasis peristiwa tempat beberapa handler dapat berlangganan ke suatu peristiwa dan merespons saat peristiwa itu dipicu. Pola ini menjadi dasar pemrograman reaktif dan framework GUI.

Kamu akan menyusun kodemu dalam tiga file:

  • event.h: Definisikan tipe pointer fungsi Handler yang menerima pesan const char*. Buat struct Event yang menyimpan array hingga 5 handler dan jumlah handler yang terdaftar. Deklarasikan fungsi untuk menginisialisasi peristiwa, mendaftarkan handler, dan memicu peristiwa untuk memberi tahu semua pelanggan.
  • event.c: Implementasikan sistem peristiwamu:
    • init_event: menerima pointer Event dan mengatur jumlah handler menjadi 0
    • subscribe: menerima pointer Event dan Handler, menambahkan handler ke array jika masih ada ruang (jumlahnya kurang dari 5), lalu menambah jumlahnya
    • fire: menerima pointer Event dan string pesan, lalu memanggil setiap handler yang terdaftar dengan pesan tersebut sesuai urutan pendaftarannya
  • main.c: Buat tiga fungsi handler berbeda yang merespons peristiwa dengan cara yang unik:
    • logger: mencetak [LOG] diikuti pesan
    • alert: mencetak [ALERT] diikuti pesan
    • counter: menggunakan variabel statis untuk menghitung berapa kali fungsi ini dipanggil, lalu mencetak [COUNT] X dengan X sebagai jumlah saat ini
    Baca bilangan bulat yang menunjukkan jumlah handler yang akan didaftarkan (1, 2, atau 3). Daftarkan handler sebanyak itu secara berurutan: pertama logger, lalu alert (jika jumlahnya 2 atau lebih), kemudian counter (jika jumlahnya 3). Baca string pesan, lalu picu peristiwa dengan pesan tersebut.

Programmu akan menerima:

  1. Jumlah handler yang akan didaftarkan (1, 2, atau 3)
  2. Pesan yang akan disiarkan

Contoh output saat inputnya adalah 3 dan System started:

[LOG] System started
[ALERT] System started
[COUNT] 1

Contoh output saat inputnya adalah 2 dan Warning detected:

[LOG] Warning detected
[ALERT] Warning detected

Contoh output saat inputnya adalah 1 dan Hello:

[LOG] Hello

Contoh ini menunjukkan polimorfisme melalui pointer fungsi: pemanggilan fire yang sama memicu perilaku yang sangat berbeda, bergantung pada handler yang didaftarkan. Setiap handler merespons peristiwa yang sama dengan caranya sendiri, menunjukkan sifat desain berbasis peristiwa yang tidak saling bergantung.

Coba sendiri

#include <stdio.h>
#include <string.h>
#include "event.h"

// TODO: Implementasikan handler logger
// Cetak "[LOG] " diikuti pesan
void logger(const char* message) {
    // TODO: Implementasikan
}

// TODO: Implementasikan handler alert
// Cetak "[ALERT] " diikuti pesan
void alert(const char* message) {
    // TODO: Implementasikan
}

// TODO: Implementasikan handler counter
// Gunakan variabel statis untuk menghitung jumlah pemanggilan
// Cetak "[COUNT] X" dengan X sebagai jumlah saat ini
void counter(const char* message) {
    // TODO: Implementasikan dengan variabel statis
}

int main() {
    // Baca jumlah handler yang akan didaftarkan
    int num_handlers;
    scanf("%d", &num_handlers);
    getchar(); // Baca karakter baris baru
    
    // Baca pesan
    char message[256];
    fgets(message, sizeof(message), stdin);
    message[strcspn(message, "\n")] = '\0'; // hapus karakter baris baru
    
    // TODO: Buat dan inisialisasi Event
    
    // TODO: Daftarkan handler berdasarkan num_handlers
    // 1 handler: logger
    // 2 handler: logger, alert
    // 3 handler: logger, alert, counter
    
    // TODO: Picu event dengan pesan tersebut
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online