Read this post in: de_DEen_USes_ESfr_FRhi_INjapl_PLpt_PTru_RUvizh_CNzh_TW

Panduan Lengkap tentang Diagram Kelas UML (Diagram sebagai Kode)

šŸ’”Ā 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

The Evolution of Unified Modeling Language (UML)

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

  1. Modelkan kunci secara eksplisit: GunakanĀ {pk},Ā {ak1}Ā stereotip karena UML tidak mendukung kunci secara bawaan

  2. Tandai persistensi: GunakanĀ {persistent}Ā nilai bertanda untuk membedakan kelas basis data dari kelas aplikasi sementara

  3. Sederhanakan operasi: Peta operasi kueri ke tampilan; operasi kompleks ke prosedur penyimpanan

  4. Kelola pewarisan dengan hati-hati: Pilih strategi pemetaan berdasarkan pola kueri

  5. Dokumentasikan batasan: Gunakan OCL atau batasan teks jelas untuk aturan bisnis

  6. 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.

Leave a Reply