Rabu, 09 Maret 2011

Pemrograman Berorientasi Objek

Pengertian dari Class, Object, dan Method

Class merupakan suatu blueprint atau cetakan untuk menciptakan suatu instant

dariobject. class juga merupakan grup suatu object dengan kemiripan

attributes/properties, behaviour dan relasi ke object lain.

Kelas

Kelas memiliki peran penting dalam paradigma pemrograman berorientasi objek.Kelas bagaikan sebuah pabrik yang siap memproduksi objek-objek yang kita butuhkan.Untuk dapat menciptakan sebuah objek, kita harus menciptakan kelasnya. Kelas inilah yang dalam runtime program akan menciptakan objek yang inginkan. Singkatnya kelas adalah cetak biru bagi objek yang ingin kita ciptakan.

Perlu diperhatikan bahwa umumnya tidak ada batasan jumlah objek yang dapat diciptakan melalui sebuah kelas.Namun terkadang ada kelas-kelas yang memang dirancang untuk menciptakan tidak lebih dari satu objek.

Objek-objek yang tercipta dari sebuah kelas disebut instans dari kelas tersebut. Instans ini akan mempunyai variabel dan metode yang disebut variabel instans dan metode instans. Namun ada juga variabel kelas yang berlaku bagi kelas itu sendiri sehingga akan berlaku juga untuk semua instans dari kelas tersebut.

Deklarasi Kelas

Pendeklarasian kelas dapat dimulai dengan pernyataan package.Pernyataan seperti baris pertama dari Listing 1 berarti kelas tersebut adalah bagian dari package com.arih. Hirarki package di sini secara konseptual sama dengan konsep pohon, di mana ada node akar dan bercabang terus oleh node anak. Pernyataan ini tidak harus ada dalam setiap kode program kelas.Hanya bila program Anda memiliki banyak kelas dan ingin disusun menurut hirarki tertentu barulah Anda perlu meletakkan pernyataan seperti ini.Biasanya hirarki package mengikuti hirarki domain vendor. Dalam kasus ini, arih.com—nama situs saya.

Setelah pernyataan package, kita dapat meletakkan baris-baris pernyataan import. Pernyataan import digunakan untuk mendaftarkan nama lengkap dari kelas-kelas yang kita impor agar di dalam kelas ini nantinya kita tidak lagi perlu menuliskan nama lengkap secara hirarkis sebuah kelas. Contohnya di Listing 1 kita meletakkan baris import java.io.*;, artinya semua kelas yang berada di dalam package java.io dapat kita panggil dalam kelas kita langsung dengan nama kelas, tanpa nama package. Jadi bila kita ingin menggunakan kelas java.io.InputStreamReader, kita dapat langsung menuliskan InputStreamReader tanpa mesti membubuhkan java.io di depannya. Dalam kasus tertentu kemudahan ini dapat terganggu bila ada dua kelas dengan nama yang sama namun dari package berbeda yang keduanya kita impor. Akibatnya penggunaan nama kelas tersebut akan menyebabkan ambiguitas. Pemecahannya adalah dengan menggunakan nama lengkap, atau minimal nama package yang berbeda untuk kedua kelas tersebut.

Baris-baris pernyataan impor ini sebenarnya hanya berfungsi sebagai pembantu agar penulisan kode program lebih mudah dan lebih singkat.Jadi hal ini tidak wajib dilakukan. Selama Anda merasa senang menulis nama lengkap suatu kelas yang biasanya cukup panjang, silahkan tidak menggunakan fasilitas impor. Kalaupun Anda menggunakan fasilitas ini, biasakanlah untuk tetap mengetahui nama lengkap dari kelas-kelas yang Anda gunakan. Dengan begitu Anda tidak akan kesusahan bila ingin melihat dokumentasi API Java untuk kelas tersebut.

Kelas Bersarang

Kelas bersarang adalah deklarasi kelas yang terletak di dalam isi kelas lain. Akibatnya kelas baru ini menjadi anggota dari kelas yang melingkupinya.

Kita dapat menggunakan kelas bersarang untuk menerapkan hubungan antara dua kelas dimana kelas bersarang tersebut hanya ada dalam konteks kelas yang melingkupinya.Contohnya, bila kita membuat kelas Listener untuk event yang khusus oleh sebuah kelas, misalnya tombol atau mouse diklik dalam sebuah kelas yang berupa Applet.Maka kita mendeklarasikan kelas Listener tersebut sebagai anggota dari kelas yang memproduksi event.

Selain contoh sebelumnya, kelas bersarang juga dapat digunakan bila sebuah kelas membutuhkan kelas lain untuk dapat berfungsi. Maka kelas tersebut dideklarasikan sebagai anggota dari kelas yang memiliki kebutuhannya. Misalnya kita ingin membuat kelas yang berupa dialog, dan dialog ini membutuhkan sebuah kelas lain sebagai parent dari dialog ini. Maka kita meletakkan kelas dialog tersebut dalam kelas parentnya.

