Jumat, 29 Agustus 2014

RANGKUMANN TENTANG OBJECT ORIENTED PROGRAMMING (OOP)

RANGKUMAN TENTANG OOP ( Object Oriented Programming)

1.1          Pendahuluan

Dalam dunia teknologi informasi saat ini, pengembangan sebuah solusi untuk memenuhi kebutuhan yang ada di dunia nyata harus dikembangkan dengan mudah, cepat dan memenuhi berbagai macam keperluan. Salah satu cara untuk mengurangi kompleksitas dari perangkat lunak adalah dengan membaginya berdasarkan hirarki tertentu berdasarkan fungsi-fungsi yang ada. Salah satu pendekatan pengembangan perangkat lunak sebelum adanya pendekatan berorientasi obyek (Object oriented Programming atau OOP) adalah pemrograman prosedural, yang membagi sebuah aplikasi berdasarkan berbagai macam fungsi yang ada didalamnya.

1.2               Pemrograman Prosedural

Dalam Pemrograman prosedural, sebuah program akan dibagi menjadi beberapa subprogram (modul) yang akan melakukan tugas-tugas tertentu. Dalam sebuah modul bisa terdiri dari satu atau lebih prosedur atau dalam bahasa pemrograman juga disebut sebagai fungsi, rutin, subrutin, atau  method.

1.3               Pemrograman Berorientasi Obyek

Berbeda dengan pemrograman prosedural, seperti yang telah dijelaskan sebelumnya bahwa pemrograman berorientasi obyek memecah komponen-komponennya menjadi obyek-obyek yang saling berinteraksi. Dunia nyata yang terdiri dari obyek-obyek dapat dengan mudah dimodelkan sehingga program bisa lebih mendekati kondisi yang sebenarnya.
Terdapat beberapa keuntungan menggunakan pemrograman berorientasi obyek, antara lain:
·                     Real world programming
·                     Reusability of code
·                     Resilience to change
·               Information hiding
·                     Modularity of code

1.4               Kelas dan Obyek

Sebuah kelas menentukan struktur dan behaviour dari sebuah obyek. Sebagai sebuah contoh, truk, bus, mobil, sepeda motor didefinisikan sebagai sebuah kendaraan bermotor karena memiliki beberapa karakteristik yang sama yaitu memiliki mesin, menggunakan bahan bakar minyak untuk pengoperasiannya.
Obyek merupakan dasar dari pemrograman berorientasi obyek, didalam dunia nyata, setiap obyek yang ada memiliki dua buah karakteristik: State dan behaviour.
·                     State merupakan atribut yang dimiliki oleh sebuah obyek.
·                     Behaviour adalah fungsi yang dimiliki dan bisa dijalankan oleh penggunanya.

1.5               Sejarah Java

Pada tahun 1991, Sun dipimpin Patric Naughton dan James Gosling ingin merancang bahasa computer untuk perangkat consumer seperti cable TV Box. Karena perangkat itu tidak mempunyai banyak memori, bahasa harus berukuran kecil dan menghasilkan kode program yang liat. Juga karena manufaktur-manufaktur berbeda memilih pemroses-pemroses yang berbeda, maka bahasa harus bebas dari arsitektur manapun. Proyek ini diberi nama kode “Green”.
Karena orang-orang di proyek Green berbasis C++ bukan Pascal maka kebanyakan Sintaks diambil dari  C++, serta mengadopsi orientasi obyek bukan procedural. Mulanya bahasa yang diciptakan diberi nama “Oak” kemudian diganti “Java karena telah ada bahasa pemrograman bernama “Oak
Java pertama kali diluncurkan sebagai bahasa pemrograman umum (general purpose programming language) dengan kelebihan dia bisa dijalankan di web browser sebagai applet.

1.6               Karakteristik Bahasa Java

