š”Ā Catatan: Semua diagram disediakan dalam formatPlantUML format. Anda dapat merender mereka secara instan menggunakanVisual Paradigm Diagram sebagai Kode.
š¹ Pengantar UML
Apa itu UML?
āBahasa Pemodelan Terpadu (UML) adalah bahasa pemodelan visual umum yang digunakan untuk menentukan, memvisualisasikan, membangun, dan mendokumentasikan artefak dari suatu sistem perangkat lunak.āĀ ā Rumbaugh dkk., 1999
Karakteristik Utama:
-
šØĀ Notasi visual: Sintaks grafis untuk memodelkan sistem
-
šĀ Standarisasi: Standar yang diadopsi oleh OMG sejak tahun 1997
-
š§Ā Bahasa, bukan metode: Menentukan notasi, bukan proses
-
šĀ Cakupan luas: Memodelkan proses bisnis, fungsi sistem, struktur kode, dan skema basis data
Apa yang BUKAN UML
| Kesalahpahaman | Kenyataan |
|---|---|
| Metodologi pengembangan | Hanya notasi pemodelan |
| Bahasa pemrograman | Bahasa spesifikasi abstrak |
| Hanya untuk pemrograman berbasis objek | Berlaku untuk basis data, pemodelan bisnis, dll. |
| Didefinisikan secara tepat dari segala aspek | Beberapa ambiguitas semantik masih ada di versi awal |
š¹ Sejarah dan Standarisasi
Timeline Evolusi

1965-1970: Simula-67 (bahasa OO pertama)
ā
1970-an-1980-an: Smalltalk di Xerox PARC
ā
1984: C++ diperkenalkan oleh Bjarne Stroustrup
ā
1988-1992: Meluasnya metode OO (Booch, OMT, OOSE, dll.)
ā
1994: Rumbaugh bergabung dengan Booch di Rational ā Pemersatu dimulai
ā
1995: Draf UML 0.8 dirilis
ā
1996: OMG mengeluarkan RFP untuk bahasa pemodelan standar
ā
1997: UML 1.1 diadopsi oleh OMG (14 November)
ā
2000: UML 1.3 diterbitkan secara resmi
ā
2003: UML 1.5 diterbitkan; struktur super UML 2.0 diterima
Mengapa UML Menang dalam ‘Perang Metode’
-
Menggabungkan lebih dari 50 metode OO yang bersaing menjadi satu standar
-
Didukung oleh pemain utama industri (IBM, Microsoft, Oracle, HP)
-
Menyediakan mekanisme ekstensi untuk penyesuaian
-
Menjadi standar de facto untuk pemodelan berbasis objek
ā ļøĀ Perspektif Kritis: Beberapa orang berpendapat bahwa UML adalah ‘bahasa raksasa yang dirancang oleh komite’ dengan semantik yang tidak tepat pada versi awal.
š¹ Kelas dan Atribut
Struktur Kelas
Kelas UML direpresentasikan sebagai persegi panjang dengan hingga tiga kompartemen.

@startuml
class Student {
firstName: String
lastName: String
email[0..1]: String
encryptedPW: String
+ totalPoints(): Integer
+ setPassword(pw: String)
+ checkPW(pw: String): Boolean
}
@enduml
Sintaks Deklarasi Atribut
[visibilitas] nama[multiplicity]: Tipe [= nilaiDefault] {properti}
Contoh PlantUML:

@startuml
class Student {
+ ProgramOfStudy[0..2]: String = "MIS"
- encryptedPW: String {frozen}
# internalID: Integer
~ packagePrivateData: String
}
@enduml
Cakupan Atribut
-
Cakupan InstansĀ (default): Setiap objek memiliki nilainya sendiri
-
Cakupan KelasĀ (static): Satu nilai yang dibagikan oleh semua instans

@startuml
class Student {
name: String
{static} count: Integer
}
@enduml
Kunci dalam UML ā ļø
Keterbatasan Penting: UML tidak memiliki konsep bawaan tentang kunci. Gunakan stereotip atau nilai bertanda sebagai solusi sementara.

@startuml
class Student {
{pk} id: Integer
{ak1} email: String
- name: String
}
@enduml
š¹ Asosiasi dan Hubungan
Asosiasi Dasar & Kelipatan
@startuml
class Exercise
class Chapter
Exercise "0..*" -- "1..1" Chapter : Milik
@enduml
Interpretasi: Setiap latihan dimiliki oleh tepat satu bab; sebuah bab dapat berisi nol atau lebih latihan.
Nama Peran
Alih-alih (atau selain) nama asosiasi, gunakan nama peran di ujung asosiasi:
@startuml
class Person
class Company
Person "0..*" --> "0..1" Company : Karyawan/Pemberi Kerja
@enduml
Implementasi: TheĀ OrangĀ tabel akan memiliki kunci asingĀ pemberi kerjaĀ mengacu padaĀ Perusahaan.
Navigasi
Tentukan arah travers dengan panah:

