Java Object Oriented Programming

Page 1

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 mendefinisikan masalah. Pada kasus persegi, kita dapat mendefinisikan 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 field ) dan method sebagai sebuah spesifikasi 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 spesifikasi sebuah class. Dalam Java, class didefinisikan 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 spesifikasi class persegi yang memiliki attribute sisi, luas dan keliling serta method mencariLuas() dan mencariKeliling()

2


yang berisi langkah-langkah untuk mendapatkan nilai luas dan keliling tersebut. Spesifikasi 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 spesifikasi 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 diidentifikasikan sebagai “p” menggunakan spesifikasi 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 1 Akses

http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.11 untuk informasi lebih lanjut tentang separator dan operator.

3


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:

4


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

public static void main(String[] args){

2 3

} Listing 5: Main method

5

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 “final� pada attribute untuk menjadikan attribute tersebut sebagai konstanta.

1

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

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.

6

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


2. Extensibility: Fasilitas untuk memperluas / mengembangkan sifat parent class berdasarkan kebutuhan baru yang didefinisikan 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 spesifikasi yang sama. Class kubus kita rumuskan memiliki spesifikasi 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:

7


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 didefinisikan karena sudah didefinisikan 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 fitur yang memungkinkan child class melakukan implementasi berbeda dari method yang diwariskan kepadanya. Class kubus juga memperluas spesifikasi 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

8


oleh child class atau didefinisikan 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

9


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 spesifikasi / implementasi (tidak memiliki bagian {}). Tiap child class diharuskan mendefinisikan spesifikasinya

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 spesifikasi dan konstanta (variabel dideklarasikan dengan static dan final). 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 file (Java archive). Package dibuat dengan menggunakan kata kunci “package� seperti yang terlihat pada kode berikut:

11


1

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:

1

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 file Jar Listing diatas menggambarkan cara mengumpulkan dan mengkompres semua file class yang berada pada direktori lib\ dengan nama lib.jar.

Access Modifier Access modifier berisi sekumpulan modifier (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 modifier “public� yang berada pada deklarasi method dan attribute yang berarti bahwa method beserta attribute tersebut dapat diakses secara global. Dalam konteks Java, access modifier adalah sebagai berikut: Modifier public protected tanpa modifier 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 Modifier (Y = Ya, T = Tidak) 12

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.


Tabel di atas memperlihatkan bagaimana access modifier 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 definisikan. 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 file Jar, maka classpath harus diset dengan memasukkan path lengkap ke file Jar tersebut seperti contoh berikut: java -cp mylib.jar; app2 Listing 21: Menggunakan parameter -cp (classpath) terhadap file 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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.