1.            Sederhana, semudah C dan seampuh C++: berlawanan dengan anggapan orang-orang bahwa bahasa Java sulit untuk dipelajari, Java gampang untuk dipelajari terutama untuk orang yang sudah mengenal pemrograman tapi belum terlalu terikat pada paradigma pemrograman prosedural.
2.            Sangat berorientasi obyek (OOP) dengan implementasi yang sangat baik sehingga    kita bukan hanya belajar bagaimana membuat program yang baik (reusable, scalable, dan maintanable) tetapi juga kita belajar bagaimana cara berfikir yang baik untuk mengenali struktur masalah yang sedang kita hadapi dan memecahkannya secara sistematis dengan pola-pola tertentu.
3.            Fitur-fitur utama yang lain:
·         Mendukung multithreading.
·         Selalu memeriksa tipe obyek pada saat runtime.
·         Mempunyai automatic garbage collection untuk membersihkan obyek yang tidak terpakai dari memori
·         Mendukung exception sebagai salah satu cara penanganan kesalahan

1.7               Bagaimana Java Bekerja?

Lingkungan pemrograman pada Java menggunakan compiler sekaligus interpreter agar dapat berjalan pada platform yang berbeda. Java compiler melakukan kompilasi pada source code (.java) menjadi Java bytecodes (.class).
Java bytecodes merupakan instruksi mesin yang tidak spesifik terhadap processor. Oleh karena itu, program Java hasil kompilasi akan dapat dijalankan pada berbagai platform sistem komputer dengan menggunakan Java Virtual machine (JVM), "write once, run anywhere" . JVM disebut juga bytecodes interpreter atau Java runtime interpreter.

1.8               Platform Java

Platform dapat diartikan sebagai lingkungan perangkat keras atau perangkat lunak dimana program dijalankan. Umumnya platform dinyatakan berdasarkan nama sistem operasi yang digunakan, misalnya Windows 2000, Linux, Solaris, atau MacOS.
Tidak seperti bahasa pemrograman lainnya, platform Java mempunyai dua komponen, yaitu:
·                     Java Virtual machine (Java VM)
Merupakan fondasi untuk platform Java yang dapat digunakan di berbagai platform perangkat keras.
·                     Java Application Programming Interface (Java API)
Kumpulan komponen-komponen perangkat lunak siap pakai (ready-made software components) untuk berbagai keperluan penulisan program, seperti graphical user interface (GUI).

1.9               Aplikasi Java

Ada dua tipe aplikasi pada Java yang umumnya sering ditulis, yaitu aplikasi stand alone dan applets. Aplikasi stand alone merupakan aplikasi yang dijalankan langsung diatas platform Java. Sedangkan applets adalah aplikasi yang dijalankan melalui web browser ataupun applet viewer.
Perbedaan applets dengan Java stand alone adalah:
·               Applets melakukan extends dari class applets.
·               Applets tidak mempunyai fungsi main().
·               Applets mempunyai beberapa batasan keamanan, seperti tidak diperbolehkan membaca atau menulis file pada sistem komputer.
·               Applets tidak dapat menjalankan program lain pada komputer yang menjalankan applets.
Selain kedua tipe aplikasi tersebut, ada beberapa tipe aplikasi Java yang lain yaitu:
·               Aplikasi berbasis Windows, misalnya dengan menggunakan fasilitas Swing.
·               Java Servlet, yaitu aplikasi seperti applets tetapi dijalankan di sisi server.
·               Java Server Pages, yaitu aplikasi di sisi server yang ditulis dalam bahasa script yang melekat pada halaman HTML untuk memberikan efek tampilan pada web browser.
·               Java Beans dan Enterprise Java Beans, yaitu aplikasi untuk program multitiers.
·               Java Micro Edition, yaitu aplikasi yang diperuntukan bagi perangkat genggam (handheld devices), seperti telepon genggam.

1.10            Identifier di Java

Identifier adalah nama yang diberikan kepada variabel, method, kelas, paket, dan interface untuk unik mengidentifikasikan bagi kompilator dan memberikan nama yang berarti bagi pemrogram. Adapun tatacara penamaan identifier:
1.          Case sensitive, huruf kapital dan kecil dibedakan
2.          Identifier yang diberikan oleh pemrogram tidak boleh sama dengan keyword yang ada di Java
3.          Dimulai dengan huruf atau underscore (garis bawah) atau tanda ($). Namun sebisa mungkin diawali dengan huruf karena mungkin identifier dengan awalan underscore dan ($) digunakan unruk pemrosesan internal dan file import
4.          Karakter berikutnya dapat berupa huruf atau angka 0 sampai 9. Simbol-simbol seperti ‘+’ dan spasi tidak dapat digunakan

