Download - Polymorphism Aggregation
AGGREGATION & POLYMORPHISM
Pada pertemuan-pertemuan lalu kita sudah belajar bahwa setiap dua atau lebih objek (atau
class) bisa mempunyai hubungan satu sama lain. Hubungan tersebut bisa terjalin, karena didasarkan
dengan adanya pertukaran pesan (reference) yang terjadi. Ada hubungan yang berupa penurunan
sifat searah, ada yang berupa penurunan sifat dari berbagai class lain, dan ada juga hubungan
terhadap class yang abstrak.
Untuk pertemuan kali ini, kita akan membahas mengenai dua konsep hubungan dari
keterkaitan antar berbagai objek (atau class). Konsep-konsep tersebut adalah:
• Aggregation (agregasi) / Composition (komposisi)
• Polymorphism
Aggregation
Jika dalam basis data kita mengenal konsep one-to-many, maka di dalam Java OOP kita
mengenal apa yang disebut sebagai aggregation, di mana kedua konsep tersebut sebenarnya
memiliki maksud yang sama. Aggregation adalah hubungan yang dapat terjadi antar objek yang
bersifat whole-part. Maksudnya adalah, suatu objek dapat berisi atau memiliki objek-objek yang
lainnya, di mana masing-masing objek tersebut dapat memiliki atribut dan methodnya masing-
masing.
Misalnya, sebuah objek mobil dapat terdiri dari beberapa objek lain, seperti: roda, mesin,
spion. Di mana, pengujian dari hubungan semacam ini bisa dilakukan dengan kata “HAS A” (misal:
mobil HAS A mesin, mobil HAS A roda).
Hubungan aggregation (mobil – mesin – roda) di atas dapat dinyatakan dalam bentuk class
diagram semacam ini :
Untuk cara penggunaannya, kita lihat contohnya langsung saja dalam listing program berikut
ini :
1. Pada contoh kali ini kita bertujuan akan membuat suatu objek mobil, di mana objek
mobil tersebut mempunyai 2 objek lain yang melekat kepadanya, yaitu roda dan mesin.
Sehingga, pertama-tama yang harus kita lakukan adalah membuat dahulu class-class
yang nanti objeknya akan mempunyai hubungan yang bersifat whole-part dari class lain.
Misalnya adalah class roda dan class mesin merupakan whole-part dari class mobil.
2. Buat class yang menjadi class yang akan menggunakan objek dari kedua class di atas,
misal class mobil. Di mana class mobil tersebut tentu saja mempunyai method dan
atribut yang berbeda dari kedua class sebelumnya.
3. Lalu terapkan konsep aggregation dalam ketiga class yang telah dibuat tersebut, dengan
cara membuat objek dari class roda dan class mesin di dalam badan program class
mobil.
4. Buat class tester-nya dan buat objek dari class mobil.
5. Berikan nilai pada setiap atribut yang ada, melalui mutator yang sudah disediakan.
6. Cetak hasilnya!
(clue: pengambilan nilai kembalian bisa dilakukan dengan cara seperti ini)
Suatu class dikatakan memiliki hubungan aggregation (agregasi) apabila class tersebut
berisi sebuah objek dari class lain. Agregasi secara umum menunjukkan suatu hubungan one-to-
many atau dikenal dengan istilah whole-part.
Sama seperti konsep inheritance, abstract class, dan interface, aggregation juga mempunyai
keuntungan reusability dengan menerapkannya. Namun ada yang membedakan dari ketiga konsep
yang telah kita pelajari sebelumnya dengan aggregation, yaitu pada ketiga konsep sebelumnya
semua hubungan terjadi pada tingkat class, namun ini tidak berlangsung pada konsep aggregation.
nama class menjadi “tipe
data” dari variabel objek di
class lainnya
Dari variabel yang sudah
dideklarasikan, dibuat
objeknya secara langsung
pada class yang bersangkutan
Pada konsep aggregation semua hubungan berlangsung pada tingkatan objek (bisa dilihat dari code
pada langkah 3 di atas).
Analisa kasus :
• Dari kasus mobil – roda – mesin di atas, apakah kondisi hubungan tersebut merupakan
sebuah keharusan ada? Dalam kata lain, apakah sebuah objek mobil akan yang tidak
mempunyai ban dan mesin bisa tetap menjadi sebuah objek mobil?
• Jika merupakan suatu keharusan, coba cari contoh kasus lain yang bukan? Begitu pula
sebaliknya?
Composition
Composition sebenarnya hanyalah merupakan suatu bentuk khusus dari aggregation. Di
mana yang membedakan adalah, dalam konsep composition suatu bagian dari class tidak dapat
berdiri sendiri tanpa adanya class lain.
Misalnya, sebuah objek buku harus terdiri dari objek seperti : kertas_halaman, dan sebuah
objek buku dapat terdiri dari : kertas_sampul dan tali_pembatas_buku (lihat perbedaannya antara
dapat dan harus). Pengujian dari hubungan semacam ini tetap bisa dilakukan dengan kata “HAS A”.
Hubungan aggregation (mobil – halaman – sampul) di atas dapat dinyatakan dalam bentuk
class diagram semacam ini :
Suatu class dikatakan memiliki hubungan composition (komposisi) apabila class tersebut
berisi sebuah objek dari class lain, DAN class tersebut tidak dapat berdiri sendiri tanpa adanya
class lain.
Untuk latihan :
1. Buat source code dari class diagram berikut :
Perhatikan
perbedaannya
dengan diagram
composition...
dengan :
• NIP bertambah sesuai bertambahnya objek dari class Pekerja.
• Membuat juga class testernya, di mana di dalam class tester tersebut akan dilakukan
pembuatan objek dari class SerikatPekerja.
• Lakukan proses pencetakan data dalam class tester-nya.
2. Buat program dari contoh kasus class DektopPC, di mana dari suatu DekstopPC bisa memiliki
objek-objek dari class lain berupa :
a. 1 buah processor
b. 2 buah RAM
c. 1 buah harddisk
(dari kesemua class tersebut, class manakah yang memungkinkan mempunyai hubungan
composition?)
Polymorphism
Polymorphism refers to the ability of two or more objects belonging to different classes to
respond to exactly the same message (method call) in different class-specific ways (Apress –
Beginning Java Objects). Dari pengertian tersebut, polymorphism dapat didefinisikan dengan
penggunaan lebih dari satu method dengan nama yang sama (pembedanya adalah berdasarkan
jumlah dan jenis parameter yang didefinisikannya).
Polymorphism bisa dibangun dengan menerapkan :
• Overiding : mendefinisikan method dengan nama sama pada class yang berbeda
• Overloading : mendefinisikan method dengan nama sama dalam satu class.
Konsep overloading, sudah sering kita gunakan dalam penggunaan constructor. Sedangkan
konsep overiding, dapat kita manfaatkan dalam beberapa kasus inheritance, di mana menginginkan
penamaan method dengan nama sama namun berbeda dalam impelementasinya, atau dalam kata
lain dalam penggunaan interface.
..... namun polymorphism tidak hanya berperan hingga sebatas ini saja .....
Dari pengertian lain, polymorphism is a special property of Java wherein it can automatically
apply the proper methods to each object regardless of what sub class the object came from (JEDI –
Student’s Manual). Dijelaskan dari pengertian tersebut bahwa, polymorphism dapat berperan untuk
penerapan reusability lebih mudah ketika menerapkan proses penurunan class. Atau dengan kata
lain, dengan polymorphism, reference type dapat merupakan superclass dari object type yang
digunakan :
Semisal kita mempunyai superclass Animal, di mana superclass tersebut memiliki beberapa
subclass, yaitu class Dog, Cat, dan Horse. Biasanya kita membuat objek dengan cara semacam ini :
( dengan deklarasi semacam ini akan menghasilkan
objek Dog dari reference variable class Dog )
Namun dengan polymorphism, kita bisa mengubah proses pembuatan objek yang
merupakan dari subclass-nya menjadi :
( dengan deklasrasi semacam ini akan menghasilkan
objek Dog dari reference variable class Animal )
Analisa kasus :
• Lalu apa bedanya dengan cara deklarasi yang biasa kita gunakan?
• Apa gunanya deklarasi dengan cara semacam ini?
Memang tidak terlalu terlihat kemudahannya, tapi kalau kita memanfaatkannya secara
berkali-kali, atau dengan penggunaan array, maka hasilnya adalah :
Jika kita menggunakan konsep polymorphism dengan cara semacam ini, terlihat
keuntungannya bahwa kita tidak perlu mendeklarasikan setiap objek untuk menerapkan method dari
class Animal dengan lebih leluasa.
Deklarasi array dalam Java
Untuk latihan : Coba buat program dari class utama Animal (seperti contoh di atas), dengan
ketentuan :
• Ada 4 buah class : Animal, Dog, Cat, dan Wolf.
• Class Animal mempunyai method : eat( ) dan roam( ).
• Misal :
• Class Dog, Cat, dan Wolf cukup melakukan override method terhadap class Animal.
• Buat class tester-nya (bisa memanfaatkan array ataupun tidak).
..... sudah cukup reusable? Meskipun Anda telah merasa sudah cukup,
namun polymorphism masih bisa melakukan peranannya secara lebih .....
• Dari listing program yang telah dibuat sebelumnya (Animal), coba buat satu class lagi,
sebagai berikut :
• Kemudian ubah class tester-nya sebagai berikut :
• Amati apa yang terjadi....
Dari listing program di atas, bisa lebih terlihat dari kegunaan polymorphism dalam
penerapannya secara Object Oriented. Dalam kasus dunia nyata, jika kita bekerja sebaga tim, kita
bisa mempercayakan proses pembuatan berbagai class kepada teman satu tim kita dengan
mudahnya, jika class tersebut telah merupakan subclass dari superclass yang menjadi class utama
dalam pembuatan program tersebut, namun proses tersebut tidak perlu mengubah class-class yang
telah kita buat sebelumnya.
Untuk latihan :
1. Bisa kalian latihkan dari contoh latihan-latihan pada modul 4 : INHERITANCE atau modul 5 :
ABSTRACT & INTERFACE (karena pada dasarnya konsep polymorphism merupakan
kompleksitas dari konsep hubungan yang dapat terjadi antara subclass dan superclass-nya).
2. Tambahan kasus soal turunan :
a. Superclass : GamingConsole.
b. Subclass : HomeGamingConsole, PortableGamingConsole.
c. Objek : XBOX, WII ; PSP, NDS.