Program yang besar membutuhkan desain agar tetap mudah diubah. Kita menerapkan pemecahan modul, SOLID, design patterns, dependency injection, dan rule of zero untuk menjaga arsitektur tetap sehat seiring berkembangnya kebutuhan.

# Memecah Program Menjadi Modul

Kriteria membagi program — responsibility, kohesi, coupling — dan refactor nyata dari satu fungsi main() monolitik menjadi tiga class yang terpisah.

Buka →
# Abstraction dan Encapsulation

Antarmuka vs implementasi, level abstraction, dan idiom PIMPL — menyembunyikan implementasi di balik pointer dengan unique_ptr dan forward declaration, lengkap dengan keuntungan kompilasinya.

Buka →
# Separation of Concerns

Memisahkan parsing, logika bisnis, dan presentasi menjadi tiga lapisan — refactor nyata program laporan, arah dependensi, dan pengujian per bagian.

Buka →
# Dependency Management di Level Desain

Arah dependensi antar modul, kopling erat vs kopling longgar, masalah circular dependency dan solusinya, inversion, serta antarmuka minimal — semua di level desain, bukan alat build.

Buka →
# SOLID Principles

Lima prinsip desain — SRP, OCP, LSP, ISP, DIP — masing-masing dengan potongan kode C++ nyata, ditutup satu program demonstratif multi-class dan tabel ringkas.

Buka →
# Composition over Inheritance

Recap keputusan is-a vs has-a lalu pendalaman praktis: decorator via composition, strategy lewat antarmuka runtime vs template policy, dan tabel keputusan desain.

Buka →
# Design Patterns

Pola GoF yang paling relevan untuk C++ modern — Strategy, Observer, Factory Method, Adapter, dan Singleton beserta kritiknya — dengan tiga pola teruji dalam satu program.

Buka →
# Dependency Injection

Mengirim dependensi dari luar lewat constructor injection — antarmuka, implementasi nyata, test double (stub dan fake) untuk unit test — semuanya tanpa framework.

Buka →
# API Design

Mendesain antarmuka function dan class yang mudah dipakai dan sulit disalahgunakan: nama eksplisit, parameter minim, return type yang jujur, noexcept dan const correctness, sampai versi dan dokumentasinya.

Buka →
# Rule of Zero

Fungsi khusus sebagai bagian tak terlihat dari API class: Rule of Zero sebagai pilihan default, kapan Rule of Five benar-benar diperlukan, serta = default dan = delete untuk menyatakan niat.

Buka →
# Refactoring

Refactoring terencana: empat code smell yang paling sering muncul, langkah aman kecil-berurutan-teruji, dan refactor before/after dengan output yang dibuktikan identik.

Buka →