Pemprograman Berorientasi Objek dengan Bahasa Java
Konsep pemprograman berorientasi objek sampai saat ini masih merupakan sebuah paradigma pemprograman yang sangat powerfull.
Dalam tulisan ini saya akan memaparkan sedikit apa yang saya ketahui
tentang Pemprograman berorientasi objek berdasarkan apa yang telah saya
pelajari dari beberapa literatur maupun perkuliahan yang pernah saya
ikuti. Sebelum membahas beberapa konsep pemprograman dan paradigmanya, ada baiknya kita tahu sedikit sejarahnya serta mengapa perlu mendalaminya..
Pada pembahasan konsep pemprograman berorientasi objek ini, kenapa menggunakan bahasa JAVA?!Nanti akan sama2 kita bahas..
Pada
tulisan ini saya sertakan beberapa contoh source code sederhana untuk
memudahkan pemahaman mengenai konsep-konsep yang ada pada pemprograman
berorientasi objek. Untuk itu bagi yang mau mencobanya dan belum punya
tools-nya silakan diikuti langkah instalasinya terlebih dulu..!!( BACA TULISAN INSTALASI JAVA)
Sejarah singkat
Pemprograman berorientasi objek dalam bahasa inggrisnya dinamakan Object Oriented Programming atau sering disingkat OOP. OOP ini mulai dikenalkan sekitar
pertengahan tahun 60-an dengan bahasa SIMULA . SIMULA sendiri merupakan
sebuah pemprograman yang biasanya dipakai untuk Simulasi, yakni untuk
pemodelan suatu entitas/sistem. SIMULA mempunyai kemiripan sintak dengan
PASCAL tetapi dalam perancangannya programmer berfikir sedikit lebih
berbeda. Ide dasar yang diperkenalkan waktu itu adalah inheritance
(pewarisan) dan juga sudah mengenal konsep objek pada sistem yang
dimodelkan. Beberapa objek yang dikumpulkan dinamakan “Class” dan tugas
programmer SIMULA tersebut adalah menentukan bagaimana behavior dari class tersebut.
Kemudian
pada era 70-an, bahasa pemprograman yang mengadopsi konsep OOP yaitu
SMALLTALK yang dikembangkan Xerok PARC. Meskipun pengembang perangkat
lunak tidak secara intensif mengembangkan OOP, tetapi konsep OOP tetap
digunakan dan dianggap powerful hingga sekarang.
Selanjutnya
pertengahan 80-an, bahasa pemprograman OOP; seperti C++ menjadi populer
dikalangan programmer komputer. Hingga era 90-an ternyata popularitas
OOP berlanjut terus dan mulai banyak pengembang perangkat lunak yang
menggunakan konsep OOP seperti pada Java yang menjadi popular hingga
sekarang. Pada tahun 2000-an, microsoft-pun mulai
memperkenalkan bahasa OOP baru yaitu C# (C-sharp) serta kemudian Visual
Basic 6.0 yang tidak mendukung OOP dikembangkan menjadi VB.NET.
Kenapa JAVA?!
Java merupakan
bahasa pemprograman berorientasi objek yang dikembangkan oleh Sun
Microsystem sejak tahun 1991. Bahasa ini merupakan pengembangan dari
C/C++ dan SmallTalk. Namun bahasa ini dirancang agar lebih mudah dipakai
dan platform independent, yaitu dapat dijalankan di berbagai jenis sistem operasi dan arsitektur komputer . Bahasa ini sering juga bersifat Multiplatform, kelebihan utama dari Java ialah dapat dijalankan di beberapa platform / sistem operasi komputer, sesuai dengan prinsip write once, run every where.
Selain itu Java memiliki beberapa kelebihan lain, diantaranya;
ü memiliki garbage collection yang dapat mendealokasikan memori secara otomatis,
ü Sudah menghilangkan sifat pewarisan berganda yang terdapat pafa C++,
ü Mengurangi pointer aritmetika,
ü Pengaksesan
lokasi memori secara langsung dengan menggunakan pointer sehingga
memungkinkan program untuk melakukan suatu tindakan yang tidak
seharusnya atau tidak boleh dilakukan. Untuk mengurangi kemungkinan
kesalahan seperti ini penggunaan pointer pada Java telah dibatasi dengan
menggunakan reference.
ü Dan kelebihan lainnya.
Untuk
menggunakan Java diperlukan Java Standard Edition (JSE), dimana semua
program dan dokumentasi bisa di-download secara gratis disitus: www.java.sun.com. Berikut langkah tools dan langkah instalasinya(untuk Operating System Windows) :
1. Download Java Standard Edition dari (http://java.sun.com/javase/downloads/)
2. Install Java Standard Edition dengan mengklik jdk-6u6-windows-i586-p.exe
3. Klik start → control panel →system → advanced → environment variables dan set PATH :;C:\Program Files\Java\jdk1.6.0_6\bin
4. Install text editor untuk editing code : notepad, textpad, jcreator, dll
Pemprograman berorientasi objek
Pemprograman berorientasi objek (Object Oriented Programming atau OOP) merupakan suatu konsep yang menyelesaikan masalah pemprograman dengan menggunakan pendekatan objek. Konsep OOP ini merupakan pengembangan dari konsep
pemprograman sebelumnya yang dianggap kurang mampu menyelesaiakan
tingkat pemprograman yang lebih kompleks. yaitu pemprograman fungsional
(berdasarkan urutan fungsi secara sekuensial, seperti : Scheme, Lisp)
dan pemprograman prosedural (berdasarkan prosedural kerja yang terkumpul
dalam unit pemprograman bernama fungsi, seperti: C, Pascal). Pada
pemprograman prosedural program ditulis dalam mode barisan linier yang
bekerja dari atas ke bawah atau program merupakan kumpulan dari tahapan
yang dijalankan setelah yang lain berjalan. Programming jenis ini dapat
bekerja dengan baik untuk program kecil yang berisi code relative
sedikit, tetapi ketika program menjadi besar, maka cenderung sulit untuk
di-manage dan di-debug. Nah, konsep OOP inilah yang bisa mengatasi permasalahan tersebut.
Berikut ini adalah beberapa konsep dan istilah yang ditekankan pada OOP :
ü Objek (Object)
Pada
dasarnya semua benda dalam dunia nyata dapat kita anggap sebagai objek.
Dan apabila kita perhatikan lebih lanjut maka objek itu memiliki
karakteristik, yaitu attribut (keadaan yang ada pada objek) dan behavior (kelakuan yang dimiliki oleh objek).
Contoh sederhana : objek Sepeda Motor
Sepeda motor memiliki attribut : roda, rantai, rem, gir, warna, tahun pembuatan, dll
Sepeda motor memiliki behavior : cara menghidupkan, cara menjalankan, cara membelokkan, cara mengerem , dll
Pemahaman
objek disekitar kita inilah yang dapat mendasari pemahaman mengenai
pemrograman berorientasi objek. Yang paling utama adalah bagaimana
mentransformasikan apa yang kita ketahui tentang suatu objek menjadi
suatu program.
Secara sederhana attribute bisa dikatakan sebagai kata benda karena sifatnya yang pasif, benda tersebut tidak melakukan operasi tetapi justru menjadi target operasi. Sedangkan behaviour bisa disebut sebagai kata kerja, karena ia untuk menujukkan operasi apa yang dilakukan.
Dalam penerapannya pada perangkat lunak berorientasi objek, objek menyimpan attribute dalam variabel dan menyimpan behavior dalam method. Atau bisa dikatakan bahwa attribute adalah berbagai variable yang mengitari class, dengan nilai datanya bisa ditentukan di object. Method adalah implementasi dari bagaimana bekerjanya sebuah class.
ü Abstraksi (Abtraction)
Dalam OOP dikenal istilah ABSTAKSI. Yaitu suatu cara bagaimana kita melihat objek dalam bentuk yang lebih sederhana. Sebagai contoh apabila kita melihat sebuah Sepeda Motor, kita tidak perlu mengetahui susunan komponen mesin dan komponen elektris lainnya yang
sangat kompleks. Namun kita hanya memahami sepeda motor sebagai suatu
entitas/sistem yang memiliki karakteristik tersendiri, yang ketika
dinyalakan bisa digunakan sebagai alat transportasi. Dengan pemahaman
yang sederhana ini maka ketika kita memakai sepeda motor, kita tidak
perlu tahu betapa rumit komponen dan rangkaian yang menyusun sebuah
sepeda motor. Karena yang perlu kita ketahui adalah bagaimana cara
sepeda motor tersebut dikendalikan.
Jadi konsep abstraksi ini kita dapat memandang suatu
entitas/sistem yang kompleks yang terdiri dari subsistem-subsistem yang
rumit dapat dipandang menjadi sebuah paket sistem yang sederhana.
ü Kelas (Class)
Kelas
bisa kita ibaratkan sebagai sebuah cetakan atau prototype untuk membuat
objek. Misal, sebuah cetakan kue yang digunakan untuk membuat ribuan
kue. Kue yang dibuat tersebut adalah objek dari kelas cetakan kue. Hal
ini dapat dilakukan karena semua objek kue yang dibuat memiliki
karakteristik yang sama sehingga dapat dibuatkan blueprintnya.
Kelas vs Objek
Kelas
berbeda dengan objek. Kelas merupakan prototipe yang mendefinisikan
variabel-variabel dan method-method sedangkan objek merupakan
instansiasi dari suatu kelas.
Dalam
dunia nyata, kita sering mempunyai objek yang berjenis sam. Misal;
Sepeda motor yang kita punyai merupakan satu dari banyak sepeda motor di
dunia. Dengan konsep orientasi objek, bisa dikatakan bahwa sepeda motor
tersebut adalah instance dari sebuah class dari objek sepeda motor.
Sepeda motor umumnya memiliki atribute (seperti: roda, rantai, rem, gir) dan behaviour
(seperti: mengerem, ganti gir, dll). Namun setiap sepeda motor adalah
independen atau bebas dan bisa beda dari sepeda motor lainnya. Ketika
membuat sepeda motor, pabrik pembuatnya mengambil keuntungan dari
kenyataan bahwa sepeda motor memiliki karakteristik yang sama, sehingga
untuk membuat sepeda motor bisa mulai dari membuat prototype. Sangat
tidak efisien jika membuat sepeda mtor dengan prototype yang
berbeda-beda untuk setiap sepeda motor.
Class
akan mendefinisikan variabel-variabel instan yang diperlukan untuk
memuat karakteristik-karakteristik dari objek yang bersangkutan. Class
akan dideklarasikan dan menyediakan beberapa method-method instan yang
memungkinkan pengendara sepeda motor tersebut mengubah gir, rem, dan
sebagainya.
Setelah
kita membuat kelas sepeda motor, kita dapat membuat sejumlah objek
sepeda motor dari Class tersebut. Ketika kita membuat sebuah Class
instan, maka system akan mengalokasikan sejumlah memori yang cukup untuk
objek-objek dan semua variable instan.
Untuk lebih memahami konsep-konsep diatas berikut contoh sederhana pemprograman dengan Java:
ü Membuat Class, Objek, dan Memanggil Atrribute
/* Simpan dengan nama file : SepedaMotor.java
Membuat class Sepeda Motor */
class SepedaMotor {
String warna;
int tahunProduksi;
int kecepatan=10;
void tambahKecepatan(int pertambahanKecepatan) {
kecepatan = kecepatan+ pertambahanKecepatan;
System.out.println("Kecepatan:" + kecepatan);
}
}
/*Simpan dengan nama file : SepedaMotorBeraksi.java
Membuat Class yang bernama SepedaMotorBeraksi */
public class SepedaMotorBeraksi {
public static void main (String[] args) {
//Membuat objek yang bernama sepedaMotorku
SepedaMotor sepedaMotorku = new SepedaMotor();
// Memanggil attribut dan memberi nilai
sepedaMotorku .warna = “Hitam”;
sepedaMotorku .tahunProduksi=2008;
System.out.println( “Sepeda Motorku berwarna : ”+ sepedaMotorku .warna);
System.out.println( “Sepeda Motorku tahun : ”+ sepedaMotorku.tahunProduksi);
sepedaMotorku.tambahKecepatan(10);
}
}
Hal yang perlu diperhatikan:
Java
bersifat case sensitive. Huruf besar dan kecil sangat berpengaruh dalam
Java, karena itu pastikan anda mengetik kode diatas sama persis, tanpa
mengubah besar kecil hurufnya. Ketik program diatas dengan menggunakan
text editor (misalnya notepad, textpad, atau lainnya) dan simpan dengan
nama SepedaMotor.java dan SepedaMotorBeraksi.java. Nama file ini harus
sama dengan nama class. Kemudian lakukan kompilasi dengan mengetikkan
perintah di c-prompt:
C:\java> javac SepedaMotor.java
C:\java> javac SepedaMotorBeraksi.java
Jika
berhasil, hasil kompilasi ini akan membangkitkan sebuah bytecode dengan
nama file SepedaMotor.class dan SepedaMotorBeraksi.class untuk
mengeksekusi file ini maka bisa menggunakan perintah:
C:\java> java SepedaMotorBeraksi
Hasil dari eksekusi tersebut maka akan menghasilkan tampilan :
Sepeda Motorku berwarna : Hitam
Sepeda Motorku tahun : 2008
Penjelasan Program
Program diatas merupakan program contoh sederhana, namun memiliki beberapa bagian penting.
/* Simpan dengan nama file : SepedaMotor.java
Membuat class Sepeda Motor */
bagian
ini merupakan bagian yang dikenal sebagai komentar. Komentar dalam Java
seperti halnya dalam pemrograman yang lain yaitu bukan merupakan bagain
dari program. Oleh karena itu komentar ini tidak akan dikompilasi oleh
compiler Java dan tidak akan mempengaruhi alur program. Komentar ini
lebih diperuntukkan untuk memperjelas source code yang ditulis sehingga
kode program dapat lebih mudah untuk diteliti ulang atau dibaca.
Komentar harus selalu ditulis diantara tanda /* dan */. Artinya komentar
tersebut berlaku mulai dari tanda /* dan diakhiri dengan tanda */
//Membuat objek yang bernama sepedaMotorku
Kode
diatas juga merupakan komentar dalam java. Perbedaan dengan /* */
adalah bahwa ia hanya berlaku untuk satu baris ini saja dan semua
kata-kata setelah tanda // adalah komentar.
class SepedaMotor
baris
ini mendeklarasikan sebuah class dengan nama SepedaMotor. Jika
diperhatikan keseluruhan deklarasi class ini diawali dengan { dan
diakhir dengan }. Hal ini berarti bahwa semua yang berada didalam tanda
tersebut merupakan bagain dari class ini.
public static void main(String[] args) {
baris
ini mendeklarasikan suatu method dengan nama main. Nama main disini
merupakan suatu keharusan dalam Java karena Java akan mencari method
yang bernama main ini sebagai awal eksekusi program. Keyword public
merupakan access specifier yang menentukan visibility level dari method
ini. Public berarti method ini dapat diakses darimanapun dari luar
class. Method main() akan dipanggil dari luar oleh runtime Java pada
saat program akan dieksekusi sehingga access specifier-nya harus
menggunakan public. Keyword static memungkinkan method main() dipanggil
tanpa harus terlebih dahulu membuat instance dari class SepedaMotor. Ini
diperlukan karena method main() akan dieksekusi sebelum objek apapun
dibuat dalam memori. Keyword void berarti bahwa method main() tidak
mengembalikan nilai apapun setelah dipanggil/dieksekusi.
String warna;
int tahunProduksi;
baris di atas merupakan pemberian attribut atau pendeklarasian variabel yaitu ada 2 attribut/variable; attribute/variabel yang bernama warna dengan tipe data string dan attribut/variabel e tahunProduksi yang tipe datanya integer.
SepedaMotor sepedaMotorku = new SepedaMotor();
Baris
ini maknanya membuat suatu objek yang bernama sepedaMotorku dari kelas
SepedaMotor. Jadi objek sepedaMotorku ini nantinya bisa memiliki
attribute yang ada pada kelas SepedaMotor.
sepedaMotorku.warna = “Hitam”;
sepedaMotorku.tahunProduksi=2008;
Baris
tersebut merupakan perintah untuk pemangilan attribut dan sekaligus
pemberian nilai. Jadi untuk objek sepedaMotorku attribute warna nilainya
Hitam dan tahunProduksi adalah 2008.
System.out.println( “Sepeda Motorku berwarna : ”+ sepedaMotorku .warna);
Baris ini memiliki beberapa bagian penting:
System adalah nama dari salah satu class standar yang dimiliki oleh Java
Out
merupakan anggota dari class system dan juga merupakan objek
tersendiri. Out mewakili standard output stream yang dalam hal ini
digunakan layar komputer. Seperti halnya method main() diatas, objek out
juga dideklarasikan dengan menggunakan keyword static didalam classnya
sehingga ia dapat langsung dipanggil tanpa perlu terlebih dahulu membuat
instance dari class system.
Prinltn
merupakan method yang terdapat dalam objek out. Berfungsi untuk
mencetak keluaran ke standard output. Method ini juga mencetak karakter
pindah baris. Untuk mencetak tanpa pindah baris bisa menggunakan
print().
“Sepeda
Motorku berwarna : ” merupakan parameter dari method println yang
diterima oleh internal method ini dan dicetak ke standard output yang
dalam hal ini adalah layer computer anda.
Tanda ; diperlukan untuk menandai akhir dari suatu statement / pernyataan / perintah.
ü Enkapsulasi
Dalam
sebuah objek yang mengandung variabel dan method, dapat ditentukan hak
akses pada sebuah variabel atau method dari objek. Pembungkusan variabel
dan method pada objek yang terlindungi inilah yang disebut dengan enkapsulasi. Jadi, enkapsulasi dapat diartikan sebagai suatu
mekanisme untuk menyembunyikan atau memproteksi suatu proses dari
kemungkinan interferensi dari luar sistem sekaligus menyederhanakan
penggunaan sistem itu sendiri. Akses pada internal sistem sendiri diatur sedemikian rupa melalui seperangkat interface. Pada contoh sepeda motor, mengenai sistem transmisi gigi, maka pengendara tidak perlu tahu detail dari bagaimana proses pemindahan gigi itu dilakukan oleh mesin, tapi cukup tahu bagaimana menekan gigi transmisi, supaya dapat berpindah.
Dalam
bahasa Java segala sesuatu adalah objek (everything is object). Setiap
baris program yang ditulis programmer adalah merupakan bagian dari
sebuah objek. Programmer juga dapat membangun sebuah objek yang disusun
oleh objek-objek kecil, dimana masing-masing objek yang menyusunnya
memiliki fungsi sendiri-sendiri.
ü Pewarisan (Inheritance)
Dalam dunia nyata, manusia sebenarnya sudah biasa untuk melihat objek disekitar kita tersusun secara hirarki berdasarkan class-nya masing-masing. Maka muncul suatu konsep tentang pewarisan yang merupakan proses penurunan suatu class dari class lainnya sehingga memiliki ciri atau sifat dari class yang diwarisi.
Dalam suatu hirarki semakin kebawah, maka class akan semakin bersifat spesifik. Sebagai contoh Class
Sepeda Motor Balap (untuk para crosser) memiliki sifat yang dimiliki
oleh Sepeda Motor. Dengan konsep ini, Class Sepeda motor balap tidak
perlu mendefinisikan ulang apa yang telah dimiliki oleh class sepeda
motor, ia akan mendapatkan karakteristik dari class sepeda motor secara
otomatis. Dengan memanfaatkan konsep pewarisan ini dalam pemrograman,
maka hanya perlu mendefinisikan karakteristik yang lebih umum akan
didapatkan dari class darimana ia diturunkan.
Inheritance mewarisan atribut dan method pada sebuah class yang diperoleh dari class yang telah terdefinisi tersebut. Setiap subclass akan mewarisi attribute ( variabel ) dan behaviour (method) dari superclass-nya. Subclass kemudian dapat menambahkan attribute dan behaviour baru yang spesifik dan dapat pula memodifikasi apa yang diturunkan oleh superclass-nya. Inheritance memungkinkan programmer untuk menggunakan ulang source code dari superclass yang telah ada.Berikut ini beberapa istilah yang ada dalam inheritance:
Extends : Keyword ini ditambahkan pada definisi class yang menjadi subclass.
Superclass: Superclass digunakan untuk menunjukkan hirarki class yang berarti class dasar dari subclass/class anak.
Subclass : Subclass adalah class anak atau turunan secara hirarki dari superclass.
Super: Keyword ini digunakan untuk memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada superclass.
class SepedaMotorBalap extends SepedaMotor {
int gir;
void gir(int nilaiGir) {
gir = 2*nilaiGir;
System.out.println("Nilai gir:"+gir);
}
}
class SepedaMotorBalapBeraksi {
public static void main(String[] args) {
// Membuat object
SepedaMotorBalap sepedaMotorBalapku = new SepedaMotorBalap();
// Memanggil method di object
sepedaMotorBalapku.tambahKecepatan(10);
sepedaMotorBalapku.gir(2);
}
}
Polimorfisme
Polimorfisme berarti suatu objek dapat memiliki berbagai bentuk, sebagai objek dari classnya sendiri atau objek dari superclassnya. Konsep sederhana dalam bahasa pemrograman berorientasi objek yang berarti kemampuan suatu variabel referensi objek untuk memiliki aksi berbeda bila method yang sama dipanggil, dimana aksi method tergantung dari tipe objeknya. Dalam konsep yang lebih umum sering kali polymorfisme disebut dalam istilah satu interface banyak aksi. Dalam konsep ini jika suatu interface yang sama digunakan untuk memerintahkan objek melakukan aksi yang mungkin secara prinsip sama namun secara proses berbeda.
Sebagai contoh, sepeda motor.
Sepeda motor yang ada dipasaran terdiri berbagai tipe dan merk, namun
semuanya memiliki interface kemudi yang sama. Jika seseorang bisa
mengemudikan satu jenis sepeda motor dari satu merk tertentu, maka orang
itu kemungkinan bisa mengemudikan hampir semua jenis sepeda motor yang
ada, karena semua sepeda motor menggunakan interface yang sama. Harus
diperhatikan disini bahwa interface yang sama tidak berarti cara
kerjanya juga sama.
Pada konsep polimorfisme ini ada 2 bentuk yaitu overloading dan overriding :
1. Overloading: Penggunaan satu nama untuk beberapa method yang berbeda parameter.
2. Overriding: Terjadi ketika deklarasi method subclass sama dengan method dari superclassnya
1. Overloading
class SepedaMotor1 {
String warna;
int tahunProduksi;
public SepedaMotor1(String warna, int tahunProduksi){
this.warna = warna;
this.tahunProduksi = tahunProduksi;
}
public SepedaMotor1(){
}
void info(){
System.out.println("Warna: " + this.warna);
System.out.println("Tahun: " + this.tahunProduksi);
}
}
public class SepedaMotorBeraksi1{
public static void main(String[] args){
SepedaMotor1 motorku = new SepedaMotor1("Biru",2008);
motorku.info();
SepedaMotor1 motormu = new SepedaMotor1();
motormu.info();
}
}
2. Overriding
/* Simpan dengan nama file : SepedaMotor.java
Membuat class Sepeda Motor */
class SepedaMotor2 {
String warna;
int tahunProduksi;
int kecepatan=10;
int gir=2;
void tambahKecepatan(int pertambahanKecepatan) {
kecepatan = kecepatan+ pertambahanKecepatan;
System.out.println("Kecepatan:" + kecepatan);
}
void gir(int nilaiGir) {
gir = 2+nilaiGir;
System.out.println("Nilai gir:"+gir);
}
Tidak ada komentar:
Posting Komentar