Kelas Anonim

Kelas anonim adalah kelas yang tidak mempunyai nama. Dalam program artinya kelas ini tidak memiliki referensi yang disimpan di simbol tertentu. Akibatnya kita tidak dapat mengakses kelas tersebut dengan menggunakan cara biasa. Satu-satunya cara mengakses kelas seperti ini adalah langsung pada baris instansiasinya. Contoh kelas seperti ini telah kita lihat dalam contoh mengenai konstruktor.

Kelas anonim dapat kita gunakan bila kita ingin menciptakan sebuah kelas namun hanya butuh menggunakannya sekali dan tidak ingin mengalokasikan memori untuknya karena memang tidak akan digunakan lagi. Kasus seperti ini terjadi misalnya kita ingin menciptakan sebuah kelas baru sebagai argumen untuk sebuah konstruktor atau metode, dimana kita tidak lagi ingin mengakses kelas tersebut secara langsung.Contohnya adalah kasus ketiga dalam contoh mengenai konstruktor. Di sana kita menciptakan sebuah kelas InputStream untuk argumen konstruktor BufferedReader, namun kita tidak ingin menyimpan referensi ke objek InputStream tersebut, karena penggunaannya olehBufferedReader juga akan berjalan tanpa perintah eksplisit dari program. Jadi sebenarnya referensi ke objek InputStream tersebut disimpan oleh instans BufferedReader, bukan oleh kelas kita.

Kelas Abstrak

Kelas abstrak adalah kelas yang mengandung konsep abstrak sehingga tidak mungkin mempunyai instans.Misalnya suatu kelas abstrak Buah yang mengandung konsep tentang bagian dari tumbuhan yang dapat dimakan.Namun kita tidak dapat menciptakan sebuah instans dari kelas tersebut karena tidak masuk akal menciptakan suatu Buah. Yang mungkin adalah menciptakan instans dari kelas Jeruk, Apel, atau kelas lain yang sudah mengimplementasikan konsep abstrak dari buah.

Kelas abstrak dapat mengandung metode abstrak, yaitu metode yang tidak memiliki implementasi. Dengan begitu, kelas abstrak dapat menentukan bagaimana konsep abstrak tersebut diimplementasikan oleh subkelas yang akan menggunakannya. Kelas abstrak tidak harus memiliki metode abstrak, namun setiap kelas yang memiliki metode abstrak haruslah menjadi kelas abstrak.

Listing 1

import java.io.*;

public class KelasKita

implements InterfaceKita1, InterfaceKita2

extends SuperKelas

{

// deklarasi variabel

private String variabelString;

// konstruktor kelas tanpa parameter

public KelasKita()

{

// baris program

}

// konstruktor kelas dengan satu parameter bertipe int

public KelasKita(int paramInt)

{

// baris program

}

// metode publik dengan satu parameter

// dan tidak mengembalikan nilai

public void metodeSatu(int parameterInt)

{

// baris program

return;

}

// metode publik dengan dua parameter dan mengembalikan nilai int

public int metodeSatu(int parameterInt, double parameterDouble)

{

// baris program

return;

}

// metode private tanpa parameter dan mengembalikan int

private int metodeDua()

{

// baris program

return 0;

}

}

Contoh : Class Person, Vehicle, Tree, Fruit dan lain-lain.

• Deklarasi class dapat dilakukan dengan sintak :

class {

[deklarasi atribut]

[deklarasi method]

• Deklarasi atribut sebagai berikut :

;

• Deklarasi method dapat dilakukan dengan cara :

([daftar

argumen])

}

