Modular Programming — BAB 12
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah menyelesaikan halaman ini, kamu diharapkan dapat:
- Menjelaskan konsep Pemrograman Modular.
- Membagi file program menjadi modul ekspor dan impor yang mandiri.
- Menerapkan dependency injection sederhana untuk menghubungkan modul.
Pendahuluan
Section titled “Pendahuluan”Kita telah mempelajari sistem modul di BAB 10. Di halaman ini, kita akan membahas paradigma berpikir pemrograman modular. Pemrograman modular mengajarkan kita cara mendesain aplikasi sebagai kumpulan blok komponen mandiri yang bisa dilepas-pasang dengan mudah tanpa merusak sistem secara keseluruhan.
Penjelasan
Section titled “Penjelasan”Pemrograman modular memecah aplikasi besar menjadi modul-modul kecil. Setiap modul memiliki tanggung jawab mandiri dan berkomunikasi lewat gerbang resmi (export (BAB 10) dan import (BAB 10)).
Keuntungan utama:
- Reusability: Modul yang sudah diuji (seperti
AcademicRepository(BAB 11)) bisa langsung dipakai untuk data guru, siswa, atau barang koperasi tanpa perlu mengubah isinya. - Ketergantungan Terkontrol (Loose Coupling): Modul-modul tidak saling terikat secara kaku. Jika kamu ingin mengubah database dari array RAM menjadi database file JSON, kamu cukup mengubah modul repository saja. Modul service dan tampilan tidak perlu diubah karena mereka tidak peduli cara data disimpan di latar belakang.
Analogi Kehidupan Sehari-hari: Blok Lego Mainan
Section titled “Analogi Kehidupan Sehari-hari: Blok Lego Mainan”Bayangkan kamu sedang merakit Mobil-mobilan dari Balok Lego:
Balok Lego Roda ──► Bisa dipasang di mobil, bisa dipasang di truk, bisa dipasang di pesawat lego.Roda tersebut adalah modul mandiri. Ia tidak peduli badan kendaraan apa yang sedang dipasangkan padanya.Jika salah satu roda lego rusak, kamu cukup mencopot roda itu saja dan menggantinya dengan roda baru. Kamu tidak perlu menghancurkan seluruh badan mobil lego tersebut untuk memperbaiki satu roda.
Visual Illustration: Hubungan Antar-Modul
Section titled “Visual Illustration: Hubungan Antar-Modul” [ models.ts (Modul A) ] ───┐ ├── di-import oleh ──► [ main.ts (Program Utama) ] [ service.ts (Modul B) ] ──┘Example: Menghubungkan Modul Menggunakan Dependency Injection
Section titled “Example: Menghubungkan Modul Menggunakan Dependency Injection”Bad Code (Instansiasi Kaku di Dalam Kelas)
Section titled “Bad Code (Instansiasi Kaku di Dalam Kelas)”import { AcademicRepository } from "./repositories/academic-repository";
class SiswaService { private repo = new AcademicRepository<any>("siswa"); // Ketergantungan kaku! // Jika konfigurasi repository berubah, class SiswaService ikut rusak.}Good Code (Dependency Injection - Fleksibel & Teruji)
Section titled “Good Code (Dependency Injection - Fleksibel & Teruji)”import { AcademicRepository } from "./repositories/academic-repository";
class SiswaService { // Objek repository dikirim dari luar lewat constructor constructor(private repo: AcademicRepository<any>) {}}
// Cara instansiasi di main.ts:const repo = new AcademicRepository<any>("siswa");const service = new SiswaService(repo); // repo dimasukkan secara fleksibelCommon Mistakes
Section titled “Common Mistakes”- Circular Dependency (Ketergantungan Melingkar): File A mengimpor dari file B, dan file B ternyata juga mengimpor dari file A. Ini memicu error tak terduga karena compiler bingung file mana yang harus dimuat terlebih dahulu. Hindari ini dengan menaruh data bersama di file ketiga (C).
Best Practice
Section titled “Best Practice”- Pastikan satu file module
.tstidak mengekspor terlalu banyak komponen yang tidak saling berhubungan. Jika sebuah file mulai terlalu besar, pecahlah menjadi sub-file yang lebih kecil dan gunakanindex.tsuntuk re-export (BAB 10).
Ringkasan
Section titled “Ringkasan”- Pemrograman modular membagi sistem menjadi komponen-komponen independen.
exportdanimportadalah gerbang komunikasi antar-modul.- Dependency Injection membuat komponen tidak saling terikat kaku (loose coupling).
Latihan
Section titled “Latihan”- Tuliskan di file latihan: jelaskan perbedaan antara hubungan tight coupling (kaku) dan loose coupling (fleksibel) pada modul program.