Implementasi Class OOP — BAB 11
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah mengikuti halaman ini, kamu diharapkan dapat:
- Membuat abstract class
Manusiadi foldermodels/. - Membuat class
SiswaClassdanGuruClassyang meng-extendsManusia. - Menerapkan pilar Enkapsulasi (properti private & getter-setter) pada objek siswa.
Pendahuluan
Section titled “Pendahuluan”Sekarang kita akan membuat wujud nyata dari model data kita menggunakan paradigma OOP (BAB 8). Kita akan membuat abstract class induk Manusia, lalu mewariskannya ke class SiswaClass dan GuruClass agar logika data terenkapsulasi secara aman.
Penjelasan
Section titled “Penjelasan”Kita akan membagi class ini menjadi tiga file terpisah di dalam folder src/models/ agar modular:
manusia-class.ts: Abstract class induk penampung properti dasarnamadanumur.siswa-class.ts: Class representasi siswa, mewarisiManusia, memiliki propertinilaiRataRataprivate terproteksi.guru-class.ts: Class representasi guru, mewarisiManusia, memiliki propertinipdanmataPelajaran.
Analogi Kehidupan Sehari-hari: Loker Digital dengan Chip Pengaman
Section titled “Analogi Kehidupan Sehari-hari: Loker Digital dengan Chip Pengaman”Membuat class ber-enkapsulasi seperti mendesain sistem pengaman loker digital:
- Properti
iddisolder mati sehingga tidak bisa diganti-ganti setelah dirakit (readonly). - Kolom pengisi nilai ditutup casing logam tebal (
private). Untuk mengisinya, sistem dipasangi chip pemeriksa tegangan listrik (set nilaiRataRata) agar tegangan di bawah 0 atau di atas 100 volt ditolak otomatis sebelum masuk baterai.
Visual Illustration: Bagan Pewarisan Class
Section titled “Visual Illustration: Bagan Pewarisan Class” Abstract: Manusia { nama, umur } │ ┌───────┴───────┐ ▼ extends ▼ extends SiswaClass GuruClass { nis, nilai } { nip, mapel }Live Coding: Implementasi Class OOP
Section titled “Live Coding: Implementasi Class OOP”Langkah 1: Buat src/models/manusia-class.ts
Section titled “Langkah 1: Buat src/models/manusia-class.ts”// Abstract class indukexport abstract class Manusia { constructor( public nama: string, public umur: number ) {}
abstract dapatkanInfoPeran(): string;}Langkah 2: Buat src/models/siswa-class.ts
Section titled “Langkah 2: Buat src/models/siswa-class.ts”import { Manusia } from "./manusia-class";import { NIS } from "./siswa-model";
export class SiswaClass extends Manusia { readonly id: number; // properti readonly private _nilaiRataRata: number = 0; // properti private
constructor( id: number, nama: string, umur: number, public nis: NIS, public kelas: string ) { super(nama, umur); // panggil constructor induk this.id = id; }
// Getter get nilaiRataRata(): number { return this._nilaiRataRata; }
// Setter dengan filter set nilaiRataRata(nilaiBaru: number) { if (nilaiBaru >= 0 && nilaiBaru <= 100) { this._nilaiRataRata = nilaiBaru; } else { console.log(` [Validasi]: Nilai ${nilaiBaru} tidak valid untuk ${this.nama}!`); } }
dapatkanInfoPeran(): string { return `Siswa Kelas ${this.kelas}`; }}Langkah 3: Buat src/models/guru-class.ts
Section titled “Langkah 3: Buat src/models/guru-class.ts”import { Manusia } from "./manusia-class";import { StatusHadir } from "./guru-model";
export class GuruClass extends Manusia { readonly id: number;
constructor( id: number, nama: string, umur: number, public nip: number, public mataPelajaran: string, public status: StatusHadir = StatusHadir.Hadir ) { super(nama, umur); this.id = id; }
dapatkanInfoPeran(): string { return `Guru ${this.mataPelajaran}`; }}Langkah 4: Perbarui Gerbang src/models/index.ts
Section titled “Langkah 4: Perbarui Gerbang src/models/index.ts”export * from "./guru-model";export * from "./siswa-model";export * from "./manusia-class";export * from "./siswa-class";export * from "./guru-class";Output
Section titled “Output”Jika kamu melakukan instansiasi objek new SiswaClass(...), objek tersebut otomatis mewarisi properti nama dan umur dari Manusia, serta terlindung properti _nilaiRataRata-nya.
Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”super(nama, umur);: Memanggil constructor class indukManusiadi baris pertama constructor anak (BAB 8).get nilaiRataRata()&set nilaiRataRata(...): Method getter & setter modern (BAB 8) untuk mengontrol alur pembacaan dan penulisan data private.export * from "./siswa-class";: Mengekspor kembali class agar terpusat di modul index (BAB 10).
Common Mistakes
Section titled “Common Mistakes”- Lupa memanggil super() di baris pertama: Menuliskan
this.id = id;sebelum memanggilsuper(). TypeScript mewajibkansuper()dijalankan pertama kali sebelum kita mengakses keywordthis.
Ringkasan
Section titled “Ringkasan”- Class OOP dideklarasikan di folder
src/models/. Manusiabertindak sebagai abstract class induk.- Enkapsulasi diimplementasikan menggunakan properti
privatedangetter-setter. - Semua class di-reexport lewat
models/index.ts.
Latihan
Section titled “Latihan”- Buat berkas-berkas class di atas di folder
src/models/komputermu. - Pastikan file
index.tsdiperbarui dan tidak ada error merah di editor VS Code.