Dari Konsep ke Kode: Panduan Lengkap Diagram Kelas UML & Studi Kasus
Pendahuluan
Diagram Kelas Bahasa Pemodelan Terpadu (UML) berfungsi sebagai cetak biru untuk arsitektur perangkat lunak, menjembatani kesenjangan antara persyaratan abstrak dan implementasi kode yang konkret. Dengan memvisualisasikan struktur sistem—kelas, atribut, operasi, dan hubungan di antara mereka—pengembang dapat memastikan desain yang kuat sebelum menulis satu baris kode pun.
Panduan ini menguraikan sintaks esensial Diagram Kelas UML menggunakan lembar ringkasan komprehensif dan menerapkan konsep-konsep ini pada skenario dunia nyata: Platform Pengiriman Makanan Terpadu. Pada akhir artikel ini, Anda akan memahami cara memodelkan sistem kompleks yang melibatkan pewarisan, antarmuka, komposisi, dan agregasi.

Bagian 1: Blok Bangunan (Sintaks & Legenda)
Sebelum menyelami studi kasus, kita harus menetapkan kosakata yang digunakan dalam diagram UML.
1. Struktur Kelas & Visibilitas
Sebuah kelas direpresentasikan oleh persegi panjang yang dibagi menjadi tiga kompartemen:
-
Atas: Nama Kelas (misalnya,
PemesananPenerbangan). -
Tengah: Properti/Atribut (misalnya,
+ namaProperti: String). -
Bawah: Metode/Operasi (misalnya,
+ isActive(): boolean).
Modifikator Visibilitas:
-
+Publik:Dapat diakses oleh kelas lain manapun. -
-Privat:Dapat diakses hanya di dalam kelas tersebut. -
#Protected: Dapat diakses dalam kelas dan subkelasnya. -
~Package: Dapat diakses hanya dalam paket yang sama.
2. Jenis Kelas Khusus
-
Antarmuka (
<<interface>>): Kontrak yang mendefinisikan metode tanpa implementasi. Diwakili oleh kotak hijau (dalam ringkasan ini) atau notasi standar.-
Contoh:
UserRepodengan+ method(): void.
-
-
Kelas Abstrak (
<<abstract>>): Kelas dasar yang tidak dapat diinstansiasi secara langsung. Mereka mungkin berisi metode abstrak.-
Contoh:
Componentdengan+ render(): void // abstrak.
-
-
Enumerasi: Himpunan konstanta bernama.
-
Contoh:
JobStatus.
-
Contoh Diagram Kelas Sistem Pemesanan

@startuml
skinparam classAttributeIconSize 0
skinparam shadowing false
‘ — ANTARMUKA —
interface PaymentGateway {
+ process(amount: double): boolean
}
‘ — KELAS ABSTRAK —
abstract class Order {
# orderId: String
# totalAmount: double
+ {abstract} calculateTax(): double
+ getSummary(): String
}
‘ — KELAS —
class PhysicalOrder {
– shippingWeight: double
+ calculateTax(): double
}
class DigitalOrder {
– downloadLink: String
+ calculateTax(): double
}
class OrderItem {
– productName: String
– price: double
– quantity: int
}
class PayPalGateway {
+ process(amount: double): boolean
}
‘ — HUBUNGAN —’
Order <|– PhysicalOrder
Order <|– DigitalOrder
Order *– “1..*” OrderItem : mengandung
Order ..> PaymentGateway : menggunakan
PaymentGateway <|.. PayPalGateway
@enduml
Bagian 2: Hubungan & Multiplisitas
Garis yang menghubungkan kelas mendefinisikan bagaimana mereka berinteraksi.
1. Jenis Asosiasi
-
Pewarisan (Generalisasi):Garis solid dengan segitiga berongga. Hubungan “adalah-a”.
-
Contoh:
MobildanSepeda Motormewarisi dariKendaraan.
-
-
Implementasi:Garis putus-putus dengan segitiga berongga. Sebuah kelas memenuhi kontrak antarmuka.
-
Contoh:
MobilmengimplementasikanDapat Dikendarai.
-
-
Komposisi (Kepemilikan Kuat):Garis solid dengan berlian terisi. “Bagian” tidak dapat ada tanpa “keseluruhan.”
-
Contoh:
Restoran(Keseluruhan) memilikiMenu(Bagian). Jika restoran tutup, menu pun hilang.
-
-
Agregasi: Garis solid dengan berlian kosong. Hubungan “memiliki” di mana bagian-bagian dapat ada secara mandiri.
-
Contoh:
PesananmengagregasiRestoran(Restoran tetap ada meskipun pesanan dihapus).
-
2. Legenda Multiplisitas
Angka di ujung garis menunjukkan kardinalitas:
-
1: Tepat satu. -
0..1: Nol atau satu (Opsional). -
1..*: Satu atau lebih (Daftar wajib). -
*: Banyak (Nol atau lebih).
Konsep pewarisan, implementasi, komposisi, dan agregasi Contoh

