Konsep OOP di Java

Konsep OOP di Java
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.

Objek
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 sendirisendiri, jadi nilai variabel untuk tiap instans bisa berbeda.

Message (Pesan)
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
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 Rumah diciptakan, 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.

Pewarisan
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 kelas RumahMewah 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.

Interface
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 kelaskelas 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.