You are on page 1of 15

Java Object Oriented Programming

HADDAD SAMMIR 22 Oktober 2012

Object Oriented Programming


Object Oriented Programming atau yang disingkat sebagai OOP merupakan suatu metode pemprograman yang melihat masalah sebagai sebuah object. Objek merupakan suatu entitas yang memiliki attribute dan method. Attribute adalah informasi yang menggambarkan karakteristik sebuah objek, sedangkan method adalah serangkaian aksi yang ditempuh untuk mendapatkan informasi dari objek tersebut. Sebagai contoh kita bisa melihat persegi sebagai sebuah objek. Persegi dapat dicirikan dengan memiliki attribute sisi, berjumlah empat buah sama panjang. Dari informasi sisi tersebut kita dapat menarik informasi berupa luas dan keliling dengan melakukan serangkaian aksi / metoda tertentu. Luas bisa kita dapatkan dengan mengkuadratkan sisi persegi, sedangkan keliling didapat dengan menjumlahkan keempat sisi persegi. Sisi, luas dan keliling dari sudut pandang OOP dapat kita sebut sebagai attribute, sedangkan aksi atau metoda dapat kita pandang sebagai method.

Figure 1: Objek Persegi Attribute dan method merupakan pendekatan yang berbasis OOP untuk mendenisikan masalah. Pada kasus persegi, kita dapat mendenisikan objek persegi sebagai berikut: 1. Attribute (a) Sisi (b) Luas 1

(c) Keliling 2. Method (a) Mencari luas (b) Mencari keliling Kita bisa menambahkan lebih banyak attribute dan method tergantung kepada masalah yang ingin diselesaikan. Pemberian attribute dan method sepenuhnya merupakan hasil analisa kita terhadap masalah.

Class
Class dalam terminologi OOP adalah cetak biru sebuah objek. Class menghimpun attribute (dalam konteks ini dapat disebut sebagai data eld ) dan method sebagai sebuah spesikasi untuk menentukan bagaimana sebuah objek akan dibuat. Proses pembuatan objek dari sebuah class disebut sebagai instantiation, sedangkan objek hasil instantiation disebut instance. Kita dapat menganalogikan mekanisme class dengan mekanisme pembuatan mobil. Cetak biru sebuah mobil dapat dianalogikan sebagai class, sedangkan mobil yang dibuat berdasarkan cetak biru tadi dianalogikan sebagai instance. Jadi instance adalah objek aktual yang dibangun berdasarkan spesikasi sebuah class. Dalam Java, class didenisikan seperti listing kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