@startuml
class Exercise
class Chapter
Exercise "0..*" --> "1" Chapter
@enduml
-
Panah menunjukkan arah travers yang efisien
-
Pada OODBs: diimplementasikan sebagai pointer hanya dalam satu arah
-
Pada RDBMS: join bekerja dalam kedua arah tanpa peduli
Jenis Koleksi denganĀ {terurut}

@startuml
class Chapter
class Exercise
Chapter "1" -- "0..*" Exercise : {ordered}
@enduml
-
{terurut}: Pertahankan urutan (gunakan daftar, bukan himpunan) -
Implementasi di RDBMS: Tambahkan atribut nomor urutan
EXERCISES (
id PRIMARY KEY,
chapter_id REFERENCES CHAPTERS,
sort_no INTEGER,
UNIQUE (chapter_id, sort_no)
)
Pengkualifikasi
Pengkualifikasi membagi objek yang terkait menggunakan mekanisme seperti kunci:

@startuml
class Chapter
class Exercise
Chapter "1" --> "0..1" Exercise : <<qualifier>> no: Integer
@enduml
Makna: Diberikan sebuah Bab dan nomor latihan, paling banyak satu Latihan dikembalikan.
Kelas Asosiasi
Ketika sebuah asosiasi memiliki atribut atau operasi:
@startuml
class Student
class Exercise
class Solution {
date: Date
points: Integer
}
Student "0..*" -- "0..*" Exercise : telah menyelesaikan
Solution .. Student
Solution .. Exercise
@enduml
-
SatuĀ
SolusiĀ objek per pasangan (Siswa, Latihan) -
Mewajibkan: siswa yang sama tidak dapat mengumpulkan dua solusi untuk latihan yang sama
Komposisi vs. Agregasi
| Fitur | Komposisi (*--) |
Agregasi (o--) |
|---|---|---|
| Simbol | Berlian hitam | Berlian putih |
| Hubungan | Bagian-keseluruhan, kepemilikan kuat | Bagian-keseluruhan, referensi lemah |
| Siklus Hidup | Bagian dihapus bersama keseluruhan | Bagian independen |
| Kelipatan | 1 atau 0..1 di sisi keseluruhan | Semua |
| Pemetaan RDBMS | ON DELETE CASCADE |
Kunci asing standar |
@startuml
class Chapter
class Exercise
Chapter *-- "0..*" Exercise : Komposisi
Chapter o-- "0..*" Exercise : Agregasi
@enduml
š¹ Operasi dan Metode
Sintaks Deklarasi Operasi
@startuml
class Calculator {
+ getTotal(studID: Integer, inclExtra: Boolean = true): Float {isQuery=true}
+ {static} getInstance(): Calculator
+ {constructor} Calculator(initialValue: Float)
- recalculate(): void
}
@enduml
Spesifikasi Parameter:
[arah] nama: Tipe [= nilaiDefault]
-
Arah:Ā
masukĀ (bawaan),Ākeluar,Āmasuk/keluar -
Nilai bawaan memungkinkan parameter opsional
Stereotip Operasi Khusus
| Stereotip | Tujuan |
|---|---|
{isQuery=true} |
Menjamin tidak ada modifikasi status |
{konstruktor} |
Menciptakan dan menginisialisasi instance baru |
{statis} |
Operasi tingkat kelas, tanpa implisitdiri sendiri |
Operasi dalam Konteks Basis Data
Perpecahan Budaya: OO menekankan enkapsulasi; relasional menekankan akses data langsung.
Strategi Implementasi:
| Jenis Operasi | Implementasi RDBMS |
|---|---|
| Akses atribut sederhana | SELECT/UPDATE langsung |
| Atribut turunan (tanpa parameter) | VIEW Basis Data |
| Atribut turunan (dengan parameter) | Prosedur penyimpanan atau logika aplikasi |
| Penegakan batasan kompleks | Pemicu atau prosedur aplikasi |
š¹ Generalisasi dan Pewarisan
Generalisasi Dasar
@startuml
class Person
class Student
class Professor
Person <|-- Student
Person <|-- Professor
@enduml
Kelas Abstrak dan Operasi
@startuml
kelas abstrak Account {
- balance: Float
+ deposit(amount: Float): void
+ {abstrak} withdraw(amount: Float): void
}
@enduml
Kendala Generalisasi
@startuml
kelas Person
kelas Student
kelas Professor
kelas OtherPerson
Person <|-- Student : <<{saling lepas, lengkap}>>
Person <|-- Professor : <<{saling lepas, lengkap}>>
Person <|-- OtherPerson : <<{saling lepas, lengkap}>>
@enduml
Klasifikasi Ganda / Diskriminators
@startuml
kelas Employee
kelas Staff
kelas Faculty
kelas HMO
kelas NonHMO
Employee <|-- Staff : <<jenis>>
Employee <|-- Faculty : <<jenis>>
Employee <|-- HMO : <<asuransi>>
Employee <|-- NonHMO : <<asuransi>>
@enduml
-
Diskriminators mengelompokkan spesialisasi yang saling eksklusif
-
Objek dapat memiliki satu nilai per dimensi diskriminator
š¹ Mekanisme Ekstensi
UML menyediakan tiga mekanisme ekstensibilitas:
1. Stereotip<< >>
Perluas semantik UML dengan membuat āsubjenisā baru dari elemen metamodel.
@startuml
kelas Customer <<entitas>> {
- id: Integer
- name: String
}
kelas MathLibrary <<utilitas>> {
+ sin(x: Float): Float
+ cos(x: Float): Float
}
@enduml
2. Nilai Bertanda{kunci=nilai}
Tambahkan properti khusus ke elemen model.
@startuml
class Student {
{author=sb, version=1.0, persistence=persistent}
- id: Integer
}
@enduml
3. KendalaĀ {...}
Tambahkan pembatasan semantik menggunakan teks bebas, OCL, atau singkatan yang telah ditentukan sebelumnya.
@startuml
class Exercise {
- no: Integer
- points: Integer {value >= 0}
{points <= maxPoints}
}
@enduml
š¹ UML untuk Desain Basis Data: Pertimbangan Utama
Menerjemahkan UML ke Skema Relasional
| Konstruksi UML | Implementasi Relasional |
|---|---|
| Kelas | Tabel |
| Atribut | Kolom |
Kunci utamaĀ {pk} |
Kendala PRIMARY KEY |
| Asosiasi (1:*) | Kunci asing di sisi “banyak” |
| Asosiasi (:) | Tabel persilangan/jembatan |
| Komposisi | Kunci asing +Ā ON DELETE CASCADE |
| Kelas asosiasi | Tabel dengan FK komposit + atribut |
| Generalisasi | Tabel terpisah (dengan FK) atau tabel tunggal dengan penanda tipe |
{terurut}Ā asosiasi |
Tambahkan kolom urutan + batasan unik |
| Pengkualifikasi | Bagian dari kunci komposit atau kolom yang diindeks |
Perbedaan Kritis: OO vs. Relasional
| Aspek | Berbasis Objek | Relasional |
|---|---|---|
| Identitas | Referensi objek (surrogat) | Kunci utama (bisnis atau surrogat) |
| Operasi | Inti dalam desain, terenkapsulasi | Eksternal (SQL, prosedur) |
| Enkapsulasi | Atribut pribadi, antarmuka publik | Akses tabel langsung secara default |
| Pewarisan | Dukungan bahasa asli | Strategi pemetaan yang kompleks |
| Hubungan | Penunjuk/referensi | Kunci asing dan join |
Rekomendasi Praktis untuk Desainer DB
-
Modelkan kunci secara eksplisit: GunakanĀ
{pk},Ā{ak1}Ā stereotip karena UML tidak mendukung kunci secara bawaan -
Tandai persistensi: GunakanĀ
{persistent}Ā nilai bertanda untuk membedakan kelas basis data dari kelas aplikasi sementara -
Sederhanakan operasi: Peta operasi kueri ke tampilan; operasi kompleks ke prosedur penyimpanan
-
Kelola pewarisan dengan hati-hati: Pilih strategi pemetaan berdasarkan pola kueri
-
Dokumentasikan batasan: Gunakan OCL atau batasan teks jelas untuk aturan bisnis
-
Gunakan kelas asosiasi secara bijak: Hanya ketika hubungan memiliki atribut yang signifikan
šÆ Lembar Referensi Cepat
Ringkasan Notasi Diagram Kelas PlantUML
@startuml
class <<stereotip>> ClassName {
{tagged=nilai}
[+/-/#/~] name[mult]: Tipe [= val] {props}
[+/-/#/~] name(params): Ret {props}
}
@enduml
Notasi Asosiasi
@startuml
ClassA "multA" -- "multB" ClassB : NamaAsosiasi
ClassA *-- ClassB ' Komposisi
ClassA o-- ClassB ' Agregasi
ClassA --> ClassB ' Dapat Dijelajahi
@enduml
Simbol Visibilitas
-
+Ā Publik -
-Ā Pribadi -
#Ā Dilindungi -
~Ā Paket
Properti & Kendala Umum
-
{statis}Ā /Ā{isQuery=true}Ā /Ā{abstrak} -
{nilai >= 0}Ā /Ā{xor}Ā /Ā{terurut}Ā /Ā{pk}
š”Ā Pemikiran Akhir: Diagram kelas UML sangat kuat untuk pemodelan konseptual, tetapi ingat bahwa diagram ini dirancang terutama untuk rekayasa perangkat lunak. Saat menggunakan UML untuk desain basis data, bersiaplah untuk memperluas notasi (dengan stereotip, nilai bertanda, kendala) untuk menangkap konsep relasional seperti kunci, normalisasi, dan kendala deklaratif yang tidak bawaan dalam fondasi OO UML.
Panduan disusun dari āBagian 6: Diagram Kelas UMLā oleh Stefan Brass, UniversitƤt Halle, 2003. Semua diagram diformat dalam sintaks PlantUML untuk kompatibilitas dengan alat modern.











