Pendahuluan
Diagram kelas adalah inti dari proses pemodelan objek. Baik forward
engineering maupun reverse engineering memanfaatkan diagram ini. Forward
engineering adalah proses perubahan model menjadi kode program sedangkan
reverse engineering sebaliknya merubah kode program menjadi model. Bab ini akan
membahas diagram kelas beserta fitur-fitur yang menyertainya. Atribut
(attribute) dan operasi (operation) yang menggambarkan perilaku suatu kelas
serta perluasannya seperti stereotypes, tagged values dan batasan (constrains)
merupakan fitur-fitur suatu kelas. Kemudian dibahas juga hubungan antara satu
kelas dengan kelas lainnya beserta sifat-sifat hubungan tersebut seperti
penampakan (viibility), multiplicity, kemudahan berubah (changeability), nilai
pokok (default values) dan property (properties).
Kemampuan menghasilkan kode program yang dimilki diagram kelas
menyebabkan diagram ini memilik hubungan yang khas dengan diagram UML lainnya.
Pada gambar 1.1 terlihat bahwa diagram yang lain memberi masukna kepada diagram
kelas. Dagram kelas yang baik menghassilkan suatu rancangan system atau program
yang mendekati kenyataan.
Definisi Kelas
dan Objek
Diagram kelas merupakan kumpulan kelas-kelas objek. Oleh karena itu
pengertian kelas sangat penting sebelum merancang diagram kelas. (Whitten,2004:
400) mengartikan kelas sebagai satu set objek yang memiliki atribut dan
perilaku yang sama. Kelas kadang-kadang disebut kelas objek (object class).
Secara alami, objek yang berupa buku analisis disain dan buku pemrograman
terstruktur kita kelompokan dalam satu kelas, yaitu kelas buku. Kedua objek
memiliki atribut dan perilaku yang serupa. Contohnya, kedua objek mugngkin
memiliki atribut yang serupa seperti omor ISBN, Judul, tanggal penerbitan,
edisi sebgainya. Demikian juga, kedua objek memiliki perilaku yang sama
misalnya membuka dan menutup.
Secara teknis (Pender, 2003: bab 5) mengartikan sebuah kelas
sebagai suatu definisi sumber daya yan termasuk didalamnya informasi-informasi
yang menggambarkan fitur suatu entitas dan bagaimana penggunaannya. Sedangkan
objek adalh suatu entitas yang bersifat unik yang mengikuti aturan-aturan yang
sudah didefinisikan dalam kelasnya. Dalam terminology perangkat lunak, kode
program ditulis sebagai kumpulan kelas-kelas yang mengerti pada perilaku yang
telah didefinisikan dalam kelas. Dalam database, objek dinyatakan berupa sebuah
baris yang tersimpan dalam file yang berada dalam memori computer. Jadi diagram
kelas menggambarkan “fisik” system yang akan kita buat.
Kelas menggambarkan suatu group yang memiliki kesamaan keadaan dan
perilaku. Kelas merupakan cetak biru suatu objek dalam system orientasi objek.
Dapat dikatakan kelas adalah sejenis alat pengklasifikasi. Sebagai contoh
Volkswagen, Toyota dan ford merupakan kumpulan mobil sehingga kita dapat
mengkelompokkannya dalam kelas yang diberi nama mobil. Suatu kelas bisa
menyatakan konsep yang daoat dilihat maupun abstrak (Pilone, 2005: bab 2)
Kelas dinyatakan dalam kotak yang terbagi menjadi bebrapa
kompartemen. Kompartemen dalah area dalam kelas yang berisi informasi.
Kompartemen pertama berisi nama kelas, berikutnya atribut dan yang terakhir
operasi. Kompartemen-kompartemen itu bisa disembunyikan unruk memperjelas
diagram yang kita buat.
UML menyarankan cara pemberian nama yang baik:
1. Dimulai dengan huruf besar
2. Ditengah pada kompartemen bagian atas
3. Ditulis dengan cetak tebal
4. Ditulis dengan cetak italic jika kelas tersebut abstract
Suatu objek
merupakan isi (instance) dari kelas. Misalnya, kita mempunyai kelas yang
memiliki anggota mobil dan diberi nama kelas mobil. Isi dari kelas itu misalnya
Toyota, BMW, Mercedes dan sebaginya. Dalam menyatakan instance suatu kelas kita
bisa menuls instance tersebut dan disertai dengan nama kelasnya.
Atribut
Rincian suatu kelas misalnya warna mobil, jumlah sisi suatu bentuk,
dan sebagainya dinamakn atribut. Atribut bisa sederhana (integer,
floating-point dan sebagainya) bisa juga kompleks.
Atribut digambarkan dalam dua notasi yang berbeda. Inline atau
hubungan antar kelas.
1. Atribut Inline
Kita
dapat menulis atribut kelas di sebelah kanan notasi kotak. Atribut itu
dinamakan atribut inline. Tidak ada perbedaan semantic antara
atributinline dan atribut relasi. Kedunya sama-sama bermaksud merinci kelas yang kita buat. Untuk menyatakan atribut pada tubuh kelas, letakkan pada kompartemen kedua. Notasi atribut inline yang mengikuti estandar UML antara lain:
visibility/name:type multiplicity = default {property strings and constraints}
Di mana:
Visibility ::= { + | - | # | ~}
Multiplicity ::= [lower .. upper]
Berikut penjelasan tiap komponen:
a. Visibility. Mengindikasikan
bagaimana atribut tersebut terlihat berhubungan dengan kelas lain.
Gunakan symbol +, -, #, atau ~ berturut-turut untuk menatkan ublic,
private, protected, atau package.
b. Simbol “/”. Mengindikasikan
turuna dari atribut. Suatu turunan atribut secara sederhana merupakan
atribut yang dihitung dari atribut lain dalam kelas.
c. Name. Merupakan
frasa pendek yang menyatakan nama atribut. Kalimat pada huruf kecil dan
tiap huruf kalimat kedua dan seterusnya huruf besar. Misal:
horsePoser,manuFactur, dan sebagainya
d. Type. Menyatakan tipe atribut dari klasifikasi lain misalnyan interace, built in type misalnya :int.
e. Multiplicity. Menspesifikasikan
berapa banyak instance/anggota yang dinyatakan dari atribut tersebut.
Bisa integer tunggal atau range suatu nilai yang dispesifikasikan di
dalam kurung yang dipisahkan dengan “ .. ”. Gunakan tanda asterisk “ * “
sebagai batas atas untuk menyatakan batas atas.
f. Default. ,erupakan nilai default atribut
g. Propery strings. Merupakan
kumpulan property atau tag yang dapat dihubungkan dengan atribut.
Biasanya untuk hal-hal yang khusus dan unik. Tata caca penulisannya
adalah dengan tanda “ {} “ yang dipisahkan oleh koma.
h. Constraints. Merupakan batasan suatu atribut
2. Atribut Relasi
Kita bisa mempresentasikan atribut dengan cara menghubungkan dengan kelas lainnya. Untuk itu
kita menggunakan notasi relasi sebagai sarana pembentuk atribut relasi
dalam diagram kelas yang besar. Dengan cara itu kita dapat membuat
atribut yang lebih detil dan kmpleks. Ambil contoh dalam pemodelan sebuah kelas mobil yang memiliki sebuah mesin jenis tertentu. Jika kita akan merinci lagi mesin yang digunakan oleh kelas mobil itu, akan diperoleh kelas mobl yang rumit dan sulit dipahami. Bandingkan bila kelas mobil yang telah kita buatdihubungkan dengan kelas lainnya yaitu kelas mesin yang merinci lebih detil terhadap jenis-jenis mesin yang digunakan.
Notasi relasi memiliki sintaks yang
sama dengan atribut inline. Tanda “-“ berarti private, tanda “ + “ berarti
public dan seterusnya antara atribut relasi sama dengan atribut inline walaupun penematan dan layoutnya berbeda. Atribut visibility dan namanya diletakkan dekat
garis relasi. Jangan gunakan kotak untuk multiplicity-nya. Cukup dengan
meletakkan multiplicity tersebut dekat kelas perinci (attribute’s classifier).
Seperti multiplicity, kita dapat meletakkan
constraint pada atribut. Dalam notasi relasi, kita menuliskan constraint dekat
kelas perinci atribut sepanjang garis relasi. UML mengizinkan constraint
ditulis dalam notasi relasi antar atribut. seperti gambar dibawah ini:
Pada gambar diatas diperlihatkan
standar UML berupa constraint “xor” yang berarti hanya Transmisi Otomatis atau
Transmisi Manual yang dipilih. Jika dalam atribut inline sudah dinyatakan
constraintnya, maka kita cukup membuat catatan saja.
3. Atribut
Turunan (Derived Atributes)
Atribut turunan diberi notasi slash
“ / “. Symbol ini bermaksud memberi
informassi kepada implementator bahwa atribut tersebut tidak terlalu penting.
Misalnya dalam perbankan kita mempunyai kelas Nasabah. Kelas ini menyimpan
saldo terakhir dengan type floating-point diberi nama saldo. Untuk mengetahui
kondisi apakah saldonya overdrawn atau tidak kita butuh atribut overdrawn
(saldo minus) yang bertipe Boolean. Karena overdrawn berdasarkan kondisi saldo
bukan berdasarkan inputan dari user, maka kita katakan overdrawn merupakan
atribut turunan. UML menyatakan bahwa atribut turunan readOnly, artinya user
diizinkan untuk mengubah nilai tersebut. Seandainya user diizinkan untuk
mengubah nilai atribut turunan tersebut, mau tidak mau class harus melakukan
update terhadap sumber informasinya secara akurat.
4. Atribut
Mltiplicity
Multiplicity suatu atribut menyatakan berapa
banyak isi (instances) dari atribut yang terbentuk saat kelas diinisiasi.
Misalnya, kelas mobil akan memiliki empat roda,jadi multiplicity atribut roda adalah empat. Jika tidak ada keterangan multiplicity berarti dianggap bernilai
satu. Multiplicity bisa berupa integer, deretan integer yang dipisahkan oleh
koma, atau jangkauan nilai tertentu. Saat menyatakan suatu jangkauan nilai,
nilai atas tak hingga diberi symbol asterisk “ * “. Jika tidak ada batas bawah,
berarti dianggap batas bawahnya nol. Harga multiplicity dinyatakan dalam kurung
“ [] ” untuk integer tunggal dan dipisahkan oleh dua titi “ [ .. ] “ untuk dua
integer. Pada gambar dibawah ini, karena atribut mesin tidak ditulis multiplicity-nya, maka anggap satu.
Urutan
(Ordering)
Suatu atribut yang memiliki
multiplicity lebih dari satu, saat menyimpan datanya bisa dibuat cara
pengurutannya. Sebagai contoh, kita dapat menspesifikasikan daftar nama yang
tersimpan berdasarkan urut abjad. Jadi urutan tersusunnya data dalam kelas
dijumpai pada atribut kelas tersebut. Secara default, atribut suatu kelas tidak
memiliki urutan. Tanda bahwa satu atribut memiliki urutan dengan menuliskan
kata “{ordered}” setelah tanda kurung tutup atribut. dalam gambar dibawah ini, kelas dataSiswa memiliki atribut nomor induk mahasiswa multiplicity [
0..*] dan urut abjad.
Unik (Uniqueness)
Sebagai penjelasan tambahan dari
ordered, atribut multiplicity yang lebih dari satu dapat dibuat unik. Unik sini
berarti dalam satu kelas tidak boleh ada atribut yang sama, misalya dalam kelas
DataSiswa tidak boleh ada nilai mahasiswa (NIM) yang sama. Cara penulisan unik adalah dengan
menambah “{unique}” setelah menulis multiplicity atribut suatu kelas. Untuk
menegaskan bahwa boleh ada duplikasi dalam suatu kelas kita dapat menuliskan “
not unique “ setelah menulis atribut multiplicity. berikut gambar diagram unik.
Collection Type
Standar UML
menyediakan pemetaan dari beberapa kemungkinan orders dan keunikan sebagai
collection type. Table berikut ini memperlihatkan pemetaan dari property
atribut ke collection type UML. Perlu diperhatikan, collection type yang
ditunjukkan dalam table berikut adalah pemetaan dan bukan peta langsung kelas ke bahasa
pemrograman.
Urutan
(Ordered)
|
Keunikan
(Uniqueness)
|
Asosiasi
Collection Type
|
Salah (False)
|
Salah (False)
|
Bag
|
Benar (True)
|
Benar (True)
|
OrderSet
|
Salah (False)
|
Benar (True)
|
Set
|
Benar (True)
|
Salah (False)
|
Urutan (Sequence)
|
Berikut ini contoh atribut yang
tersimpan dalam collection type Orderset.
5. Property
Atribut
Untuk lebih
memperjelas property dengan multiplicity, atribut memiliki beberapa set
property untuk menyampaian tambahan informasi kepada embaca diagram. Beberapa
property yang telah didefinisikan oleh UML antara lain.
Readonly
Menspesifikasikan bahawa atribut tidak
dapat dimodifikasi setelah nilai awal terbentuk. Dalm pengembang bahasa
pemrograman dinyatakan sebagai konstanta. UML tidak menspesifikasikan kapan
nilai awal harus disetting walaupun nilai default bisa dinyatakan sebagai nilai
default.
Union
Menyatakan bahwa tipe atribut sebagai
gabungan dari nilai yang mungkiin untuk atribut tersebut. Biasanya ini
digunakan dengan property turunan yang mengindikasikan bahwa atribut itu
diturunkan dari gabungan terhadap set atribut lainnya.
Subsets<attribute-name>
Menjelaskan
bahwa atribut ini merupakan suatu subset dari seluruh nilai yang valid dari
atribut yang diberikan. Subset bukanlah property yang biasa digunakan,
seandainya dgunakan biasanya diasosiasikan dengan sub-kelas dari suatu tipe
attribute.
Redefines
<attribute-name>
Menjelaskan
bahwaatribut ini bekerja sebagai suatu nama lain dari atribut yang diberikan.
Walaupun tidak lazim, atribut ini dapat digunakan untuk menunjukkan bahwa suatu
sub-kelas memiliki suatu atribut yang merupakan nama lain untuk atribut
super-kelas.
Composite
Menyatakan bahwa atribut ini merupakan
bagian dari seluruh bagian hubungan dengan pembuat kelas (classifier)
6. Hambatan
(Constraints)
Hambatan menyatakan
batasan suatu elemen. Bisa bahasa natural bisa juga menggunakan bahasa formal
misalnya OCL. Walaupun demiian hambatan dinyatakan dalam ekspresi Boolean.
Hambatan ditulis dalam tanda kurung karawal “ { } “ setelah elemen yang akan
dibaut hambatannya ditulis, bisa juga diletakkan sebagai catatan dengan garis
putus-putus
Kita
dapat memberi nama suatu hambatan diikuti oleh titik dua sebelum ekpsresi
Boolean ditulis. Biasanya digunakan untuk mengidentifikasi hambatan dalam suatu
operasi.
7. Atribut
statis
Atribut statis
cenderung sebagai atribut kelas dari pada atribut konten (instance) suatu
kelas. Sebagai ontoh, kita menginisialisasi nilai konstan dalam satu kelas dan
mensharing sifat itu ke setiap konten suatu kelas. Atribut statis dinyatakan
dengan garis bawah terhadap baik atribut inline maupun relasi
Operasi (Operation)
(pilone, 2005) mengartikan operation sebagai fitur dari kelas yang
menspesifikasikan bagaimana perilaku dijalankan. Misalnya meggambar segiempat,
menghitung umlah item suatu daftar dan sebagainya. UML membedakan dengan jelas
antara operation dan method. Jika operation mendefinisikan sutau perilaku
dijalankan, method adalah pelaksanaan dari operation. Method berupa prosedur
atau algoritma utnuk menjalankan operatin. Diagram kelas hanya mencantumkan
operation saja sedangkan method tidak.
Operation diletakan dalam kompartemen terpisah dengan sintaks:
visibility name
( parameters ) : return-type {properties}
Parameter ditulis sebagai berikut:
direction
parameter_name : type [ multiplicity ] = default_value { properties }
Gambar dibawah ini mengambarkan contoh operation:
Elemen sintaksnya antara lain:
Visbility
Mengindikasikan mampu liaht operation oleh kelas lain. Symbol +, -,
#, atau ~ berturut-turtberarti: public, pruvate, protected atau package.
Name
Adalah frasa pendek yang menamai operation. Operation biasanya
frasa kata kerja yang merepresentasikan aksi. UML merekomendasikan huruf
pertama operasi adalah huruf kecil, bila ada kata berikutnya, kata berikutnya
diawali dengan huruf besar.
Return-Type
Merupakan tipe pengembalian pada ooperasi, jika ada. Jika tidak ada
operasi pengembalian dari operasi(disebut sebagai subroutine dalam beberapa
bahasa), maka type pengembalian dianggap void.
Jika operasi pengembalian dianggap tidak memiliki nilai (dalam beberapa
bahsa disebut fungsi), kita harus menunjukkan tipe nilai pengembaliannya,
apakah tipe primitive atau collection. UML menspesifikasikan keadaan
pengembalian sebagai opsional.
Properties
Menyatakan batasan dari sifat-sifat yang melekat pada operation.
Properties bersifat optional.
Parameter elemen sintaks antara lain:
Direction
Bersifat optional, mengindikasikan bagaimana parameter digunakan
dalam operasi. Antara lain: in, inout, out, atau return. Inmenyatakan bahwa
parameter mengarah dari caller menuju operation. Out menyatakan sebaliknya
parameter mengarah dari operation ke caller. Inout menyatakan parameter dari
caller ke operasi dan memiliki kemungkinan untuk balik arah. Return
mengindikasikan bahwa nilai yang diset oleh caller diarahkan kembali sesuai
nilai return itu.
Parameter-name
Merupakan kata benda atau frasa kata benda yang memberikan nama
kepada parameter. Secara tipikal, nama parameter dimulai dengan huruf kecil
dengan kata berikutnya jika ada, dimulai dengan huruf besar.
Type
Adalah tipe parameter. Tipe berhubungan dengan kelass lain,
interface, collection atau tipe primitif.
Multiplicity
Menaytakan berapa banyak instance tipe parameter. Bisa tidak
ditulis (berarti multiplicity = 1), integer tunggal, dertean integer yang
terpisahkan oleh koma atau range nilai yang dispesifikasikan anatar kurung
besar dengan “..” diantaranya. Batas atas tak hingga dinyatakan dengan “. Jika
tidak ada batas bawah, * mengindikasikan no atau lebih.
Default_value
Menyatakan nilai default parameter. Nilai default bersifat
opsional. Jia tidak ditulis, berarti kita tidak memperlihatkan tanda sama
dengan. Perlu dicatat bahwa UML tidak menyatakan parameter dengan nilai default
Karen sintaks operasi melekat pada bahasa pemrograman yang dipilih.
Properties
Menyatakan sifat-sifat yang berhubungan dengan parameter.
Dinyatakan dalam tanda kurung kurawal. Bersifat optional, boleh ada boleh
tidak.
1. Batasan
Operasi
Operasi bisa
saja memilik beberapa batasan yang bermanfaat dalam interaksinya dengan system.
Batasan berarti jontrak yang harus dipatuhi oleh operasi. Batasan dituliskan
langsung saat operasi ditulis atau dinatakan dalam catatan dengan garis
putus-putus.
Kondisi Awal
(Preconditions)
Kondisi awal
menjelaskan keadaaan awal system sebelum operasi dijalankan. Singkatnya, karena
kta tidak mungkin menyatakan kondisi awal untuk tiapparameter walaupun kelass
juga secara umum menyatakan operasi dengan sedikit atribut untuk system.
Beberapa bahasa pemrograman memilii
proteksi sendiri sehingga walaupun kita menyatakan kondisi awal, tetap saja
program berjalan tanpa terlebih dahulu mengecek kondisi awal yang kita nyatakan
dalam UML. Oleh karena itu menjadi tugas kita untuk mengecek implementassi
program yang kita buat secara manual.
Kondisi Akhir (Postconditions)
Kondisi akhir bermaksud memberi
jaminan terhadap kondisi system setelah operai dilaksanakan. Seperti kondisi
awal, kondisi akhir secara tipikal menyatakan kondisi satu atau lebih atribut
system atau memberi jaminan tentang kondisi kelas yang melakukan operasi.
Kondisi Tubuh (Body Conditions)
Suatu operasi mungkin memiliki kondisi tubuh yang membatasi nilai
pengembalian (return value). Kondisi tubuh terpisah dari kondisi tubuh bisa
saja diganti oleh metode yang dimiliki kelas itu. Sebagai contoh, kelas
“Window” mungkin menyatakan kondisi tubuh untuk metode getSize() yang
mensyaratkan panjang dan lebar jendela tidak boleh nol. Kemudian subkelas yang
bernama “SquareWindow” mungkin memiliki kondisi tubuh sendiri yang menyatakan
lebar dan panjang harus sama besar. Kondisi tubuh sebagaimana kondisi awal dan
akhir memiliki batasan yang diekspresikan dalam bahasa alami atau dengan OCL.
Operasi Query
Operasi
dideklarasikan sebagai query jika implementasi operasinya tidak merbah kelas
tersebut. Dalam praktek, perancang menggunakan property query yang
mengindikasikan metode yang tidak merubah atribut suatu objek. Kita menyatakan suatu metode query
dengan meletakkan batasan query setelah operasi ditulis. Sebagai contoh suatu
operasi getAge() secara sederhana mengambil integer tanpa mengubah nilai
internal kelas.
Pengeculaian (Exceptions)
Dengan notasi
yang sejenis dengan batasan, kita bisa membuat pengecualian dengan keyword
<<exceptions>>. Dengan garis putus-putus kita membuat daftar
pengeculaian dalam bentuk catatan seperti contoh dibawah ini.
2. Operasi
statis
Operasi
biasanya menspesifikasikan instance suatu kelas. Tetapi UML mengijinkan suatu
operasi menspesifikasi perilaku kelas itu sendiri. Operasi itu dinamakan
operasi statis yang bekerja langsung terhadap kelas itu sendiri, bukan hanya
terhdapad instance kelas. Secara notasi kita menyatakan bahwa operasi itu
statis dengan membuat garis bawah.
Metode (Methods)
(Pilone, 2005: bab 2.4) menjelaskna bahwa metode adalah
implementasi proses. Tiap kelas biasanya mengimplementasikan operasinya dengan
menurunkan dari super kelas. Jika suatu kelas tidak memiliki implementasi
operasi, maka mau tidak mau harus menurunkan (inheritance) dari super kelasnya,
dan operasinya dinyatakan sebagai abstract.
Kelas Absract
Kelas abstract adalah kelas yang menyediakan operasi tanpa merinci
implementasinya. Kelas abstract bermanfaat untuk mengidentifikasikan fungsi
antar objek. Karena tanpa implementasi, kelas abstract harus menjadi subkelas.
Contoh kelas abstract adalah kelas Movable() yang memiliki operasi Move(). Dan
bergeraknya tergantung dari kelas lain, misalnya mobil, pesawat, atau orang.
Hubungan (Relationship)
Tanpa adanya hubungan dengan kelas lain, kita tidak mampu melihat
mekanisme suatu system. UML menyediakan beragam cara menggambarkan hubungan
antar kelas.tiap hubungan memiliki tipe yang berbeda sesuai dengan kebutuhan
dengan harapan saat kita memodelkan suatu system, pembaca akan memahami
hubungan yang kita buat.
1. Ketergantungan
(Depedency)
Hubungan
terlemah antar kelas adalah hubungan ketergantungan (dependency relationship).
Ketergantungan antar kelas bermakna suatu kelas menggunakan atau memiliki
pengetahuan terhadap kelas lainnya. Hubugan ketergantungan hanya sesaat
(transient) dan tidak ada batas waktu yang jelas. Ketergantungan
biasanya bisa dibaca sebagai “ … menggunakan …”. Misalnya kita memiliki kelas
WindowClosingevent saat akan ditutup. Kita bisa menyatakan bahwa Window
menggunakan suatu kelas WindowClosingEvent. Ketergantungan digambarkan dengan
garis berpanah.
2. Asosiasi
Hubungan pada
asosiasi lebih kuat dari hubungan ketergantunagn dalam arti suatu kelas tetap berhubungan dengan kelas lain
seterusnya. Hubungan dapat diputus tanpa mengganggu kelas lainnya. Asosiasi bisa
dibaca “… menggunakan …”. Sebagai contoh jia kita memiliki kelas Window yang
memiliki referensi terhadap gerkaan kursor mouse. Bisa kita katakan,Window
memiliki suatu kursor. Dengan cursor, kita dapat mengubah bentuk Window.
Asosiasi digambarkan dengan garis lengkap tanpa ada tanda panah.
Navigavbility
Asosiasi memiliki notasi untuk menyatakan
navigability. Jika arah asosiasi antar dua kelas bisa dari atau ke, maka dalam
UML tidak perlu ditulis anak panah di ujungnya. Tetapi dalam asosiasi dua arah
kita jarang membuat hubungan nonnavigable. Kita dapat menggambarkan
asosiasi yang nonnavigable dengan membuat tanda silang pada asosiasi tersebut.
Misalnya, paa gambar dibawah ini. Window menggunakan Cursor untuk emubah
bentuknya dan todak sebalinya (Cursor menggunakan Window untuk mengubah bentuk
kursor).
Penamaan
Asosiasi
Biasanya
asosiasi diberi nama dengan frasa pendek sepanjang garis. Frasa yang ada tidak
di-generate menjadi kode, murni sebagai pelengkap model.
Multiplicity
Karena asosiasi
biasanya merepresentasikan hubungan akhir, maka ada hubungan atribut dalam
kelas-kelas yang berasosiasi itu. Jadi kita harus menerangkan berapa jumlah
instance yang terlibat dalam hubungan asosiasi itu. Untuk menyatakan jumlah
itu, kta meletakkan multiplicity dekat kelas. Jangan menggunakan kotak dalam menuliskan multiplicity.
3. Agregasi
(Agregation)
Agregasi adalah
versi kuat dari asosiasi. Tidak seperti asosiasi, agregasi mengimplikasikan
kepemilikansuatu kelas. Agregasi bisa dibaca “ … memilik … “. Misali kita
memiliki kelas window yang memiliki posisi dan ukuran pada kelas Rectangle,
maka kita katakana “Window memiliki Rectangle”. Walaupun Rectangle bisa saja
dishare dengan kelas lain, tetapi Window memiliki hubungan erat dengan
Rectangle. Tetapi hubungan agregasi masih kalah kuat dengan komposisi
(composition). Hubungan
af=gregasi dimyatakan dengan simob “diamond” pada kelas pemilik (owning class)
dan garis utuh berpanah ke kelas yang dimiliki (owned class). Gambar dibawah
ini menggambarkan notasinya.
4. Komposisi
(Composition)
Komposisi
merupakan huungan yang paling kuat antar kelas. Komposisi digunakan untuk
mengambil seluruh bagian hubungan. Hanya boleh ada satu komposisi dalam satu
waktu. Antara instance suatu kelas dengan instance lainnya selalu terkoneksi
(linked). UML tidak mengijinkan asosiasi dengan pemilik yang berbeda sebelum
hubungan komposisi dengan kelas terdahulu diputus. Hubungan
komposisi dibaca “… bagian dari …”. Misalnya, jika Window yang kita buat harus
memeliki Titlebar maka kita dapat merepresentasikan suatu kelas bernama
Titlebar yang merupakan “bagian dari” kelas Window. Secara notasi,
komposisi digambarkan dengan belah ketupat tebal “Filled Diamond” dekat kelas
pemilik (owning class) dan garis tebal berpanah menuju kelas yang dimilik
(owned class).
5. Generalisasi
(Generalitation)
Generalisasi
berarti target dari hubungannya ke kelas yanglebih genral (umum). Sebagai
contoh jika kita memiliki kelas bernama Cat dan kelas bernama Dog, kita dapat
membuat generalisasi dari keduanya dengan nama Animal. Generalisasi
biasanya dibaca “… adalah …” dimulai dari kelas yeng lebih spesifik menuju
kelas yang lebih umum (general class). Jadi dapat dikatakan “suatu Cat adalah
suatu Animal”.
6. Asosiasi
Antar Kelas
Terkadang
hubungan antara dua elemen tidak sederhana. Misalnya, suatu tim pemain bola
(football player) berasosiasi dengan liga (league) lewat suatu regu. Jika
hubungannya terlalu rumit, bisa dibuatkan hubungan asosiasi antar kelas. Suatu
asosiasi kelas memiliki nama dan atribut seperti kelas biasa. Notasi untuk
kelas asosiasi adalah dengan garis putus-putus mengenai garis asosiasi utama. Ketika
ditranslasikan menjadi kode, biasanya kelas asosiasi dianggap sebagai kelas
biasa, sehingga ada tiga kelas yang terbentuk. Yang perlu diperhatikan dari
gambar diatas adalah FootballPlayer tidak memiliki referensi langsung kepada
FootballLeague tapi memiliki referensi terhadap FootballTeam. footballTeam akan
memiliki referensi terhadap FootballLeague.
7. Pengkualifikasi
Asosiasi (Association Qualifiers)
Hubungan antar
elemen bisa saja memiliki kunci dan indeks dengan nilai tertentu. Sebagai
contoh dalam perbankan, nasabah diidentifikasi oleh nomor rekening atau nomor
KTP. UML menyediakan pengkualifikasi asosiasi untuk mengakap informasi itu.
Pengkualifikasi dinyatakan dengan cara membuat persegi panjang kecil antara
asosiasi dengan sumber elemen. Tulis namanya (biasanya nama atribut) dalam persegi
panjang kecil itu.
8. Antarmuka
(Interface)
Dalam UML kita
membedakan operasi (operation) dan metode (methods). Operasi diartikan sebagai
cara-cara yang harus ditempuh agar perilaku (behavior) pada suatu kelas
terjadi. Sedangkan metode diartikan sebagai implementasi/pelaksanaan perilaku.
Metode tidak dimodelka dalam diagram
kelas. Identitas operasi (operation signature) terdiri dari nama,
parameter, dan nilai balik. Kombinasi ketiga elemen tersebut menghasilkan suatu
Antarmuka (Pender, 2003: Bab 5). Beberapa bahasa
modern seperti C++tidak mensuport konsep antarmuka. Bahasa lain, misalnya Java,
mensuport Antarmuka tetapi tidak memiliki property. Intinya adalahkita harus
tahu akan diimplementasikan dalam bahasa apakah model yang akan kita
aplikasikan (Pilone, 2005: 2.7
Notasi
Antarmuka
Sebagai contoh
kita dapat membuat Antarmuka yang bernama Sortable yang memilik operasi
ComesBefore (…). Tipa kelas yang melihat antarmuka Sortable harus melaksanakan
implementasi ComesBefore(…). Ada dua cara
pengambaran suatu antarmuka. Mana yang kita pilih tergantung apa titik berat
yang akan kita perlihatkan. Gambar dibawah ini cara pertama penggambaran
antarmuka Sortable. Cara
penggambaran kedua adalah dengan soket dan bola. Walaupun cara ini kurang detil
dibanding cara pertama tetapi sangat baik dalam mengambarkan hubungan dengan
kelas-kelas yang lain. Kelas tidak bebas (dependent) dalam antarmuka ini
dihubungka ke soket lain hingga klop membentuk antarmuka.
Suatu kelas
dikatakan melihat antarmuka jika kelas tersebut menyediakan implemtasi darim
operasi dan property. Kelas tidak bebas digambarkan dnegan garis purus-putus
dengan penuh terbuka sedangkan kelas penyedia antarmuka digambarkan dngangaris
putus-putus dengan panah tertutup berarah dari kelas u=itu ke antarmuka. Contoh yang
lain adalah misalnya suatu kelas MarketingPlance menyediakan suatu operasi
price() yang dapat menentukan harga suatu produk. Antarmuka penyedia
digambarkan dengan suatu bola yang terhubung ke kelas implementator dengan
garis tebal. Ketika suatu objek
membutuhkan antarmuka, objek itu dikatakan memiliki antarmuka peminta (required
interface). Digambarkan dengan setengan lingakarn pada ujungnya dan garis penuh
menuju kelas yang membutuhkan antarmuka. Gambar diatas
diartikan bahwa kelas Shirt membutuhkan antarmuka Price. Dan jika digabungkan
akan membentuk konfigurasi bola dan soket. Shirt adalah produk yang membutuhkan
suatu harga dan MarketingPlang memiliki kemampuan untuk memberikan harga ke
suatu produk. Penggambaran
antarmak jenis pertama dimuncilkan pada UML versi 1.4 sedangkan untuk jenis
kedua (bola dan soket) mencul pada UML versi 2.0 (Pender, 2003:bab5).
9. Template
(templates)
Jika antarmuka
mengijinkan kita menyediakan spesifikasi objek-objek yang akan kita
interaksikan, UML menyediakan pula abstraksi tipe kelasna. Ketika kita
menginginkan kelas List dapat mensuprot segala tpe objek, maka kita
mengharuskan seluruh objek dalam List itu memiliki tipe yang sama. UML
mengijinkan kita membuat dan menspesifikasikan jenis abstraksi ini dalam suatu template.
Rangkuman
Bab III telah membahas mengenai kelas dan relasi antar kelas
beserta bentuk baku pemodelannya dalam UML 2.0.
v Kelas. Kelas digambarkan dengan kotak yang terdiri dari sekat-sekat
berturut-turut dari atas kebawah untuk nama, atribut dan operasi. Dalam satu
paket, nama kelas harus unik (tidak boleh ada kesamaan nama). Bila namanya sama
tapi beda paket dengan kelas lain, harus disebutkan dalam format nama paket ::
nama kelas
v Atribut. Atribut mendefinisikan tipe informasi suatu keals dengan
standar sintaks :
[visibility][/]name[:type]
[multiplicity] [=default][{property-strig}]
v Operasi (dan Metode). Operasi menunjukkan cara-cara dalam menjabarkan
perilaku sedangkan metode merupakan implementasinya. Operasi yang sama dapat
dilakukan dengan metode-metode yang berbeda. Sintaksnya dalam UML 2.0:
[visibility]name([parameter-list])’:’[return-result][{properties}]
Parameter-list:=name[‘:’data-type][‘[multiplicity’]’]
v Visibility. Visibility menunjukkan tingkatan ijin terhadap elemen dalam
kelas (atribut dan operasi) utnukm diakses oleh kelas lain. Jenis visbility
antara lain: private, public, protected dan package.
v Multiplicity. Multiplicity mendefinikan jumlah atau jangkauan nilai
elemen (atribut atau parameter). Bisa berupa angka, jangkauan(range), limit
bawah dan atas dengan sintaks:
Upper ::=
integer | ‘*’ | value_specification
Multiplicity_range
::= [ lower ‘..’] upper
Lower ::=
integer | value_spesification
v Antarmuka (Interface). Suatu antarmuka mendefinisikan sekumpulan
perilaku yang harus dimiliki oleh kelas implementator antarmuka.
Operasi-operasi pada kelas antarmuka tidak memiliki metode. Atribut dalam kelas
antarmuka berbentuk abstract. Jika kelas implementator antarmuka bisa
menyediakan akses dalam bentuk informasi yang sama dengan operasinya, maka
tidak perlu mendeklarasikan atribut lagi.
v Kelas template. Kelas template menyediakan cara-cara mendefinisikan
struktur suatu kelas tanpa menspesifikasikan tipe. Teknik ini sangat bermanfaat
untuk kelas-kelas berbentuk array dan vector yang terkadang memiliki beragam
tipe.