Senin, 05 Januari 2009

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);

}

}

Pengenalan Java

Java Adalah