Jumat, 13 Maret 2015

Class dan Object dalam Java


Class
merupakan suatu blueprint atau cetakan untuk menciptakan suatu instant dari object. Class juga merupakan grup suatu object dengan kemiripan attributes/properties, behaviour dan relasi ke object lain.

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

Kelas adalah sebuah tipe data abstrak yang merupakan pemodelan dari objek yang berisi atribut(data) dan tingkah laku(method) yang dimiliki oleh objek tersebut.

Sebuah kelas menyerupai sebuah struktur yang merupakan tipe data sendiri, misalkan tipe data titik yang terdiri dari koordinat x dan y. Bahasa Java telah menggunakan sebuah kelas untuk menyatakan tipe data titik karena bahasa pemrograman Java merupakan bahasa pemrograman berorientasi objek murni sehingga tidak mengenal struktur tapi mengenal apa yang disebut dengan kelas.

Perbedaan sebuah kelas dengan sebuah struktur adalah sebuah kelas dapat berdiri sendiri dan dapat digunakan untuk berbagai keperluan kelas-kelas yang lain, sedangkan sebuah struktur tidak dapat berdiri sendiri. Sebuah kelas lebih fleksibel untuk digunakan oleh kelas lain tanpa harus membongkar kode program utama, sedangkan jika digunakan struktur maka kode program harus dibongkar unuk disalin bagian strukturnya ke kode program utama yang lain. Sebuah file dapat terdiri dari berbagai kelas, namun biasanya pada bahasa pemrograman Java sebuah file hanya terdiri dari satu kelas yang disimpan dengan nama kelas, misal file List.java berisi kelas List. Namun jika kelas yang dibuat misalnya public class nama_kelas, maka kelas itu harus disimpan dalam satu file hanya untuk satu kelas. Setelah dilakukan kompilasi maka pada Java akan ada sebuah file ”.class” yang berisi bytecode dari setiap kelas. Jika sebuah file terdiri dari dua kelas maka setelah dikompilasi akan dihasilkan dua buah file ”.class” yang nantinya akan dibaca oleh interpreter Java saat program dieksekusi.
Sebuah kelas saat program dieksekusi dan perintah new dijalankan, maka akan dibuat sebuah objek. Objek adalah elemen pada saat runtime yang akan diciptakan, dimanipulasi dan dihancurkan saat eksekusi sehingga sebuah objek hanya ada saat sebuah program dieksekusi, jika masih dalam bentuk kode, disebut sebagai kelas jadi pada saat runtime (saat sebuah program dieksekusi), yang kita punya adalah objek, di dalam teks program yang kita lihat hanyalah kelas.
Isi dari kelas ada tiga bagian yaitu:
1.      Variabel/properti/atribut
Atribut adalah karateristik yang dimiliki oleh objek. Dibagian itu kita dapat mendeklarasikan atribut-atribut yang dibutuhkan kelas untuk membentuk objek. Sebagai contoh perhatikan kode dibawah ini:
private String nama;
2.      Konstruktor
Konstruktor adalah method yang berfungsi untuk menginisialisasi variabel-variabel instans yang akan dimiliki oleh objek. Method konstruktor harus memiliki nama yang sama dengan nama kelas. Konstruktor ini dipanggil pada saat proses instalasi kelas menjadi objek. Kegunaan konstruktor:
·         Mengalokasikan ruang bagi sebuah kelas dalam objekMemberikan nilai awal terhadap anggota data suatu objek.
·         Membentuk tugas-tugas umum lainya.
·         Perlu diketahui:
Konstruktor tidak mempunyai nilai balik(bahkan tanpa void)
Konstruktor harus diletakkan pada bagian public. Sebagai contoh perhatikan kode dibawah ini:
public Mobil(){}
3.      Method
Method merupakan tingkahlaku yang dimiliki oleh objek. Method ini bisa berbentuk prosedur maupun fungsi. Contoh penulisannya perhatikan kode dibawah ini:
public void cetakInfo(){
System.out.println(“Nama Mobil : ” + getNama() );
}

Object
Pada saat kita mendefinisikan suatu kelas, kita hanya membuat tipe data baru, bukan membuat objek baru. Untuk membuat objek baru dari tipe kelas yang telah didefinisikan, secara eksplisit kita perlu melakukan dua tahap.
1.    Pertama, kita perlu mendeklarasikan variabel yang digunakan sebagai referensi ke objek dari kelas bersangkutan.
2.    Kedua, kita perlu menginstansiasi kelas dengan menggunakan operator new dan memasukkan instance-nya ke dalam variabel referensi yang baru saja dideklarasikan.

Berikut ini ilustrasi dua tahap proses tersebut :

// Mendeklarasikan variabel k bertipe Kotak 
Kotak k;
// Melakukan instansiasi dan memasukkan referensi ke variabel k
k = new Kotak();

Baris pertama (Tahap I) berguna untuk mendeklarasikan variabel k yang berperan sebagai referensi ke objek dari tipe Kotak. Pada tahap ini, variabel k akan bernilai null, yang berarti referensi tersebut belum menunjuk ke objek aktual manapun. Segala bentuk usaha untuk menggunakan variabel k disaat seperti ini akan menyebabkan kesalahan pada saat proses kompilasi program. Alasannya adalah karene variable k masih bernilai null.

Selanjutnya baris kedua (Tahap II) digunakan untuk mengalokasikan sebuah objek baru dan memasukkan referensinya ke dalam variabel k.