Bagian 3: Studi Kasus Dunia Nyata: Platform Pengiriman Makanan Terpadu
Bagian ini menganalisis diagram pusat dari lembar ringkasan, dengan menguraikan arsitektur aplikasi pengiriman makanan.
1. Hierarki Pengguna (Pewarisan & Komposisi)
Sistem dimulai dengan kelas umum Pengguna kelas, ditandai sebagai Abstrak. Ini memastikan tidak ada objek “Pengguna” umum yang dibuat, hanya tipe spesifik.
-
Pewarisan:
PelanggandanPengemudimewarisiPengguna. -
Komposisi:
-
PelangganmemilikiAlamat Pengiriman(Kepemilikan Kuat). -
PengemudimemilikiDetail Kendaraan(Kepemilikan Kuat).
-
2. Ekosistem Restoran & Menu
Bagian ini mendemonstrasikan pengelompokan bersarang dalam dan koleksi.
-
Implementasi Antarmuka:
Restoranmengimplementasikan<<interface>> DapatDilokasikan, memastikan setiap restoran memiliki data lokasi. -
Rantai Komposisi:
-
Restoran(1) memiliki secara kuatMenu(1). -
MenuberisiKategoriMenu(1..*). -
KategoriMenuberisiItemMenu(*). -
Catatan: Struktur ini memastikan bahwa ItemMenu tidak dapat ada tanpa Kategori, yang tidak dapat ada tanpa Menu.
-
3. Pemrosesan Pesanan & Pembayaran
-
Struktur Pesanan:
-
Pesananmemiliki hubungan denganRestoran(Agregasi). -
Pesananmemiliki secara kuatItemBarisPesanan(1..*). -
PesananmemilikiPembayaran(0..1), menunjukkan bahwa pembayaran bersifat opsional selama fase pembuatan awal.
-
-
Strategi Pembayaran (Polimorfisme):
-
Sistem menggunakan sebuah antarmuka
<<interface>> PaymentProcessor. -
Kelas konkret
StripeProcessordanPayPalProcessormengimplementasikan antarmuka ini. Hal ini memungkinkan sistem untuk beralih gerbang pembayaran tanpa mengubah intiPesananlogika.
-
4. Kelas Abstrak vs. Antarmuka (Contoh Kendaraan)
Bagian kanan atas lembar bantuan mengklarifikasi kebingungan umum:
-
Kelas Abstrak (
Kendaraan):MobildanSepeda Motormewarisi dariKendaraan. Ini menyiratkan bahwa mereka berbagi data/struktur inti (misalnya,tipeMesin,roda). -
Antarmuka (
DapatDikendarai):MobilmengimplementasikanDapat Dikendarai. Ini menyiratkanMobilmemiliki perilaku spesifik (drive()) yangSepeda Motormungkin tidak memilikinya (atau mungkin mengimplementasikannya secara berbeda).
Bagian 4: Visualisasi dengan PlantUML
Di bawah ini adalah kode PlantUML untuk menghasilkan struktur inti dari “Platform Pengiriman Makanan Terpadu” yang dijelaskan dalam studi kasus. Anda dapat menyalin ini ke editor PlantUML apa pun untuk melihat diagramnya.

@startuml
' Skinparams untuk styling agar sesuai dengan nuansa cheat sheet
skinparam classAttributeIconSize 0
skinparam linetype ortho
skinparam shadowing false
' --- LEGENDA / STEREOTYPES ---
interface "Dapat Dikendarai" as Drivable {
+ drive(): void
}
interface "Dapat Ditemukan" as Locatable {
+ getCoordinates(): Coordinate
}
interface "Pemroses Pembayaran" as PaymentProcessor {
+ process(amount: double): boolean
}
abstract class "Pengguna" as User {
# id: int
# name: String
# email: String
+ login(): void
}
abstract class "Kendaraan" as Vehicle {
# model: String
# year: int
}
class "Mobil" as Car
class "Sepeda Motor" as Motorcycle
class "Pelanggan" as Customer
class "Pengemudi" as Driver
class "Restoran" as Restaurant
class "Menu" as Menu
class "Kategori Menu" as MenuCategory
class "Item Menu" as MenuItem
class "Pesanan" as Order
class "Baris Pesanan" as OrderLineItem
class "Pembayaran" as Payment
class "Pemroses Stripe" as StripeProcessor
class "Pemroses PayPal" as PayPalProcessor
' --- RELASI ---
' Hierarki Kendaraan
Vehicle <|-- Car
Vehicle <|-- Motorcycle
Car ..|> Drivable : Mengimplementasikan
' Hierarki Pengguna
User <|-- Customer
User <|-- Driver
' Komposisi Pelanggan/Pengemudi
Customer *-- "1" AlamatPengiriman : Kepemilikan Kuat
Driver *-- "1" DetailKendaraan : Kepemilikan Kuat
' Ekosistem Restoran
Restaurant ..|> Locatable : Mengimplementasikan
Restaurant "1" *-- "1" Menu : Komposisi
Menu "1" *-- "1..*" KategoriMenu : Koleksi
KategoriMenu "1" *-- "*" ItemMenu : Koleksi
' Ekosistem Pesanan
Order "1" o-- "1" Restoran : Agregasi
Order "1" *-- "*" BarisPesanan : Komposisi
Order "1" --> "0..1" Pembayaran
' Pemroses Pembayaran
PaymentProcessor <|.. StripeProcessor
PaymentProcessor <|.. PayPalProcessor
' Asosiasi Spesifik (Contoh Asosiasi Diri dari legenda)
class "Karyawan" as Employee
Employee --> "melapor kepada" Employee
@enduml
Kesimpulan
Menguerti Diagram Kelas UML sangat penting bagi setiap arsitek perangkat lunak atau pengembang. Seperti yang ditunjukkan dalam Platform Pengiriman Makanan Terpadu studi kasus, UML memungkinkan kita memvisualisasikan hubungan kompleks—seperti perbedaan antara Mobil yang mewarisi dari Kendaraan versus mengimplementasikan Dapat Dikendarai antarmuka.
Dengan secara ketat mematuhi aturan sintaksis mengenai multiplisitas (1, , 1..) dan kepemilikan (Komposisi vs. Agregasi), tim dapat mencegah jebakan arsitektur, seperti catatan data yang terisolasi atau desain kaku yang sulit diperluas. Baik Anda merancang sistem login sederhana atau pasar multi-pemasok, diagram UML yang dirancang dengan baik tetap menjadi alat paling efektif untuk mengomunikasikan visi Anda.






