1. Indikator Topik Pembahasan.
- Hubungan Dependensi dalam Class.
- Hubungan Asosiasi dalam Class.
- Hubungan Agregasi dalam Class.
- Hubungan Komposisi dalam Class.
2. Materi Pembelajaran.
Ketika kasus yang dibuat pada program berkembang, maka jumlah class yang
dibuat akan bertambah. Ketika hal tersebut terjadi, maka akan memungkinkan terjadinya
jalinan hubungan antara class-class yang ada. Pada konsep pendekatan berorientasi objek
dengan pemodelan UML (Unified Modeling Language), dikenal sedikitnya 6 jenis
hubungan yang dapat dijalin antara class dalam lingkup program. Hubungan-hubungan
tersebut antara lain: Dependensi, Asosiasi, Agregasi, Komposisi, Generalisasi, Realisasi.
Masing-masing dari hubungan relasi memiliki tingkatan yang berbeda. Mulai dari
hubungan class yang lemah, hubungan class yang kuat sampai dengan hubungan base
class dengan class turunannya. Class yang menjalin hubungan relasi, akan menciptakan
populasi objek yang beragam dengan data-data yang akan menjadi lebih komplek dan
mendalam.
Hubungan Dependensi
Dependensi merupakan hubungan antara dua class yang paling lemah. Hubungan
ini adalah hubungan ketergantungan yang sepihak, hanya terjalin jika salah satu class
membutuhkan class lain.
Hubungan dependensi terjadi didalam metode dan hadir sebagai tipe dari sebuah
parameter. Jika ada sebuah class dengan nama Transaksi yang memiliki metode, dimana
metode tersebut memiliki sebuah parameter dengan tipe class Dishes (class lain) , maka
class Transaksi akan dinyatakan memiliki hubungan dependensi dengan class Dishes.
Hubungan dependensi dikatakan hubungan lemah dikarenakan class Transaksi
hanya membutuhkan class Dishes ketika metode yang yang memuat dependensi
dipanggil. Ketika metode pada class Transaksi dipanggil, tidak ada jaminan bahwa class
Dishes yang berelasi sudah diinstansikan. Hubungan dependensi rentan terjadinya
kesalahan "object-null-reference" apabila class yang direlasikan tidak diinstansikan atau
daur hidup objeknya sudah dibersihkan oleh "Garbage Collector"(GC).
Hubungan Asosisasi
Asosiasi merupakan hubungan yang biasa dikatakan "menggunakan" (uses).
Setingkat diatas dependensi, Hubungan asosiasi masih dikatakan lemah. Kesalahan
"object-null-reference" masih terjadi pada hubungan ini.
Hubungan asosiasi ditandai dengan adanya sebuah atribut dengan tipe class yang
bersarang pada class lain. Class Transaksi memiliki sebuah atribut dengan tipe yang
bukan primitif. Tipe tersebut adalah sebuah class dengan nama Dishes. Dapat dikatakan,
bahwa class Transaksi menggunakan class Dishes dalam daur hidupnya. Kata
menggunakan tersebut diartikan class Transaksi menjalin hubungan asosiasi terhadap
class Dishes.
Sama halnya dengan hubungan dependensi. Hubungan asosiasi tidak menjamin
class yang berelasi sudah diinstansikan. Class Transaksi ketika menjalin hubungan
asosiasi dengan class Dishes, maka class Dishes harus diinstansikan terlebih dahulu untuk
menghindari kesalahan. Sebab class Transaksi tidak menjamin apakah class Dishes sudah
melakukan instansi atau belum.
Dalam bahasa Csharp, asosiasi digunakan pada properti (getter-setter). Perbedaan
antara dependensi dan asosiasi adalah dependensi hanya terjadi dimetode dan hadir
sebagai parameter dengan kata lain hubungan terjadi apabila metode tersebut dipanggil.
Sedangkan asosiasi hadir sebagai atribut atau properti, ketika objek sudah diinstansikan
maka atribut atau properti tersebut sudah langsung menjalin relasi. Atribut dan properti
tersebut dapat digunakan disemua metode yang ada pada class.
Penerapan hubungan asosiasi kemudian dibagi menjadi 2 hubungan baru. Yaitu
agregasi dan komposisi. Dua hubungan baru ini memiliki kekuatan ikatan yang melebihi
dari asosiasi dan dependensi.
Hubungan Agregasi
Perluasan dari hubungan asosiasi. Agregasi berarti "memiliki" (has). Kesalahan
"object-null-reference" pada hubungan ini, mulai diperkecil. Hubungan ini akan meminta
class yang berelasi untuk melakukan instansi. Jelas hubungan memiliki ikatan relasi yang
lebih baik dari pada asosiasi.
Hubungan agregasi serupa dengan asosiasi, yaitu memiliki sebuah atribut dengan
tipe dari class lain. Namun hubungan diperkuat dengan adanya dependensi pada
konstruktornya. Keberadaan dependensi pada konstruktor menyebabkan ketika class
diinstansikan, maka class tersebut akan meminta sebuah objek yang sudah diinstansikan.
Class Transaksi ketika membuat sebuah atribut dengan tipe class Dishes, maka
akan menandakan hubungan asosiasi. Namun ketika konstruktor class Transaksi memiliki
sebuah parameter dengan tipe class Dishes (dependensi), maka hubungan agregasi akan
terbentuk.
Setiap kali class Transaksi diinstansikan kedalam objek, maka proses instansi akan
menginginkan adanya objek dari class Dishes untuk diikut sertakan sebagai argumen dari
proses instansi. Hubungan ini dinyatakan kuat karena dapat mengurangi kemungkinan
terjadinya kesalahan "object-null-reference".
Meskipun hubungan ini kuat, namun hubungan masih dapat dikatakan lemah. Daur
hidup dari objek Transaksi berbeda dengan daur hidup objek Dishes. Ketika daur hidup
objek Transaksi selesai dan dibersihkan, Daur hidup dari objek Dishes masih dapat hidup
dan aman dari proses pembersihan. Dengan kata lain objek dari class Dishes tidak
dipengaruhi oleh daur hidup objek dari class Transaksi.
Hubungan Komposisi.
Peningkatan dari hubungan asosiasi. Komposisi menghadirkan sebuah hubungan
relasi yang sangat kuat. Dalam artian atribut class lain yang digunakan aman dari
kesalahan "object-null-reference". Komposisi diartikan "Pasti memiliki" (Own). Dalam
hubungan relasi komposisi, tambahan dependensi sudah tidak lagi dibutuhkan. Berbeda
dari agregasi yang memanfaatkan dependensi untuk memperkuat hubungannya.
Hubungan asosiasi dan agregasi memiliki atribut dengan tipe dari class lain,
namun proses instansi masih dilakukan diluar lingkup class. Sedangkan hubungan
komposisi akan langsung melakukan proses instansi terhadap setiap atribut dengan tipe
dari class lain langsung didalam lingkup classnya. Hal inilah yang akan membuat
komposisi menjadi hubungan yang kuat.
Contoh diatas memperlihatkan class Transaksi memiliki sebuah atribut dengan tipe class
Dishes. Komposisi terbentuk ketika atribut tersebut langsung diinstansikan didalam
konstruktor default yang dimiliki class Transaksi. Objek yang diinstansikan dari clas
Transaksi akan langsung memiliki objek Dishes yang sudah terinstansi dan siap
digunakan tanpa adanya ancaman kesalahan "object-null-reference".
Proses instansi internal yang dilakukan komposisi dapat ditempuh dengan 2 cara:
Pertama dengan melakukan instansi didalam tubuh konstruktor default. Kedua dengan
melakukan instansi langsung ketika atribut atau properti dideklarasikan.
Hubungan komposisi akan menghilangkan keraguan programer akan hubungan
objek yang null. Komposisi lebih baik digunakan untuk menangani ketergantungan penuh
antara class dengan class yang lain. Namun perlu diperhatikan, ketika objek dengan
hubungan komposisi diinstansikan maka otomatis menciptakan dua objek bahkan lebih
tergantung dari berapa banyak atribut class lain yang digunakan. Dan ketika daur hidup
objek selesai, maka semua objek yang dikomposisikan akan ikut menghilang
Berikut contoh lengkap dari 3 buah class dengan dengan 2 hubungan relasi
(komposisi dan dependensi) yaitu class Dishes, Transaction, dan Process.
Akan menjadi sebuah tugas dan pertimbangan yang matang dari seorang
programmer untuk memilah-milah kebutuhan akan hubungan relasi yang harus dibuat
untuk menghubungkan antara class-class yang tersedia. Setiap hubungan memiliki
keuntungan dan kelemahan yang perlu dipertimbangkan demi menjaga performa dari
program yang akan dihasilkan.
Semakin lemah hubungan maka akan semakin tinggi peluang terjadinya kesalahan,
namun hubungan ketergantungan yang lemah akan membuat penggunaan objek lebih
sedikit dan lebih fleksibel. Sedangkan semakin kuat hubungan maka akan semakin rendah
peluang terjadinya kesalahan dan pastinya beban memori bertambah karena objek yang
diinstansikan akan lebih banyak dan tidak fleksibel.
Selain 4 hubungan yang sudah dibahas, Masih terdapat 2 hubungan yang jauh lebih
kuat. Hubungan ini dikenal dengan nama “Generalisasi” dan “Realisasi”. Hubungan ini
akan dibahas lebih dalam pada pembahasan selanjutnya.
Comments
Post a Comment