1.11            Tipe Data di Java

Tipe data dalam Java dibagi dalam dua kategori:
1.       Sederhana
2.       Komposit

1.12            Operator di Java

Java memiliki beberapa jenis operator di antaranya:
-       Operator unary:
Tabel 25 Operator unary
Nama Operator
Simbol
Definisi
Increment
++
Akan menambahkan nilai sejumlah satu
Decrement
--
Akan mengurangi nilai sejumlah satu
 Contoh penggunaan:
int x = 5;
int y = x++;
pada kasus di atas nilai y akan berisi 5 dan nilai x akan berisi 6 karena nilai y akan mengambil nilai x dahulu setelah itu baru nilai x ditambahkan satu,

1.13            Percabangan di Java

Percabangan di Java menggunakan dua jenis Sintaks:
1.                   Sintaks if
Sintaks if-else, sebagai berikut  :
if (boolean expression) {
                Statement or block
} else if (boolean expression) {
                Statement or block
} else {
                Statement or block
}
2.                   Sintaks switch
Sintaks switch sebagai berikut :
switch (expression) {
                case constant1 :                Statements;
                                                break;
                case constant2 :                Statements;
                                                break;
                default :               Statements;
                                break;
                }

1.14            Perulangan di Java

Perulangan di Java menggunakan 3 jenis Sintaks:
1.                   Perulangan for
Sintaks for sebagai berikut :
for (init_expr;boolean testexpr;alter_expr) {
                Statement or block
}
Contoh :
for (int i=0;i<10;i++) {
                Sistem.out.println(i);
}
2.                   Perulangan while
Sintaks looping while sebagai berikut :
while (boolean testexpr) {
                Statement or block
}
Contoh :
int i = 0;
while (i<10) {
                Sistem.out.println(i);
                i++;
}
3.                   Perulangan do....while
Sintaks do/while loop, sebagai berikut
do {
                Statement or block
} while (boolean testexpr)
Contoh :
int i = 0;
do {
                Sistem.out.println(i);
                i++;
} while (i<10);

1.15            Gambaran Umum tentang Orientasi Obyek

Teknik pemecahan masalah pada object oriented lebih dekat merupakan model tersekat dengan pemecahan masalah sehari-hari oleh manusia.
Pemecahan masalah ini membawa kita ke gambaran konsep pertama pada pemrograman berorientasi obyek :
“Sebuah program berorientasi obyek terstruktur atas bersatunya agen-agen yang berinteraksi yang disebut obyek. Tiap obyek mempunyai peran. Tiap obyek menyediakan layanan atau menampilkan aksi yang digunakan oleh anggota lain dalam komunitas.”

1.16            Kelas dan Obyek

Sebuah Kelas mendefinisikan struktur (structure) dan tingkah laku (behaviour) sebuah obyek atau sekumpulan obyek.
Sebuah Obyek merupakan instance dari kelas. Metode yang dijalankan oleh sebuah obyek ketika merespon sebuah pesan (message) dibuat oleh kelas yang menerima pesan.

1.17            Komponen Kelas

Dalam pemrograman berorientasi obyek, kita membuat obyek perangkat lunak (software) yang memodelkan obyek dunia nyata. Obyek perangkat lunak dimodelkan setelah adanya obyek di dunia nyata dimana mereka juga mempunyai State dan behaviour. Sebuah obyek mengatur State nya dalam satu atau lebih variabel/atribut dan mengimplementasikan behaviour dengan method. Method merupakan suatu fungsi yang berasosiasi dengan sebuah obyek. Kita dapat mengakses data dari sebuah kelas dengan menggunakan method.

1.18            Membuat Kelas dan Obyek di Java

Struktur dasar pemrograman dengan aplikasi Java adalah kelas dan obyek. Apilkasi java terdiri dari kelas-kelas dimana terdapat deklarasi atribut dan method.