public class persegi { // attribute public int sisi; public int luas; public int keliling; // method public int mencariLuas() { luas = sisi*sisi; return luas; } public int mencariKeliling() { keliling = sisi+sisi+sisi+sisi; return keliling; } } Listing 1: persegi.java Kode Java diatas menggambarkan spesikasi class persegi yang memiliki attribute sisi, luas dan keliling serta method mencariLuas() dan mencariKeliling()

yang berisi langkah-langkah untuk mendapatkan nilai luas dan keliling tersebut. Spesikasi inilah yang akan digunakan untuk membentuk instance persegi atau objek aktual dari persegi dalam proses instantiation.

Instance
Proses instantiation dilakukan dengan menggunakan kata kunci new yang secara literal berarti baru. Penggunaan kata kunci new bertujuan menciptakan objek baru berdasarkan spesikasi class yang digunakan. Perhatikan listing kode berikut:
1 2 3 4 5 6 7 8 9

public static void main(String[] args){ // instantiation // Ciptakan objek baru "p", dgn spesifikasi class persegi persegi p = new persegi(); // set attribute "sisi" dengan nilai 5 p.sisi = 5; // Panggil method mencariLuas(), Output = 5^2 = 25 System.out.println("Luas persegi: "+p.mencariLuas()); } Listing 2: Proses instantiation Kode di atas menggambarkan pembuatan object yang diidentikasikan sebagai p menggunakan spesikasi dari class persegi sehingga objek p memiliki attribute dan method yang dihimpun dalam class persegi seperti attribute sisi, luas dan keliling serta method mencariLuas() dan method mencariKeliling(). Untuk mengakses attribute dan method kita menggunakan separator .. 1

Constructor
Constructor adalah sebuah method spesial yang berfungsi untuk menginisialisasi sebuah objek yang baru saja dibuat. Constructor dapat digunakan untuk memberikan nilai kepada attribute pada saat objek baru dibuat. Membuat constructor tidaklah bersifat wajib dalam pemprograman Java, sebuah class boleh memiliki atau tidak memiliki constructor. Constructor dibuat dengan mengikuti aturan berikut: 1. Constructor memiliki nama yang sama dengan nama class 2. Constructor tidak memiliki return value, tidak pula void
http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.11 untuk informasi lebih lanjut tentang separator dan operator.
1 Akses

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

public class demo { int data1; int data2; // constructor demo(int a){ // inisialisasi attribute data1 this.data1 = a; } public static void main(String[] args){ // memberikan argumen bernilai 10 pd constructor demo d = new demo(10); System.out.println("data1: "+d.data1); System.out.println("data2: "+d.data2); } } Listing 3: demo.java

Constructor Overloading
Constructor overloading adalah suatu teknik dalam pemprograman Java dimana sebuah class dapat memiliki lebih dari satu constructor. Tiap-tiap constructor dibedakan dari jumlah parameternya. Hal tersebut memungkinkan sebuah class diinisialisasi dengan lebih dari satu cara. Perhatikan contoh kode berikut:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

public class demo { int data1; int data2; // constructor demo(int a){ // inisialisasi attribute data1 this.data1 = a; } // constructor overloading demo(int a, int b){ // inisialisasi attribute data1 this.data1 = a; // inisialisasi attribute data2 his.data2 = b; } public static void main(String[] args){ // memberikan argumen bernilai 10 pd constructor demo d = new demo(10); System.out.println("data1: "+d.data1); // 10 System.out.println("data2: "+d.data2); // 0 // gunakan constructor dengan dua parameter demo d2 = new demo(5, 10); System.out.println("data1: "+d2.data1); // 5 System.out.println("data2: "+d2.data2); // 10 } } Listing 4: demo.java

Main Method
Main method adalah method yang pertama sekali diakses oleh Java Runtime jika kita menjalankan aplikasi Java. Melalui method inilah method-method lain dipanggil. Tidak setiap class Java harus memiliki main method, hanya class utama / program utama yang harus memiliki method ini. Jika kita mencoba menjalankan aplikasi Java yang tidak memiliki main method, maka Java akan memberikan laporan kesalahan Main method not found. Konstruksi formal main method adalah seperti listing kode di bawah:
1 2 3

public static void main(String[] args){ } Listing 5: Main method

Umumnya Aplikasi Java tersusun dalam sekumpulan library / modul sehingga tidak memerlukan main method.

Static Keyword
Keyword static (seperti yang digunakan pada deklarasi main method di atas 5) adalah keyword yang menandakan bahwa attribute atau method bersangkutan adalah milik class sehingga attribute dan method tersebut dapat diakses tanpa perlu melakukan instantiation. Perhatikan listing kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14

public class defstatic{ // static attribute public static int angka = 10; // static method public static void methodStatic(){ System.out.println("Method Static"); } public static void main(String[] args) { // Attribute angka, dipanggil tanpa instantiation System.out.println(defstatic.angka); // Method static tanpa instantiation defstatic.methodStatic(); } } Listing 6: defstatic.java Static keyword juga sering digabungkan dengan keyword nal pada attribute untuk menjadikan attribute tersebut sebagai konstanta.

public static final int angka = 10; Listing 7: Keyword static dan nal

Inheritance
Inheritance dapat diartikan sebagai pewarisan sifat. Dalam konteks OOP, inheritance berarti sebuah cara untuk memanfaatkan kode dari sebuah class yang sudah ada. Dengan inheritance kita dapat mengurangi pengulangan pengetikan kode dengan memanfaatkan kode-kode yang sudah ada. Inheritance dilakukan dengan menciptakan class (yang disebut sebagai child class) berdasarkan class yang sudah ada (parent class). Child class akan mewarisi attribute dan method yang dimiliki parent class sehingga kodenya tidak perlu ditulis ulang. Keuntungan inheritance adalah sebagai berikut: 1. Reusability: Fasilitas untuk memanfaatkan kode yang sudah ada, tanpa harus membuatnya kembali.

Attribute dan method yang memiliki access modier private atau tanpa modier tidak diwariskan.

2. Extensibility: Fasilitas untuk memperluas / mengembangkan sifat parent class berdasarkan kebutuhan baru yang didenisikan pada child class. 3. Data hiding: Parent class dapat menjaga beberapa data menjadi private sehingga tidak diwariskan kepada child class. Asumsikan kita hendak menciptakan class kubus. Class kubus berbagi kesamaan dengan class persegi (Lihat class persegi diatas 1) yaitu sama-sama memiliki karakteristik sisi (rusuk), luas dan keliling namun kubus memiliki ciri lagi yang membedakankannya dengan persegi yaitu volume. Selain itu metoda dalam mendapatkan luas dan keliling pun berbeda tapi tetap dalam kerangka spesikasi yang sama. Class kubus kita rumuskan memiliki spesikasi sebagai berikut: 1. Attribute (a) Sisi (b) Luas (c) Keliling (d) Volume 2. Method (a) Mencari luas (b) Mencari keliling (c) Mencari volume Karena class kubus yang hendak kita buat berbagi karakteristik yang sama dengan class persegi, maka kita bisa memanfaatkan kode-kode yang ada pada class persegi dengan melakukan inheritance. Perhatikan kode class kubus berikut:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

public class kubus extends persegi { // menambahkan attribute public int volume; // method overriding public int mencariLuas() { luas = 6*sisi*sisi; return luas; } // method overriding public int mencariKeliling() { keliling = 12*sisi; return keliling; } // menambahkan method public int mencariVolume() { volume = sisi*sisi*sisi; return volume; } } Listing 8: kubus.java Pada kode class kubus di atas kita bisa melihat bahwa attribute sisi, luas dan keliling tidak didenisikan karena sudah didenisikan pada parent classnya yaitu class persegi (perhatikan class persegi 1) sehingga class kubus juga mewarisi attribute yang sama. Method yang dimiliki oleh class persegi juga diturunkan kepada class kubus, namun karena langkah yang diperlukan untuk mencari luas dan keliling pada kubus berbeda dengan persegi, maka kita melakukan overriding method mencariLuas() dan mencariKeliling(). Method overriding adalah tur yang memungkinkan child class melakukan implementasi berbeda dari method yang diwariskan kepadanya. Class kubus juga memperluas spesikasi class persegi dengan menambahkan attribute volume dan method mencariVolume().

Polymorphism
Polymorph adalah kemampuan sebuah objek untuk mengambil banyak bentuk. Dalam konteks Java, polymorph adalah kemampuan sebuah method untuk melakukan aksi berbeda-beda sesuai dengan objek yang sedang diperankannya. Contohnya sebuah method mencariLuas() yang berfungsi untuk mencari luas sebuah bangun datar dapat melakukan aksi s2 jika persegi atau p l jika persegi panjang atau (a t) 2 jika segi tiga. Polymorph dibuat dengan memanfaatkan inheritance dari class, abstract class atau dengan mengimplementasikan interface. Class, abstract class dan interface harus menyediakan serangkaian method yang nantinya akan di-override

oleh child class atau didenisikan oleh class yang mengimplementasikan interface, sehingga method mencariLuas() akan memiliki aksi berbeda untuk tiaptiap child class. Perhatikan kode berikut:
1 2 3 4 5

public class Br { // metohd tanpa implementasi // method ini yang menyediakan polymorph public void mencariLuas(){}; } Listing 9: Br.java

1 2 3 4 5 6 7 8 9 10 11

public class persegi extends Br { public int sisi; // constructor persegi(int sisi){ this.sisi = sisi; } // implementasi secara "persegi" public void mencariLuas() { System.out.println("Luas persegi: "+sisi*sisi); } } Listing 10: persegi.java

1 2 3 4 5 6 7 8 9 10 11 12

public class persegiPanjang extends Br { public int p; public int l; persegiPanjang(int panjang, int lebar) { this.p = panjang; this.l = lebar; } // implementasi secara "persegi panjang" public void mencariLuas() { System.out.println("Luas Persegi Panjang: "+p*l); } } Listing 11: persegiPanjang.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

public class obj { public static void main(String[] args){ System.out.println("Persegi:"); Br p = new persegi(5); getLuas(p); System.out.println(); System.out.println("Persegi panjang:"); Br pp = new persegiPanjang(4,5); getLuas(pp); } public static void getLuas(Br b){ // polymorph, jika objek b adalah persegi, // maka method mencariLuas() milik persegi // yang dipanggil, begitu pula jika persegi // panjang b.mencariLuas(); } } Listing 12: obj.java Empat kode diatas menggambarkan bagaimana polymorphism dilakukan. Class Br 9 merupakan parent class yang berisi method mencariLuas() tanpa implementasi untuk nantinya akan di-override pada class turunannya yaitu class persegi 10 dan class persegiPanjang 11. Masing-masing child class dari parent class Br mengimplementasikan method mencariLuas() sesuai dengan metoda mencari luas untuk objek yang diperankannya. Class obj 12 adalah class utama yang memiliki main method. Pada class ini juga terdapat method getLuas() yang membutuhkan parameter berupa object bertipe Br. Method getLuas() ini hanya memanggil method mencariLuas() dari object yang di-input-kan kepadanya sehingga akan memberikan output sesuai dengan objek tersebut. Dari sini kita bisa melihat bahwa method mencariLuas() menyediakan antarmuka seragam, sehingga kita dapat dengan mudah mengikuti gaya sebuah pemprograman dan sangat membantu dalam menciptakan aplikasi modular.

Abstract Class
Class yang kita buat sebelum ini adalah class yang bersifat kongkrit, yaitu class yang dapat di-instantiation-kan. Ada kalanya kita tidak menginginkan sebuah class dapat di-instantiation-kan misalnya dalam kasus polymorphism, maka abstract class adalah solusinya. Abstract class dibuat dengan keyword abstract. Abstract class juga boleh memiliki abstract method. Abstract method adalah method yang tidak memiliki bagian spesikasi / implementasi (tidak memiliki bagian {}). Tiap child class diharuskan mendenisikan spesikasinya

10

sendiri.
1 2 3 4

public abstract class abstractBr { // abstract method public abstract void mencariLuas(); } Listing 13: abstractBr.java

Interface
Interface adalah tipe abstract (mirip dengan abstract class yang tidak dapat diinstantiation-kan) bertujuan menyediakan sekumpulan antar muka yang harus diimplementasikan oleh class. Interface dapat berisi method tanpa spesikasi dan konstanta (variabel dideklarasikan dengan static dan nal). Perhatikan kode berikut:
1 2 3 4

public interface interfaceBr{ // method mencariLuas() tanpa spesifikasi public void mencariLuas(int a, int t); } Listing 14: interfaceBr.java

1 2 3 4 5 6 7 8 9 10

public class segitiga implements interfaceBr{ // implementasikan method mencariLuas() public void mencariLuas(int a, int t){ System.out.println("Luas segitiga: "+(a*t)/2); } public static void main(String[] args){ segitiga st = new segitiga(); st.mencariLuas(4,5); } } Listing 15: segitiga.java

Package
Java package adalah mekanisme pengelompokan class-class kedalam sebuah namespace (sebuah pengenal untuk sekumpulan class). Java package dapat dikompres menjadi sebuah Jar le (Java archive). Package dibuat dengan menggunakan kata kunci package seperti yang terlihat pada kode berikut:

11

package org.haddad.twod; Listing 16: Penggunaan statement package Perhatikan namespace pada kode di atas, titik . yang berada pada namespace org.haddad.twod adalah penanda pemisah direktori sehingga setiap class yang dikelompokkan pada package ini harus berada di dalam direktori org\haddad\twod. Konvensi peletakkan direktori ini harus diikuti, jika tidak Java tidak akan menemukan class kita. Untuk menggunakan package dalam aplikasi Java maka kita harus mengimport class yang kita butuhkan dengan mencantumkan nama package-nya seperti pada contoh berikut:

import org.haddad.twod.persegi; Listing 17: Penggunaan statement import Statement di atas berarti kita akan meng-import class persegi yang berada di dalam package org.haddad.twod. Mengkompress package menjadi Java Archive (Jar) dapat dilakukan dengan cara berikut: jar -cf mylib.jar *.class Listing 18: Menciptakan le Jar Listing diatas menggambarkan cara mengumpulkan dan mengkompres semua le class yang berada pada direktori lib\ dengan nama lib.jar.

Buat direktori org, di dalamnya buat lagi direktori haddad, lalu di dalam direktori haddad buat lagi direktori twod. Didalam direktori twod inilah class Java yang berada dalam package ini diletakkan.

Access Modier
Access modier berisi sekumpulan modier (penanda yang dapat mengubah sifat) akses terhadap sebuah method atau attribute. Metoda ini disebut juga encapsulation. Pada listing kode sebelumnya kita juga sudah menemukan access modier public yang berada pada deklarasi method dan attribute yang berarti bahwa method beserta attribute tersebut dapat diakses secara global. Dalam konteks Java, access modier adalah sebagai berikut: Modier public protected tanpa modier private Class Y Y Y Y Package Y Y Y T Subclass Y Y T T World Y T T T

Table 1: Tabel Access Modier (Y = Ya, T = Tidak) 12

Tabel di atas memperlihatkan bagaimana access modier mempengaruhi aksessibilitas method atau attribute dari class tempatnya berada, dalam sebuah package, pada sub class dan terakhir dari dunia (dapat diakses global).

Classpath
Classspath adalah parameter yang digunakan baik melalui commandline ataupun environment variable yang memberitahu Java Vitual Machine atau Java Compiler untuk menemukan class-class / package yang kita denisikan. Asumsikan kita mempuanya sebuah class utama dan sekumpulan library pada direktori lib\. Maka untuk menjalankan aplikasi tersebut kita perlu memberitahu Java Virtual Machine lokasi direktori lib\. Untuk melakukan hal tersebut kita menggunakan parameter -cp saat memanggil Java Virtual Machine atau Java Compiler.
1 2 3 4 5 6 7 8 9

public class app1 { public static void main(String[] args){ // lokasi class lib1 berada pada // direktori lib\ // ~> lib\lib1.class lib1 l = new lib1(); l.my_function(); } } Listing 19: app1.java

java -cp lib; app1 Listing 20: Menggunakan parameter -cp (classpath) Listing 20 diatas memberi tahu Java Virtual Machine untuk mengakses class lib1 yang dipanggil pada listing kode 19 pada direktori lib\. Jika class kita tersimpan dalam le Jar, maka classpath harus diset dengan memasukkan path lengkap ke le Jar tersebut seperti contoh berikut: java -cp mylib.jar; app2 Listing 21: Menggunakan parameter -cp (classpath) terhadap le Jar

Quo Vadis?
Pemprograman Java pada dasarnya cukup kompleks. Apa yang kita bahas dalam artikel ini hanyalah pengantar untuk menggugah kita akan aspek yang

13

sering terlupakan dari pemprograman Java. Saya pikir hal berikutnya yang harus kita latih adalah kemampuan untuk membaca Javadoc karena gaya pemprograman Java adalah berbasis library. Pengetahuan terhadap sebuah library sangat vital dalam pemprograman Java. []

14

Haddad Sammir lahir di Padang, 24 Maret 1987, seorang entusias teknologi. Menyukai pemprograman komputer dan perekayasaan perangkat lunak.

15

You might also like