Pemrograman berorientasi objek diciptakan
untuk mempermudah pengembangan program dengan cara mengikuti model yang telah
ada dalam kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan
nyata, segala bagian (entiti) dari suatu permasalahan adalah objek. Objek-objek
ini kemudian juga dapat berupa gabungan dari beberapa objek yang lebih kecil.
Sebagai contoh, tengoklah sebuah mobil. Mobil adalah sebuah objek dalam
kehidupan nyata. Namun mobil sendiri terbentuk dari beberapa objek yang lebih
kecil seperti roda ban, mesin, jok, dll. Mobil sebagai objek yang merupakan
gabungan dari objek yang lebih kecil dibentuk dengan membentuk hubungan antara
objek-objek penyusunnya. Begitu juga dengan sebuah program. Objek besar dapat
dibentuk dengan menggabungkan beberapa objek-objek dalam bahasa pemrograman.
Objek-objek tersebut berkomunikasi dengan saling mengirim pesan kepada objek
lain.
Konsep-konsep pemrograman berorientasi
objek dalam Java secara umum sama dengan yang digunakan oleh bahasa-bahasa
lain. Jadi kebanyakan konsep yang kita bahas juga terdapat dalam bahasa selain
Java. Namun, terkadang terdapat perbedaan-perbedaan kecil antara penerapan
konsep-konsep tersebut dalam masing-masing bahasa. Perbedaan-perbedaan ini juga
akan dijelaskan seiring penjelasan masing-masing konsep.
Dalam penjelasan mengenai analogi, kita
sudah menyinggung mengenai objek. Sekarang kita akan mengupas lebih dalam
tentang objek sebagai konsep kunci dari pemrograman berorientasi objek.
Baik dalam dunia nyata atau dalam sebuah
program, sebuah objek memiliki dua karakteristik, yaitu state dan behaviour.
State adalah keadaan dari sebuah objek, seperti mobil memiliki state warna,
model, tahun pembuatan, kondisi, dll. Sedang behaviour adalah kelakuan dari
objek tersebut, seperti mobil dapat melaju, membelok, membunyikan klakson, dll.
Objek menyimpan statenya dalam satu atau lebih variabel, dan
mengimplementasikan behaviournya dengan metode. Dengan penjelasan di atas,
dapat disimpulkan bahwa objek adalah bagian software yang dibentuk dengan
variabel-variabel dan metode-metode yang berhubungan dengan variabel tersebut.
Dengan karakteristik tersebut, kita dapat
memodelkan berbagai objek dalam kehidupan nyata ke dalam objek-objek dalam
sebuah program. Lebih lanjut kita dapat memodelkan objek-objek abstrak ke dalam
sebuah program. Contoh umum untuk konsep abstrak seperti ini adalah objek Event, yaitu objek untuk mewakili peristiwa klik atau tombol ditekan.
Sebuah objek yang dibentuk dari sebuah
kelas biasa disebut instans dalam terminologi OOP. Artinya objek tersebut
adalah wujud nyata dari sebuah kelas. Variabel dan metode dari instans ini
disebut variabel instans dan metode instans.
Setiap instans menyimpan variabelnya sendiri-sendiri, jadi nilai variabel untuk
tiap instans bisa berbeda.
Objek-objek yang bekerja sama membentuk
suatu sistem harus saling berkomunikasi untuk menjalankan sistem tersebut.
Dalam sebuah program, objek-objek berkomunikasi satu sama lain dengan
mengirimkan pesan. Sebagai contoh, jika sebuah objek ingin memanggil metode
dari objek lain, maka objek ini akan mengirimkan sebuah pesan yang meminta
objek tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi
informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan
permintaan tadi.
Sebuah pesan dibentuk oleh informasi
berikut ini: 1) objek yang dituju; 2) nama metode yang ingin dipanggil; 3)
parameter yang dibutuhkan metode tersebut. Misalnya:
anotherObject.aMethod(parameter1);
Bila sebuah objek ingin memanggil metode
miliknya sendiri, maka informasi pertama adalah dirinya sendiri. Untuk menunjuk
diri sendiri dalam Java digunakan kata kunci this. Maka contoh sebelumnya akan menjadi:
this.aMethod(parameter1);
Atau kita dapat menghilangkan informasi
pertama sehingga menjadi:
aMethod(parameter1);
karena bila informasi pertama tidak ada,
kompiler akan secara otomatis menunjuk ke objek itu sendiri.
Ada dua keuntungan dalam penggunaan pesan,
yaitu: 1) semua kebutuhan interaksi antarobjek dapat dilakukan; 2) objek-objek
yang saling berinteraksi tidak harus berada dalam satu proses atau bahkan dalam
satu komputer.
Kelas adalah semacam cetakan, atau
template, untuk membuat objek. Ibaratkan sebuah rancangan rumah yang digunakan
untuk membangun ratusan rumah. Rumah yang dibangun tersebut adalah objek dari
kelas rancangan rumah. Hal ini dapat dilakukan karena semua objek rumah yang
dibangun memiliki karakteristik yang sama, sehingga dapat dibuatkan semacam
blueprintnya. Tetapi objek-objek yang dibangun tetap akan memiliki bentuk
fisik tertentu sendiri-sendiri, seperti variabel dalam sebuah program, atau
pintu sebuah objek rumah. Dengan penjelasan ini, kelas dapat kita definisikan
kembali menjadi sebuah blueprint, atau prototipe, yang mendefinisikan variabel
dan metode yang sama untuk semua objek sejenis.
Sebagai contoh, misalkan kita ingin
membuat kelas Rumah, maka kita harus membuat sebuah kelas
yang mendefinisikan semua variabel yang dimiliki objek dari kelas tersebut.
Selain itu, kelas tersebut juga harus mendeklarasikan metode-metode yang
dimiliki objek dari kelas dan juga membuat implementasi dari metode tersebut. Dengan
adanya kelas ini, kita dapat membuat sebanyak apapun objek-objek rumah yang
sejenis, yaitu jenis yang didefinisikan oleh kelas Rumah. Setiap objek Rumahdiciptakan, sistem akan mengalokasikan
sejumlah memori untuk objek tersebut dan variabel-variabelnya. Dengan begitu
setiap objek akan memiliki salinan masing-masing untuk setiap variabel instans.
Setelah mengenal konsep kelas, saatnya
Anda dikenalkan dengan variabel kelas. Variabel kelas sebenarnya
sama dengan variabel instans. Bedanya adalah, setiap objek berbagi satu dan
hanya satu variabel kelas, tapi masing-masing memiliki salinan dari variabel
instans. Misalkan kelas Rumah yang kita buat hanya akan mendukung
2 lantai, dan setiap objek Rumah terdiri atas 2
lantai. Maka informasi ini cukup disimpan satu kali, karena nilainya tidak
berbeda untuk semua objek. Lebih jauh, bila ada satu objek yang mengubah nilai
dari variabel kelas, maka semua objek sejenis lainnya akan mengikuti perubahan
itu. Di samping variabel, terdapat juga metode kelas. Metode jenis
ini dapat langsung dipanggil melalui kelas dan bukan dari instans kelas
tersebut.
Terminologi asing untuk pewarisan adalah inheritance.
Mungkin dalam literatur lain Anda akan sering menjumpai istilah ini. Secara
gamblang, pewarisan berarti sebuah kelas mewarisi state dan behaviour dari
kelas lain. Sebagai contoh, sebuah kelasRumahMewah akan mewarisi
state dan behaviour dari kelas Rumah. Begitu juga dengan
kelas RumahSederhana. Kelas RumahMewah dan RumahSederhana disebut subkelas,
atau kelas anak, dari kelas Rumah, yang disebut
superkelas, atau kelas induk.
Seluruh subkelas akan mewarisi (inherits)
state dan behaviour dari superkelasnya. Dengan begitu, semua subkelas dari
superkelas yang sama akan memiliki state dan behaviour yang sama. Namun,
masing-masing subkelas bisa menambah sendiri state atau behaviournya. Misalkan,
pada kelas Rumah tidak terdapat variable kolamRenang, namun subkelas RumahMewah memiliki variabel tersebut. Contoh
lain misalnya kelas Rumah tidak memiliki metode nyalakanAlarm, namun rumah mewah memiliki metode itu.
Dalam kasus tertentu subkelas mungkin
memiliki implementasi behaviour yang berbeda dengan superkelasnya. Hal seperti
ini disebut override. Contohnya subkelas SepedaBalap memiliki implementasi metode ubahGigi yang berbeda
dengan implementasi metode tersebut pada superkelas Sepeda.
Tingkat pewarisan tidak hanya terbatas
pada dua tingkatan. Dari contoh di atas, kita bisa saja membuat subkelas dari
kelas SepedaBalap, dan seterusnya. Kita bisa terus
memperpanjang tingkat pewarisan ini sepanjang yang kita butuhkan. Dengan
begitu, subkelas-subkelas yang dibuat akan lebih khusus dan lebih
terspesialisasi. Namun terdapat batasan pewarisan dalam Java yang disebut
single inheritance. Artinya sebuah kelas hanya dapat mewarisi sifat dari satu
dan hanya satu superkelas saja. Dalam beberapa bahasa pemrograman berorientasi
objek lain, yang berlaku adalah multiple inheritance. Artinya sebuah kelas
dapat mewarisi sifat dari beberapa superkelas sekaligus.
Dalam Java, terdapat kelas Object yang merupakan superkelas dari semua kelas dalam Java, baik yang
builtin ataupun yang kita buat sendiri, lansung maupun tidak langsung. Karena
itu sebuah variabel bertipe Object akan dapat
menyimpan referensi ke objek apapun dalam bahasa Java. Kelas Object ini memiliki behaviour yang dibutuhkan semua objek untuk dapat
dijalankan di Java Virtual Machine. Sebagai contoh, semua kelas mewarisi metode toString dari kelas Object, yang mengembalikan representasi String dari objek tersebut.
Manfaat penggunaan konsep pewarisan antara
lain: pertama, kita dapat menggunakan kembali kelas-kelas yang kita buat
(sebagai superkelas) dan membuat kelas-kelas baru berdasar superkelas tersebut
dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki
superkelas. Kedua, kita dapat membuat superkelas yang hanya mendefinisikan
behaviour namun tidak memberi implementasi dari metode-metode yang ada. Hal ini
berguna jika kita ingin membuat semacam template kelas. Kelas semacam ini disebut
kelas abstrak, karena behaviournya masih abstrak dan belum diimplementasikan.
Subkelas-subkelas dari kelas semacam ini, yang disebut kelas konkret,
mengimplementasikan behaviour abstrak tersebut sesuai dengan kebutuhan
masing-masing.
Sedikit penjelasan mengenai kelas abstrak,
kelas ini bisa memiliki hanya satu atau lebih metode abstrak. Subkelas dari
kelas ini bertanggung jawab untuk memberikan implementasi untuk metode-metode
abstrak tersebut. Sebagai akibat dari keberadaan metode abstrak ini, kelas abstrak
tidak dapat diinstanskan (dibuatkan instansnya) atau digunakan untuk
menciptakan sebuah objek dari kelas tersebut.
Arti harfiah dari interface adalah
antarmuka, yaitu suatu alat untuk digunakan benda-benda yang tidak terhubung
secara langsung untuk berinteraksi. Dalam bahasa pemrograman, interface
digunakan oleh berbagai objek yang tidak terhubung untuk saling berinteraksi.
Jadi dalam bahasa pemrograman, interface dapat didefinisikan sebagai koleksi
definisi metode-metode dan variabel-variabel konstan, namun tanpa implementasi.
Implementasi akan dilakukan oleh kelas-kelas yang mengimplements interface ini.
Tanpa implementasi di sini tidak seperti pada kelas abstrak yang merupakan
metode-metode yang tidak melakukan apa-apa, melainkan hanya sekedar nama metode
saja.
Sebelumnya telah dijelaskan bahwa sebuah
kelas tidak dapat menjadi subkelas dari beberapa superkelas, melainkan hanya
bisa menjadi subkelas dari satu superkelas saja. Hal ini membuat desain program
lebih rapi dan teratur, sehingga dapat mengurangi kompleksitas program. Namun,
terkadang hal ini dapat menjadi suatu halangan yang tidak menyenangkan, yaitu
saat kita membutuhkan suatu kelas yang memiliki sifat-sifat dari dua atau lebih
kelas lain. Pada masalah seperti ini, interface dapat memberikan alternatif jalan
keluar.
Dengan adanya interface maka beberapa
kelas akan dapat menangani interaksi yang sama namun dengan behaviour yang bisa
berbeda. Misalnya beberapa kelas mengimplementasi sebuah interface yang sama,
maka kelas-kelas tersebut dapat menangani interaksi sesuai interface tersebut,
namun tiap kelas dapat memiliki implementasi yang berbeda-beda.
Begitu juga bila sebuah kelas
mengimplementasi banyak interface, maka kelas tersebut akan dapat menangani
interaksi-interaksi sesuai salah satu interface yang diimplement oleh kelas
tersebut. Namun, kelas tersebut harus mengimplementasi sendiri behaviournya. Di
sinilah letak perbedaan penggunaan interface dengan multiple inheritance. Dalam
multiple inheritance, layaknya single inheritance, subkelas tidak harus mengimplementasikan
sendiri behaviournya karena secara default kelas tersebut akan mengikuti
behaviour superkelasnya.
Tutorial kali ini memang hanya membahas
konsep, jadi wajar bila anda merasa tutorial kali ini terlalu teoritis. Namun
jangan kecewa dulu, karena di tutorial berikutnya kita akan membahas lebih jauh
mengenai kelas dan objek, interface, pewarisan, dan metode dalam bahasa Java.
Sambil menunggu anda punya banyak waktu untuk memahami konsep yang dibahas di
atas.
Sumber : http://www.master.web.id/mwmag/issue/06/content/tutorial-java-3/tutorial-java-3.html
Berikut Contoh Program
Artikel kali ini saya ingin masih seputar Pemrograman Java dengan
Netbeans. saya ingin menampilkan sebuah program cara menghitung luas lingkaran
dan keliling lingkaran, mungkin sangat simpel tapi mudah2an bermanfaat untuk
sobat-sobat sekalian yang saat ini sedang belajar pemrograman Java...
Saat saya membuat
program sederhana ini saya memakai Netbeans 7.2.1
Saya asumsikan
anda sudah bisa membuat project di Netbeans sehingga saya tidak perlu terlalu
detail dalam menjelaskannya hehehe...udah banyak tutorial tentang Java...lihat
aja blog tetangga sebelah, gpp ga bayar ko :)
Langkah pertama
adalah buatlah sebuah Project di Netbeans anda (Terserah nama Projectnya)
Kemudian buatlah
sebuah Class bernama Lingkaran
Cobalah sobat
membuat coding seperti berikut ini, harus sama ya, supaya nanti hasilnya sesuai
dengan apa yang kita inginkan :
Setelah
sobat selesai membuat coding tersebut coba jalankan dengan tekan Shift+F maka
hasilnya akan seperti gambar dibawah ini :
Demikian tutorial bagaimana cara
menghitung luas dan keliling sebuah lingkaran, semoga artikel yang sederhana
ini bermanfaat buat sobat sekalian.....sampai ketemu lagi ya pada tutorial
berikutnya.... :)