1.18.1      Pembuatan kelas di Java 

Atribut dan method dideklarasikan di dalam kelas. Semua Statement di dalam Java diakhiri dengan tanda “;”. Di bawah ini Sintaks untuk mendeklarasikan kelas
class <classname>
{
                //declaration of data member
                //declaration of methods
}

1.18.2      Pembuatan Obyek di Java

Obyek merupakan instance dari class dan mempunyai identitas yang unik. Kelas merupakan abstraksi dari property umum obyek. Langkah-langah pembuatan obyek :
1.       Deklarasi : mendeklarasikan suatu variabel yang akan menyimpan referensi ke obyek
<class name> <object name>;
              Librarian Lib1;
2.       Instansiasi atau pembuatan : Membuat obyek dari kelas yang diinginkan. Ketika sebuah obyek dideklarasikan. Memori belum dialokasikan sehingga tidak dapat dilakukan penyimpanan data obyek. Operator yang harus digunakan untuk mengalokasikan memori adalah :
<object name> = new <class name>();
              Lib1 = new Librarian();
Kedua langkah diatas dapat disatukan menjadi sebuah Statement :
Librarian Lib1 = new Librarian();

1.19        Atribut dan Method

Sebaiknya memberikan nilai ke atribut sebelum obyek digunakan. Perhatikan contoh dibawah untuk melihat bagaimana kelas dan obyek bekerja. Contoh kelas student, dimana kelas ini akan menyimpan informasi tentang student .

1.19.1    Mengakses atribut

Atribut dapat diakses dari luar kelas dengan cara memanggil nama obyek kemudian diikuti tanda titik dan nama dari atribut. Sintaksnya sebagai berikut
<object name>.<attribute name> = <value>
Contoh penggunaannya :
Std.name = “John”;
Std1.name = “Mary”;
Jika suatu atribut instance tidak diisi oleh suatu nilai maka atribut akan diisi nilai default.

1.19.2    Mengakses Method

Sintaks untuk mendefinisikan method :
void <method name> ()
{
                // Method body
}
Di dalam Sintaks diatas, kata void menspesifikasikan bahwa fungsi tidak mengembalikan nilai, <method name> menspesifikasikan nama dari method tersebut.

1.20        Method main()

Sebuah program Java mempunyai method main(), method ini akan memanggil method-method yang dideklarasikan di dalam kelas. Kita dapat membuat beberapa kelas di dalam program Java.


 Sintaks method main() :
public static void main(String[] args)
{
                //code for the main method
}

1.21        Constructor (Konstruktor)

Konstruktor merupakan method yang akan dieksekusi secara otomatis ketika sebuah obyek dibuat. Method ini mempunyai nama yang sama dengan nama kelas tempat konstruktor dideklarasikan.
Sintaks konstruktor adalah :
public class <class name>
{
                <constructor name same with class name>();
}

HUBUNGAN ANTAR KELAS DAN PEWARISAN


1.22        Array

1.22.1    Mendeklarasikan Array

Array biasanya digunakan untuk mengelompokkan data atau obyek yang memiliki tipe yang sama. Array memungkinkan untuk mengacu ke sekumpulan obyek dengan nama yang sama.
Array dapat dideklarasikan dengan tipe apa saja, baik itu yang bertipe data primitif maupun obyek. Berikut contoh deklarasi Array :
char s[];
point p[]; // point adalah sebuah kelas
Dalam bahasa pemrograman Java, Array merupakan sebuah obyek meskipun ia terdiri dari elemen yang bertipe data primitif. Seperti halnya kelas yang lain, ketika mendeklarasikan Array belum dibentuk sebuah obyek Array. Deklarasi Array hanya membuat sebuah referensi yang dapat digunakan untuk mengacu ke sebuah obyek Array.

1.22.2    Membuat Array

