Beranda

Class Diagram UML: Notasi, Jenis Relasi, dan Contoh Sistem Perpustakaan

Yogi Mardilah ·

Class diagram adalah diagram UML yang menggambarkan struktur sebuah sistem berorientasi objek: class apa saja yang ada, atribut dan method setiap class, serta hubungan antar-class. Kalau use case diagram menjawab "sistem bisa melakukan apa", class diagram menjawab "sistem tersusun dari apa".

Menulis kode program di laptop

Foto: StockSnap (CC0)

Supaya mudah dibandingkan, contohnya tetap memakai sistem perpustakaan. Jika belum familiar dengan istilah class dan object, baca dulu pengertian OOP.

Bentuk sebuah class

Satu class digambar sebagai kotak dengan tiga bagian: nama class, atribut, dan method (operasi).

Buku - idBuku: int- judul: String- stok: int + tersedia(): boolean+ kurangiStok(): void+ tambahStok(): void

Tanda di depan atribut atau method menunjukkan visibilitas:

SimbolVisibilitasBisa diakses oleh
+publicSemua class
-privateHanya class itu sendiri
#protectedClass itu dan turunannya
~packageClass dalam paket yang sama

Format penulisan: nama: tipe untuk atribut, dan nama(parameter): tipeKembalian untuk method.

Jenis hubungan antar-class

HubunganNotasiArtiContoh
AsosiasiGaris biasaClass saling berhubunganAnggota — Peminjaman
AgregasiGaris dengan belah ketupat kosong"Punya", tetapi bagian bisa berdiri sendiriRak ◇— Buku (buku tetap ada walau rak dibongkar)
KomposisiGaris dengan belah ketupat penuh"Terdiri dari", bagian ikut hilang jika induknya hilangPeminjaman ◆— DetailPeminjaman
Generalisasi (pewarisan)Panah segitiga kosong"Adalah jenis dari"Petugas —▷ Pengguna
DependensiPanah putus-putusMemakai class lain sementaraLaporan ⇢ Peminjaman

Contoh class diagram perpustakaan

PenggunaAnggotaPetugas PeminjamanDetailPeminjamanBukuRak # id: int# nama: String+ login(): boolean - noAnggota: String- tglDaftar: Date+ cariBuku(judul) - nip: String+ catatPinjam(): void - idPinjam: int- tglPinjam: Date+ tambahBuku(b: Buku)+ hitungDenda(): int - tglKembali: Date- denda: int+ kembalikan(): void - judul: String+ tersedia() - lokasi: String 10..* 11..* *1 *1

Cara membaca diagram di atas:

  • Anggota dan Petugas mewarisi Pengguna (generalisasi), sehingga keduanya punya id, nama, dan login(). Atribut Pengguna bertanda # (protected) supaya bisa diakses class turunannya.
  • Satu Anggota punya 0..* (nol atau lebih) Peminjaman, dan setiap Peminjaman milik tepat 1 Anggota.
  • Peminjaman terdiri dari 1..* DetailPeminjaman (komposisi, belah ketupat penuh di sisi Peminjaman). Jika transaksi peminjaman dihapus, detailnya ikut terhapus.
  • Setiap DetailPeminjaman merujuk ke 1 Buku, dan satu Buku bisa muncul di banyak detail peminjaman.
  • Rak menampung banyak Buku (agregasi, belah ketupat kosong di sisi Rak). Buku tetap ada walaupun raknya dipindah atau dibongkar.

Dari class diagram ke kode

Class diagram bisa langsung diterjemahkan ke kode. Contoh PHP 8 untuk generalisasi dan komposisi:

abstract class Pengguna
{
    public function __construct(protected int $id, protected string $nama) {}
    public function login(): bool { /* ... */ return true; }
}

class Anggota extends Pengguna
{
    private array $peminjaman = [];   // 0..* Peminjaman
}

class Peminjaman
{
    private array $detail = [];       // komposisi: dibuat & dimiliki di sini

    public function tambahBuku(Buku $b): void
    {
        $this->detail[] = new DetailPeminjaman($b);
    }
}

Perhatikan bahwa objek DetailPeminjaman dibuat di dalam Peminjaman. Inilah ciri komposisi: umur objek bagian mengikuti induknya.

Class diagram vs ERD

Class diagramERD
FokusStruktur program (objek)Struktur penyimpanan data (tabel)
IsiAtribut dan methodAtribut saja
PewarisanDidukung langsungHarus diakali (tabel terpisah/gabungan)
Dipakai untukMerancang kode OOPMerancang database

Dalam praktik, keduanya sering mirip karena data yang disimpan biasanya sama. Untuk versi tabel databasenya, lihat ERD perpustakaan.