Konsep OOP
Pemrograman berorientasi objek (OOP) ialah sebuah metode pemrograman
berbasiskan hirarki kelas-kelas dan melibatkan objek. Pemrograman Berorientasi
Objek merupakan fitur utama pada Java dimana syarat utamanya kita harus membuat
program berupa kelas . Sebuah kelas
ialah sebuah struktur yang mendefinisikan data dan method untuk bekerja
pada data tersebut. Ketika kita membuat
program OOP di java, semua data diselubung oleh sebuah kelas. Di dalam kelas
kita mendeklarasikan berbagai variabel/properties dan method.
Konsep Dari Java
Java adalah bahasa pemrograman yang lagi naik daun, kepopulerannya sudah
melampui bahasa C.
Hal itu terjadi karena java memiliki beberapa kelebihan :
- Aplikasi yang dibuat dengan mengunakan java dapat dijalankan di berbagai OS yang didalamnya sudah terdapat Java Virtual Machine (JVM).
- Bahasa kerennya Write Once Run Any WhereMendukung pemrograman berorientasi object (Fully support OOP). Banyak referensi-referensi untuk belajar java, termasuk juga komunitas developer java diinternet.
- Banyak contoh program atau pun library yang siap pakai dan dapat digabungkan dengan program yang kita buat
- Gratis / Free
Konsep OOP Yang Di
Terpkan 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 sendiri-sendiri, 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 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.
2 komentar:
wuidihhh mas bro uda kelar aja nich mantapssss
daku saja belum ngerjain masih mikirn konsepnya hahahahahaha d(^o^")
wah lengkap ya bro d(^o^") tambahi sedikit gambar biar sedikit lebih manis bro hehee
Posting Komentar