Pada prakteknya, dua tahap di atas biasanya ditulis dalam satu baris, seperti berikut :

// Mendeklarasikan variabel k bertipe Kotak dan
// Melakukan instansiasi dan memasukkan referensi ke variabel k

Kotak k = new Kotak();


Contoh Program :

package demoreferensi1;
class Kotak {
double panjang;
double lebar;
double tinggi;
}

public class DemoReferensi1 {
public static void main(String[] args) {
double volume1, volume2;
Kotak k1, k2;
k1 = new Kotak();
k2 = k1;

// Mengisikan nilai ke dalam objek k1
k1.panjang = 4;
k1.lebar = 3;
k1.tinggi = 2;

// Menghitung isi/volume dari objek k1
volume1 = k1.panjang * k1.tinggi * k1.lebar;

// Menghitung isi/volume dari objek k2
volume2 = k2.panjang * k2.tinggi * k2.lebar;

// Menampilkan nilai volume k1 dan k2 ke layar monitor
System.out.println("Volume k1 = " + volume1);
System.out.println("Volume k2 = " + volume2);
}
}

Tampak jelas pada kode di atas bahwa kita hanya memasukkan nilai untuk objek k1, namun pada saat kita memanggil nilai dari volume2, hasil yang diberikan adalah sama seperti nilai yang dihasilkan oleh volume1. Hal ini disebabkan karena k1 dan k2 sebenarnya menunjuk ke objek yang sama.

Hasilnya :
Volume k1 = 24.0
Volume k2 = 24.0

Sebagai catatan penting, meskipun keduanya menunjuk objek yang sama, akan tetapi tidak terdapat
hubungan antara variabel k1 dan k2. Artinya, kita bisa saja melepas salah satu variabel tersebut untuk menunjuk ke objek lain, tanpa berpengaruh terhadap variabel lainnya.

Jumat, 06 Maret 2015

Method



 Pengertian dan Karakteristik
Method merupakan fungsi-fungsi yang digunakan untuk memanipulasi nilai-nilai pada atribut atau untuk melakukan hal-hal yang dapat dilakukan suatu objek. Apa itu atribut?? Apa itu objek??
·         Atribut merupakan ciri-ciri yang melekat pada objek. Dan objek dalam PBO wajib mempresentasikan keadaannya melalui variable-variable (atribut). Sehingga, objek tersusun dari 2 elemen yaitu atribut dan method.
·         Karateristik dari method adalah seperti :
  1. Dapat menerima beberapa parameter yang dibutuhkan atau tidak ada parameter sama sekali. Parameter bisa disebut sebagai argumen fungsi.
  2. Dapat mengembalikan satu nilai atau tidak.
Perhatikan source code sederhana dibawah ini : 
Di dalam class Pelajar, terdapat beberapa atribut seperti : String nip dan nama, double nilaiUjian1, nilaiUjian2, nilaiTugas, NA dan nilaiRata2.
Jenis-jenis deklarasi pada Method
1. Accessor Methods, yaitu berupa pemberian hak akses untuk membaca nilai variable pada class baik berupa instance atau static. Accessor Method umumnya dimulai dengan penulisan get<namaInstanceVariable>. Method ini juga memiliki sebuah return value.
2. Mutator Methods, yaitu berupa pemberian hak akses yang dapat memberi atau mengubah nilai variable dalam class baik berupa instance atau static. Mutator ini biasa ditulis set<namaInstanceVariable>.
Accessor Methods dan Mutator Methods biasa disebut Access Modifier. Access modifier terdiri dari :
  1. Private : Memberikan hak akses hanya kepada anggota class tersebut baik untuk mengubah nilai atau properti dari class tersebut.
  2. Public : Memberikan hak akses kepada properti dan method agar dapat digunakan dluar class tersebut.
 

Source code line 17 adalah contoh mutator method. Untuk membedakan variabel nip pada parameter dan variabel nip pada atribut dari class Pelajar, maka digunakannlah keyword “this”. Sehingga variable nip yang pertama merujuk pada atribut, dan variable nip yang kedua merujuk pada parameter à void setnip.
Source code 21 merupakan contoh Accessor method. Method getnip ini mengembalikan Nilai string dari atribut nip. Kembali pada class Pelajar, terdapat access modifier berupa private <tipedata NamaVariable>. Contohnya saja private String nip dan nama tersebut tidak dapat diakse dimana pun kecuali oleh method-method yang ada dalam kelas tersebut atau dalam class pelajar.
Jenis-Jenis Method
·         Method OverLoading : Mendefinisikan dua atau lebih method di dalam satu class, dengan nama yang sama namu deklarasi parameter yang berbeda.
·         Method Berparameter : Dengan adanya parameter, sebuah method dapat bersifat dinamis dan general. Maksudnya adalah bahwa method tersebut dapat mengembalikan nilai yang beragam sesuai dengan nilai parameter yang dilewatkannya.
(Sumber http://www.atwiwit.net/2013/09/perbedaan-overload-dan-override)

Method Overriding merupakan sebuah subclass yang dapat mengiplementasikan method yang sudah ada pada superclass. Namun pada saat menggunakan nama method yang sama overriding ini berada pada subclass. Parameter yang digunakan pun harus sama. Selain itu overriding dapat menambahkan atribut pada kelas induknya untuk mendapatkan hasil yang berbeda.
Gambar A. Overriding
Gambar B. Overloading

Contoh source code_1 class pelajar
Source code_2 class InputPelajar1