Seperti halnya dalam pembuatan obyek, Array dibuat dengan menggunakan keyword new. Contoh di bawah ini membuat sebuah Array dengan tipe primitif char:
s = new char[26];
Baris di atas membuat sebuah array dengan 26 nilai char. Ketika membuat sebuah Array, elemen di dalamnya akan diinisialisasi dengan nilai default (‘\u0000’ untuk data tipe char). Biasanya nilai elemen Array dapat diinisialisasi dengan nilai default sebagaimana ditunjukkan berikut ini :
s[0] = ‘A’;
s[1] = ‘B’;
...
Perhatikan penggalan kode sebagai berikut :
public char[] createArray {
char[] s;
s = new char[26];
for(int i=0; i<26; i++) {
s[i] = (char) ('A' + i);
}
return s;
}
Penggalan kode di atas mempunyai representasi dalam heap memory sebagai berikut :
Gambar 41 Representasi Array Primitif dalam Heap Memory
Indeks array dimulai dengan angka 0. Batasan legal untuk nilai indeks ini adalah dari nol hingga jumlah elemen array – 1. Apabila program berusaha mengakses array di luar batas yang legal, maka akan muncul runtime exception.
Untuk membuat Array dengan elemen obyek, gunakan cara penulisan berikut :
p = new point[10];
Pada kode di atas, dibuat sebuah Array yang masing-masing elemennya merupakan referensi obyek yang bertipe Point. Pernyataan tersebut tidak membuat 10 obyek Point. Untuk membuat obyek Point, gunakan pernyataan berikut :
p[0] = new point(0, 1);
p[1] = new point(1, 2);
...

1.22.3    Menginisialisasi Array

Ketika membuat sebuah Array, setiap elemen di dalamnya akan diinisialisasi dengan nilai default. Dalam kasus Array char s seperti pada contoh di atas, setiap elemen dari Array s diinisialisasi dengan nilai ‘\u0000’. Dalam kasus Array p seperti juga contoh di atas, setiap elemen diinisialisasi dengan nilai null, yang berarti elemen-elemen array p tersebut belum merujuk ke suatu obyek Point. Setelah proses pengisian p[0] = new Point(), barulah diperoleh elemen pertama dari Array p yang merujuk ke obyek Point. Java juga memiliki cara singkat untuk membuat sebuah obyek Array dengan elemen-elemennya memiliki nilai awal :
String names[] = {"Georgianna", "Jen", "Simon"};
Kode di atas adalah sama dengan kode berikut ini:
String names[];
names[0] = "Georgianna";
names[1] = "Jen";
names[2] = "Simon";

Cara singkat ini dapat digunakan untuk Array dengan berbagai jenis
tipe, seperti dalam contoh berikut :
MyDate dates[] = {
new MyDate(22, 7, 1964),
new MyDate(1, 1, 2000),
new MyDate(22, 12, 1964),
};

1.22.4    Array Multidimensi

Dalam Java, dapat dibuat Array dari Array sehingga dinamai Array multidimensi. Contoh berikut ini memperlihatkan cara membuat Array dua dimensi :
int twoDim [][] = new int[4][];
twoDim[0] = new int[5];
twoDim[1] = new int[5];
Pada baris pertama, dibuat sebuah obyek Array yang memiliki empat elemen. Masing-masing elemen merupakan referensi yang bertipe Array dari int yang bernilai null. Pada baris berikutnya, diinisialisasi elemen pertama dan kedua dengan obyek Array dari int yang masing-masing berisi lima elemen yang bertipe integer.
Array dari Array yang bersifat non-rectangular dapat dibuat seperti dalam contoh berikut :
twoDim[0] = new int[2];
twoDim[1] = new int[4];
twoDim[2] = new int[6];
twoDim[3] = new int[8];
Proses pembuatan Array dari Array yang demikian, di mana harus diinsialisasi masing-masing elemennya satu persatu, cukup merepotkan. Di samping itu, array dari array yang berbentuk rectangular lebih sering digunakan dibandingkan dengan yang nonrectangular.
Untuk membuat Array dari Array yang rectangular dengan cara mudah, gunakan bentuk berikut ini :
int twoDim[][] = new int[4][5];
Kode di atas membuat sebuah Array dari empat Array yang masing-masing elemennya berisi lima nilai int.

1.22.5    Batasan Array