{

Object

adalah instance dari class. Jika class secara umum merepresentasikan

(template) sebuah object, sebuah instance adalah representasi nyata dari class itu

sendiri.

Contoh : Dari class Fruit kita dapat membuat object Mangga, Pisang, Apel dan lainlain.

Membuat object

Untuk membuat object, kita menggunakan perintah new dengan sebuah nama class

yang akan dibuat sebagai instance dari class tersebut.

String str = new String();

Random r = new Random();

Pegawai p2 = new PEgawai();

Date hari = new Date();

hari adalah object reference dari class Date yang akan digunakan untuk mengakses

class Date.

Sedangkan operator new adalah operator yang akan menghasilkan hari sebagai

reference ke instance dari class Date().

Attributes merupakan nilai data yang terdapat pada suatu object yang berasal dari

class. Attributes merepresentasikan karakteristik dari suatu object.

Contoh : pada Class Fruit terdapat attribute : warna, berat pada object mangga :

warna berisi kuning dan berat misalkan 0.25 kg pada object apel : warna berisi

merah dan berat misalkan 0.30 kg

Method merupakan suatu operasi berupa fungsi-fungsi yang dapat dikerjakan oleh

suatu object. Method didefinisikan pada class akan tetapi dipanggil melalui object.

Contoh : pada object mangga : terdapat method ambilRasa , kupasKulit dan lain-lain.

import java.util.Date;
class CreateDates {

public static void main(String args[]){
Date d1,d2,d3;
d1 = new Date();
System.out.println(“Hari 1 : “ + d1);

d2 = new Date(71,4,14,8,35);

System.out.println(“Hari 2 : “ + d2);

d3 = new Date(“September 3 1976 2:25 PM”);

System.out.println(“Hari 3 : “ + d3);

}

}

METHOD

Metode menentukan perilaku objek, yakni apa yang terjadi ketika objek itu dibuat serta

berbagai operasi yang dapat dilakukan objek sepanjang hidupnya.

Metode memiliki 4 (empat) bagian dasar :

1. Nama metode

2. Tipe Objek atau tipe primitive yang dikembalikan metode.

3. Daftar parameter.

4. Badan atau isi metode.

Tiga bagian pertama mengindikasikan informasi penting tentang metode itu sendiri.

Dengan kata lain, nama metode tersebut=metode lain dalam program. Dalam java kita

dapat memiliki metode-metode berbeda yang memiliki nama sama tetapi berbeda tipe

kembalian atau daftar argumennya, sehingga bagian-bagian definisi metode ini menjadi

penting. Ini disebut overloading metode.

Untuk menjalankan program yang memiliki sifat polymorphism tersebut, diperlukan

suatu kemampuan overloading, yaitu suatu kemampuan untuk menentukan fungsi

yang mana yang harus digunakan atau dijalankan jika terdapat nama fungsi yang sama.

Polimorfisme bisa diartikan seperti kemampuan suatu variable untuk mengubah

perangai sesuai dengan objek hasil instansiasi yang digunakan. Polimorfisme

membiarkan lebih dari 1 objek dari sub class

sub class dan diperlakukan sebagai

objek dari super class tunggal

Contoh:

Mahasiswa cowok = new anakSI();

cowok.methodKU( Bernaz );

Mahasiswa cewek = new anakTI();

cewek.mothodKU( Amelia );

Outputnya:

Methodku dengan parameter dengan nilai Bernaz di class anakSI telah dipanggil

Methodku dengan parameter dengan nilai Amelia di class anakTI telah dipanggil

Contoh Program:

class buku

{

String pengarang;

String judul;

void isi (String isi1,String isi2)

{

judul = isi1;

pengarang = isi2;

}

void cetak()

{

if (judul==null&&pengarang==null)return;

System.out.println("judul=" +judul +"pengarang=" +pengarang);

}

}

class karangan

{

public static void main(String[]args)

{

buku a,b,c,d;

a=b=c=d=new buku();

a.isi ("pengarang pascal", "yogiyanto");

a.cetak();

b.isi ("pengarang java", "asep hermanto");

b.cetak();

c.isi ("pengarang web", "johan prasutyo");

c.cetak();

d.isi ("pengarang c++", "adbul kadil");

}

}

Konstruktor

Kita sudah mengetahui bahwa kelas adalah alat untuk menciptakan objek. Sekarang yang menjadi pertanyaan adalah bagaimana cara menciptakan objek menggunakan sebuah kelas. Jawabannya adalah dengan menggunakan sebuahkonstruktor.

Apakah sebuah konstruktor itu?Konstruktor adalah bagian dari definisi suatu kelas yang berfungsi menciptakan instans dari kelas tersebut. Konstruktor ini bisa kita buat sendiri, atau bila kita tidak mendefinisikannya, maka kompiler Java akan membuatkan konstruktor default untuk kelas tersebut pada saat kompilasi. Yang perlu diperhatikan adalah bahwa suatu konstrukor tidak termasuk anggota suatu kelas seperti metode dan variabel dan bahwa konstruktor bisa dibuat lebih dari satu.

Bentuk konstruktor sendiri mirip dengan sebuah metode. Beda yang paling mencolok adalah nama sebuah konstruktor harus sama dengan nama kelas tersebut dan konstruktor tidak memiliki definisi return type seperti sebuah metode. Untuk jelasnya Anda bisa lihat kembali Listing 1, di mana terdapat dua buah konstruktor. Yang satu adalah konstruktor default dan yang lain adalah konstruktor dengan sebuah parameter bertipe int.

Adanya dua buah konstruktor ini termasuk sifat polimorfisme dalam pemrograman berorientasi objek.Sifat ini dapat berlaku bagi konstruktor dan juga metode. Lebih jauh mengenai polimorfisme akan dijelaskan lebih jauh di akhir tutorial ini.

Secara singkat, konstruktor adalah perintah yang akan dilaksanakan saat ada instruksi untuk menciptakan sebuah instans dari kelas tersebut. Bisa saja konstruktor tersebut tidak melakukan apa-apa, yaitu bila konstruktor tersebut kosong.Berikut adalah contoh-contoh penciptaan suatu kelas dengan berbagai jenis konstruktor.

SuatuKelas kelasContoh = new SuatuKelas();
SuatuKelasLain kelasContoh2 = new SuatuKelasLain("judul");
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
new SuatuKelas().sebuahMetode();

Pada contoh pertama, kita menciptakan sebuah instans dari kelas SuatuKelas dengan memanggil konstruktor tanpa parameter. Bila dalam pendefinisian kelas SuatuKelas sebenarnya tidak ada pendefinisian konstruktor, perintah seperti ini tetap dapat dipakai, karena kompiler Java akan menyisipkan secara otomatis kosntruktor default bila tidak ada definisi konstruktor dalam sebuah kelas. Konstruktor default sendiri sebenarnya tidak melakukan apa-apa dalam proses instansiasi objek, karena tidak berisi perintah apapun.

Pada contoh kedua, kita memanggil sebuah konstruktor yang mengandung argumen berupa sebuah parameter bertipe String. Konstruktor seperti ini menjadi sangat berguna bila dalam proses instansiasi sebuah objek kita ingin memasukkan suatu nilai untuk dapat digunakan oleh instans baru tersebut.

Pada contoh ketiga, kita memanggil konstruktor dengan argumen sebuah parameter bertipe InputStreamReader. Yang menarik dari contoh ini adalah kita memasukkan argumen berupa kelas baru yang anonim sehingga terjadi pemanggilan konstruktor lain di dalam argumen konstruktor semula. Dalam konstruktor yang terakhir kita juga memasukkan argumen berupa sebuah objek InputStream yaitu System.in.

Contoh keempat adalah contoh yang lebih jelas mengenai kelas anonim.Pada contoh ini kita menciptakan sebuah instans dari kelas SuatuKelas namun tidak menyimpan referensi ke instans tersebut, sehingga kita hanya bisa menggunakannya sekali, yaitu langsung pada baris tersebut seperti terlihat pada contoh.

Ada hal yang menarik dan perlu diperhatikan mengenai konstruktor dalam kelas-kelas yang merupakan subkelas.Pada saat kita menginstans sebuah objek dari sebuah subkelas, kompiler tidak hanya memanggil konstruktor subkelas tersebut, melainkan memanggil kosntruktor superkelasnya terlebih dahulu, baru kemudian memanggil konstruktor subkelas tersebut. Penjelasan mengenai hal ini adalah bahwa sebuah subkelas adalah superkelas itu sendiri namun dengan tambahan karakterisasi yang lebih detil. Sehingga untuk menginstans sebuah subkelas, pertama-tama kita menginstansiasi sebuah superkelas, kemudian menerapkan karakterisasi dari subkelas kepada instans baru tersebut.

Polimorfisme

Polimorfisme secara bahasa dapat diartikan memiliki banyak bentuk.Konsep ini terdapat dalam bahasa pemrograman seperti konstruktor yang memiliki beberapa bentuk.Selain konstruktor, konsep ini juga berlaku bagi metode. Metode atau konstruktor dapat memiliki banyak bentuk dalam arti memiliki nama yang sama namun dengan argumen yang berbeda atau dengan return type yang berbeda. Contoh polimorfisme untuk konstruktor maupun untuk metode dapat Anda lihat pada Listing 1. Disana terdapat konstruktor-konstruktor dengan nama sama namun dengan argumen yang mengandung parameter-parameter yang berbeda. Untuk contoh polimorfisme untuk metode ditunjukkan bahwa terdapat metode dengan nama sama namun memiliki argumen dan return type yang berbeda.

Kegunaan dari polimorfisme adalah agar kita dapat mendefinisikan beberapa konstruktor atau metode dengan karakteristik yang berbeda-beda agar nantinya dapat digunakan untuk kasus-kasus yang berbeda. Misalnya kita ingin menciptakan instans dari kelas KelasKita pada Listing 1 tanpa memberikan nilai apapun, namun terkadang kita ingin memberikan sebuah nilai sebagai parameter untuk digunakan oleh instans dari kelas tersebut, maka kita dapat membuat kelas seperti KelasKita tersebut. Begitu juga halnya dengan metode, sehingga kita dapat membuat metode-metode yang memiliki karakteristik yang khusus.

Tidak ada komentar:

Posting Komentar