Sistem Event
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 61 dari 61.
Tantangan
MudahMari 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 fungsiHandleryang menerima pesanconst char*. Buat structEventyang 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 0subscribe: menerima pointer Event dan Handler, menambahkan handler ke array jika masih ada ruang (jumlahnya kurang dari 5), lalu menambah jumlahnyafire: 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 pesanalert: mencetak[ALERT]diikuti pesancounter: menggunakan variabel statis untuk menghitung berapa kali fungsi ini dipanggil, lalu mencetak[COUNT] Xdengan X sebagai jumlah saat ini
Programmu akan menerima:
- Jumlah handler yang akan didaftarkan (1, 2, atau 3)
- Pesan yang akan disiarkan
Contoh output saat inputnya adalah 3 dan System started:
[LOG] System started
[ALERT] System started
[COUNT] 1Contoh output saat inputnya adalah 2 dan Warning detected:
[LOG] Warning detected
[ALERT] Warning detectedContoh output saat inputnya adalah 1 dan Hello:
[LOG] HelloContoh 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online