de_DEen_USes_ESfa_IRhi_INid_IDpt_PT

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.


Lembar Ringkasan Diagram Kelas UML

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: UserRepo dengan + method(): void.

  • Kelas Abstrak (<<abstract>>): Kelas dasar yang tidak dapat diinstansiasi secara langsung. Mereka mungkin berisi metode abstrak.

    • Contoh: Component dengan + 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: Mobil dan Sepeda Motor mewarisi dari Kendaraan.

  • Implementasi:Garis putus-putus dengan segitiga berongga. Sebuah kelas memenuhi kontrak antarmuka.

    • Contoh: Mobil mengimplementasikan Dapat Dikendarai.

  • Komposisi (Kepemilikan Kuat):Garis solid dengan berlian terisi. “Bagian” tidak dapat ada tanpa “keseluruhan.”

    • Contoh: Restoran (Keseluruhan) memiliki Menu (Bagian). Jika restoran tutup, menu pun hilang.

  • Agregasi: Garis solid dengan berlian kosong. Hubungan “memiliki” di mana bagian-bagian dapat ada secara mandiri.

    • Contoh: Pesanan mengagregasi Restoran (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

@startuml
‘ Antarmuka dan Kelas Dasar
interface Drivable {
+ drive()
}
kelas abstrak Vehicle {
+ startEngine()
}
‘ Kelas
class Car {
}
class Motorcycle {
}
class Restaurant {
– name: String
}
class Menu {
}
class Order {
}
‘ Relasi
‘ 1. Pewarisan (Generalisasi)
Vehicle <|– Car
Vehicle <|– Motorcycle
‘ 2. Implementasi
Drivable <|.. Car
‘ 3. Komposisi (Kepemilikan Kuat)
Restaurant *– Menu : memiliki
‘ 4. Agregasi
Order o– Restaurant : melibatkan
‘ Contoh Multiplisitas
‘ Restaurant memiliki satu atau banyak Menu (1..*)
‘ Order melibatkan nol atau satu Restaurant (0..1)
Restaurant “1” *– “1..*” Menu
Pesanan “1” o– “0..1” Restoran
@enduml

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: Pelanggan dan Pengemudi mewarisi Pengguna.

  • Komposisi:

    • Pelanggan memiliki Alamat Pengiriman (Kepemilikan Kuat).

    • Pengemudi memiliki Detail Kendaraan (Kepemilikan Kuat).

2. Ekosistem Restoran & Menu

Bagian ini mendemonstrasikan pengelompokan bersarang dalam dan koleksi.

  • Implementasi Antarmuka: Restoran mengimplementasikan <<interface>> DapatDilokasikan, memastikan setiap restoran memiliki data lokasi.

  • Rantai Komposisi:

    • Restoran (1) memiliki secara kuat Menu (1).

    • Menu berisi KategoriMenu (1..*).

    • KategoriMenu berisi ItemMenu (*).

    • Catatan: Struktur ini memastikan bahwa ItemMenu tidak dapat ada tanpa Kategori, yang tidak dapat ada tanpa Menu.

3. Pemrosesan Pesanan & Pembayaran

  • Struktur Pesanan:

    • Pesanan memiliki hubungan dengan Restoran (Agregasi).

    • Pesanan memiliki secara kuat ItemBarisPesanan (1..*).

    • Pesanan memiliki Pembayaran (0..1), menunjukkan bahwa pembayaran bersifat opsional selama fase pembuatan awal.

  • Strategi Pembayaran (Polimorfisme):

    • Sistem menggunakan sebuah antarmuka <<interface>> PaymentProcessor.

    • Kelas konkret StripeProcessor dan PayPalProcessor mengimplementasikan antarmuka ini. Hal ini memungkinkan sistem untuk beralih gerbang pembayaran tanpa mengubah inti Pesanan logika.

4. Kelas Abstrak vs. Antarmuka (Contoh Kendaraan)

Bagian kanan atas lembar bantuan mengklarifikasi kebingungan umum:

  • Kelas Abstrak (Kendaraan): Mobil dan Sepeda Motor mewarisi dari Kendaraan. Ini menyiratkan bahwa mereka berbagi data/struktur inti (misalnya, tipeMesin, roda).

  • Antarmuka (DapatDikendarai): Mobil mengimplementasikan Dapat Dikendarai. Ini menyiratkan Mobil memiliki perilaku spesifik (drive()) yang Sepeda Motor mungkin 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.