I. Konseop Objek dan class
Object: Objek adalah model dari class. Class ‘kucing’ mendefinisikan segala kemungkinan karakteristik dan kebiasaaan yang dimiliki kucing. Contoh, Tom adalah objek. Objek Tom adalah seekor kucing, Kucing mempunyai bulu, tom mempunyai bulu berwarna abu-putih. Jadi objek adalah pendefinisian suatu benda yang merujuk kepada suatu class.
Ada 4 cara untuk melakukan deklarasi dan pembuatan objek (ingat NamaKelas = NamaConstructor)
Cara1 :
NamaKelas namaObjek; // deklarasi
namaObjek = new NamaConstructor(); // pembuatan
Deklarasi dan pembuatan objek boleh jadi satu dalam suatu kelas. Deklarasi dan pembuatan objek boleh dipisah di kelas yang berbeda, misalnya deklarasi objek di method main() pada kelas1, sedangkan pembuatan/instansiasi objek berada pada kelas2.
Cara2 :
NamaKelas namaObjek = new NamaConstructor();
Artinya dua proses deklarasi dan pembuatan dijadikan satu.
Cara3 :
new NamaConstructor();
Cara ini objek diinstansiasi tanpa nama, tujuannya hanya untuk menjalankan constructor.
Cara4 :
New NamaKelas(”…..”).namaMethod();
Penggunaan Objek
Penggunaan objek sebenarnya untuk memanggil method yang merupakan sifat objek tersebut. Bentuk umum :
namaObjek.namaMethod([daftarNilaiParameter]);
namaObjek.namaAttribute;
Penghancuran Objek
Teknik yang digunakan java untuk menangani objek yang sudah tidak diperlukan lagi disebut garbage collection. Objek yang sudah tidak diperlukan lagi akan terdeteksi oleh JVM, sehingga secara otomatis dihancurkan oleh garbage collector (bukan oleh programmer).
Classes : Mendefinisikan abstrak dari sebuah objek, termasuk atribut dan properties objek, juga menentukan karakteristik dari si objek. Singkatnya class adalah sebuah blueprint untuk mendeskripsikan sesuatu.
Contoh class ‘kucing’. Class ‘kucing’ akan memiliki karakteristik yang dimiliki oleh seluruh kucing di dunia. Seperti bulu, karnivora, berkaki empat (karakteristik), suara mengeong, berlari cepat (sifat kebiasaan). Class mengusung konsep modularitas dan struktur dalam permrograman berbasis objek. Sebuah class harus dapat dikenali oleh orang yang awam pemrograman, ini berarti bahwa sebuah class harus memiliki arti dalam konteks yang tengah dikerjakan.
Misalnya kita mempunyai class Mahasiswa. Class ini memiliki atribut nama, alamat, tanggal lahir dan method menghitung umur. Class ini dapat diinstansiasi atau dicreate menjadi objek, misalnya objek mahasiswa Budi, Ahmad, Elfan dan seterusnya. Dapat dianggap class adalah pola atau “pencetak” objek. Gambar dibawah memperjelas hubungan antara class dan objek pada contoh ini
II. Desain dan UML
Contoh sederhana dari UML
UML (Unified Modeling Language) adalah sebuah bahasa untuk menetukan, visualisasi, kontruksi, dan mendokumentasikan artifact (bagian dari informasi yang digunakan atau dihasilkan dalam suatu proses pembuatan perangkat lunak. Artifact dapat berupa model, deskripsi atau perangkat lunak) dari system perangkat lunak, seperti pada pemodelan bisnis dan system non perangkat lunak lainnya.
UML merupakan suatu kumpulan teknik terbaik yang telah terbukti sukses dalam memodelkan system yang besar dan kompleks. UML tidak hanya digunakan dalam proses pemodelan perangkat lunak, namun hampir dalam semua bidang yang membutuhkan pemodelan.
Diagram UML
Untuk menggambarkan kelas, notasi UML yang digunakan persegi empat dibagi atas 3 bagian yang masing masing digunakan untuk nama kelas, daftar atribut dan daftar fungsi.
Nama kelas |
Daftar atribute |
Daftar fungsi |
Atribut dalam notasi UML dituliskan dengan format :
Symbol_penanda_akses nama_atribute: tipe_data
Dengan :
Symbol_penanda_akses ;
+ | public |
# | protected |
- | Private |
Tipe_data : dapat berupa tipe data dasar atau tipe bentukan
Fungsi dalam notasi UML dituliskan dengan format ;
Symbol_penanda_akses nama_fungsi(parameter) : tipe_data_balikan
III. Kelas, Field dan Method
1. KELAS
Sintaks :
[modifier-modifier] class namaclass
[extends parentclass][implements interface] {
[deklarasi field-field]
[definisi method-method]
}
Yang tertera didalam kurung siku bersifat optional.
Dengan demikian, definisi minimal dari sebuah class bisa jadi seperti berikut :
class Useless {
//….mmm….
}
2. PENDEFINISIAN FIELD/VAR
Merupakan konstanta atau variabel yang mengizinkan akses tipe data. Fields dapat didefi nisikan oleh class, structure, dan enumeration. Fields digunakan sebagai data yang bersifat read-only, atau sering didefinisikan sebagai konstanta. Fields juga dapat berupa variabel read-only yang nilainya didefinisikan kali pertama pada class constructor dan tidak dapat diubah lagi
3. METHOD
Method merupakan tingkah laku dari suatu objek atau kelas, jika bersifat static berarti tingkah laku semua objek dalam kelas tersebut. Method diletakkan di dalam classbody (sebaiknya tidak diletakkan dalam method lain).
Bentuk umum method :
[modifier] tipe_return_value namaMethod(tipe parameter) {
methodbody;}
Modifier boleh lebih dari satu (dipisah oleh spasi). Pasangan tipe dan parameter dapat lebih dari satu (dipisah oleh koma).
Bentuk umum method main() sebagai berikut :
[modifier] tipe_return_value main(String args[]) {
methodbody}
Ada tiga sintaks pemanggilan suatu method :
namaMethod([nilaiParamater]);
namaObjek.namaMethod([nilaiParamater]);
namaKelas.namaMethod([nilaiParamater]);
Tidak semua member (class, attribute, dan method) dapat diakses method, berikut tabel aksesnya :
Method | member (class, attribute, method) |
Static | Static boleh lewat objek ataupun class, boleh langsung kalau dalam kelas sendiri |
Static | non static hanya boleh lewat objek, langsung tidak boleh, lewat class tidak boleh |
Non static | static boleh lewat objek ataupun class, boleh langsung kalau dalam kelas sendiri |
Non static | non static hanya boleh lewat objek, langsung tidak boleh, lewat class tidak boleh |
Method dasar ada dua jenis yaitu getter() dan setter().
Contoh :
public class Dog {
private int weight; // information hiding
public int getWeight() { //getter
return weight;
}
public void setWeight(int newWeight) { //setter
weight = newWeight;
}
}
public class TesDog {
public static void main(String[] args) {
Dog d = new Dog(); // membuat objek d
d.setWeight(42); // input
System.out.println(”Dog d’s weight is ”+d.getWeight())
}
Overloading terhadap Method
Maksud overloading disini bukan overloading terhadap operator sebagaimana C++. Overloading disini adalah mendefinisikan dua atau lebih method di dalam kelas yang sama, dengan nama yang sama, namun dengan deklarasi parameter yang berbeda.
Java interpreter mampu membedakan method mana yang dieksekusi dengan mengenali tipe parameter yang dilewatkan ke method, serta mengenali return valuenya.
Tugas dari method-method yang dioverloading tersebut berbeda.
Contoh overloading terhadap method :
import java.lang.*;
public class Perkalian {
private double pangkat(int a, int b) {
double hasil = 1.0;
//kode program
return hasil;
}
private double pangkat(double a, int b) {
double hasil = 1.0;
//kode program
return hasil;
}
private double pangkat(int a, double b) {
double hasil = 1.0;
//kode program
return hasil;
}
private double pangkat(double a, double b) {
double hasil = 1.0;
//kode program
return hasil;
}
public static void main(String[] args) {
Perkalian kali = new Perkalian();
System.out.println(kali.pangkat(10,308));
// dst untuk data yg lain
}
}
IV. Constructor
Constructor adalah method khusus yang dipanggil saat object di-create.
Contoh:
Mahasiswa mhs = new Mahasiswa();
Pada code diatas, maka akan dipanggil constructor Mahasiswa() yang merupakan constructor default.
Karakteristik constructor:
· Nama method constructor harus sama dengan nama Class.
· Satu class dapat memiliki lebih dari satu constructor (dengan parameter yang berbeda-beda).
· Constructor tidak memiliki return
· Constructor dipanggil dengan new.
Apa kegunaan constructor? Constructor dapat digunakan untuk menginisialisasi object.
Sebagai contoh code berikut menambahkan constructor sehingga nim, nama langsung diisi pada saat object dicreate.
public class Mahasiswa {
public String nim;
public String nama;
private MatakuliahKontrak[] daftarMK = new MatakuliahKontrak[10];
private int pos=0;
public Mahasiswa(String vNim, String vNama) {
nim = vNim;
nama = vNama;}
// … yang lain sama
}
Perhatikan penggunaan variabel vNim, Vnama. Penamaan ini untuk membedakan nama variabel dengan atribut method. Alternatif lain adalah dengan menggunakan keyword this. Contoh:
public class Mahasiswa {
public String nim;
public String nama;
private MatakuliahKontrak[] daftarMK = new MatakuliahKontrak[10];
private int pos=0;
public Mahasiswa(String nim, String nama) {
this.nim = nim;
this.nama = nama; }
// … yang lain sama}
Sedangkan contoh penggunaannya:
Mahasiswa budi = new Mahasiswa("1111","Budi Martami");
V. Access Modifier
Access Modifiers digunakan untuk mendefinisikan bagaimana suatu atribut dan method digunakan oleh kelas dan obyek yang lain. Perbedaan utama Access Specifiers dan Modifiers adalah, Access Specifiers mendefinisikan hak akses anggota kelas, sedangkan Modifiers digunakan untuk mendefinisikan bagaimana suatu method atau atribut dapat dimodifikasi oleh kelas yang lain. Modifiers di Java adalah :
o Static
o Final
o Abstract
o Native
o Synchronized
· Access Modifiers Static
Atribut dan method dapat menjadi statik atau tidak statik. Bagian kelas (atribut dan method) yang tidak statik disebut sebagai atribut instance dan method instance, sedangkan bagian kelas yang statik disebut sebagai atribut kelas dan method kelas yang dimiliki oleh kelas dan bukan instance dari kelas.
static int LibrarianID; //static attribute
int LibrarianID; //non static attribute
static void getLibrarianName();//static methods
void getLibrarianName(); //non static method
Setiap instance dari kelas (object) mendapatkan copy-an atribut instance dan method instance yang didefinisikan di dalam kelas. Atribut kelas membawa informasi yang dibagi ke semua instance dari kelas, jika satu obyek mengubah atribut maka akan mengubah semua obyek yang berasal dari kelas yang sama. Method kelas dapat digunakan secara langsung tanpa harus membuat instance (obyek), sedangkan jika akan mengakses method instance maka harus membuat instance dari kelas terlebih dahulu (obyek).
· Access Modifiers Final
Modifiers final mengindikasikan bahwa anggota kelas tidak dapat dimodifikasi. Keyword final digunakan dalam method, atribut, dan kelas. Jika sebuah atribut telah dideklarasikan final maka kita tidak dapat mengubah nilai atribut tersebut, final juga membuat kelas tidak dapat diturunkan (inheritance) karena method yang final tidak dapat dimodifikasi di dalam kelas turunan.
· Access Modifiers Abstract
Kelas abstract digunakan sebagai kelas dasar yang nantinya akan diturunkan ke kelas lainnya. Kelas abstrak selalu mempunyai kelas turunan.
· Access Modifiers Native
Modifier native digunakan hanya untuk method. Modifier ini digunakan untuk menginformasikan compiler bahwa method tersebut telah dikodekan dengan bahasa pemrograman selain Java, seperti C atau C++.
· Access Modifiers Synchronized
Modifier synchronize digunakan hanya untuk method. Modifier ini digunakan untuk mengontrol akses ke bagian kode ketika sedang menjalankan sistem secara multithread (banyak thread).
VI. Package
Package adalah mekanisme pengelompokan dan penamaan kelas. Sebelumnya Anda telah menggunakan statement seperti ini:
import java.util.Calendar;
import java.util.GregorianCalendar;
Artinya kita akan menggunakan class Calendar berada di package java.util, demikian juga dengan class Gregoriancalendar. Anda dapat menggunakan import java.util.* untuk mengimpor semua class yang ada di java.util.
Fungsi utama package adalah mencegah bentroknya dua class yang namanya sama. Misalnya class Mahasiswa yang dibuat oleh dua orang yang berbeda, jika digunakan di dalam satu aplikasi dapat menyebabkan bentrok. Dianjurkan menggunakan domain internet sebagai nama package. Misalnya
edu.upi.Mahasiswa
id.ac.itb.Mahasiswa
Dua kelas Mahasiswa ini tidak akan bentrok karena berada di package yang terpisah. Bagaimana jika kedua class ini digunakan bersamaan? harus digunakan nama package yang lengkap
edu.upi.Mahasiswa mhsUpi = new id.ac.upi.Mahasiswa();
id.ac.itb.Mahasiswa mhsItb = new id.ac.itb.Mahasiswa();
Pada eclipse secara default class dimasukkan ke dalam (default package)
Cara menambahkan class di dalam package adalah dengan menambahkan deklarasi package nama_package; Coba lihat class Mahasiswa, lalu tambahkan package
package edu.upi;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Mahasiswa {
….
Akan terjadi error, klik huruf yang bergaris bawah merah lalu pilih “Move Mahasiswa.java to package ....”
Lakukan yang sama untuk MatakuliahKontrak, sehingga di project explorer menjadi seperti ini:
Sekarang coba kita lihat struktur file di dalam direktori.
Bagi yang lupa denga lokasi project, klik kanan “src” pada project explorer, lalu pilih properties, dan lihat locationnya.
Coba sekarang buka dengan window explorer dilokasi tersebut. Terlihat bahwa struktur direktori package sama dengan nama packagenya. Jika anda tidak menggunakan IDE seperti Netbeans atau Eclipse, maka pengaturan struktur direktori ini harus dilakukan secara manual.
semoga bermanfaat