Saturday, August 1, 2009

Bahasa Java & OOP [1]

Sebuah bahasa pemrograman mendefinisikan istilah-istilah (words) dan simbol-simbol yang bisa digunakan untuk menulis sebuah program. Selain itu, bahasa pemrograman juga menerapkan aturan-aturan yang harus diikuti dalam menyusun istilah dan simbol sehingga membentuk pernyataan (statements) yang valid. Bahasa pemrograman Java dibuat oleh Sun Microsystems dan diperkenalkan pertama kali pada tahun 1995.

Bahasa pemrograman Java didisain sebagai bahasa yang “netral” terhadap arsitektur komputer dimana program akan dijalankan. Hal ini dimungkinkan dengan proses kompilasi kode sumber (source code) kedalam format bytecode. Proses eksekusi program Java secara ringkas dapat dilihat pada Gambar di bawah. Dengan mekanisme seperti ini, program yang didistribusikan dalam format bytecode, dapat dijalankan pada bermacam-macam jenis komputer / sistem operasi, selama tersedia bytecode interpreter yang sesuai (cross-platform).


Bahasa Java merupakan bahasa pemrograman yang berorientasi objek (OOP – Object Oriented Programming). Dalam bahasa OOP seperti Java, objek (object) merupakan entitas fundamental, yang secara efektif dapat digunakan untuk merepresentasikan entitas nyata. Entitas nyata ini misalnya seorang pegawai di sebuah perusahaan. Disini, “objek pegawai” menangani semua proses dan manajemen data yang berhubungan dengan pegawai tertentu.

Sebuah objek mempunyai state (status/keadaan) dan behavior (perilaku). State dari objek merupakan atribut atau karakteristik yang menerangkan keadaan objek terkait. Misalnya sebuah objek rekening bank, mempunyai state yang berhubungan nomor rekening dan jumlah saldo. Behavior objek merupakan sesuatu yang bisa dilakukan oleh/pada objek ybs. Untuk objek rekening bank, behavior bisa berupa aksi menabung atau mengambil saldo. Perlu dicatat bahwa behavior objek dapat mengubah dan mempengaruhi state objek tersebut.

Dalam konsep OOP, objek merupakan realisasi (instance) dari sebuah kelas (class). Dengan kata lain:
  • Objek merepresentasikan realisasi dari sebuah “konsep”; atau objek didefinisikan oleh kelas.

  • Kelas merepresentasikan “konsep”; atau kelas merupakan cetak biru (blue print) dari objek.
Sebagai konsekuensinya, lebih dari satu objek dapat dibuat dari “konsep” (kelas) yang sama. Misalnya, untuk sebuah kelas Pegawai yang sama, dapat dibuat lebih dari satu objek Pegawai yang merepresentasikan „si A“ , „si B“ , „si C“ dst.


Kelas menggunakan metode (method) untuk mendefinisikan behavior objek. Dalam konteks pemrograman Java, kelas yang memuat sebuah metode yang bernama main() merupakan representasi dari sebuah program, dimana alur program secara keseluruhan tercermin didalamnya. Sedangkan state/atribut objek didefinisikan oleh data (member) dalam kelas yang bersangkutan, yang dapat berbentuk konstanta atau variabel. Struktur dari sebuah kelas dapat dilihat pada Gambar.

Program Java terdiri dari satu atau beberapa kelas (dengan satu diantaranya berfungsi sebagai kelas utama (main class), yaitu kelas dengan sebuah metode main(). Kemudian, sebuah kelas dibentuk dari metode dan data. Dan pada gilirannya, sebuah metode merupakan sekumpulan perintah/pernyataan. Sedangkan data member dapat berupa data primitif (sederhana) atau berupa referensi ke kelas yang lain.

Sebuah kelas dapat digunakan untuk „menurunkan“ (inherit) kelas yang lain, sehingga membentuk struktur hirarki. Kelas yang berada pada level hirarki bawah „mewarisi“ sifat-sifat (metode & data dari) kelas hirarki diatasnya.


Gambar diatas menunjukan contoh hirarki kelas untuk entitas kendaraan darat. Kelas mobil dan sepeda motor diturunkan dari kendaraan, sehingga kedua kelas ini mewarisi sifat / konsep kelas induknya (kendaraan darat). Jika kendaraan darat mempunyai atribut tipe, jumlah kilometer dan warna, maka baik kelas mobil maupun kelas sepeda motor akan mempunyai sifat-sifat tersebut tanpa harus mendeklarasikan ulang. Disebelah kiri gambar, dapat dilihat dua buah contoh objek yang merupakan realisasi kelas mobil.

Dalam terminologi OOP, proses menurunkan sebuah kelas baru dari kelas yang telah ada disebut sebagai inheritansi (inheritance). Proses ini merupakan proses yang fundamental dan penting dalam pembuatan kode program yang reusable. Komponen software yang telah ada atau pernah dibuat dapat digunakan, dimodifikasi dan diperluas tanpa harus menulis “segala sesuatu” dari awal. Sehingga software yang didisain dengan baik, akan meningkatkan nilai kegunaan dan efisiensi dalam hal waktu serta tenaga untuk pemeliharaan dan pengembangan lebih lanjut.

Thursday, July 23, 2009

BlueJ Example - People

Below is a a picture showing a BlueJ example entitled "People". This basically illustrates two simple relationships that can be visualized in BlueJ: "use" and "inherit" relationships. As you see, here "Database" class uses "Person" abstract class and the "Staff" and "Student" classes inherit from this "Person" class. Just take a look at the code snippets to have a complete view of how these relationships are translated into codes.


BlueJ example "People", code author: Michael Kolling:
abstract class Person
{
private String name;
private int yearOfBirth;

Person(String name, int yearOfBirth){
this.name = name;
this.yearOfBirth = yearOfBirth;
}

public void setName(String newName) { name = newName;}
public String getName() { return name; }
public void setYearOfBirth(int newYearOofBirth) {yearOfBirth = newYearOofBirth;}
public int getYearOfBirth(){ return yearOfBirth;}

public String toString() { // redefined from "Object"
return "Name: " + name + "\n" + "Year of birth: " + yearOfBirth + "\n";
}
}
class Staff extends Person
{
private String room;

Staff() {
super("(unknown name)", 0000);
room = "(unknown room)";
}

Staff(String name, int yearOfBirth, String roomNumber) {
super(name, yearOfBirth);
room = roomNumber;
}

public void setRoom(String newRoom) {room = newRoom;}
public String getRoom() { return room; }

public String toString() { // redefined from "Person"
return super.toString() + "Staff member\n" + "Room: " + room + "\n";
}
}
class Student extends Person
{
private String SID; // student ID number

Student() {
super("(unknown name)", 0000);
SID = "(unknown ID)";
}

Student(String name, int yearOfBirth, String studentID) {
super(name, yearOfBirth);
SID = studentID;
}

public String getStudentID() { return SID; }

public String toString() { // redefined from "Person"
return super.toString() + "Student\n" + "Student ID: " + SID + "\n";
}
}
import java.util.ArrayList;
import java.util.Iterator;

public class Database {

private ArrayList persons;

public Database() { persons = new ArrayList();}
public void addPerson(Person p) { persons.add(p);}

public void listAll ()
{
for (Iterator i = persons.iterator(); i.hasNext();) {
System.out.println(i.next());
}
}
}