Dalam bahasa Java, index Array dimulai dengan angka nol. Jumlah elemen di dalam Array disimpan sebagai bagian dari obyek Array di dalam atribut length. Atribut ini dapat digunakan untuk melakukan proses iterasi pada Array seperti dalam contoh berikut :
int list[] = new int[10];
for(int i = 0; i < list.length; i++) {
Sistem.out.println(list[i]);
}
Dengan menggunakan atribut length, pemeliharaan kode program menjadi mudah karena program tidak perlu mengetahui jumlah eleman Array pada saat kompilasi.

1.22.6    Manipulasi Array

1.22.6.1  Mengubah Ukuran Array
Setelah membuat obyek Array, ukuran Array tersebut tidak dapat diubah. namun demikian, dapat digunakan variabel referensi yang sama untuk menunjuk ke sebuah obyek Array baru seperti dalam contoh di bawah ini :
int myArray[] = new int[6];
myArray = new int[10];
Dalam kode program ini, obyek Array yang pertama akan hilang kecuali ada variabel lain yang dibuat untuk merujuk ke obyek Arraytersebut.

1.22.6.2 Menyalin Array
Bahasa Java menyediakan method khusus untuk menyalin Array, yaitu dengan menggunakan method arrayCopy() dari kelas Sistem seperti dalam contoh berikut :
// array semula
int myArray[] = {1, 2, 3, 4, 5, 6};
// array engan elemen yang lebih banyak
int hold[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
//menyalin semua elemen myArray ke hold
// dimulai dengan indeks ke 0
Sistem.arraycopy(myArray, 0, hold, 0,myArray.length);
Setelah proses pengkopian di atas, maka isi dari Array hold adalah 1, 2, 3, 4, 5, 6, 4, 3, 2, 1.

1.23        Pewarisan

Pewarisan adalah kemampuan sebuah kelas untuk mewariskan seluruh atau sebagian atribut dan methodnya ke kelas lain, sehingga atribut dan method tersebut dikenal oleh kelas yang menerima pewarisan tanpa harus menuliskannya.
Pewarisan dapat dilakukan jika :
              Ada beberapa atribut dan method yang sama yang digunakan oleh beberapa kelas berbeda (reduksi penulisan kode)
              Ada satu atau beberapa kelas yang sudah pernah dibuat yang dibutuhkan oleh aplikasi (reusability)
              Ada perubahan kebutuhan fungsional atau feature aplikasi dimana sebagian atau seluruh perubahan tersebut tercakup di satu atau beberapa kelas yang sudah ada (extend)

1.24        Pewarisan di Java

Pewarisan di Java hanya mengenal pewarisan tunggal, artinya sebuah kelas hanya mewarisi atribut dan method dari satu kelas induk. Untuk menggunakan pewarisan di Java digunakan keyword extends.
Contoh pewarisan dapat dilihat pada diagram kelas berikut ini:






Gambar 410 Contoh Pewarisan Kelas
Pada diagram kelas di atas, kelas Manager merupakan kelas turunan dari kelas Employee sehingga mewarisi semua atribut dan method dari kelas Employee yang bersifat public dan protected. Implementasi dari diagram kelas di atas dalam Java adalah sebagai berikut:
//Employee.java
public class Employee {
public String name;
                public Date birthDate;
                public double salary;
                public String getDetails() {...}
}
//Manager.java
public class Manager extends Employee {
                public String department;
}
Dari kode di atas, terlihat bahwa atribut name, birthDate, dan salary serta method getDetails() diturunkan ke kelas Manager sehingga kelas Manager dapat menggunakan atribut dan method tersebut. Konstruktor dari kelas induk tidak dapat diturunkan kepada kelas turunannya.
Untuk menggunakan method dan konstruktor dari kelas induk pada kelas anak digunakan keyword super, contoh:
//Employee.java
public class Employee {
private String name;
private double gaji;
public Employee (String s, double g) {
                name = s;
                gaji=g;
}
public double getgaji() {
                return gaji;
}
}
//Manager.java
public class Manager extends Employee {
private String alamat;
private double tunjangan;
private double bonus;
public Manager(String nama, String s) {
super(nama);
      alamat = s;
}
Public double getgaji() {
                return (super.getgaji()+tunjangan+bonus);
}

}